aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfrom_kyushu2009-06-20 18:42:13 +0000
committerfrom_kyushu2009-06-20 18:42:13 +0000
commit1a981233e12a1a2c5c2daacbff1736146e6842b4 (patch)
tree36df0dd0ef59ed063f9a7a22c1df2b1459bd313d
parent2a9bf130da7d275eacf62af87b24292878119767 (diff)
downloadvimperator-plugins-1a981233e12a1a2c5c2daacbff1736146e6842b4.tar.bz2
add retweet.js
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@34069 d0d07461-0603-4401-acd4-de1884942a52
-rw-r--r--retweet.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/retweet.js b/retweet.js
new file mode 100644
index 0000000..839bcd8
--- /dev/null
+++ b/retweet.js
@@ -0,0 +1,108 @@
+// PLUGIN_INFO//{{{
+var PLUGIN_INFO =
+<VimperatorPlugin>
+ <name>retweet</name>
+ <description>ReTweet This Page.</description>
+ <description lang="ja">開いているTweetをReTweetします。</description>
+ <author mail="from.kyushu.island@gmail.com" homepage="http://iddy.jp/profile/from_kyushu">from_kyushu</author>
+ <version>0.1</version>
+ <license>GPL</license>
+ <minVersion>1.2</minVersion>
+ <maxVersion>2.1</maxVersion>
+ <updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/retweet.js</updateURL>
+ <require type="plugin">_libly.js</require>
+ <detail><![CDATA[
+
+== Command ==
+Usage:
+ :rtt
+ ReTweet This Post.
+
+ ]]></detail>
+</VimperatorPlugin>;
+//}}}
+//
+(
+ function()
+ {
+ var password;
+ var username;
+ var passwordManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
+ var $U = liberator.plugins.libly.$U;
+
+ function getBody()
+ {
+ var body = $U.getFirstNodeFromXPath("//span[@class='entry-content']").innerHTML;
+ var tags = body.match(/<.*?>/g);
+ for(tag in tags)
+ {
+ body = body.replace(tags[tag],"");
+ }
+ return body;
+ }
+
+ function getUserName()
+ {
+ return $U.getFirstNodeFromXPath("//div[@class='screen-name']/a").innerHTML;
+ }
+
+ function getShortenUrl(longUrl)
+ {
+ var xhr = new XMLHttpRequest();
+ var req = "http://bit.ly/api?url=" + longUrl;
+ xhr.open('GET',req, false);
+ xhr.send(null);
+ if (xhr.status != 200)
+ {
+ return longUrl;
+ }
+ return xhr.responseText;
+ }
+
+ function sendTwitter(url,name,body)
+ {
+ var xhr = new XMLHttpRequest();
+ var statusText = "RT @" + name + " [" + url +"]: " + body;
+ xhr.open("POST", "http://twitter.com/statuses/update.json", false, username, password);
+ xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ xhr.send("status=" + encodeURIComponent(statusText) + "&source=Vimperator");
+
+ liberator.echo("[RT] Your post was sent. " );
+ }
+
+ commands.addUserCommand(
+ ['retweet[This]','rtt'],
+ 'ReTweet This.',
+ function()
+ {
+ try
+ {
+ var logins = passwordManager.findLogins({}, "http://twitter.com","https://twitter.com",null);
+ var body = getBody();
+ var name = getUserName();
+ var url = getShortenUrl(buffer.URL);
+ if(logins.length)
+ {
+ username = logins[0].username;
+ password = logins[0].password;
+ sendTwitter(url,name,body);
+ }
+ else if (liberator.globalVariables.twitter_username && liberator.globalVariables.twitter_password)
+ {
+ username = liberator.globalVariables.twitter_username;
+ password = liberator.globalVariables.twitter_password;
+ sendTwitter(url,name,body);
+ }
+ else
+ {
+ throw "Accont not found";
+ }
+ }
+ catch(e)
+ {
+ liberator.echoerr(e);
+ }
+ }
+ );
+ }
+)();