diff --git a/kis-all.js b/kis-all.js index d685380..905d650 100644 --- a/kis-all.js +++ b/kis-all.js @@ -170,372 +170,15 @@ // -------------------------------------------------------------------------- +//Function to maintain module scope (function(){ - + "use strict"; - + //Fix $_ is not defined errors var $_ = $_ || window.$_; - - // Property name for expandos on DOM objects - var kis_expando = "KIS_0_2_0"; - /** - * Ajax - * - * Object for making ajax requests - */ - (function (){ - - var ajax = { - _do: function (url, data, callback, isPost) - { - if (typeof callback === "undefined") - { - callback = function (){}; - } - - var request = (typeof window.XMLHttpRequest !== "undefined") - ? new XMLHttpRequest() - : false; - - var type = (isPost) ? "POST" : "GET"; - - url += (type === "GET") ? "?"+this._serialize(data, true) : ''; - - request.open(type, url); - - request.onreadystatechange = function () - { - if (request.readyState === 4) - { - callback(request.responseText); - } - }; - - if (type === "POST") - { - request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - request.send(this._serialize(data)); - } - else - { - request.send(null); - } - }, - _serialize: function (data, encode) - { - var pairs = []; - - for (var name in data) - { - if (!data.hasOwnProperty(name)) - { - continue; - } - if (typeof data[name] === "function") - { - continue; - } - - var value = data[name].toString(); - - if (encode === true) - { - name = encodeURIComponent(name.replace(" ", "+")); - value = encodeURIComponent(value.replace(" ", "+")); - } - - pairs.push(name + "=" + value); - } - - return pairs.join("&"); - } - }; - - $_.ext('get', function (url, data, callback){ - ajax._do(url, data, callback, false); - }); - - $_.ext('post', function (url, data, callback){ - ajax._do(url, data, callback, true); - }); - }()); - - /** - * Qs - * - * Object for encoding and decoding querystrings and hashbang strings - */ - (function (){ - - $_.hb = (history.pushState) ? false : true; - - var qs = { - parse: function (hb) - { - hb = hb || $_.hb; - - var h, i, hString, pairs, pLen, data, y; - - data = {}; - - if (hb === true) - { - h = location.hash.split('#!/'); - hString = (h.length > 1) ? h[1] : ''; - } - else if (hb === false || hb === undefined) - { - hString = window.location.search.substring(1); - } - else - { - return false; - } - - pairs = hString.split('&'); - - pLen = pairs.length; - - for (i = 0; i < pLen; i++) - { - y = pairs[i].split('='); - - if (y.length < 2) - { - return data; - } - - data[y[0]] = y[1]; - } - - return data; - }, - set: function (key, value, hb) - { - hb = hb || $_.hb; - var pairs = this.parse(hb); - - if (key !== undefined && value !== undefined) - { - pairs[key] = value; - } - - var vars = []; - - for (var x in pairs) - { - if (pairs.hasOwnProperty(x)) - { - vars.push(x + '=' + pairs[x]); - } - } - - var qs = vars.join('&'); - - if (hb === true) - { - qs = '!/' + qs; - location.hash = qs; - } - - return qs; - }, - get: function (key, hb) - { - hb = hb || $_.hb; - var pairs = this.parse(hb); - return (pairs[key]) ? pairs[key] : ''; - } - }; - - $_.ext('qs', qs); - - }()); - - /** - * Store object - * - * Wrapper for localstorage data serialization - */ - (function (){ - var store = { - get: function (key) - { - return JSON.parse(localStorage.getItem(key)); - }, - set: function (key, value) - { - if (typeof value !== "string") - { - value = JSON.stringify(value); - } - localStorage.setItem(key, value); - }, - getAll: function () - { - var i, - len, - data; - len = localStorage.length; - data = {}; - - for (i = 0; i < len; i++) - { - var name = localStorage.key(i); - var value = localStorage.getItem(name); - data[name] = value; - } - - return data; - } - }; - - $_.ext('store', store); - }()); - - /** - * Event object - * - * Event api wrapper - */ - (function (){ - - var attach, remove, add_remove, e; - - // Define the proper attach and remove functions - // based on browser support - if(typeof document.addEventListener !== "undefined") - { - attach = function (sel, event, callback) - { - if (typeof sel.addEventListener !== "undefined") - { - sel.addEventListener(event, callback, false); - } - }; - remove = function (sel, event, callback) - { - if (typeof sel.removeEventListener !== "undefined") - { - sel.removeEventListener(event, callback, false); - } - }; - } - //typeof function doesn't work in IE where attachEvent is available: brute force it - else if(typeof document.attachEvent !== "undefined") - { - attach = function (sel, event, callback) - { - function listener () { - // Internet Explorer fails to correctly set the 'this' object - // for event listeners, so we need to set it ourselves. - callback.apply(arguments); - } - - if (typeof sel.attachEvent !== "undefined") - { - remove(event, callback); // Make sure we don't have duplicate listeners - - sel.attachEvent("on" + event, listener); - // Store our listener so we can remove it later - var expando = sel[kis_expando] = sel[kis_expando] || {}; - expando.listeners = expando.listeners || {}; - expando.listeners[event] = expando.listeners[event] || []; - expando.listeners[event].push({ - callback: callback, - listener: listener - }); - } - else - { - console.log("Failed to attach event:"+event+" on "+sel); - } - }; - remove = function (sel, event, callback) - { - if(typeof sel.detachEvent !== "undefined") - { - var expando = sel[kis_expando]; - if (expando && expando.listeners - && expando.listeners[event]) - { - var listeners = expando.listeners[event]; - var len = listeners.length; - for (var i=0; i 1) ? h[1] : ''; + } + else if (hb === false || hb === undefined) + { + hString = window.location.search.substring(1); + } + else + { + return false; + } + + pairs = hString.split('&'); + + pLen = pairs.length; + + for (i = 0; i < pLen; i++) + { + y = pairs[i].split('='); + + if (y.length < 2) + { + return data; + } + + data[y[0]] = y[1]; + } + + return data; + }, + set: function (key, value, hb) + { + hb = hb || $_.hb; + var pairs = this.parse(hb); + + if (key !== undefined && value !== undefined) + { + pairs[key] = value; + } + + var vars = []; + + for (var x in pairs) + { + if (pairs.hasOwnProperty(x)) + { + vars.push(x + '=' + pairs[x]); + } + } + + var qs = vars.join('&'); + + if (hb === true) + { + qs = '!/' + qs; + location.hash = qs; + } + + return qs; + }, + get: function (key, hb) + { + hb = hb || $_.hb; + var pairs = this.parse(hb); + return (pairs[key]) ? pairs[key] : ''; + } + }; + + $_.ext('qs', qs); + + }()); + + // -------------------------------------------------------------------------- + + /** + * Ajax + * + * Object for making ajax requests + */ + (function (){ + + var ajax = { + _do: function (url, data, callback, isPost) + { + if (typeof callback === "undefined") + { + callback = function (){}; + } + + var request = (typeof window.XMLHttpRequest !== "undefined") + ? new XMLHttpRequest() + : false; + + var type = (isPost) ? "POST" : "GET"; + + url += (type === "GET") ? "?"+this._serialize(data, true) : ''; + + request.open(type, url); + + request.onreadystatechange = function () + { + if (request.readyState === 4) + { + callback(request.responseText); + } + }; + + if (type === "POST") + { + request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + request.send(this._serialize(data)); + } + else + { + request.send(null); + } + }, + _serialize: function (data, encode) + { + var pairs = []; + + for (var name in data) + { + if (!data.hasOwnProperty(name)) + { + continue; + } + if (typeof data[name] === "function") + { + continue; + } + + var value = data[name].toString(); + + if (encode === true) + { + name = encodeURIComponent(name.replace(" ", "+")); + value = encodeURIComponent(value.replace(" ", "+")); + } + + pairs.push(name + "=" + value); + } + + return pairs.join("&"); + } + }; + + $_.ext('get', function (url, data, callback){ + ajax._do(url, data, callback, false); + }); + + $_.ext('post', function (url, data, callback){ + ajax._do(url, data, callback, true); + }); + }()); + + // -------------------------------------------------------------------------- + + /** + * Event object + * + * Event api wrapper + */ + (function (){ + + // Property name for expandos on DOM objects + var kis_expando = "KIS_0_2_0"; + + var attach, remove, add_remove, e; + + // Define the proper attach and remove functions + // based on browser support + if(typeof document.addEventListener !== "undefined") + { + attach = function (sel, event, callback) + { + if (typeof sel.addEventListener !== "undefined") + { + sel.addEventListener(event, callback, false); + } + }; + remove = function (sel, event, callback) + { + if (typeof sel.removeEventListener !== "undefined") + { + sel.removeEventListener(event, callback, false); + } + }; + } + //typeof function doesn't work in IE where attachEvent is available: brute force it + else if(typeof document.attachEvent !== "undefined") + { + attach = function (sel, event, callback) + { + function listener () { + // Internet Explorer fails to correctly set the 'this' object + // for event listeners, so we need to set it ourselves. + callback.apply(arguments); + } + + if (typeof sel.attachEvent !== "undefined") + { + remove(event, callback); // Make sure we don't have duplicate listeners + + sel.attachEvent("on" + event, listener); + // Store our listener so we can remove it later + var expando = sel[kis_expando] = sel[kis_expando] || {}; + expando.listeners = expando.listeners || {}; + expando.listeners[event] = expando.listeners[event] || []; + expando.listeners[event].push({ + callback: callback, + listener: listener + }); + } + else + { + console.log("Failed to attach event:"+event+" on "+sel); + } + }; + remove = function (sel, event, callback) + { + if(typeof sel.detachEvent !== "undefined") + { + var expando = sel[kis_expando]; + if (expando && expando.listeners + && expando.listeners[event]) + { + var listeners = expando.listeners[event]; + var len = listeners.length; + for (var i=0; i