aboutsummaryrefslogtreecommitdiffstats
path: root/inspector.js
blob: dac4b4cc53b5b6de3455ba1c9e19c423fcca0e73 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
let INFO =
<plugin name="Inspector" version="0.3"
        href="http://github.com/vimpr/vimperator-plugins/raw/master/inspector.js"
        summary="run DOM Inspector"
        xmlns="http://vimperator.org/namespaces/liberator">
  <author email="teramako@gmail.com">teramako</author>
  <license>MPL 1.1/GPL 2.0/LGPL 2.1</license>
  <project name="Vimperator" minVersion="2.3"/>
  <p>
    run DOM Inspector.
    Of caorse, needs DOM Inspector.
  </p>
  <item>
    <tags>:inspect</tags>
    <spec>:inspect<oa>!</oa> #<a>id</a></spec>
    <description>
      <p>inspect the element of <a>id</a> in browser content</p>
      <p>if bang (<a>!</a>) is exists, inspect in firefox instead.</p>
    </description>
  </item>
  <item>
    <tags>:inspect</tags>
    <spec>:inpeect <a>expr</a></spec>
    <description>
      <p>inspect the return value of evaluated the <a>expr</a></p>
    </description>
  </item>
</plugin>;


var inspectorID = "inspector@mozilla.org";
if (window.AddonManager) {
  AddonManager.getAddonByID(inspectorID, function(ext){
    if (ext.isActive)
      init();
  });
} else if (Application.extensions.has(inspectorID) && Application.extensions.get(inspectorID).enabled) {
  init();
}

function init(){

/* これやるとFirefox終了時に実行されるんだけど...なぜ? -> Ubiquityが悪さしているみたい
Object.prototype.inspect = function(){
  runInspector(this);
};
*/

function runInspector(node){
  if (node instanceof Document){
    inspectDOMDocument(node);
  } else if (node instanceof Node){
    inspectDOMNode(node);
  } else if (node !== null && typeof node != "undefined"){
    inspectObject(node);
  }
}

function getIDList(filter, isChrome){
  var doc = isChrome ? document : content.document;
  var iter = util.evaluateXPath('//*[@id and contains(@id,"' + filter + '")]',doc);
  return [["#" + e.id, "TagName: "+ e.tagName] for (e in iter)];
}

var options = [
  [["-frame","-f"], commands.OPTION_NOARG]
];
commands.addUserCommand(["inspect","dominspect"],"run DOM Inspector",
  function(args){
    var arg = args[0];
    var doc = args.bang ? document : content.document;
    var node;
    if (!arg){
      node = doc;
    } else if (arg.charAt(0) == "#"){
      let id = arg.substr(1);
      node = doc.getElementById(id);
      if (!node){
        liberator.echoerr("No such id: " + id );
        return;
      }
    } else {
      try {
        node = liberator.eval(args.string);
      } catch (e){
        liberator.echoerr(e);
      }
    }
    if (args["-frame"] && node.contentDocument) node = node.contentDocument;
    runInspector(node);
  },{
    bang: true,
    argCount: "*",
    options: options,
    completer: function(context, args){
      if (args[0] && args[0].charAt(0) == "#"){
        var arg = args[0];
        var list = getIDList(arg.substr(1), args.bang);
        context.completions = list.filter(function(elem) elem[0].indexOf(arg) == 0);
      } else {
        completion.javascript(context);
      }
    }
  }
);

}

// vim: sw=2 ts=2 et:
"p">; this.where = where; liberator.modules.modes.setCustomMode('BookmarksToolbar-Hint', function(){return;}, this.quit); this.show(); }, show:function(node){ liberator.modules.modes.set(liberator.modules.modes.CUSTOM,liberator.modules.modes.QUICK_HINT); hints = []; window.addEventListener('keypress',onKeyPress,true); current = node || getToolbar(); for (let i=0,l=current.childNodes.length; i<l; i++){ let button = current.childNodes[i]; if (button.localName == "menuseparator") continue; hints.push(button); let tooltip = createTooltip(); tooltip.showPopup(button, -1, -1,"tooltip","topleft","topright"); } updateSelector(); }, onEvent: function(event){ var key = liberator.modules.events.toString(event); switch(key){ case "<Esc>": case "<C-[>": closeMenus(current); liberator.modules.options.guioptions = this.go; break; case "<Return>": case "<Right>": if (toolbarOpen(hints[currentNum])) return; break; case "f": this.where = liberator.CURRENT_TAB; return; case "F": case "t": this.where = liberator.NEW_TAB; return; case "<Tab>": case "j": case "<Down>": case "<S-Tab>": case "k": case "<Up>": if (key == "j" || key == "<Tab>" || key == "<Down>"){ currentNum = hints.length -1 == currentNum ? 0 : currentNum + 1; } else { currentNum = currentNum == 0 ? hints.length -1 : currentNum - 1; } useShift = true; updateSelector(); return; case "l": if (hints[currentNum].getAttribute("container") == "true"){ folderOpen(hints[currentNum]); } return; case "<BS>": if (key == "<BS>" && currentNum > 0){ currentNum = Math.floor(currentNum / 10); updateSelector(); return; } case "h": if (current == this.toolbar){ closeMenus(current); liberator.modules.options.guioptions = this.go; this.quit(); } else { current.hidePopup(); clearTooltips(); this.show(current.parentNode.parentNode); } return; default: if (/^[0-9]$/.test(key)){ let num = parseInt(key,10); if (!useShift && currentNum) num += currentNum * 10; if (hints.length >= num*10){ currentNum = num - 1; updateSelector(); return; } if (hints[num-1]){ if (toolbarOpen(hints[num-1])) return; } } } liberator.plugins.bookmarkToolbarHints.quit(); }, quit: function(){ currentNum = 0; useShift = false; window.removeEventListener('keypress',onKeyPress,true); liberator.modules.modes.reset(true); while (tooltipbox.hasChildNodes()){ tooltipbox.firstChild.hidePopup(); tooltipbox.removeChild(tooltipbox.firstChild); } } }; var tooltipbox = document.createElement('box'); tooltipbox.setAttribute('id','liberator-tooltip-container'); //document.getElementById('liberator-container').appendChild(tooltipbox); document.getElementById('browser').appendChild(tooltipbox); return manager; })(); liberator.modules.mappings.addUserMap([liberator.modules.modes.NORMAL], ['<Leader>f'], 'Start Toolbar-HINTS (open current tab)', function(){ liberator.plugins.bookmarkToolbarHints.startup(liberator.CURRENT_TAB); }, { rhs: 'Bookmarks Toolbar-HINTS (current-tab)'} ); liberator.modules.mappings.addUserMap([liberator.modules.modes.NORMAL], ['<Leader>F'], 'Start Toolbar-HINTS (open new tab)', function(){ liberator.plugins.bookmarkToolbarHints.startup(liberator.NEW_TAB); }, { rhs: 'Bookmarks Toolbar-HINTS (new-tab)' } );