aboutsummaryrefslogtreecommitdiffstats
path: root/retweet.js
blob: 0f5eb99005b2e5b89d58162d49fe4216eab7854d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// 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.3</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;
      //return body.replace(/<[^>]*>/g, "");
      var tags = body.match(/<[^>]*>/g);
      for(var tag in tags)
      {
        body = body.replace(tags[tag],"");
      }
      return body;
    }

    function getUserName()
    {
      return $U.getFirstNodeFromXPath('//a[contains(concat(" ",normalize-space(@class)," "),"screen-name")]').innerHTML;
    }

    function getShortenUrl(longUrl)
    {
      var xhr = new XMLHttpRequest();
      var req = "http://bit.ly/api?url=" + encodeURIComponent(longUrl);
      xhr.open('GET',req, false);
      xhr.send(null);
      if(xhr.status != 200)
      {
        return longUrl;
      }
      return xhr.responseText;
    }

    function sendTwitter(url,name,body,comment)
    {
      var xhr = new XMLHttpRequest();
      var statusText = (comment ? comment + " " : "") + "RT @" + name + " [" + url +"]: " + body;
      return liberator.echo(statusText);
      xhr.open("POST", "https://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(args)
      {
        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,args.literalArg);
          }
          else if(liberator.globalVariables.twitter_username && liberator.globalVariables.twitter_password)
          {
            username = liberator.globalVariables.twitter_username;
            password = liberator.globalVariables.twitter_password;
            sendTwitter(url,name,body,args.literalArg);
          }
          else
          {
            throw "Accont not found";
          }
        }
        catch(e)
        {
          liberator.echoerr(e);
        }
      },
      {
        literal: 0
      },
      true
    );
  }
)();
span class="p">.clientWidth; this.target.startHeight = this.target.clientHeight; this.target.startX = event.clientX || event.target.offsetLeft; this.target.startY = event.clientY || event.target.offsetTop; this.doc.addEventListener("mousemove", this.handler.resize, false); this.doc.addEventListener("mouseup", this.handler.stopResize, false); try{ event.preventDefault(); } catch (e) {} }, resize: function(event) { try{ this.target.style.width = event.clientX - this.target.startX + this.target.startWidth + "px"; } catch (e) {} if (this.target.nodeName.toLowerCase() == "textarea") this.target.style.height = event.clientY - this.target.startY + this.target.startHeight + "px"; }, stopResize:function(event) { this.doc.removeEventListener("mousedown", this.handler.initResize, false); this.doc.removeEventListener("mousemove", this.handler.resize, false); setTimeout(function(self) self.doc.removeEventListener("mouseup", self.handler.stopResize, false), 10, this); this.changeCursor(true); }, changeCursor: function(normal) { for (let [,elem] in Iterator(this.doc.getElementsByTagName("textarea"))) elem.style.cursor = normal ? "text" : "se-resize"; for (let [,elem] in Iterator(this.doc.getElementsByTagName("input"))) { if (elem.type == "text") elem.style.cursor = normal ? "text" : "e-resize"; } }, currentResize: function(event) { var nodeName = this.target.nodeName.toLowerCase(); switch (event.keyCode) { case KeyEvent.DOM_VK_UP: case KeyEvent.DOM_VK_K: if (nodeName == "textarea") this.target.style.height = this.target.offsetHeight - 10 + "px"; break; case KeyEvent.DOM_VK_DOWN: case KeyEvent.DOM_VK_J: if (nodeName == "textarea") this.target.style.height = this.target.offsetHeight + 10 + "px"; break; case KeyEvent.DOM_VK_LEFT: case KeyEvent.DOM_VK_H: this.target.style.width = this.target.offsetWidth - 10 + "px"; break; case KeyEvent.DOM_VK_RIGHT: case KeyEvent.DOM_VK_L: this.target.style.width = this.target.offsetWidth + 10 + "px"; break; case KeyEvent.DOM_VK_RETURN: case KeyEvent.DOM_VK_ENTER: case KeyEvent.DOM_VK_ESCAPE: this.target.style.background = this.target.startBgColor; setTimeout(function(self) { self.doc.removeEventListener("keydown", self.handler.currentResize, false); self.target.focus(); }, 10, this ); break; } try{ event.preventDefault(); } catch (e) {} }, _bind: function() { var obj = Array.prototype.shift.apply(arguments); var func = Array.prototype.shift.apply(arguments); var args = []; for (let i = 0, len = arguments.length; i < len; args.push(arguments[i++])); return function(event) { return func.apply(obj, [ event ].concat(args)); }; } }; commands.addUserCommand( [ "textareaResize", "tr" ], "Allows you to resize textareas.", function() { var instance = new TextResizer(window.content.document); instance.resizable.apply(instance); }, null, true ); mappings.add( [ modes.INSERT, modes.TEXTAREA ], [ "<M-r>", "<A-r>" ], "Allows you to resize current textarea.", function() { var instance = new TextResizer(window.content.document); instance.resizable.apply(instance, [ document.commandDispatcher.focusedElement ]); } ); })(); // vim: set fdm=marker sw=2 ts=2 sts=0 et: