fix(gulp): minimize issues w/referencing SK code

Because all source files are required by the gulpfile during the build
stage in order to auto-generate documentation, code cannot exist at the
top execution level which assumes that SurfingKeys- or browser-related
code is defined.

Two steps were taken to minimize the issues caused by this:

1. The source files are now only included during documentation
generation, and not during normal builds.

2. Any occurrences of references to SK-specific code have been removed
from the top level of the source files.

There still remains the issue of selectively accessing SK code from the
top level of source files, e.g. as a user wishes to do in #14, but as
long as the ability to generate documentation is not desired, this
should be a lesser issue. The workaround remains to wrap SK-dependent
code in a block which is only executed in a real browser and not gulp.
[TODO: Perhaps there is a simple way to detect this, and/or we can
provide a helper function for doing so]

The Hints.js stub file is no longer necessary after this change, and so
it has been removed.
This commit is contained in:
Maddison Hellstrom 2019-05-23 17:33:48 -07:00
parent 372e37ffae
commit 8f6e2d5f0c
3 changed files with 26 additions and 16 deletions

View File

@ -1,7 +1,6 @@
const ghReservedNames = require("github-reserved-names")
const util = require("./util")
const Hints = require("./hints")
const actions = {}
@ -55,8 +54,12 @@ actions.showWayback = ({ href = util.getCurrentLocation("href") } = {}) => () =>
// Surfingkeys-specific actions
// ----------------------------
actions.createHint = (selector, action = Hints.dispatchMouseClick) => () => Hints
.create(selector, action)
actions.createHint = (selector, action) => () => {
if (typeof action === "undefined") {
action = Hints.dispatchMouseClick // eslint-disable-line no-param-reassign
}
Hints.create(selector, action)
}
actions.openAnchor = ({ newTab = false, prop = "href" } = {}) => a => actions.openLink(a[prop], { newTab })()

View File

@ -13,10 +13,22 @@ const fetch = require("node-fetch")
const { spawn } = require("child_process")
const { URL } = require("url")
const compl = require("./completions")
const conf = require("./conf")
const keys = require("./keys")
const util = require("./util")
let srcFilesLoaded = false
let compl
let conf
let keys
let util
const requireSrcFiles = () => {
if (srcFilesLoaded) {
return
}
compl = require("./completions") // eslint-disable-line global-require
conf = require("./conf") // eslint-disable-line global-require
keys = require("./keys") // eslint-disable-line global-require
util = require("./util") // eslint-disable-line global-require
srcFilesLoaded = true
}
const paths = {
scripts: ["conf.priv.js", "completions.js", "conf.js", "actions.js", "help.js", "keys.js", "util.js"],
@ -73,6 +85,8 @@ gulp.task("lint-gulpfile", () => gulp
// })
gulp.task("docs", parallel(async () => {
requireSrcFiles()
const screens = {}
let screenshotList = ""
@ -190,6 +204,8 @@ const getFavicon = async ({ domain, favicon }, timeout = 5000) => {
}
gulp.task("favicons", series("clean-favicons", async () => {
requireSrcFiles()
const sites = [].concat(
// search engine completions
Object.entries(compl)

View File

@ -1,9 +0,0 @@
if (typeof Hints === "undefined") {
module.exports = {
create: () => {},
dispatchMouseClick: () => {},
}
} else {
module.exports = Hints
}