aboutsummaryrefslogtreecommitdiffstats
path: root/speeddial.js
blob: 7c7a134898ccd3d13a966c461a1ba44089b1a81a (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
// Vimperator plugin: "SpeedDial"
// Last Change: 22-Oct-2008. Jan 2008
// License: Creative Commons
// Maintainer: mattn <mattn.jp@gmail.com> - http://mattn.kaoriya.net/
//
// Commands:
//  :sd 1
//      open url registered as 1 in current tab.
//  :sd! 1
//      open url registered as 1 in new tab.
// Note:
//  you can able to complete urls with tab key.

(function() {
    const pref = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPrefBranch);
    var nsISupportsString = Components.interfaces.nsISupportsWString ||
                            Components.interfaces.nsISupportsString;
    liberator.modules.commands.addUserCommand(["sd", "speeddial"], "speeddial",
        function(arg, special){
            arg = arg.string;
            if (arg.match(/^[0-9]+$/))
                arg = pref.getComplexValue("extensions.speeddial.thumbnail-" + arg + "-url", nsISupportsString).data;
            else
            if (arg.length == 0)
                arg = "chrome://speeddial/content/speeddial.xul";
            liberator.open(arg, special ? liberator.NEW_TAB : liberator.CURRENT_TAB);
        }, {
            completer: function(filter) {
                candidates = [];
                for (var n = 1; n <= 9; n++) {
                    var url = pref.getComplexValue("extensions.speeddial.thumbnail-" + n + "-url", nsISupportsString).data;
                    var label = pref.getComplexValue("extensions.speeddial.thumbnail-" + n + "-label", nsISupportsString).data;
                    if (url && label) candidates.push([url, n + ":" + label]);
                }
                return [0,candidates];
            }
        }
    );
})();
// vim:sw=4 ts=4 et:
class="kd">function XPClass(class){ //{{{ this.name = class; var _interface; this.__defineGetter__('interface', function(){ if (_interface) return _interface; _interface = {}; var cl; try { cl = Cc[this.name].createInstance(); } catch (e){ try { cl = Cc[this.name].getService(); } catch (ex){ liberator.log(this.name); liberator.log(e); return _interface; } } for (let i in Ci){ if (i == 'nsISupports' || i == 'IDispatch') continue; let obj; try { obj = cl.QueryInterface(Ci[i]); } catch (e){ continue; } if (obj){ _interface[i] = new XPInterface(this.name, i); } } return _interface; }); } //}}} XPClass.prototype = { //{{{ get number() Cc[this.name].number, has: function(filter){ var flag = false; if (filter instanceof RegExp){ for (let i in this.interface){ if(flag = filter.test(i)) break; } } else { flag = (interface in this.interface); } return flag; }, toString: function() this.name }; //}}} function XPInterface(c, i){ //{{{ this.interface = Ci[i]; this.class = Cc[c]; } //}}} XPInterface.prototype = { //{{{ get number() this.interface.number, get name() this.interface.name, get classNumber() this.class.number, get className() this.class.name, toString: function() this.name + ' of ' + this.className, create: function(){ var instance; try { instance = this.class.createInstance(this.interface); } catch (e){ try { instance = this.class.getService(this.interface); }catch (e){} } return instance; } }; //}}} function toKey(str) str.replace(/\W(.)/g, function(m, p) p.toUpperCase()); var tree = {}; for (let c in Cc){ let key = toKey(c); tree[key] = new XPClass(c); tree[c] = tree[key]; } // ---------------------------------------------- // Commands // ---------------------------------------------- commands.addUserCommand(['lscc'], 'List XPCOM class', function(arg){ if (!arg){ liberator.echoerr('No arguments'); return; } var args = args.arguments ? args.arguments: commands.parseArgs(arg).arguments; if (args.length == 1){ liberator.echo(liberator.XPCOM.listClass(args[0], null, true), true); } else if (args[1] in Ci){ let instance = tree[toKey(args[0])].interface[args[1]].create(); echo(liberator.modules.util.objectToString(instance, true), true); } else { liberator.echo(liberator.XPCOM.listClass(args[0], args[1], true), true); } }, { completer: function(filter){ if (!filter) return []; var args = filter.arguments? filter.filter: commands.parseArgs(filter).arguments; var list = []; var position = 0; var reg; if (args.length == 1){ reg = new RegExp(args[0], 'i'); for (let c in Cc){ if (reg.test(c)) list.push([Cc[c].name, Cc[c].number]); } } else if (args.length == 2 && args[0] in Cc){ reg = new RegExp(args[1], 'i'); for (let i in tree[toKey(args[0])].interface){ if (reg.test(i)) list.push([Ci[i].name, Ci[i].number]); } position = args[0].length + 1; } return [position, list]; } } ); var manager = { get all() tree, toKey: function(class) toKey(class), toHTML: function(list){ var str = ['<dl>']; list.forEach(function(o){ str.push('<dt>' + o.name + ' ' + o.number + '</td>'); if (o.interface){ for (let i in o.interface){ str.push('<dd>' + o.interface[i].name + ' ' + o.interface[i].number + '</dd>'); } } else { for (let member in o){ str.push('<dd>' + member + ': ' + o[member] + '</dd>'); } } }); str.push('</dl>'); return str.join(''); }, listClass: function(cFilter, iFilter, format){ var list = []; if (!cFilter) return null; cReg = new RegExp(cFilter, 'i'); iReg = new RegExp((iFilter ? iFilter : '.*'), 'i'); for (let c in tree){ if (cReg.test(tree[c].name) && tree[c].has(iReg)){ list.push(tree[c]); } } if (format) return this.toHTML(list); return list; }, listInterface: function(iFilter, format){ var list = []; if (!iFilter) return null; iReg = new RegExp(iFilter, 'i'); for (let i in Ci){ if (iReg.test(i)) list.push(Ci[i]); } if (format) return this.toHTML(list); return list; } }; return manager; })(); // vim: sw=4 ts=4 sts=0 fdm=marker noet: