diff options
Diffstat (limited to 'src/shared/settings')
| -rw-r--r-- | src/shared/settings/default.js | 64 | ||||
| -rw-r--r-- | src/shared/settings/values.js | 98 | 
2 files changed, 162 insertions, 0 deletions
| diff --git a/src/shared/settings/default.js b/src/shared/settings/default.js new file mode 100644 index 0000000..d187565 --- /dev/null +++ b/src/shared/settings/default.js @@ -0,0 +1,64 @@ +export default { +  source: 'json', +  json: `{ +  "keymaps": { +    "0": { "type": "scroll.home" }, +    ":": { "type": "command.show" }, +    "o": { "type": "command.show.open", "alter": false }, +    "O": { "type": "command.show.open", "alter": true }, +    "t": { "type": "command.show.tabopen", "alter": false }, +    "T": { "type": "command.show.tabopen", "alter": true }, +    "w": { "type": "command.show.winopen", "alter": false }, +    "W": { "type": "command.show.winopen", "alter": true }, +    "b": { "type": "command.show.buffer" }, +    "k": { "type": "scroll.vertically", "count": -1 }, +    "j": { "type": "scroll.vertically", "count": 1 }, +    "h": { "type": "scroll.horizonally", "count": -1 }, +    "l": { "type": "scroll.horizonally", "count": 1 }, +    "<C-U>": { "type": "scroll.pages", "count": -0.5 }, +    "<C-D>": { "type": "scroll.pages", "count": 0.5 }, +    "<C-B>": { "type": "scroll.pages", "count": -1 }, +    "<C-F>": { "type": "scroll.pages", "count": 1 }, +    "gg": { "type": "scroll.top" }, +    "G": { "type": "scroll.bottom" }, +    "$": { "type": "scroll.end" }, +    "d": { "type": "tabs.close" }, +    "u": { "type": "tabs.reopen" }, +    "K": { "type": "tabs.prev", "count": 1 }, +    "J": { "type": "tabs.next", "count": 1 }, +    "g0": { "type": "tabs.first" }, +    "g$": { "type": "tabs.last" }, +    "r": { "type": "tabs.reload", "cache": false }, +    "R": { "type": "tabs.reload", "cache": true }, +    "zp": { "type": "tabs.pin.toggle" }, +    "zd": { "type": "tabs.duplicate" }, +    "zi": { "type": "zoom.in" }, +    "zo": { "type": "zoom.out" }, +    "zz": { "type": "zoom.neutral" }, +    "f": { "type": "follow.start", "newTab": false }, +    "F": { "type": "follow.start", "newTab": true }, +    "H": { "type": "navigate.history.prev" }, +    "L": { "type": "navigate.history.next" }, +    "[[": { "type": "navigate.link.prev" }, +    "]]": { "type": "navigate.link.next" }, +    "gu": { "type": "navigate.parent" }, +    "gU": { "type": "navigate.root" }, +    "y": { "type": "urls.yank" }, +    "/": { "type": "find.start" }, +    "n": { "type": "find.next" }, +    "N": { "type": "find.prev" }, +    "<S-Esc>": { "type": "addon.toggle.enabled" } +  }, +  "search": { +    "default": "google", +    "engines": { +      "google": "https://google.com/search?q={}", +      "yahoo": "https://search.yahoo.com/search?p={}", +      "bing": "https://www.bing.com/search?q={}", +      "duckduckgo": "https://duckduckgo.com/?q={}", +      "twitter": "https://twitter.com/search?q={}", +      "wikipedia": "https://en.wikipedia.org/w/index.php?search={}" +    } +  } +}`, +}; diff --git a/src/shared/settings/values.js b/src/shared/settings/values.js new file mode 100644 index 0000000..4e55fa0 --- /dev/null +++ b/src/shared/settings/values.js @@ -0,0 +1,98 @@ +const operationFromFormName = (name) => { +  let [type, argStr] = name.split('?'); +  let args = {}; +  if (argStr) { +    args = JSON.parse(argStr); +  } +  return Object.assign({ type }, args); +}; + +const operationToFormName = (op) => { +  let type = op.type; +  let args = Object.assign({}, op); +  delete args.type; + +  if (Object.keys(args).length === 0) { +    return type; +  } +  return op.type + '?' + JSON.stringify(args); +}; + +const valueFromJson = (json) => { +  return JSON.parse(json); +}; + +const valueFromForm = (form) => { +  let keymaps = undefined; +  if (form.keymaps) { +    keymaps = {}; +    for (let name of Object.keys(form.keymaps)) { +      let keys = form.keymaps[name]; +      keymaps[keys] = operationFromFormName(name); +    } +  } + +  let search = undefined; +  if (form.search) { +    search = { default: form.search.default }; + +    if (form.search.engines) { +      search.engines = {}; +      for (let [name, url] of form.search.engines) { +        search.engines[name] = url; +      } +    } +  } + +  let blacklist = form.blacklist; + +  return { keymaps, search, blacklist }; +}; + +const jsonFromValue = (value) => { +  return JSON.stringify(value, undefined, 2); +}; + +const formFromValue = (value, allowedOps) => { +  let keymaps = undefined; + +  if (value.keymaps) { +    let allowedSet = new Set(allowedOps); + +    keymaps = {}; +    for (let keys of Object.keys(value.keymaps)) { +      let op = operationToFormName(value.keymaps[keys]); +      if (allowedSet.has(op)) { +        keymaps[op] = keys; +      } +    } +  } + +  let search = undefined; +  if (value.search) { +    search = { default: value.search.default }; +    if (value.search.engines) { +      search.engines = Object.keys(value.search.engines).map((name) => { +        return [name, value.search.engines[name]]; +      }); +    } +  } + +  let blacklist = value.blacklist; + +  return { keymaps, search, blacklist }; +}; + +const jsonFromForm = (form) => { +  return jsonFromValue(valueFromForm(form)); +}; + +const formFromJson = (json, allowedOps) => { +  let value = valueFromJson(json); +  return formFromValue(value, allowedOps); +}; + +export { +  valueFromJson, valueFromForm, jsonFromValue, formFromValue, +  jsonFromForm, formFromJson +}; | 
