aboutsummaryrefslogtreecommitdiffstats
path: root/wassr.js
AgeCommit message (Collapse)Author
2009-08-27Follow HEADanekos
for http://vimperator.org/trac/gitweb/?p=liberator.git;a=commit;h=f20c2b315bb05c2e88d0c672f07dc229cc9267d2 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@35099 d0d07461-0603-4401-acd4-de1884942a52
2009-06-18security fix: Components.util.Sandbox(window) can use xpconnectteramako
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@34032 d0d07461-0603-4401-acd4-de1884942a52
2009-01-19use status.html instead of status.textmattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@28662 d0d07461-0603-4401-acd4-de1884942a52
2008-12-26絵文字が出て無かったのを修正mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27443 d0d07461-0603-4401-acd4-de1884942a52
2008-11-11status.textに&があるとテキスト展開されていたのを修正mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@23217 d0d07461-0603-4401-acd4-de1884942a52
2008-10-22safety for unknown user.mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@21822 d0d07461-0603-4401-acd4-de1884942a52
2008-10-22follow latest vimperator.mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@21814 d0d07461-0603-4401-acd4-de1884942a52
2008-10-06vimp CVS Headに追従(bang[!])の仕様変更に対して)teramako
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@20857 d0d07461-0603-4401-acd4-de1884942a52
2008-08-29・リプライ表示に対応 :wassr!@mattn
・検索に対応 :wassr!? yappo ・イイネに対応 :wassr!+ yappo ・イイネ削除に対応 :wassr!- yappo git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@18437 d0d07461-0603-4401-acd4-de1884942a52
2008-07-17* API仕様変更に伴う修正mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@15935 d0d07461-0603-4401-acd4-de1884942a52
2008-07-03via に "vimperator/wassr.js"と表示する様修正mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@15082 d0d07461-0603-4401-acd4-de1884942a52
2008-06-19* twitter.jsと同様に「:wassr! ↵mattn
user」で対象ユーザのステータスを表示するよう修正 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@14257 d0d07461-0603-4401-acd4-de1884942a52
2008-06-09* 胡散臭い絵文字対応mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@13580 d0d07461-0603-4401-acd4-de1884942a52
2008-06-04* ↵mattn
Components.utils.evalInSandboxが使えるなら、そちらを使う様に修正 git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@13217 d0d07461-0603-4401-acd4-de1884942a52
2008-05-09* added completer for -todomattn
* added new option -footmark git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@11300 d0d07461-0603-4401-acd4-de1884942a52
2008-05-08* todo機能追加(できかけ)mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@11265 d0d07461-0603-4401-acd4-de1884942a52
2008-05-08added wassr plugin.mattn
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@11264 d0d07461-0603-4401-acd4-de1884942a52
="o">= <VimperatorPlugin> <name>{NAME}</name> <description>Adds subscriptions to livedoor Reader/Fastladder in place.</description> <description lang="ja">ページ遷移なしでlivedoor ReaderやFastladderにフィードを登録します</description> <minVersion>2.0pre</minVersion> <maxVersion>2.0</maxVersion> <require type="plugin">_libly.js</require> <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/subscldr.js</updateURL> <author mail="snaka.gml@gmail.com" homepage="http://vimperator.g.hatena.ne.jp/snaka72/">snaka</author> <license>MIT style license</license> <version>0.2</version> <detail><![CDATA[ == Subject == Adds subscriptions to livedoor Reader/Fastladder in place. == Commands == >|| :subscldr :subscfl ||< ]]></detail> <detail lang="ja"><![CDATA[ == 概要 == ページ遷移すること無しにlivedoor ReaderやFastladderへのフィードの登録を行います == コマンド == >|| :subscldr :subscfl ||< ]]></detail> </VimperatorPlugin>; // }}} liberator.plugins.subscldr = (function() { // PUBLIC {{{ var PUBLICS = { // TODO:Provide API function. // for DEBUG {{{ //getSubscription: getSubscription, //postSubscription: postSubscription, //selectFeed: selectFeed // }}} }; // }}} // COMMAND {{{ addCommand( ["subscldr", "subscrldr"], "livedoor Reader", "http://reader.livedoor.com/subscribe/" ); addCommand( ["subscfl", "subscrfl"], "Fastladder", "http://fastladder.com/subscribe/" ); // }}} // PRIVATE {{{ function addCommand (command, servicename, endpoint) { function handleFeedRequest(opts, redirectUrl, force) { var subscribeInfo = getSubscription(redirectUrl); var availableLinks = subscribeInfo.feedlinks.filter(function(info) info[1]); var alreadySubscribed = availableLinks.length != subscribeInfo.feedlinks.length; if (alreadySubscribed && !force) { liberator.echo("This site has already been subscribed. Are you sure to want to add subscription?"); commandline.input("Add? [y/N]:", function(ans) { if (ans.toLowerCase().indexOf("y") == 0) // /^y(?:es)?$/.test(ans.toLowerCase()) handleFeedRequest(opts, null, true); else liberator.echo("Canceled."); commandline.close(); } ); return; } switch (availableLinks.length) { case 0: if (alreadySubscribed) liberator.echo("The feed of this site has already been subscribed."); else // Maybe never reach here. liberator.echoerr("SITE FEED NOT AVAILABLE!!!"); break; case 1: liberator.log("FEED ONLY ONE!!"); subscribeInfo.feedlinks = [availableLinks[0][0], true]; postSubscription(subscribeInfo, opts); break; default: liberator.log("SOME FEED AVAILABLE"); selectFeed( availableLinks.map(function(i) [i[0], i[2]]), function(sel) { liberator.log("SELECTED FEED:" + sel); liberator.echo("Redirected ..."); var redirectUrl = endpoint + "?url=" + encodeURIComponent(sel); handleFeedRequest(opts, redirectUrl); } ); } } function getSubscription(target) { liberator.echo("Please wait ..."); var subscribeInfo; var uri = target || endpoint + buffer.URL; var req = new libly.Request(uri, null, {asynchronous: false}); req.addEventListener("onSuccess", function(res) { liberator.log(res.responseText); res.getHTMLDocument(); subscribeInfo = getSubscribeInfo(res.doc); liberator.log(subscribeInfo.toSource()); }); req.get(); return subscribeInfo; } function postSubscription(info, opts) { liberator.log("subscribe:" + info.toSource()); var postBody= "url=" + encodeURIComponent(info.target_url) + "&folder_id=0" + "&rate=" + (opts.rate || "0") + "&register=1" + "&feedlink=" + encodeURIComponent(info.feedlinks[0]) + "&public=1" + "&ApiKey=" + info.apiKey; liberator.log("POST DATA:" + postBody); var req = new libly.Request( endpoint, null, { asyncronus: false, postBody: postBody } ); req.addEventListener("onSuccess", function(data) { liberator.log("Post status: " + data.responseText); liberator.echo("Subscribe feed succeed."); }); req.addEventListener("onFailure", function(data) { liberator.log("POST FAILURE: " + data.responseText); liberator.echoerr("POST FAILURE: " + data.statusText); }); req.post(); } commands.addUserCommand( command, "Register feed subscriptions to " + servicename + ".", function(args) { handleFeedRequest({rate: args["-rate"]}); }, { options: [ [["-rate", "-r"], commands.OPTION_INT] ] }, true // Use in DEVELOP ); } function getSubscribeInfo(htmldoc) { var subscribeInfo = { target_url: null, register: 1, apiKey: null, feedlinks: [] }; $LXs('id("feed_candidates")/li', htmldoc).forEach( function(item) { var feedlink = $LX('./a[@class="feedlink"]', item); var title = $LX('./a[@class="subscribe_list"]', item); var users = $LX('./span[@class="subscriber_count"]/a', item); var yet = $LX('./input[@name="feedlink"]', item); liberator.log("input:" + feedlink.href); subscribeInfo.feedlinks.push([feedlink.href, (yet != null), (title ? title.textContent : '' ) + ' / ' + (users ? users.textContent : '0 user')]); }); var target_url = $LX('id("target_url")', htmldoc); if (!target_url) throw "Cannot find subscribe info about this page!"; subscribeInfo.target_url = target_url.value; liberator.log("target_url:" + subscribeInfo.target_url); subscribeInfo.apiKey = $LX('//*[@name="ApiKey"]', htmldoc).value; if (!subscribeInfo.apiKey) throw "Can't get API key for subscription!"; return subscribeInfo; } function selectFeed(links, next) { liberator.log(links.toSource()); liberator.echo("Following feeds were found on this site. Which are you subscribe?"); commandline.input("Select or input feed URL ", function(selected) { liberator.echo("You select " + selected + "."); commandline.close(); if (next && typeof next == "function") next(selected); else liberator.echoerr("Your selected no is invalid."); },{ completer: function(context) { context.title = ["Available feeds", "Title / users"]; context.completions = links; } }); // Open candidates list forcibly events.feedkeys("<TAB>"); } // For convenience function $LXs(a,b) libly.$U.getNodesFromXPath(a,b); function $LX(a,b) libly.$U.getFirstNodeFromXPath(a,b); // }}} return PUBLICS; })(); // vim:sw=2 ts=2 et si fdm=marker: