-
-
Save ne-sachirou/833567 to your computer and use it in GitHub Desktop.
// @author = http://c4se.sakura.ne.jp/profile/ne.html | |
// @date = 2011-02-19 | |
var COMMANDS_LIST = { | |
open: 'open', | |
o: 'open', | |
url: 'url', | |
user: 'user', | |
translate: 'translate', | |
ja: 'translate' | |
}, | |
TRANSLATE_API_KEY = 'AIzaSyCva1yUIFIBRqXOZDJ0nrbGbm0bz3FIksc'; | |
function _pearse(text) { // @reply String: | |
// @return Array: | |
var command = []; | |
command = text.replace(/^\s+|\s+$/g, '').split(/\s+/); | |
return command; | |
} | |
//AzureaVim Class | |
function AzureaVim(status) { //@param StatusUpdate Object: | |
this.text = status.text.slice(1); | |
this.command = _pearse(this.text); | |
this.status_id = status.in_reply_to_status_id; | |
this.screen_name = TwitterService.status.get(this.status_id).user.screen_name; | |
this.status_text = TwitterService.status.get(this.status_id).text; | |
this.status_urls = []; | |
TwitterService.status.getUrls(this.status_id, this.status_urls); | |
} | |
AzureaVim.prototype.run = function() { | |
this[COMMANDS_LIST[this.command[0]]](); | |
} | |
AzureaVim.prototype.open = function() { | |
var url = 'http://', | |
status_id = this.status_id, | |
screen_name = this.screen_name; | |
if (!this.command[1]) { | |
this.command[1] = 'status'; | |
} else if (this.command[1] === 'f' || this.command[1] === 'fav') { | |
this.command[1] = 'favstar'; | |
} | |
switch (this.command[1]) { | |
case 'status': | |
url += 'twitter.com/' + screen_name + '/status/' + status_id; | |
break; | |
case 'favstar': | |
url += 'favstar.fm/t/' + status_id; | |
break; | |
case 'favotter': | |
url += 'favotter.net/status.php?id=' + status_id; | |
case 'favlook': | |
url += 'favlook.osa-p.net/status.html?status_id=' + status_id; | |
break; | |
case 'twistar': | |
url += 'twistar.cc/' + screen_name + '/status/' + status_id; | |
break; | |
case 'favolog': | |
url += 'favolog.org/' + screen_name; | |
break; | |
case 'twilog': | |
url += 'twilog.org/' + screen_name; | |
break; | |
case 'user': | |
url += 'twitter.com/' + screen_name; | |
break; | |
case 'url': | |
if (!this.command[2]) { | |
this.command[2] = 0; | |
} | |
url = this.status_urls[this.command[2]]; | |
break; | |
default: | |
break; | |
} | |
System.openUrl(url); | |
} | |
AzureaVim.prototype.url = function() { | |
this.command.unshift('open'); | |
this.open(); | |
} | |
AzureaVim.prototype.user = function() { | |
System.views.openUserTimeline(this.screen_name, false); | |
} | |
AzureaVim.prototype.translate = function() { | |
var response, result = {}; | |
try { | |
response = Http.sendRequest('https://www.googleapis.com/language/translate/v2?key=' + | |
TRANSLATE_API_KEY + | |
'&q=' + | |
encodeURI(this.status_text) + | |
'&target=ja', | |
false); | |
if (response.statusCode !== 200) { | |
throw Error('Google Translate API Error. statusCode is ' + response.statusCode + '.'); | |
} | |
} catch (e) { | |
throw e; | |
} | |
result.text = response.body.match(/"translatedText"\s*:\s*"(.*)"/)[1]; | |
result.language = response.body.match(/"detectedSourceLanguage"\s*:\s*"(.*)"/)[1]; | |
System.showMessage(result.text, | |
result.language + '-> ja', | |
0); | |
} | |
function focusInput(status_id) { | |
TextArea.text = ':'; | |
TextArea.in_reply_to_status_id = status_id; | |
TextArea.show(); | |
TextArea.setFocus(); | |
TextArea.setCursor(1); | |
} | |
System.addKeyBindingHandler(0xBA, // VK_OEM_1 (:) | |
0, focusInput); | |
System.addContextMenuHandler(':vim', 0, focusInput); | |
//PreSendUpdateStatus Event Handler | |
function PreSendUpdateStatus(status) { | |
var azvim, flag = false; | |
try { | |
if (/^:/.test(status.text)) { | |
flag = true; | |
azvim = new AzureaVim(status); | |
azvim.run(); | |
TextArea.text = ''; | |
TextArea.in_reply_to_status_id = 0; | |
} | |
} catch (e) { | |
System.alert(e.name + ':\n' + e.message); | |
flag = true; | |
} | |
return flag; | |
} |
https://gist.github.com/833567/67a1f5e7293f92a3565fd2a6c8cc1fd6d6f94a0c
:translateコマンドを、拡張可能な様に改変。
:jaコマンドを、:translateではなく、:translate jaと同義にした。
ライセンスをpublic domainとして明記。
https://gist.github.com/833567/dbee742e128015b14e3160cfb644bd64a8b51dca
:translateコマンドのオプションを省略出来る様に。:translateは:translate jaと同義(←初めから其うしろ)。
:openコマンド(:oコマンド)のオプション省略時動作を変更。指定statusがurlを含む時は、:open url 0と同義、含まない時は、今迄通り、:open statusと同義。
https://gist.github.com/833567/e6e5f1146ab605b050fd26d44bf1aac06aa43703
コマンドの追加を簡易化。短縮コマンドには、prototype関数を作らなくて良い様にした。例えば、'b': 'a x',と空白を入れて書けば、:b yは:a x yと同義に成る。
:viewコマンドを追加。Azurea内のviewを移動する。API Level10, API Level11に対応 (line 238)。各種短縮コマンドも追加。:userコマンドは、:view userに吸収。
:openコマンドのオプション管理を、Hashにして簡易化。
:shindanコマンドを追加。指定したtweetの診断メーカーをリクエストし、投稿欄に結果を入力(tweet自動送信はしない)。 (by https://gist.github.com/831901 )
https://gist.github.com/833567/99c80580593b8b0f667f14f143bf11fecc92738d
AzureaWin、リプライ拡張 #js #AzureaScript - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110129/1296267611 の機能を統合。:rtコマンドと:replyコマンドを追加。
:rtコマンドは、ReTweetするのみ。
:replyコマンドは、templateを取って展開する内部動作とし、拡張を容易とした。各種短縮コマンドを追加。
_pearse関数を:replyに合わせて拡張(内部動作)。
:reply template部分のコードは、可能であれば将来に改善する事(TODO)。
https://gist.github.com/833567/3fa34716153928fd5b8b8ea85dc39f8b9a79b1b4
:translateコマンドを、非同期へ書き直した。
:replyコマンド部分の誤字修正 s/masirisiki/masirosiki/
https://gist.github.com/833567/f04cab61135d06d8845542d253808f4306dde826
:settingsコマンドを追加。:settings Misc::EnableAutoRefresh=1 の様に設定し、:settings Misc::EnableAutoRefreshの様に取得する。各種短縮コマンドを追加。
プラグインを取得可能にした。Scripts/AzureaVim下のjsを、起動時に読み込む。ActiveXObjectが有効に成っている必要が有る(無効の場合、単純に読み込まれない)。
上記に合わせ、:shindanコマンドと:translateコマンドを、本体から外した。
AzureaVim変更点 #AzureaScript #js - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110225/1298622144 変更点解説記事
ne-sachirou/AzureaVim - GitHub https://github.com/ne-sachirou/AzureaVim にprojectを移動
https://gist.github.com/833567/9c926f7979ee566cbdbc568a93cdde09262ceb13
AzureaWinにコマンド風操作を追加する #AzureaScript #js - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110219/1298054093 説明記事。
AzureaWinで、tweetを翻訳する拡張 #js - c4se記:さっちゃんですよ☆ http://d.hatena.ne.jp/Kureduki_Maari/20110127/1296092606 の機能を統合。:translate, :jaコマンド追加。
:userコマンド追加(動作せず←何故?)。