diff options
-rw-r--r-- | direct_bookmark.js | 84 |
1 files changed, 49 insertions, 35 deletions
diff --git a/direct_bookmark.js b/direct_bookmark.js index 9b65b6c..0fce866 100644 --- a/direct_bookmark.js +++ b/direct_bookmark.js @@ -1,16 +1,16 @@ -// Last Change: 09-Jan-2009. Jan 2008
+// Last Change: 20-Jan-2010. Jan 2008
var PLUGIN_INFO =
<VimperatorPlugin>
<name>{NAME}</name>
<description>Direct Post to Social Bookmarks</description>
<author mail="trapezoid.g@gmail.com" homepage="http://unsigned.g.hatena.ne.jp/Trapezoid">Trapezoid</author>
- <version>0.14</version>
- <license>Creative Commons</license>
+ <version>0.15</version>
+ <license>GPL</license>
<minVersion>2.0pre</minVersion>
- <maxVersion>2.0pre</maxVersion>
+ <maxVersion>2.2</maxVersion>
<updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/direct_bookmark.js</updateURL>
<detail><![CDATA[
-Social Bookmark direct add script for Vimperator 0.6.*.
+Social Bookmark direct add script for Vimperator 2.2
for Migemo search: require XUL/Migemo Extension
== Parts ==
@@ -41,6 +41,13 @@ for Migemo search: require XUL/Migemo Extension 'p': Places (Firefox bookmarks)
Usage: let g:direct_sbm_use_services_by_post = "hdl"
||<
+=== g:direct_sbm_echo_type ===
+>||
+ Post message type
+ 'simple' : single line, no posted services description
+ 'multiline' : multi line, display services description
+ 'none' : hide post message
+||<
=== g:direct_sbm_is_normalize ===
>||
Use normalize permalink
@@ -86,6 +93,7 @@ for Migemo search: require XUL/Migemo Extension var useServicesByPost = liberator.globalVariables.direct_sbm_use_services_by_post || 'hdl';
var useServicesByTag = liberator.globalVariables.direct_sbm_use_services_by_tag || 'hdl';
+ var echoType = liberator.globalVariables.direct_sbm_echo_type || 'multiline';
var isNormalize = typeof liberator.globalVariables.direct_sbm_is_normalize == 'undefined' ?
true : evalFunc(liberator.globalVariables.direct_sbm_is_normalize);
var isUseMigemo = typeof liberator.globalVariables.direct_sbm_is_use_migemo == 'undefined' ?
@@ -258,31 +266,29 @@ for Migemo search: require XUL/Migemo Extension return result.singleNodeValue ? result.singleNodeValue : null;
}
- // copied from Pagerization (c) id:ofk
- function parseHTML(str, ignoreTags) {
- var exp = "^[\\s\\S]*?<html(?:\\s[^>]*)?>|</html\\s*>[\\S\\s]*$";
- if (ignoreTags) {
- if (typeof ignoreTags == "string") ignoreTags = [ignoreTags];
- var stripTags = [];
- ignoreTags = ignoreTags.filter(function(tag) tag[tag.length - 1] == "/" || !stripTags.push(tag))
- .map(function(tag) tag.replace(/\/$/, ""));
- if (stripTags.length > 0) {
- stripTags = stripTags.length > 1
- ? "(?:" + stripTags.join("|") + ")"
- : String(stripTags);
- exp += "|<" + stripTags + "(?:\\s[^>]*|/)?>|</" + stripTags + "\\s*>";
- }
- }
- str = str.replace(new RegExp(exp, "ig"), "");
- var res = document.implementation.createDocument(null, "html", null);
- var range = document.createRange();
- range.setStartAfter(window.content.document.body);
- res.documentElement.appendChild(res.importNode(range.createContextualFragment(str), true));
- if (ignoreTags) ignoreTags.forEach(function(tag) {
- var elements = res.getElementsByTagName(tag);
- for (var i = elements.length, el; el = elements.item(--i); el.parentNode.removeChild(el));
- });
- return res;
+ // copied from http://d.hatena.ne.jp/odz/20060901/1157165797 id:odz
+ function parseHTML(text) {
+ var createHTMLDocument = function() {
+ var xsl = (new DOMParser()).parseFromString(
+ ['<?xml version="1.0"?>',
+ '<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">',
+ '<output method="html"/>',
+ '</stylesheet>'].join("\n"), "text/xml");
+
+ var xsltp = new XSLTProcessor();
+ xsltp.importStylesheet(xsl);
+ var doc = xsltp.transformToDocument(
+ document.implementation.createDocument("", "", null));
+ return doc;
+ };
+
+ var doc = createHTMLDocument();
+ var range = doc.createRange();
+ doc.appendChild(doc.createElement("html"));
+ range.selectNodeContents(doc.documentElement);
+ doc.documentElement.appendChild(
+ range.createContextualFragment(text));
+ return doc;
}
//
@@ -380,7 +386,7 @@ for Migemo search: require XUL/Migemo Extension xhr.open("GET","http://b.hatena.ne.jp/"+user,false);
xhr.send(null);
- var mypage_html = parseHTML(xhr.responseText, ['img', 'script']);
+ var mypage_html = parseHTML(xhr.responseText);
//var tags = getElementsByXPath("//ul[@id=\"taglist\"]/li/a",mypage_html);
var tags = getElementsByXPath('id("tags")/li/a', mypage_html);
@@ -471,7 +477,7 @@ for Migemo search: require XUL/Migemo Extension xhr.open("GET","http://clip.livedoor.com/clip/add?link=http://example.example/",false);
xhr.send(null);
- var mypage_html = parseHTML(xhr.responseText, ['img', 'script']);
+ var mypage_html = parseHTML(xhr.responseText);
var tags = getElementsByXPath("id(\"tag_list\")/span",mypage_html);
tags.forEach(function(tag){
@@ -666,10 +672,18 @@ for Migemo search: require XUL/Migemo Extension isNormalize ? getNormalizedPermalink(url) : url,title,
comment,tags
//));
- )).next(function(){
- liberator.echo("[" + services[service].description + "] post completed.");
- });
+ ));
+ if(echoType == "multiline") {
+ d = d.next(function(){
+ liberator.echo("[" + services[service].description + "] post completed.");
+ });
+ }
});
+ if(echoType == "simple") {
+ d = d.next(function(){
+ liberator.echo("post completed.");
+ });
+ }
d.error(function(e){liberator.echoerr("direct_bookmark.js: Exception throwed! " + e);liberator.log(e);});
setTimeout(function(){first.call();},0);
},{
|