Fixed formatting issues, removed redundant internal function

This commit is contained in:
Timothy Warren 2011-06-29 11:34:05 -04:00
parent b88da57421
commit d43964583a
1 changed files with 384 additions and 385 deletions

769
kis.js
View File

@ -1,83 +1,73 @@
/** /**
Kis JS Keep It Simple JS Library Kis JS Keep It Simple JS Library
Copyright Timothy J. Warren Copyright Timothy J. Warren
License Public Domain License Public Domain
Version 0.1.0 Version 0.1.0
*/ */
(function(){ (function ()
{
"use strict"; "use strict";
//Browser requirements check //Browser requirements check
if(typeof document.querySelectorAll !== "function" || typeof window.addEventListener !== "function") if (typeof document.querySelectorAll !== "function" || typeof window.addEventListener !== "function")
{ {
return; return;
} }
var $_, $, _sel; var $_, $;
$_ = {}; $_ = {};
window.$_ = window.$_ || $_; window.$_ = window.$_ || $_;
/** /**
* $ * $
* *
* Simple DOM selector function * Simple DOM selector function
*/ */
$ = function(a) $ = function (a)
{ {
if (typeof a !== "string"){ return a;}
var x = document.querySelectorAll(a); var x = document.querySelectorAll(a);
return (x.length === 1) ? x[0] : x; return (x.length === 1) ? x[0] : x;
}; };
/**
* _sel
*
* Return the selector for the string
*/
_sel = function(s)
{
return (typeof s === "string") ? $(s) : s;
};
window.$ = $; window.$ = $;
/** /**
* Ajax * Ajax
* *
* Object for making ajax requests * Object for making ajax requests
*/ */
(function() { (function (){
var ajax = { var ajax = {
_do: function(url, data, callback, isPost) _do: function (url, data, callback, isPost)
{ {
if(typeof callback === "undefined") if (typeof callback === "undefined")
{ {
callback = function(){}; callback = function (){};
} }
var request = (typeof window.XMLHttpRequest === "function") var request = (typeof window.XMLHttpRequest === "function") ? new XMLHttpRequest() : false;
? new XMLHttpRequest()
: false;
var type = (isPost) ? "POST" : "GET"; var type = (isPost) ? "POST" : "GET";
url += (type === "GET") url += (type === "GET") ? "?" + this._serialize(data, true) : '';
? "?" + this._serialize(data, true)
: '';
request.open(type, url); request.open(type, url);
request.onreadystatechange = function(){ request.onreadystatechange = function ()
if(request.readyState === 4) {
if (request.readyState === 4)
{ {
callback(request.responseText); callback(request.responseText);
} }
}; };
if(type === "POST") if (type === "POST")
{ {
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
request.send(this._serialize(data)); request.send(this._serialize(data));
@ -87,64 +77,71 @@
request.send(null); request.send(null);
} }
}, },
_serialize: function(data, encode) _serialize: function (data, encode)
{ {
var pairs = []; var pairs = [];
for (var name in data) for (var name in data)
{ {
if(!data.hasOwnProperty(name)){ continue; }; if (!data.hasOwnProperty(name))
if(typeof data[name] === "function"){ continue; }; {
continue;
}
if (typeof data[name] === "function")
{
continue;
}
var value = data[name].toString(); var value = data[name].toString();
if(encode === true) if (encode === true)
{ {
name = encodeURIComponent(name.replace(" ", "+")); name = encodeURIComponent(name.replace(" ", "+"));
value = encodeURIComponent(value.replace(" ","+")); value = encodeURIComponent(value.replace(" ", "+"));
} }
pairs.push(name + "=" + value); pairs.push(name + "=" + value);
} }
return pairs.join("&"); return pairs.join("&");
} }
}; };
window.$_.get = function(url, data, callback) window.$_.get = function (url, data, callback)
{ {
ajax._do(url, data, callback, false); ajax._do(url, data, callback, false);
}; };
window.$_.post = function(url, data, callback) window.$_.post = function (url, data, callback)
{ {
ajax._do(url, data, callback, true); ajax._do(url, data, callback, true);
}; };
}()); }());
/** /**
* Qs * Qs
* *
* Object for encoding and decoding querystrings and hashbang strings * Object for encoding and decoding querystrings and hashbang strings
*/ */
(function(){ (function (){
window.$_.hb = (history.pushState) ? false : true; window.$_.hb = (history.pushState) ? false : true;
var qs = { var qs = {
parse: function(hb) parse: function (hb)
{ {
hb = hb || $_.hb; hb = hb || $_.hb;
var h, i, hString, pairs, pLen, data, y;
var h, i, hString, pairs, pLen, data, y;
data = {}; data = {};
if(hb === true) if (hb === true)
{ {
h = location.hash.split('#!/'); h = location.hash.split('#!/');
hString = (h.length > 1) ? h[1] : ''; hString = (h.length > 1) ? h[1] : '';
} }
else if(hb === false || hb === undefined) else if (hb === false || hb === undefined)
{ {
hString = window.location.search.substring(1); hString = window.location.search.substring(1);
} }
@ -152,442 +149,444 @@
{ {
return false; return false;
} }
pairs = hString.split('&'); pairs = hString.split('&');
pLen = pairs.length; pLen = pairs.length;
for(i=0;i<pLen;i++) for (i = 0; i < pLen; i++)
{ {
y = pairs[i].split('='); y = pairs[i].split('=');
if(y.length < 2) if (y.length < 2)
{ {
return data; return data;
} }
data[y[0]] = y[1]; data[y[0]] = y[1];
} }
return data; return data;
}, },
set: function(key, value, hb) set: function (key, value, hb)
{ {
hb = hb || $_.hb; hb = hb || $_.hb;
var pairs = this.parse(hb); var pairs = this.parse(hb);
if(key !== undefined && value !== undefined) if (key !== undefined && value !== undefined)
{ {
pairs[key] = value; pairs[key] = value;
} }
var vars = []; var vars = [];
for (var x in pairs) for (var x in pairs)
{ {
if(pairs.hasOwnProperty(x)) if (pairs.hasOwnProperty(x))
{ {
vars.push(x+'='+pairs[x]); vars.push(x + '=' + pairs[x]);
} }
} }
var qs = vars.join('&'); var qs = vars.join('&');
if(hb === true) if (hb === true)
{ {
qs = '!/'+ qs; qs = '!/' + qs;
location.hash = qs; location.hash = qs;
} }
return qs; return qs;
}, },
get: function(key, hb) get: function (key, hb)
{ {
hb = hb || $_.hb; hb = hb || $_.hb;
var pairs = this.parse(hb); var pairs = this.parse(hb);
return (pairs[key]) ? pairs[key] : ''; return (pairs[key]) ? pairs[key] : '';
} }
}; };
window.$_.qs = qs; window.$_.qs = qs;
}()); }());
/** /**
* Store object * Store object
* *
* Wrapper for localstorage data serialization * Wrapper for localstorage data serialization
*/ */
(function(){ (function (){
var store = { var store = {
get: function(key) get: function (key)
{ {
return JSON.parse(localStorage.getItem(key)); return JSON.parse(localStorage.getItem(key));
}, },
set: function(key, value) set: function (key, value)
{ {
if(typeof value !== "string") if (typeof value !== "string")
{ {
value = JSON.stringify(value); value = JSON.stringify(value);
} }
localStorage.setItem(key, value); localStorage.setItem(key, value);
}, },
getAll: function() getAll: function ()
{ {
var i, len, data; var i,
len,
data;
len = localStorage.length; len = localStorage.length;
data = {}; data = {};
for(i=0;i<len;i++) for (i = 0; i < len; i++)
{ {
var name = localStorage.key(i); var name = localStorage.key(i);
var value = localStorage.getItem(name); var value = localStorage.getItem(name);
data[name] = value; data[name] = value;
} }
return data; return data;
} }
}; };
window.$_.store = store; window.$_.store = store;
}()); }());
/** /**
* Event object * Event object
* *
* Event api wrapper * Event api wrapper
*/ */
(function(){ (function (){
var attach, remove, add_remove, e;
var attach, remove, add_remove, e;
attach = function(sel, event, callback) attach = function (sel, event, callback)
{ {
if(typeof sel.addEventListener === "function") if (typeof sel.addEventListener === "function")
{ {
sel.addEventListener(event, callback, false); sel.addEventListener(event, callback, false);
} }
}; };
remove = function(sel, event, callback) remove = function (sel, event, callback)
{ {
if(typeof sel.removeEventListener === "function") if (typeof sel.removeEventListener === "function")
{ {
sel.removeEventListener(event, callback, false); sel.removeEventListener(event, callback, false);
} }
}; };
add_remove = function (sel, event, callback, add) add_remove = function (sel, event, callback, add)
{ {
var i,len; var i, len;
if(!sel) if (!sel)
{ {
return false; return false;
} }
//Get the DOM object if you give me a selector string //Get the DOM object if you give me a selector string
sel = _sel(sel); sel = $(sel);
//Multiple events? Run recursively! //Multiple events? Run recursively!
event = event.split(" "); event = event.split(" ");
if(event.length > 1) if (event.length > 1)
{ {
len = event.length; len = event.length;
for(i=0;i<len;i++) for (i = 0; i < len; i++)
{ {
add_remove(sel, event[i], callback, add); add_remove(sel, event[i], callback, add);
} }
return; return;
} }
//Check for multiple DOM objects //Check for multiple DOM objects
if(sel.length > 1) if (sel.length > 1)
{ {
len = sel.length; len = sel.length;
for(i=0;i<len;i++) for (i = 0; i < len; i++)
{ {
(add === true) (add === true) ? attach(sel[i], event, callback) : remove(sel[i], event, callback);
? attach(sel[i], event, callback) }
: remove(sel[i], event, callback); }
} else
} {
else (add === true) ? attach(sel, event, callback) : remove(sel, event, callback);
{ }
(add === true) };
? attach(sel, event, callback)
: remove(sel, event, callback); e = {
} add: function (sel, event, callback)
}; {
add_remove(sel, event, callback, true);
e = { },
add: function(sel, event, callback) remove: function (sel, event, callback)
{ {
add_remove(sel, event, callback, true); add_remove(sel, event, callback, false);
}, }
remove: function(sel, event, callback) };
{
add_remove(sel, event, callback, false); window.$_.event = e;
}
}; }());
window.$_.event = e;
}());
/** /**
* Dom manipulation object * Dom manipulation object
* *
*/ */
(function(){ (function (){
var d, len; var d;
//Private function for getting/setting attributes //Private function for getting/setting attributes
function _attr(sel, name, value) function _attr(sel, name, value)
{ {
var oldVal, doAttr; var oldVal, doAttr;
//Get the value of the attribute, if it exists //Get the value of the attribute, if it exists
if(typeof sel.hasAttribute !== "undefined") if (typeof sel.hasAttribute !== "undefined")
{ {
if(sel.hasAttribute(name)) if (sel.hasAttribute(name))
{ {
oldVal = sel.getAttribute(name); oldVal = sel.getAttribute(name);
} }
doAttr = true; doAttr = true;
} }
else if(typeof sel[name] !== "undefined") else if (typeof sel[name] !== "undefined")
{ {
oldVal = sel[name]; oldVal = sel[name];
doAttr = false; doAttr = false;
} }
else if(name === "class" && typeof sel.className !== "undefined") //className attribute else if (name === "class" && typeof sel.className !== "undefined") //className attribute
{ {
name = "className"; name = "className";
oldVal = sel.className; oldVal = sel.className;
doAttr = false; doAttr = false;
} }
//Well, I guess that attribute doesn't exist //Well, I guess that attribute doesn't exist
if(typeof oldVal === "undefined" && (typeof value === "undefined" || value === null)) if (typeof oldVal === "undefined" && (typeof value === "undefined" || value === null))
{ {
console.log(sel); console.log(sel);
console.log("Element does not have the selected attribute"); console.log("Element does not have the selected attribute");
return; return;
} }
//No value to set? Return the current value //No value to set? Return the current value
if(typeof value === "undefined") if (typeof value === "undefined")
{ {
return oldVal; return oldVal;
} }
//Determine what to do with the attribute //Determine what to do with the attribute
if(typeof value !== "undefined" && value !== null) if (typeof value !== "undefined" && value !== null)
{ {
(doAttr === true) (doAttr === true) ? sel.setAttribute(name, value) : sel[name] = value;
? sel.setAttribute(name, value) }
: sel[name] = value; else if (value === null)
} {
else if(value === null) (doAttr === true) ? sel.removeAttribute(name) : sel[name] = null;
{ }
(doAttr === true)
? sel.removeAttribute(name) return (typeof value !== "undefined") ? value : oldValue;
: sel[name] = null; }
}
// Private function for class manipulation
return (typeof value !== "undefined") ? value : oldValue; function _class(sel, c, add)
} {
var ec, cs, len, i, classInd;
// Private function for class manipulation
function _class(sel, c, add) //We can do this the easy way
{ if (sel.classList)
var ec, cs, len, i, classInd; {
if (add === true)
//We can do this the easy way {
if(sel.classList) sel.classList.add(c);
{ return;
if(add === true) }
{ else if (add === false)
sel.classList.add(c); {
return; sel.classList.remove(c);
} return;
else if(add === false) }
{ }
sel.classList.remove(c); else //Or the hard way
return; {
} //No class attribute? Set an empty string
} ec = _attr(sel, "class");
else //Or the hard way ec = (typeof ec === "string") ? ec : '';
{
//No class attribute? Set an empty string //Convert class attribute string into array
ec = _attr(sel, "class"); if (typeof ec === "string")
ec = (typeof ec === "string") ? ec : ''; {
cs = (ec !== '') ? ec.split(" ") : [];
//Convert class attribute string into array len = cs.length;
if(typeof ec === "string") classInd = false;
{
cs = (ec !== '') ? ec.split(" ") : []; //Check for the class in the array
for (i = 0; i < len; i++)
len = cs.length; {
classInd = false; if (cs[i] === c)
{
//Check for the class in the array classInd = i;
for(var i=0;i<len;i++) break;
{ }
if(cs[i] === c) }
{ }
classInd = i;
break; //Add or remove from class array
} if (add === true)
} {
}
//Add or remove from class array
if(add === true)
{
//Only add the class if isn't already there //Only add the class if isn't already there
if(classInd === false) if (classInd === false)
{ {
cs.push(c); cs.push(c);
} }
} }
else if(add === false) else if (add === false)
{ {
//Make sure the class you want to remove exists //Make sure the class you want to remove exists
if(classInd !== false) if (classInd !== false)
{ {
cs.splice(classInd, 1); cs.splice(classInd, 1);
} }
} }
var cName = (cs.length > 1) ? cs.join(" ") : cs[0]; var cName = (cs.length > 1) ? cs.join(" ") : cs[0];
if(typeof sel.className !== "undefined") if (typeof sel.className !== "undefined")
{ {
sel.className = cName; sel.className = cName;
} }
else if(typeof sel.setAttribute !== "undefined") else if (typeof sel.setAttribute !== "undefined")
{ {
sel.setAttribute('class', cName) sel.setAttribute('class', cName);
} }
else else
{ {
console.log(sel); console.log(sel);
} }
return cName;
}
}
d = {
each: function(sel, callback)
{
if(typeof sel === "string")
{
sel = $(sel);
}
var len = sel.length;
if(len === 0){ return }
if(len === 1){ return callback(sel); }
for(var x=0;x<sel.length;x++)
{
callback(sel[x]);
}
},
addClass: function(sel, c)
{
sel = _sel(sel);
this.each(sel, function(e){ return cName;
_class(e, c, true); }
});
}, }
removeClass: function(sel, c)
{ d = {
sel = _sel(sel); each: function (sel, callback)
{
this.each(sel, function(e){ if (typeof sel === "string")
_class(e, c, false); {
}); sel = $(sel);
}, }
hide: function(sel)
{ var len = sel.length;
sel = _sel(sel);
if (len === 0)
if(sel.length > 1) {
{ return;
this.each(sel, function(e){ }
e.style.display = "none";
}); if (len === 1)
} {
else return callback(sel);
{ }
if(sel.style)
{ for (var x = 0; x < sel.length; x++)
sel.style.display = "none"; {
} callback(sel[x]);
} }
},
}, addClass: function (sel, c)
show: function(sel, type) {
{ sel = $(sel);
sel = _sel(sel);
this.each(sel, function (e)
if(typeof type === "undefined") {
{ _class(e, c, true);
type="block"; });
} },
removeClass: function (sel, c)
if(sel.length > 1) {
{ sel = $(sel);
this.each(sel, function(e){
e.style.display = type; this.each(sel, function (e)
}); {
} _class(e, c, false);
else });
{ },
sel.style.display = type; hide: function (sel)
} {
}, sel = $(sel);
attr: function(sel, name, value)
{ if (sel.length > 1)
var oldVal; {
this.each(sel, function (e)
sel = _sel(sel); {
e.style.display = "none";
//Make sure you don't try to get a bunch of elements });
if(sel.length > 1 && typeof value === "undefined") }
{ else
console.log(sel); {
console.log("Must be a singular element"); if (sel.style)
return; {
} sel.style.display = "none";
else if(sel.length > 1 && typeof value !== "undefined") //You can set a bunch, though }
{ }
this.each(sel, function(e){
_attr(e, name, value); },
}); show: function (sel, type)
} {
else //Normal behavior sel = $(sel);
{
return _attr(sel, name, value); if (typeof type === "undefined")
} {
} type = "block";
}; }
window.$_.dom= d; if (sel.length > 1)
}()); {
this.each(sel, function (e)
})(); {
e.style.display = type;
});
}
else
{
sel.style.display = type;
}
},
attr: function (sel, name, value)
{
sel = $(sel);
//Make sure you don't try to get a bunch of elements
if (sel.length > 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
{
this.each(sel, function (e)
{
_attr(e, name, value);
});
}
else //Normal behavior
{
return _attr(sel, name, value);
}
}
};
window.$_.dom = d;
}());
}());