From 53a2b4097b973917b1e67598ad27e8d1a4140573 Mon Sep 17 00:00:00 2001 From: trapezoid Date: Tue, 19 Jan 2010 15:06:44 +0000 Subject: Firefox 3.6にたぶんたいおう git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@36481 d0d07461-0603-4401-acd4-de1884942a52 --- direct_bookmark.js | 84 +++++++++++++++++++++++++++++++----------------------- 1 file 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 = {NAME} Direct Post to Social Bookmarks Trapezoid - 0.14 - Creative Commons + 0.15 + GPL 2.0pre - 2.0pre + 2.2 http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/direct_bookmark.js || + 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]*?]*)?>|[\\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[^>]*|/)?>|"; - } - } - 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( + ['', + '', + '', + ''].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); },{ -- cgit v1.2.3