diff options
Diffstat (limited to 'sbmcommentsviewer.js')
-rw-r--r-- | sbmcommentsviewer.js | 53 |
1 files changed, 48 insertions, 5 deletions
diff --git a/sbmcommentsviewer.js b/sbmcommentsviewer.js index fd18c53..c7d10f6 100644 --- a/sbmcommentsviewer.js +++ b/sbmcommentsviewer.js @@ -3,7 +3,7 @@ var PLUGIN_INFO = <name>SBM Comments Viewer</name> <description>List show Social Bookmark Comments</description> <description lang="ja">ソーシャル・ブックマーク・コメントを表示します</description> - <version>0.2.1</version> + <version>0.2.2</version> <minVersion>2.0pre</minVersion> <maxVersion>3.0</maxVersion> <updateURL>https://github.com/vimpr/vimperator-plugins/raw/master/sbmcommentsviewer.js</updateURL> @@ -32,6 +32,7 @@ viewSBMComments [url] [options] - d : Delicious - l : livedoor clip - z : Buzzurl +- t : Topsy - XXX:今後増やしていきたい >|| @@ -125,8 +126,21 @@ function SBMEntry(id, timestamp, comment, tags, extra){ //{{{ } //}}} SBMEntry.prototype = { //{{{ toHTML: function(format){ - function makeLink(str) - XMLList(str.replace(/(?:https?:\/\/|mailto:)\S+/g, '<a href="$&" highlight="URL">$&</a>')); + function makeLink(str, withLink){ + let s = str; + let result = XMLList(); + while (s.length > 0) { + let m = s.match(/(?:https?:\/\/|mailto:)\S+/); + if (m) { + result += <>{s.slice(0, m.index)}<a href={withLink ? m[0] : '#'} highlight="URL">{m[0]}</a></>; + s = s.slice(m.index + m[0].length); + } else { + result += <>{s}</>; + break; + } + } + return result; + } var xml = <tr/>; var self = this; @@ -138,7 +152,8 @@ SBMEntry.prototype = { //{{{ </td>; break; case 'timestamp': - xml.* += <td class="liberator-sbmcommentsviewer-timestamp">{self.formatDate()}</td>; break; + xml.* += <td class="liberator-sbmcommentsviewer-timestamp">{self.formatDate()}</td>; + break; case 'tags': xml.* += <td class="liberator-sbmcommentsviewer-tags">{self.tags.join(',')}</td>; break; case 'comment': @@ -338,6 +353,33 @@ var SBM = { //{{{ liberator.log('Faild: Buzzurl'); } } + }, //}}} + topsy: { //{{{ + getURL: function(url){ + var urlPrefix = 'http://otter.topsy.com/trackbacks.json?perpage=50&infonly=0&tracktype=tweet&url='; + return urlPrefix + encodeURIComponent(url.replace(/%23/g,'#')); + }, + parser: function(xhr){ + var json = jsonDecode(xhr.responseText); + if (json && json.response){ + let c = new SBMContainer('t', json.response.trackback_total, { + faviconURL: 'http://topsy.com/favicon.ico', + pageURL: json.response.topsy_trackback_url + }); + json.response.list.forEach(function(entry){ + c.add( entry.author.nick, new Date(entry.date*1000), + entry.content, null, + { + userIcon: entry.author.photo_url, + link: entry.author.topsy_author_url + } + ); + }); + return c; + } else { + liberator.echo('Faild: Topsy'); + } + } } //}}} }; //}}} @@ -423,7 +465,8 @@ var manager = { h: 'hatena', d: 'delicious', l: 'livedoorclip', - z: 'buzzurl' + z: 'buzzurl', + t: 'topsy' }, format: { id: 'ID', |