[source:feat] add site-key aliases

aliases define sites that should have the same site-specific keybindings
This commit is contained in:
Maddison Hellstrom 2019-09-10 16:44:28 -07:00
parent df1378a953
commit 4577a9b451
3 changed files with 42 additions and 6 deletions

View File

@ -28,7 +28,7 @@ const searchleader = "a"
// See ./keys.js and ./completions.js
util.rmMaps(keys.unmaps.mappings)
util.rmSearchAliases(keys.unmaps.searchAliases)
util.processMaps(keys.maps, siteleader)
util.processMaps(keys.maps, keys.aliases, siteleader)
util.processCompletions(completions, searchleader)
module.exports = { siteleader, searchleader }

34
keys.js
View File

@ -574,6 +574,36 @@ const maps = {
}
// Aliases
maps["en.wiktionary.org"] = maps["wikipedia.org"]
const aliases = {
"wikipedia.org": [
// Wikimedia sites
"wiktionary.org",
"wikiquote.org",
"wikisource.org",
"wikimedia.org",
"mediawiki.org",
"wikivoyage.org",
"wikibooks.org",
"wikinews.org",
"wikiversity.org",
"wikidata.org",
module.exports = { unmaps, maps }
// MediaWiki-powered sites
"wiki.archlinux.org",
],
"stackoverflow.com": [
"stackexchange.com",
"serverfault.com",
"superuser.com",
"askubuntu.com",
"stackapps.com",
"mathoverflow.net",
],
}
module.exports = {
unmaps,
maps,
aliases,
}

12
util.js
View File

@ -70,11 +70,18 @@ util.rmSearchAliases = a => Object.entries(a).forEach(([leader, items]) => {
})
// Process Mappings
util.processMaps = (maps, siteleader) => {
util.processMaps = (maps, aliases, siteleader) => {
if (typeof map === "undefined" || typeof mapkey === "undefined") {
return
}
Object.entries(maps).forEach(([domain, domainMaps]) => domainMaps.forEach(((mapObj) => {
const hydratedAliases = Object.entries(aliases)
.flatMap(([baseDomain, aliasDomains]) =>
aliasDomains.flatMap(a => ({ [a]: maps[baseDomain] })))
const mapsAndAliases = Object.assign({}, maps, ...hydratedAliases)
Object.entries(mapsAndAliases).forEach(([domain, domainMaps]) => domainMaps.forEach(((mapObj) => {
const {
alias,
callback,
@ -84,7 +91,6 @@ util.processMaps = (maps, siteleader) => {
} = mapObj
const opts = {}
const key = `${leader}${alias}`
// Determine if it's a site-specific mapping