/*** BEGIN LICENSE BLOCK {{{ Copyright (c) 2009 hogelog distributable under the terms of an MIT-style license. http://www.opensource.jp/licenses/mit-license.html }}} END LICENSE BLOCK ***/ // PLUGIN_INFO//{{{ var PLUGIN_INFO = xml` {NAME} add "get element's XPath" hint mode hogelog 0.1.2 2.0pre 2.0pre https://github.com/vimpr/vimperator-plugins/raw/master/xpath_hint.js MIT `; //}}} (function(){ const DEFAULT_MAP = "x"; let xpathHintMap = liberator.globalVariables.xpath_hint_map || DEFAULT_MAP; let xh = plugins.xpath_hint = { getElementXPath: function(elem) { if (elem.nodeType == 9) { // DOCUMENT_NODE = 9 return ""; } if (elem.hasAttribute("id")) { return 'id("'+elem.getAttribute("id")+'")'; } let name = elem.tagName.toLowerCase(); let parent = elem.parentNode; let path = arguments.callee(parent)+"/"+name; let children = Array.filter(parent.childNodes, function(e) e.nodeName == elem.nodeName && e.nodeType == elem.nodeType); if (children.length != 1 && children[0]!=elem) { path += "["+(children.indexOf(elem)+1)+"]"; } return path; }, addMode: function(mode, prompt, action, tags) { hints.addMode(mode, prompt, function(e) action(xh.getElementXPath(e)), tags); }, }; xh.addMode(xpathHintMap, "copy xpath", function(xpath) util.copyToClipboard(xpath, true), function() "//*"); })(); // vim: set fdm=marker sw=4 ts=4 et: