aboutsummaryrefslogtreecommitdiffstats
path: root/appendAnchor.js
diff options
context:
space:
mode:
authorretlet2008-11-05 06:04:44 +0000
committerretlet2008-11-05 06:04:44 +0000
commitc4489d32e21b8548976fec780eff4df613697a53 (patch)
tree1ecf88b6f2d562dde2f06e4824d7916f83fe4d8c /appendAnchor.js
parent56cb882fc6f122c75608f8eb6142a607d3dc855f (diff)
downloadvimperator-plugins-c4489d32e21b8548976fec780eff4df613697a53.tar.bz2
手元の環境で動いているものをtags/2.0pre_1016からコピー
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/branches/1.2@22751 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'appendAnchor.js')
-rw-r--r--appendAnchor.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/appendAnchor.js b/appendAnchor.js
new file mode 100644
index 0000000..9dc410d
--- /dev/null
+++ b/appendAnchor.js
@@ -0,0 +1,41 @@
+/**
+ * == VimperatorPlugin==
+ * @name appendAnchor
+ * @description append anchors to texts look like url.
+ * @author SAKAI, Kazuaki
+ * @version 0.02
+ * == VimperatorPlugin==
+ */
+
+(function(){
+
+ liberator.commands.addUserCommand(['anc'], 'append anchors to texts look like url',
+ function(arg, special) {
+ var doc = window.content.document;
+ var nodes = liberator.buffer.evaluateXPath(
+ '/descendant::*[not(contains(" TITLE STYLE SCRIPT TEXTAREA XMP A ", concat(" ", translate(local-name(), "aceilmprstxy", "ACEILMPRSTXY"), " ")))]/child::text()'
+ );
+ var regex = new RegExp("h?(ttps?):/+([a-zA-Z0-9][-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+[-_~*(a-zA-Z0-9;/?@&=+$%#])");
+
+ var range = doc.createRange();
+ var last;
+ var href;
+ for (let i = 0, l = nodes.snapshotLength; i < l; i++) {
+ let node = nodes.snapshotItem(i);
+ range.selectNode(node);
+ while (node && (last = range.toString().search(regex)) > -1) {
+ range.setStart(node, last);
+ range.setEnd(node, last + RegExp.lastMatch.length);
+ href = 'h' + RegExp.$1 + '://' + RegExp.$2;
+ let anchor = doc.createElement('a');
+ range.insertNode(anchor);
+ anchor.setAttribute('href', href);
+ range.surroundContents(anchor);
+ node = node.nextSibling.nextSibling;
+ range.selectNode(node);
+ }
+ }
+ range.detach();
+ },{}
+ );
+})();