aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoranekos2008-12-31 15:02:22 +0000
committeranekos2008-12-31 15:02:22 +0000
commit55b0fb38216ae7b7fa21f4ca860250bc4b6f7c5f (patch)
treed589eb6a4d2f7fe0580e9ff155d2ed5f2838e7d0
parent051785414baedeb7173c3144fa2cd731a2b84ed0 (diff)
downloadvimperator-plugins-55b0fb38216ae7b7fa21f4ca860250bc4b6f7c5f.tar.bz2
Initial release: Timer alert plugin
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27695 d0d07461-0603-4401-acd4-de1884942a52
-rw-r--r--alert.js476
1 files changed, 476 insertions, 0 deletions
diff --git a/alert.js b/alert.js
new file mode 100644
index 0000000..601c18c
--- /dev/null
+++ b/alert.js
@@ -0,0 +1,476 @@
+/* {{{
+###################################################################################
+# SL 部分は、Takahito Yagami さんの著作権物です。 #
+# JavaScriptでSLを走らせる「SL.JS」を作りました ::: creazy photograph #
+# http://creazy.net/2008/02/sl_js.html #
+###################################################################################
+}}} */
+
+// PLUGIN_INFO {{{
+let PLUGIN_INFO =
+<VimperatorPlugin>
+ <name>Alert</name>
+ <name lang="ja">アラート</name>
+ <description>Display an alert after the specified time.</description>
+ <description lang="ja">指定時間後にアラートダイアログを出したりする。タイマー。</description>
+ <version>1.00</version>
+ <author mail="anekos@snca.net" homepage="http://d.hatena.ne.jp/nokturnalmortum/">anekos</author>
+ <minVersion>2.0pre</minVersion>
+ <maxVersion>2.0pre</maxVersion>
+ <detail lang="ja"><![CDATA[
+ かなり変梃な仕様です。
+ == Command ==
+ :alert [<TIME> | <METHOD> | <MESSAGE>] ...:
+ <TIME> 分後に、<MESSAGE> を表示する。
+ <METHOD> でアラート方法を指定する。
+ 引数はどのような順番でも良い。
+ e.g.:
+ >||
+ :alert 1.5 ugh
+ :alert -meow=4 -alert 2.0 This is Message!
+ :alert This 1.5 -meow=4 -pokimon=10 is Message!
+ ||<
+ == Methods ==
+ :-alert:
+ 標準的な JS の alert
+ :-gunsou:
+ 恐ろしい軍曹が出現
+ :-pokimon:
+ ピッカー!
+ :-meow:
+ "みゃお"
+ :-quit:
+ Firefox を終了する
+ == Thanks ==
+ SL 部分は下記のスクリプトからパクリました!
+ プラグインから呼べるように多少書き換えています。
+ JavaScriptでSLを走らせる「SL.JS」を作りました ::: creazy photograph
+ http://creazy.net/2008/02/sl_js.html
+ ]]></detail>
+</VimperatorPlugin>;
+// }}}
+
+(function () {
+
+ ////////////////////////////////////////////////////////////////////////////////
+ // SL - copyright (c) Takahito Yagami
+ ////////////////////////////////////////////////////////////////////////////////
+
+ let sl = function (next) {
+ var document = content.document;
+ /**
+ * SL.JS
+ *
+ * # execute bookmarklet below
+ * javascript:(function(){var d=document,sl_open,sl_run,sl_close,s=d.createElement('script');s.charset='UTF-8';s.src='http://labs.creazy.net/sl/bookmarklet.js';d.body.appendChild(s)})();
+ *
+ * @author Takahito Yagami <takahito.yagami[at]gmail[dot]com> (a.k.a yager)
+ * @version v1.0.0 2008/02/16
+ */
+ (function(){
+ //------------------------------------------------------------
+ // Setting (You can chage options in this block)
+ //------------------------------------------------------------
+ var sl_speed = 100;
+ var sl_pitch = 15;
+ var sl_tx_color = "#FFFFFF";
+ var sl_bg_color = "#000000";
+ //------------------------------------------------------------
+
+ //------------------------------------------------------------
+ // SL Parts
+ //------------------------------------------------------------
+ var sl_steam = [];
+ sl_steam[0]
+ =" (@@) ( ) (@) ( ) @@ () @ O @ O @<br>"
+ +" ( )<br>"
+ +" (@@@@)<br>"
+ +" ( )<br>"
+ +"<br>"
+ +" (@@@)<br>";
+ sl_steam[1]
+ =" ( ) (@@) ( ) (@) () @@ O @ O @ O<br>"
+ +" (@@@)<br>"
+ +" ( )<br>"
+ +" (@@@@)<br>"
+ +"<br>"
+ +" ( )<br>";
+
+ var sl_body
+ =" ==== ________ ___________ <br>"
+ +" _D _| |_______/ \\__I_I_____===__|_________| <br>"
+ +" |(_)--- | H\\________/ | | =|___ ___| _________________ <br>"
+ +" / | | H | | | | ||_| |_|| _| \\_____A <br>"
+ +" | | | H |__--------------------| [___] | =| | <br>"
+ +" | ________|___H__/__|_____/[][]~\\_______| | -| | <br>"
+ +" |/ | |-----------I_____I [][] [] D |=======|____|________________________|_ <br>";
+
+ var sl_wheels = [];
+ sl_wheels[0]
+ ="__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__|__________________________|_ <br>"
+ +" |/-=|___|= || || || |_____/~\\___/ |_D__D__D_| |_D__D__D_| <br>"
+ +" \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/ <br>";
+ sl_wheels[1]
+ ="__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__|__________________________|_ <br>"
+ +" |/-=|___|=O=====O=====O=====O |_____/~\\___/ |_D__D__D_| |_D__D__D_| <br>"
+ +" \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/ <br>";
+ sl_wheels[2]
+ ="__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__|__________________________|_ <br>"
+ +" |/-=|___|= || || || |_____/~\\___/ |_D__D__D_| |_D__D__D_| <br>"
+ +" \\_/ \\O=====O=====O=====O_/ \\_/ \\_/ \\_/ \\_/ \\_/ <br>";
+ sl_wheels[3]
+ ="__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__|__________________________|_ <br>"
+ +" |/-=|___|= || || || |_____/~\\___/ |_D__D__D_| |_D__D__D_| <br>"
+ +" \\_/ \\_O=====O=====O=====O/ \\_/ \\_/ \\_/ \\_/ \\_/ <br>";
+ sl_wheels[4]
+ ="__/ =| o |=-~~\\ /~~\\ /~~\\ /~~\\ ____Y___________|__|__________________________|_ <br>"
+ +" |/-=|___|= O=====O=====O=====O|_____/~\\___/ |_D__D__D_| |_D__D__D_| <br>"
+ +" \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/ <br>";
+ sl_wheels[5]
+ ="__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__|__________________________|_ <br>"
+ +" |/-=|___|= || || || |_____/~\\___/ |_D__D__D_| |_D__D__D_| <br>"
+ +" \\_/ \\__/ \\__/ \\__/ \\__/ \\_/ \\_/ \\_/ \\_/ \\_/ <br>";
+
+ sl_steam[0] = sl_steam[0].replace(/ /g,'&nbsp;');
+ sl_steam[1] = sl_steam[1].replace(/ /g,'&nbsp;');
+ sl_body = sl_body.replace(/ /g,'&nbsp;');
+ sl_wheels[0] = sl_wheels[0].replace(/ /g,'&nbsp;');
+ sl_wheels[1] = sl_wheels[1].replace(/ /g,'&nbsp;');
+ sl_wheels[2] = sl_wheels[2].replace(/ /g,'&nbsp;');
+ sl_wheels[3] = sl_wheels[3].replace(/ /g,'&nbsp;');
+ sl_wheels[4] = sl_wheels[4].replace(/ /g,'&nbsp;');
+ sl_wheels[5] = sl_wheels[5].replace(/ /g,'&nbsp;');
+
+ var sl_patterns = [];
+ sl_patterns[0] = sl_steam[0] + sl_body + sl_wheels[0];
+ sl_patterns[1] = sl_steam[0] + sl_body + sl_wheels[1];
+ sl_patterns[2] = sl_steam[0] + sl_body + sl_wheels[2];
+ sl_patterns[3] = sl_steam[1] + sl_body + sl_wheels[3];
+ sl_patterns[4] = sl_steam[1] + sl_body + sl_wheels[4];
+ sl_patterns[5] = sl_steam[1] + sl_body + sl_wheels[5];
+
+ //------------------------------------------------------------
+ // SL Initialize
+ //------------------------------------------------------------
+ var sl_counter = 0;
+ var sl_position = 0;
+ var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
+ if (window.opera||document.layers) {
+ var windowWidth = window.innerWidth;
+ } else if (document.all) {
+ var windowWidth = document.body.clientWidth;
+ } else if(document.getElementById){
+ var windowWidth = window.innerWidth;
+ }
+ var sl_style_base
+ ='display: block;'
+ +'position: absolute;'
+ +'text-align: left;'
+ +'overflow: visible;'
+ +'white-space: pre;'
+ +'font: 12px/12px monospace;';
+
+ var sl_style_main
+ =sl_style_base
+ +'top: '+(scrollTop+100)+'px;'
+ +'left: '+windowWidth+'px;'
+ +'padding: 20px;'
+ +'z-index: 999;'
+ +'color: '+sl_tx_color+';';
+
+ document.body.innerHTML += '<div id="__sl_main__" style="'+sl_style_main+'">'+sl_patterns[0]+'</div>';
+
+ var sl_w = document.getElementById("__sl_main__").clientWidth;
+ var sl_h = document.getElementById("__sl_main__").clientHeight;
+
+ var sl_style_background
+ =sl_style_base
+ +'top: '+(scrollTop+100)+'px;'
+ +'left: 0px;'
+ +'width: '+windowWidth+'px;'
+ +'height: '+sl_h+'px;'
+ +'z-index: 998;'
+ +'background-color: '+sl_bg_color+';'
+ +'filter: alpha(opacity=0);'
+ +'-moz-opacity: 0.0;'
+ +'opacity: 0.0;';
+
+ document.body.innerHTML += '<div id="__sl_background__" style="'+sl_style_background+'"><br /></div>';
+
+ //------------------------------------------------------------
+ // Actions
+ //------------------------------------------------------------
+ var sl_bg_counter = 0;
+
+ /**
+ * sl_open (gradually open background)
+ */
+ sl_open = function() {
+ var oid = "__sl_background__";
+ var op = sl_bg_counter;
+ var ua = navigator.userAgent
+ document.getElementById(oid).style.filter = 'alpha(opacity=' + (op * 10) + ')';
+ document.getElementById(oid).style.MozOpacity = op / 10;
+ document.getElementById(oid).style.opacity = op / 10;
+ if ( sl_bg_counter < 8 ) {
+ sl_bg_counter++;
+ setTimeout('sl_open()',100);
+ } else {
+ sl_run();
+ }
+
+ }
+
+ /**
+ * sl_run (move a train)
+ */
+ sl_run = function() {
+ document.getElementById("__sl_main__").innerHTML = sl_patterns[sl_counter];
+ document.getElementById("__sl_main__").style.left = windowWidth - sl_position + "px";
+ if ( sl_counter < 5 ) {
+ sl_counter++;
+ } else {
+ sl_counter = 0;
+ }
+ sl_position += sl_pitch;
+ if ( sl_w + (windowWidth - sl_position) < 0 ) {
+ sl_counter = 0;
+ sl_position = 0;
+ document.body.removeChild(document.getElementById("__sl_main__"));
+ sl_close();
+ } else {
+ setTimeout('sl_run()',sl_speed);
+ }
+ }
+
+ /**
+ * sl_close (gradually close background)
+ */
+ sl_close = function() {
+ var oid = "__sl_background__";
+ var op = sl_bg_counter;
+ var ua = navigator.userAgent
+ document.getElementById(oid).style.filter = 'alpha(opacity=' + (op * 10) + ')';
+ document.getElementById(oid).style.MozOpacity = op / 10;
+ document.getElementById(oid).style.opacity = op / 10;
+ if ( sl_bg_counter > 0 ) {
+ sl_bg_counter--;
+ setTimeout('sl_close()',100);
+ } else {
+ next();
+ document.body.removeChild(document.getElementById(oid));
+ }
+ }
+
+ // start actions !
+ sl_open();
+
+ })();
+ };
+ ////////////////////////////////////////////////////////////////////////////////
+ // END OF SL
+ ////////////////////////////////////////////////////////////////////////////////
+
+ let gv = liberator.globalVariables;
+
+ let defaults = {
+ methods: (gv.alert_default_methods || 'alert').split(/[^\w]+/),
+ time: parseFloat(gv.alert_default_time || '3'),
+ message: gv.alert_default_message || 'Time out!',
+ };
+
+ let maxMeow = parseInt(liberator.globalVariables.alert_mex_meow || '60', 10);
+
+ let sound = Cc["@mozilla.org/sound;1"].createInstance(Ci.nsISound);
+ sound.init();
+
+ let gunsou = 'data:image/gif;base64,'+
+ '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'+
+ 'J04QDASAfeIRAgA7';
+
+ function nop ()
+ undefined;
+
+ function singularize (fs, msg) {
+ if (!fs.length)
+ return nop;
+ let [f, arg] = fs[0];
+ return function () {
+ f(singularize(fs.slice(1), msg), msg, arg);
+ };
+ }
+
+ let alertMethods = {
+ alert: function (next, msg) {
+ window.alert(msg);
+ next();
+ },
+ pokimon: function (next, msg, arg) {
+ let times = parseInt(arg || '10', 10);
+ let colors = ['red', 'blue', 'yellow'];
+ let elem = content.document.body;
+ let indicator = elem.ownerDocument.createElement('div');
+ let rect = elem.getBoundingClientRect();
+ indicator.id = 'nyantoro-element-indicator';
+ let style = 'background-color: ' + colors[0] + ';' +
+ 'opacity: 0.5; z-index: 999;' +
+ 'position: fixed; ' +
+ 'top: ' + 0 + 'px;' +
+ 'height:' + content.innerHeight + 'px;' +
+ 'left: ' + 0 + 'px;' +
+ 'width: ' + content.innerWidth + 'px';
+ indicator.setAttribute('style', style);
+ elem.appendChild(indicator);
+ let (count = 0) {
+ let handle = setInterval(
+ function () {
+ if (count++ < times) {
+ indicator.style.backgroundColor = colors[count % colors.length];
+ } else {
+ clearInterval(handle);
+ elem.removeChild(indicator);
+ next();
+ }
+ },
+ 100
+ );
+ }
+ },
+ gunsou: function (next, msg, arg) {
+ let sleep = parseFloat(arg || 3) * 1000;
+ let sz = innerWidth / msg.length / 1.5;
+ liberator.echo(
+ <div style="background: white; color: black;">
+ <table>
+ <tr>
+ <td><img src={gunsou}/></td>
+ <td style={"font-size: " + sz + "px; white-space: nowrap;"}>{msg}</td>
+ </tr>
+ </table>
+ </div>
+ );
+ setTimeout(next, sleep);
+ },
+ meow: function (next, msg, arg) {
+ let times = Math.min(parseInt(arg || '3', 10), maxMeow);
+ let handle = setInterval(
+ function () {
+ if (times--) {
+ sound.play(makeURI('http://www.kurinton.net/~snca/files/meow.wav'));
+ } else {
+ clearInterval(handle);
+ next();
+ }
+ },
+ 1000
+ );
+ },
+ quit: function (next, msg) {
+ liberator.quit(true);
+ next();
+ },
+ SL: function (next, msg) {
+ sl(next);
+ }
+ };
+
+
+ defaults.methods = defaults.methods.map(
+ function (it) {
+ let [_, name, arg] = it.match(/^-?(\w+)(?:=(.*))?$/);
+ return [alertMethods[name] || nop, arg];
+ }
+ );
+
+ commands.addUserCommand(
+ ['alert'],
+ 'Timer alert (:alert [<TIME> | <METHOD> | <MESSAGE>] ...)',
+ function (args) {
+ let methods = [], time = null, message = '';
+ args.forEach(function (v) {
+ let m, f;
+ if ((m = v.match(/^-(\w+)(?:=(.*))?$/)) && (f = alertMethods[m[1]]))
+ methods.push([f, m[2]]);
+ else if (!time && v.match(/^\d+(\.\d+)?$/))
+ time = parseFloat(v);
+ else
+ message += ' ' + v;
+ });
+ if (message)
+ message = defaults.message;
+ if (time)
+ time = defaults.time;
+ if (!methods.length)
+ methods = defaults.methods;
+ setTimeout(singularize(methods, message), time * 60 * 1000);
+ },
+ {
+ argCount: '*',
+ completer: function (context, args) {
+ context.title = ['method', 'Description'];
+ context.completions = [
+ ['-alert', 'JS alert'],
+ ['-gunsou', 'Spawn horrible sergeant'],
+ ['-meow', 'Meow'],
+ ['-pokimon', 'Like a electric mouse'],
+ ['-quit', 'Quit firefox'],
+ ['-SL', 'Run SL'],
+ ];
+ }
+ },
+ true
+ );
+
+
+})();
+
+// vim:sw=2 ts=2 et si fdm=marker:
+