Added extra keybindings
authorDarren <darren@darrenwhitlen.com>
Mon, 18 Jul 2011 15:11:32 +0000 (16:11 +0100)
committerDarren <darren@darrenwhitlen.com>
Mon, 18 Jul 2011 15:11:32 +0000 (16:11 +0100)
index.php
js/front.js
js/util.js

index 3994fd0baae8290e8bff7a89ae30e8290f14d410..242bfca9ae3986391f262cb848b16c89d7780671 100644 (file)
--- a/index.php
+++ b/index.php
@@ -50,7 +50,7 @@
 <?php } ?>\r
 \r
 <script src="http://<?php echo $node_server; ?>:7777/socket.io/socket.io.js"></script>\r
-<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>\r
+<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>\r
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>\r
 <script type="text/javascript" src="js/jquery.json-2.2.min.js"></script>\r
 <script type="text/javascript" src="js/util.js"></script>\r
        var touch_scroll;\r
        \r
        $(document).ready(function(){\r
-               if(touchscreen){\r
-                       $('#kiwi').addClass('touchscreen');\r
-\r
-                       // Single touch scrolling through scrollback for touchscreens\r
-                       scroll_opts = {};\r
-                       touch_scroll = new iScroll('windows', scroll_opts);\r
-               }\r
-               \r
                //#nick@irc.anonnet.org:6679+/#channel,##channel,&channel\r
                var chans = document.location.hash.match(/[#&]+[^ ,\007]+/g);\r
                if(chans != null && chans.length > 0) {\r
        }\r
 </script>\r
 \r
+\r
+<script id="tmpl_about_box" type="text/x-jquery-tmpl">\r
+       <h2>Kiwi IRC</h2>\r
+       <p>An alternative to downloading an irc client. Kiwi IRC is the best web app you'll use for the next couple years.</p>\r
+       <button class="about_close">Close</button>\r
+       <p class="info">${about}</p>\r
+       <p class="revisions">Front: ${front_revision}<br />Gateway: ${gateway_revision}</p>\r
+</script>\r
+\r
+<script id="tmpl_change_nick" type="text/x-jquery-tmpl">\r
+       <div class="newnick box">\r
+               Your new nick:<br />\r
+               <form class="form_newnick">\r
+                       <input type="text" class="txtnewnick" /><br />\r
+                       <button class="butnewnick" type="submit">Change</button> <a class="link cancelnewnick">Cancel</a>\r
+               </form>\r
+       </div>\r
+</script>\r
+\r
+\r
+<script id="tmpl_plugins" type="text/x-jquery-tmpl">\r
+       <div class="list">\r
+               <h2>Kiwi plugins</h2>\r
+               <p>\r
+                       <select multiple="multiple" id="plugin_list">\r
+                       </select>\r
+                       <button id="plugins_list_unload">Unload</button>\r
+               </p>\r
+       </div>\r
+       <div class="load">\r
+               Plugin file URL:<br />\r
+               <form>\r
+                       <input type="text" class="txtpluginfile" /><br />\r
+                       <button class="butnewnick" type="submit">Load..</button> <a class="link cancelpluginfile">Cancel</a>\r
+               </form>\r
+       </div>\r
+</script>\r
+\r
+<script id="tmpl_user_box" type="text/x-jquery-tmpl">\r
+       <div class="userbox">\r
+               <input type="hidden" class="userbox_nick" value="${nick}" />\r
+               <a href="#" class="userbox_query">Message</a>\r
+               <a href="#" class="userbox_whois">Info</a>\r
+       </div>\r
+</script>\r
+\r
 </head>\r
 \r
 <body>\r
                                <div class="content top">\r
                                        <ul>\r
                                                <li><label for="nick">Your nickname:</label>\r
-                                                       <input type="text" id="nick" name="nick" class="nick" value="<?php echo htmlentities($nick); ?>" /></li>\r
+                                                       <input type="text" id="nick" name="nick" class="nick" placeholder="Your nick.." /></li>\r
                                        </ul>\r
                                        <a class="connect" href="">Connect..</a>\r
                                </div>\r
                </div>\r
                <div class="plugins">\r
                        <ul>\r
-                               <!-- <li><a class="load_plugin_file">Plugins</a></li> -->\r
+                               <li><a class="load_plugin_file">Plugins</a></li>\r
                                <?php if(isset($_GET['debug'])){ ?>\r
                                <li><a class="reload_css">Reload CSS</a></li>\r
                                <?php } ?>\r
index ec6fb0a35429703516005b36bf334a72bdeb507a..ffaba93353381548d3a6d6d46e1fb4cd1b61aef2 100644 (file)
@@ -37,21 +37,25 @@ var front = {
                
                // Build the about box
                front.boxes.about = new box("about");
-               front.boxes.about.content.html('<h2>Kiwi IRC</h2>');
-               front.boxes.about.content.append("<p>An alternative to downloading an irc client. Kiwi IRC is the best web app you'll use for the next couple years.</p>");
-               front.boxes.about.content.append('<button class="about_close">Close</button>');
-               
                var about_info = 'UI adapted for ' + agent;
-               if (touchscreen) {
-            about_info += ' touchscreen ';
-        }
+               if (touchscreen) about_info += ' touchscreen ';
                about_info += 'usage';
-               
-               front.boxes.about.content.append('<p class="info">' + about_info + '</p>');
-               front.boxes.about.content.append('<p class="revisions">Front: ' + front.revision + '<br />Gateway: ' + gateway.revision + '</p>');
-               
+               $('#tmpl_about_box').tmpl({
+                       about:about_info,
+                       front_revision:front.revision,
+                       gateway_revision:gateway.revision
+               }).appendTo(front.boxes.about.content);
+
                //$(window).bind("beforeunload", function(){ gateway.quit(); });
                
+               if(touchscreen){
+                       $('#kiwi').addClass('touchscreen');
+
+                       // Single touch scrolling through scrollback for touchscreens
+                       scroll_opts = {};
+                       touch_scroll = new iScroll('windows', scroll_opts);
+               }
+
                front.registerKeys();
                
                
@@ -75,6 +79,8 @@ var front = {
                        }
                        
                        $('#kiwi .connectwindow').slideUp();
+                       $(document).mouseup(function(){ $('#kiwi_msginput').focus(); });
+
                        return false;
                });
 
@@ -147,9 +153,10 @@ var front = {
        
        
        run: function (msg) {
+               console.log("running "+msg);
                if (msg.substring(0, 1) === '/') {
                        var parts = msg.split(' ');
-                       switch (parts[0]) {
+                       switch (parts[0].toLowerCase()) {
                        case '/j':
                        case '/join':
                                front.joinChannel(parts[1]);
@@ -169,6 +176,17 @@ var front = {
                                gateway.connect(parts[1], parts[2], 0);
                                break;
                                
+                       case '/nick':
+                               console.log("/nick");
+                               if (parts[1] === undefined) {
+                                       console.log("calling show nick");
+                                       front.showChangeNick();
+                               } else {
+                                       console.log("sending raw");
+                                       gateway.raw(msg.substring(1));
+                               }
+                               break;
+
                        case '/part':
                                if (typeof parts[1] === "undefined") {
                                        gateway.raw(msg.substring(1) + ' ' + front.cur_channel.name);
@@ -477,25 +495,7 @@ var front = {
                
                
                $('#kiwi .control .msginput .nick').click(function () {
-                       var html = '<div class="newnick box">\
-       Your new nick:<br />\
-       <form class="form_newnick">\
-               <input type="text" class="txtnewnick" /><br />\
-               <button class="butnewnick" type="submit">Change</button> <a class="link cancelnewnick">Cancel</a>\
-       </form>\
-</div>';
-                       $('#kiwi').append(html);
-                       $('#kiwi .form_newnick').submit(function () {
-                               front.run('/NICK ' + $('#kiwi .txtnewnick').val());
-                               $('#kiwi .newnick').remove();
-                               return false;
-                       });
-                       $('#kiwi .cancelnewnick').click(function () {
-                               $('#kiwi .newnick').remove();
-                       });
-                       
-                       $('#kiwi .txtnewnick').focus();
-                       
+                       front.showChangeNick();                 
                });
                
                
@@ -507,23 +507,8 @@ var front = {
                 return;
             }
                        
-                       var html = '<div class="list">\
-               <h2>Kiwi plugins</h2>\
-               <p>\
-                       <select multiple="multiple" id="plugin_list">\
-                       </select>\
-                       <button id="plugins_list_unload">Unload</button>\
-               </p>\
-       </div>\
-       <div class="load">\
-               Plugin file URL:<br />\
-               <form>\
-                       <input type="text" class="txtpluginfile" /><br />\
-                       <button class="butnewnick" type="submit">Load..</button> <a class="link cancelpluginfile">Cancel</a>\
-               </form>\
-       </div>';
                        front.boxes.plugins = new box("plugin_file");
-                       front.boxes.plugins.content.html(html);
+                       $('#tmpl_plugins').tmpl({}).appendTo(front.boxes.plugins.content);
                        front.boxes.plugins.box.css('top', -(front.boxes.plugins.height + 40));
                        
                        // Populate the plugin list..
@@ -597,6 +582,35 @@ var front = {
        },
        
        
+       showChangeNick: function(){
+               $('#kiwi').append($('#tmpl_change_nick').tmpl({}));
+               
+               $('#kiwi .form_newnick').submit(function () {
+                       front.run('/NICK ' + $('#kiwi .txtnewnick').val());
+                       $('#kiwi .newnick').remove();
+                       return false;
+               });
+               
+               $('#kiwi .txtnewnick').keypress(function(ev){
+                       if(!this.first_press) {
+                               this.first_press=true;
+                               return false;
+                       }
+
+                       if(ev.keyCode === 27){  // ESC
+                               $('#kiwi_msginput').focus();
+                               $('#kiwi .newnick').remove();
+                       }
+               });
+               
+               $('#kiwi .cancelnewnick').click(function () {
+                       $('#kiwi .newnick').remove();
+               });
+               
+               $('#kiwi .txtnewnick').focus();
+       },
+
+
        tabviewExists: function (name) {
                return !(front.tabviews[name.toLowerCase()] == undefined);
        },
@@ -647,12 +661,13 @@ var front = {
                $('#kiwi .userbox').remove();
                
                var li = $(item).parent();
-               var html = '<div class="userbox">\
+               /*var html = '<div class="userbox">\
        <input type="hidden" class="userbox_nick" value="' + front.nickStripPrefix($(item).text()) + '" />\
        <a href="#" class="userbox_query">Message</a>\
        <a href="#" class="userbox_whois">Info</a>\
 </div>';
-               li.append(html);
+               li.append(html);*/
+               $('#tmpl_user_box').tmpl({nick: front.nickStripPrefix($(item).text())}).appendTo(li);
                
                $('#kiwi .userbox .userbox_query').click(function (ev) {
                        var nick = $('#kiwi .userbox_nick').val();
index f36703fa69e4a6b32c895215e3bf5bd97620d1d5..9d4d8e92ffe2ca12268d548743fc63b9a4263176 100644 (file)
@@ -1,3 +1,23 @@
+function manageDebug(debug){  
+    if(window.console){  
+        var consoleBackUp = window.console.log;  
+        window.console.log = function(str){  
+            if(debug){  
+                consoleBackUp.call(this,str);  
+            }  
+        }  
+    }else{  
+        var log = window.opera ? window.opera.postError : alert;  
+        window.console = {};  
+        window.console.log = function(str){  
+            if(debug){  
+                log(str);  
+            }  
+        }  
+    }  
+}
+
+
 function randomString(string_length) {
        var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
        var randomstring = '';
@@ -102,4 +122,33 @@ plugins.privmsg = [
                        return text;
                }
        }
-];
\ No newline at end of file
+];
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*
+ * jQuery Templates Plugin 1.0.0pre
+ * http://github.com/jquery/jquery-tmpl
+ * Requires jQuery 1.4.2
+ *
+ * Copyright Software Freedom Conservancy, Inc.
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ */
+(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
\ No newline at end of file