aboutsummaryrefslogtreecommitdiffstats
path: root/autoIgnoreKey.js
blob: eb4846598a3ddb25ac22c6fdf6d438ac4acf603a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
 * Auto switch Vimperator key navigation
 *
 * @author teramako teramako@gmail.com
 * @author halt feits <halt.feit at gmail.com>
 * @version 0.6pre
 */

(function(){

/**
 * String or RegExp
 * e.g)
 *  * /^https?:\/\/mail\.google\.com\//
 *  * 'http://reader.livedoor.com/reader/'
 *
 * The autoignorekey_pages is a string variable which can set on
 * vimperatorrc as following.
 *
 * let autoignorekey_pages = "['http://example.com/*', 'http://example.org/*']"
 *
 * or your can set it using inline JavaScript.
 *
 * javascript <<EOM
 * liberator.globalVariables.autoignorekey_pages = uneval([
 *   /^https?:\/\/mail\.google\.com\//,
 *   /^https?:\/\/www\.google\.com\/reader\//,
 * ]);
 * EOM
 */
const ignorePagesList = window.eval(liberator.globalVariables.autoignorekey_pages) || [
    /^https?:\/\/mail\.google\.com\//,
    /^http:\/\/(?:reader\.livedoor|fastladder)\.com\/(?:reader|public)\//,
].map(function(i)
    i instanceof RegExp ? i :
    i instanceof Array  ? new RegExp(String(i[0]), String(i[1])) :
    new RegExp("^" + String(i).replace(/\s+/g, "")
                              .replace(/[\\^$.+?|(){}\[\]]/g, "\\$&")
                              .replace(/(?=\*)/g, ".")
                   + "$", "i"));

document.getElementById('appcontent').addEventListener('DOMContentLoaded',function(event){
    var uri = event.target.documentURI;
    liberator.modes.passAllKeys = isMatch(uri);
    //liberator.log('load page: ' + gBrowser.selectedBrowser.contentDocument.URL);
},false);

getBrowser().mTabBox.addEventListener('TabSelect',function(event){
    var uri = this.parentNode.currentURI.spec;
    liberator.modes.passAllKeys = isMatch(uri);
    //liberator.log('select page: ' + gBrowser.selectedBrowser.contentDocument.URL);
},false);

function isMatch(uri) ignorePagesList.some(function(e) e.test(uri))

})();
// vim:sw=4 ts=4 et:
s="nx">l = path.length; i < l; i++) { if (!path[i](getName(elem))) break; } if (i) { let res = []; for (let j = i, l = path.length; j < l; j++) res.push(path[j]); return res; } } function getElementsByPath (elem, path, getName, isTarget, isEnabled) { try { function get (point, elem, path) { var m = path[0](getName(elem, true)); if (isTarget(elem)) { if (!isEnabled(elem)) return []; if (m) { if (path.length == 1) return [[point + m, elem]]; (path = cloneArray(path)).shift(); } else { return []; } } //elem.containerOpen = true; var res, cs = elem.childNodes, result = []; if (cs && cs.length) { for (let i = 0, l = cs.length; i < l; i++) { if (res = get(m + point, cs[i], path)) res.map(function (it) it && result.push(it)); } } //elem.containerOpen = false; return result; } return get(0, elem, path).sort().map(function (it) it[1]); } catch (e) { liberator.log(e); } } function getPathMatchers (args) args.split('-').map(function (it) function (l) !l ? 0 : l == it ? 1 : l.toLowerCase().indexOf(it.toLowerCase()) >= 0 ? 2 : new RegExp(migemo.getRegExp(it.replace(/^\s+|\s+$/, '')), 'i').test(l) ? 3 : 0); function getPathString (elem, isRoot, getName, isTarget) { var res = []; while (!isRoot(elem)) { isTarget(elem) && res.unshift(getName(elem)); elem = elem.parentNode; } return res.join('-'); } /********************************************************************************* * メインメニュー *********************************************************************************/ const mainMenubar = document.getElementById('main-menubar'); const toolbox = document.getElementById('navigator-toolbox'); const contextmenu = document.getElementById('contentAreaContextMenu'); function fixName (name) name ? name.replace(/^\s+|\s+$/, '').replace(/[-\s]+/g, '_') : ''; function getElementName (elem, multi) multi ? [elem.label, elem.tooltipText].map(function (it) fixName(it) || '') .join('-') : fixName(elem.label || elem.tooltipText || ''); function isNotHidden (elem) !elem.hidden ? true : false; function isClickable (elem) /^(?:menu(?:item)?|toolbarbutton)$/.test(elem.nodeName.toLowerCase()); function addCommand (cmds, name, root, action) { function _find (args, single) { var result = getElementsByPath(root, getPathMatchers(args), getElementName, isClickable, isNotHidden); return single ? result[0] : result; } if (!action) { action = function (elem) { if (!elem.click) return; elem.click(); return true; }; } commands.addUserCommand( cmds, name, function (args, _, num, extra) { // for HEAD (2) if (args.string != undefined) args = args.string; var res = _find(args.replace(/-\s*$/,''), true); if (!(res && action(res))) liberator.echoerr('menu not found'); }, { completer: function (args) { const gps = function (it) getPathString(it, equal(root), getElementName, isClickable); const fp = function (it) [gps(it), it.tooltipText || '']; return [0, _find(args).map(fp)]; } } ); } addCommand(['me[nu]'], 'Command MainMenu', mainMenubar); addCommand(['toolbar', 'tb'], 'Command Toolbar', toolbox); addCommand(['conme', 'contextmenu'], 'Context Menu', contextmenu, function (elem) { //contextmenu.openPopup(null, null, 0, 0, true); //contextmenu.hidePopup(); elem.click(); //elem.doCommand(); return true; } ); })();