aboutsummaryrefslogtreecommitdiffstats
path: root/inspector.js
blob: 884584fcd097d23128e150985ea58acb3b7b846a (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 = xml`
<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: