diff --git a/.gitmodules b/.gitmodules index c40ff071..47824dd9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,12 @@ [submodule "node_modules/slate-irc"] path = node_modules/slate-irc url = http://github.com/erming/slate-irc +[submodule "client/js/lib/jquery-scroll-glue"] + path = client/js/lib/jquery-scroll-glue + url = http://github.com/erming/jquery-scroll-glue +[submodule "client/js/lib/jquery-input-history"] + path = client/js/lib/jquery-input-history + url = http://github.com/erming/jquery-input-history +[submodule "client/js/lib/jquery-tab-complete"] + path = client/js/lib/jquery-tab-complete + url = http://github.com/erming/jquery-tab-complete diff --git a/client/index.html b/client/index.html index 6fc55e80..bc7ae387 100644 --- a/client/index.html +++ b/client/index.html @@ -121,8 +121,9 @@ - - + + + diff --git a/client/js/chat.js b/client/js/chat.js index 55f7e393..f09542a2 100644 --- a/client/js/chat.js +++ b/client/js/chat.js @@ -72,7 +72,7 @@ $(function() { .end(); chat.find(".window") .find("input") - .tabComplete(commands, {appendSpace: true}) + .tabComplete({after: " ", list: commands}) .end() .first() .bringToTop() @@ -99,7 +99,7 @@ $(function() { ).find(".window") .last() .find("input") - .tabComplete(commands, {appendSpace: true}) + .tabComplete({after: " ", list: commands}) .end() .bringToTop() .find(".messages") diff --git a/client/js/lib/jquery-input-history b/client/js/lib/jquery-input-history new file mode 160000 index 00000000..574732d8 --- /dev/null +++ b/client/js/lib/jquery-input-history @@ -0,0 +1 @@ +Subproject commit 574732d84a70abce4dc6e93a88cbe167129fb84f diff --git a/client/js/lib/jquery-scroll-glue b/client/js/lib/jquery-scroll-glue new file mode 160000 index 00000000..e5178ce2 --- /dev/null +++ b/client/js/lib/jquery-scroll-glue @@ -0,0 +1 @@ +Subproject commit e5178ce29594a11c3fdb453de35a167f0a49619b diff --git a/client/js/lib/jquery-tab-complete b/client/js/lib/jquery-tab-complete new file mode 160000 index 00000000..461258f8 --- /dev/null +++ b/client/js/lib/jquery-tab-complete @@ -0,0 +1 @@ +Subproject commit 461258f880c0cd1dd3d8dbb7924a6d5044bae664 diff --git a/client/js/lib/jquery.scrollGlue.js b/client/js/lib/jquery.scrollGlue.js deleted file mode 100644 index d868284d..00000000 --- a/client/js/lib/jquery.scrollGlue.js +++ /dev/null @@ -1,90 +0,0 @@ -/*! - * jquery-scroll-glue - * https://github.com/erming/jquery-scroll-glue - * - * Copyright (c) 2014 Mattias Erming - * Licensed under the MIT License. - * - * Version 0.1.1 - */ - -(function($) { - var append = $.fn.append; - $.fn.append = function() { - return append.apply(this, arguments).trigger("append"); - }; - - var html = $.fn.html; - $.fn.html = function() { - var result = html.apply(this, arguments); - if (arguments.length) { - // Only trigger this event when something - // has been inserted. - this.trigger("html"); - } - return result; - }; - - $.fn.scrollGlue = function(options) { - var settings = $.extend({ - animate: 0 - }, options); - - var self = this; - if (self.size() > 1) { - return self.each(function() { - $(this).scrollGlue(options); - }); - } - - var timer; - var resizing = false; - $(window).on("resize", function() { - // This will prevent the scroll event from triggering - // while resizing the window. - resizing = true; - - clearTimeout(timer); - timer = setTimeout(function() { - resizing = false; - }, 100); - - if (sticky) { - self.scrollToBottom(); - } - }); - - var sticky = false; - self.on("scroll", function() { - if (!resizing) { - sticky = self.isScrollAtBottom(); - } - }); - self.trigger("scroll"); - self.on("append html", function() { - if (sticky) { - self.scrollToBottom(settings.animate); - } - }); - - return this; - }; - - $.fn.scrollToBottom = function(animate) { - return this.each(function() { - $(this).finish().animate({scrollTop: this.scrollHeight}, animate || 0); - }); - }; - - $.fn.isScrollAtBottom = function() { - if ((this.scrollTop() + this.outerHeight() + 1) >= this.prop("scrollHeight")) { - return true; - } - }; - - $(function() { - // Find elements with the 'scroll-glue' attribute and - // activate the plugin. - $("[scroll-glue]").scrollGlue(); - }); -})(jQuery); \ No newline at end of file diff --git a/client/js/lib/jquery.tabComplete.js b/client/js/lib/jquery.tabComplete.js deleted file mode 100644 index 966b98ca..00000000 --- a/client/js/lib/jquery.tabComplete.js +++ /dev/null @@ -1,66 +0,0 @@ -/*! - * jquery-tab-complete - * https://github.com/erming/jquery-tab-complete - * - * Copyright (c) 2014 Mattias Erming - * Licensed under the MIT License. - * - * Version 0.2.0 - */ - -(function($) { - $.fn.tabComplete = function(list, options) { - var settings = $.extend({ - after: '', - caseSensitive: false, - }, options); - - var self = this; - if (self.size() > 1) { - return self.each(function() { - $(this).tabComplete(list, options); - }); - } - - // Keep the list stored in the DOM via jQuery.data() variable. - self.data('list', list); - - var match = []; - self.on('keydown', function(e) { - var key = e.which; - if (key != 9) { - match = []; - return; - } - - var text = self.val().trim().split(' '); - var last = text.splice(-1)[0]; - - if (!match.length) { - match = $.grep(self.data('list'), function(w) { - var l = last; - if (l == '') { - return; - } - if (!settings.caseSensitive) { - l = l.toLowerCase(); - w = w.toLowerCase(); - } - return w.indexOf(l) !== -1; - }); - } - - var i = match.indexOf(last) + 1; - if (i == match.length) { - i = 0; - } - - if (match.length) { - text.push(match[i]); - self.val(text.join(' ') + settings.after); - } - - return false; - }); - }; -})(jQuery);