From 5395f4773fdff9fdda99635fd32ae5e3b2f32532 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Tue, 3 Apr 2012 14:47:14 -0400 Subject: [PATCH] Actually minify kis-lite-dom-min.js --- kis-lite-dom-min.js | 1227 +------------------------------------------ 1 file changed, 17 insertions(+), 1210 deletions(-) diff --git a/kis-lite-dom-min.js b/kis-lite-dom-min.js index e19b78b..9bc3552 100755 --- a/kis-lite-dom-min.js +++ b/kis-lite-dom-min.js @@ -1,1210 +1,17 @@ -/** - Kis JS Keep It Simple JS Library - Copyright Timothy J. Warren - License Public Domain - Version 0.6.0 - */ -(function (){ - - "use strict"; - - // Most functions rely on a string selector - // which returns html elements. This requires - // document.querySelectorAll or a custom - // selector engine. I choose to just use the - // browser feature, since it is present in - // IE 8+, and all other major browsers - if (typeof document.querySelector === "undefined") - { - return; - } - - var $_, $, dcopy, sel; - - - /** - * $_ - * - * Constructor function - * - * @constuctor - * @namespace - * @param string selector - * @return object - */ - $_ = function(s) - { - //Have documentElement be default selector, just in case - if(typeof s === "undefined") - { - //Defines a "global" selector for that instance - sel = (typeof $_.el !== "undefined") - ? $_.el - : document.documentElement; - } - else - { - sel = (typeof s !== "object") ? $(s) : s; - } - - // Add the selector to the prototype - $_.prototype.el = sel; - - // Make a copy before adding properties - var self = dcopy($_); - - // Give sel to each extension. - for(var i in self) - { - if(typeof self[i] === "object") - { - self[i].el = sel; - } - } - - self.el = sel; - - return self; - }; - - /** - * Simple DOM selector function - * - * @memberOf $_ - * @param string selector - * @param object context - * @return object - * @type object - */ - $ = function (a, context) - { - var x, c; - - if (typeof a != "string" || typeof a === "undefined"){ return a;} - - //Check for a context of a specific element, otherwise, just run on the document - c = (context != null && context.nodeType === 1) - ? context - : document; - - //Pick the quickest method for each kind of selector - if (a.match(/^#([\w\-]+$)/)) - { - return document.getElementById(a.split('#')[1]); - } - else - { - x = c.querySelectorAll(a); - } - - //Return the single object if applicable - return (x.length === 1) ? x[0] : x; - }; - - /** - * Deep copy/prototypical constructor function - * - * @param object obj - * @private - * @return object - * @type object - */ - dcopy = function(obj) - { - var type, F; - - if(typeof obj === "undefined") - { - return; - } - - if(typeof Object.create !== "undefined") - { - return Object.create(obj); - } - - type = typeof obj; - - if(type !== "object" && type !== "function") - { - return; - } - - /** - * @private - */ - F = function(){}; - - F.prototype = obj; - - return new F(); - - }; - - /** - * Adds the property `obj` to the $_ object, calling it `name` - * - * @param string name - * @param object obj - */ - $_.ext = function(name, obj) - { - obj.el = sel; - $_[name] = obj; - }; - - /** - * Iterates over a $_ object, applying a callback to each item - * - * @name $_.each - * @function - * @param function callback - */ - $_.ext('each', function (callback) - { - if(typeof sel.length !== "undefined" && sel !== window) - { - var len = sel.length; - - if (len === 0) - { - return; - } - - var selx; - for (var x = 0; x < len; x++) - { - selx = (sel.item(x)) ? sel.item(x) : sel[x]; - callback.call(selx, selx); - } - } - else - { - callback.call(sel, sel); - } - }); - - /** - * Retrieves the type of the passed variable - * - * @param mixed obj - * @return string - * @type string - */ - $_.type = function(obj) - { - if((function() {return obj && (obj !== this)}).call(obj)) - { - //fallback on 'typeof' for truthy primitive values - return (typeof obj).toLowerCase(); - } - - //Strip x from [object x] and return - return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase(); - }; - - //Set global variables - $_ = window.$_ = window.$_ || $_; - $_.$ = $; - -}()); - -// -------------------------------------------------------------------------- - -/** - * A module of various browser polyfills - * @file polyfill.js - * @todo create ES5 Foreach polyfill - */ -(function(){ - - "use strict"; - - // Console.log polyfill for IE 8 stupidity - if(typeof window.console === "undefined") - { - window.console = { - log:function(){} - }; - } - - // -------------------------------------------------------------------------- - - /** - * String trim function polyfill - */ - if(typeof String.prototype.trim === "undefined") - { - /** - * @private - */ - String.prototype.trim = function() - { - return this.replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ""); - }; - } - - // -------------------------------------------------------------------------- - - /** - * event.preventDefault/e.stopPropagation polyfill - * @private - */ - if(typeof Event.preventDefault === "undefined" && typeof window.event !== "undefined") - { - Event.prototype.preventDefault = function() - { - window.event.returnValue = false; - }, - Event.prototype.stopPropagation = function() - { - window.event.cancelBubble = true; - } - } - -}()); - -// -------------------------------------------------------------------------- - -/** - * Ajax - * - * Module for making ajax requests - */ -(function (){ - - "use strict"; - - // Don't bother even defining the object if the XMLHttpRequest isn't available - if(typeof window.XMLHttpRequest === "undefined") - { - return; - } - - var ajax = { - _do: function (url, data, callback, isPost) - { - var type, - request = new XMLHttpRequest(); - - if (typeof callback === "undefined") - { - /** - * @private - */ - callback = function (){}; - } - - type = (isPost) ? "POST" : "GET"; - - url += (type === "GET") ? "?"+this._serialize(data) : ''; - - 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) - { - var name, - value, - pairs = []; - - for (name in data) - { - if (!data.hasOwnProperty(name)) - { - continue; - } - if (typeof data[name] === "function") - { - continue; - } - - value = data[name].toString(); - - name = encodeURIComponent(name); - value = encodeURIComponent(value); - - pairs.push(name + "=" + value); - } - - return pairs.join("&"); - } - }; - - /** - * Sends a GET type ajax request - * - * @name get - * @function - * @memberOf $_ - * @param string url - * @param object data - * @param function callback - */ - $_.ext('get', function (url, data, callback){ - ajax._do(url, data, callback, false); - }); - - /** - * Sends a POST type ajax request - * - * @name post - * @function - * @memberOf $_ - * @param string url - * @param object data - * @param function callback - */ - $_.ext('post', function (url, data, callback){ - ajax._do(url, data, callback, true); - }); - - /** - * Watches for server-sent events, or falls back to ajax polling - * - defaults to 30 second intervals - * - * @name sse - * @function - * @memberOf $_ - * @param string url - * @param function callback - * @param [int] 30000 - */ - $_.ext('sse', function(url, callback, poll_rate){ - - var source; - - //Check for server-sent event support - if (typeof EventSource !== 'undefined') - { - source = new EventSource(url); - - // Apply the callback - source.onmessage = callback; - } - else // Ajax polling fallback - { - poll_rate = poll_rate || 30000; - setInterval($_.get, poll_rate, url, {}, callback); - } - }); - -}()); - -// -------------------------------------------------------------------------- - -/** - * Event - * - * Event api wrapper - * @todo Add method for triggering events - */ -(function (){ - - "use strict"; - - // Property name for expandos on DOM objects - var kis_expando = "KIS_0_6_0"; - - var _attach, _remove, _add_remove, e, _attach_delegate; - - // Define the proper _attach and _remove functions - // based on browser support - if(typeof document.addEventListener !== "undefined") - { - /** - * @private - */ - _attach = function (sel, event, callback) - { - if(typeof sel.addEventListener !== "undefined") - { - // Duplicated events are dropped, per the specification - sel.addEventListener(event, callback, false); - } - }; - /** - * @private - */ - _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") - { - /** - * @private - */ - _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[0]); - } - - 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); - } - }; - /** - * @private - */ - _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 && typeof value === "undefined") - { - console.log(sel); - console.log("Must be a singular element"); - return; - } - else if (sel.length > 1 && typeof value !== "undefined") //You can set a bunch, though - { - $_.each(function (e){ - return _attr(e, name, value); - }); - } - else //Normal behavior - { - return _attr(sel, name, value); - } - }, - /** - * Sets or retrieves the text content of the element - * specified by the current selector. If a value is - * passed, it will set that value on the current element, - * otherwise it will return the value of the current element - * - * @name text - * @memberOf $_.dom - * @function - * @param [string] value - * @return string - * @type string - */ - text: function (value) - { - var oldValue, set, type, sel; - - sel = this.el; - - set = (typeof value !== "undefined") ? true : false; - - type = (typeof sel.textContent !== "undefined") - ? "textContent" - : (typeof sel.innerText !== "undefined") - ? "innerText" - : "innerHTML"; - - oldValue = sel[type]; - - if(set) - { - sel[type] = value; - return value; - } - else - { - return oldValue; - } - }, - /** - * Sets or retrieves a css property of the element - * specified by the current selector. If a value is - * passed, it will set that value on the current element, - * otherwise it will return the value of the css property - * on the current element - * - * @name css - * @memberOf $_.dom - * @function - * @param string property - * @param [string] value - * @return string - * @type string - */ - css: function (prop, val) - { - //Return the current value if a value is not set - if(typeof val === "undefined") - { - return _css(this.el, prop); - } - - $_.each(function (e){ - _css(e, prop, val); - }); - }, - /** - * Adds to the innerHTML of the current element, after the last child. - * - * @example $_("ul").dom.append("<li></li>") adds an li element to the end of the selected ul element - * @name append - * @memberOf $_.dom - * @function - * @param string htm - */ - append: function(htm) - { - if(typeof document.insertAdjacentHTML !== "undefined") - { - this.el.insertAdjacentHTML('beforeend', htm); - } - else - { - this.el.innerHTML += htm; - } - }, - /** - * Adds to the innerHTML of the selected element, before the current children - * - * @name prepend - * @memberOf $_.dom - * @function - * @param string htm - */ - prepend: function(htm) - { - if(typeof document.insertAdjacentHTML !== "undefined") - { - this.el.insertAdjacentHTML('afterbegin', htm); - } - else - { - this.el.innerHTML = htm + this.el.innerHTML; - } - }, - /** - * Sets or gets the innerHTML propery of the element(s) passed - * - * @name html - * @memberOf $_.dom - * @function - * @param [string] htm - * @return string - * @type string - */ - html: function(htm) - { - - if(typeof htm !== "undefined") - { - this.el.innerHTML = htm; - } - - //If the parameter is undefined, just return the current value - return this.el.innerHTML; - } - }; - - $_.ext('dom', d); - -}()); +(function(){if("undefined"!==typeof document.querySelector){var g,e,f,b;g=function(a){b="undefined"===typeof a?"undefined"!==typeof g.el?g.el:document.documentElement:"object"!==typeof a?e(a):a;g.prototype.el=b;var a=f(g),c;for(c in a)"object"===typeof a[c]&&(a[c].el=b);a.el=b;return a};e=function(a,c){var b;if("string"!=typeof a||"undefined"===typeof a)return a;b=null!=c&&1===c.nodeType?c:document;if(a.match(/^#([\w\-]+$)/))return document.getElementById(a.split("#")[1]);b=b.querySelectorAll(a); +return 1===b.length?b[0]:b};f=function(a){var c;if("undefined"!==typeof a){if("undefined"!==typeof Object.create)return Object.create(a);c=typeof a;if(!("object"!==c&&"function"!==c))return c=function(){},c.prototype=a,new c}};g.ext=function(a,c){c.el=b;g[a]=c};g.ext("each",function(a){if("undefined"!==typeof b.length&&b!==window){var c=b.length;if(0!==c)for(var d,h=0;h