diff --git a/.gitignore b/.gitignore
index af79749..bc88642 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,4 @@ kis-custom.js
kis-custom-min.js
combine-build.php
test.html
-index.php
.*
\ No newline at end of file
diff --git a/docs/symbols/src/kis-js_src_modules_DOM.js.html b/docs/symbols/src/kis-js_src_modules_DOM.js.html
index 6c5d06f..b8c3b2b 100755
--- a/docs/symbols/src/kis-js_src_modules_DOM.js.html
+++ b/docs/symbols/src/kis-js_src_modules_DOM.js.html
@@ -14,529 +14,528 @@
7 * Public Domain.
8 * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
9 */
- 10
- 11 if (typeof document !== "undefined" && !("classList" in document.createElement("a")))
- 12 {
- 13 (function (view){
- 14
- 15 var classListProp = "classList",
- 16 protoProp = "prototype",
- 17 elemCtrProto = (view.HTMLElement || view.Element)[protoProp],
- 18 objCtr = Object,
- 19 strTrim = String[protoProp].trim ||
- 20 function ()
- 21 {
- 22 return this.replace(/^\s+|\s+$/g, "");
- 23 },
- 24 arrIndexOf = Array[protoProp].indexOf ||
- 25 function (item)
- 26 {
- 27 var
- 28 i = 0,
- 29 len = this.length;
- 30 for (; i < len; i++)
- 31 {
- 32 if (i in this && this[i] === item)
- 33 {
- 34 return i;
- 35 }
- 36 }
- 37 return -1;
- 38 }
- 39 // Vendors: please allow content code to instantiate DOMExceptions
- 40 ,
- 41 /**
- 42 * @private
- 43 */
- 44 DOMEx = function (type, message)
- 45 {
- 46 this.name = type;
- 47 this.code = DOMException[type];
- 48 this.message = message;
- 49 },
- 50 /**
- 51 * @private
- 52 */
- 53 checkTokenAndGetIndex = function (classList, token)
- 54 {
- 55 if (token === "")
- 56 {
- 57 throw new DOMEx("SYNTAX_ERR", "An invalid or illegal string was specified");
- 58 }
- 59 if (/\s/.test(token))
- 60 {
- 61 throw new DOMEx("INVALID_CHARACTER_ERR", "String contains an invalid character");
- 62 }
- 63 return arrIndexOf.call(classList, token);
- 64 },
- 65 /**
- 66 * @private
- 67 */
- 68 ClassList = function (elem)
- 69 {
- 70 var
- 71 trimmedClasses = strTrim.call(elem.className),
- 72 classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [],
- 73 i = 0,
- 74 len = classes.length;
- 75 for (; i < len; i++)
- 76 {
- 77 this.push(classes[i]);
- 78 }
- 79 this._updateClassName = function ()
- 80 {
- 81 elem.className = this.toString();
- 82 };
- 83 },
- 84 classListProto = ClassList[protoProp] = [],
- 85 /**
- 86 * @private
- 87 */
- 88 classListGetter = function ()
- 89 {
- 90 return new ClassList(this);
- 91 };
- 92 // Most DOMException implementations don't allow calling DOMException's toString()
- 93 // on non-DOMExceptions. Error's toString() is sufficient here.
- 94 DOMEx[protoProp] = Error[protoProp];
- 95 classListProto.item = function (i)
- 96 {
- 97 return this[i] || null;
- 98 };
- 99 classListProto.contains = function (token)
-100 {
-101 token += "";
-102 return checkTokenAndGetIndex(this, token) !== -1;
-103 };
-104 classListProto.add = function (token)
-105 {
-106 token += "";
-107 if (checkTokenAndGetIndex(this, token) === -1)
-108 {
-109 this.push(token);
-110 this._updateClassName();
-111 }
-112 };
-113 classListProto.remove = function (token)
-114 {
-115 token += "";
-116 var index = checkTokenAndGetIndex(this, token);
-117 if (index !== -1)
-118 {
-119 this.splice(index, 1);
-120 this._updateClassName();
-121 }
-122 };
-123 classListProto.toggle = function (token)
-124 {
-125 token += "";
-126 if (checkTokenAndGetIndex(this, token) === -1)
-127 {
-128 this.add(token);
-129 }
-130 else
-131 {
-132 this.remove(token);
-133 }
-134 };
-135 classListProto.toString = function ()
-136 {
-137 return this.join(" ");
-138 };
-139
-140 if (objCtr.defineProperty)
-141 {
-142 var classListPropDesc = {
-143 get: classListGetter,
-144 enumerable: true,
-145 configurable: true
-146 };
-147 try
-148 {
-149 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
-150 }
-151 catch (ex)
-152 { // IE 8 doesn't support enumerable:true
-153 if (ex.number === -0x7FF5EC54)
-154 {
-155 classListPropDesc.enumerable = false;
-156 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
-157 }
-158 }
-159 }
-160 else if (objCtr[protoProp].__defineGetter__)
-161 {
-162 elemCtrProto.__defineGetter__(classListProp, classListGetter);
-163 }
-164
-165 }(self));
-166 }
-167
-168 /**
-169 * DOM
-170 *
-171 * Dom manipulation module
-172 */
-173 (function (){
-174
-175 "use strict";
-176
-177 var d;
-178
-179 //Private function for getting/setting attributes/properties
-180 function _attr(sel, name, value)
-181 {
-182 var oldVal, doAttr;
-183
-184 //Get the value of the attribute, if it exists
-185 if (typeof sel.hasAttribute !== "undefined")
-186 {
-187 if (sel.hasAttribute(name))
-188 {
-189 oldVal = sel.getAttribute(name);
-190 }
-191
-192 doAttr = true;
-193 }
-194 else if (typeof sel[name] !== "undefined")
-195 {
-196 oldVal = sel[name];
-197 doAttr = false;
-198 }
-199 else if (name === "class" && typeof sel.className !== "undefined") //className attribute
-200 {
-201 name = "className";
-202 oldVal = sel.className;
-203 doAttr = false;
-204 }
-205
-206 //Well, I guess that attribute doesn't exist
-207 if (typeof oldVal === "undefined" && (typeof value === "undefined" || value === null))
-208 {
-209 /*console.log(value);
-210 console.log(sel);
-211 console.log("Element does not have the selected attribute");*/
-212 return null;
-213 }
-214
-215 //No value to set? Return the current value
-216 if (typeof value === "undefined")
-217 {
-218 return oldVal;
-219 }
-220
-221 //Determine what to do with the attribute
-222 if (typeof value !== "undefined" && value !== null)
-223 {
-224 if(doAttr === true)
-225 {
-226 sel.setAttribute(name, value);
-227 }
-228 else
-229 {
-230 sel[name] = value;
-231 }
-232 }
-233 else if (value === null)
-234 {
-235 if(doAttr === true)
-236 {
-237 sel.removeAttribute(name);
-238 }
-239 else
-240 {
-241 delete sel[name];
-242 }
-243 }
-244
-245 return (typeof value !== "undefined") ? value : oldVal;
-246 }
-247
-248 /**
-249 * Change css property name to it's
-250 * javascript camel case equivalent
-251 */
-252 function _toCamel(s)
-253 {
-254 return s.replace(/(\-[a-z])/g, function($1){
-255 return $1.toUpperCase().replace('-','');
-256 });
-257 }
-258
-259 function _css(sel, prop, val)
-260 {
-261 var equi;
-262
-263 //Camel-case
-264 prop = _toCamel(prop);
-265
-266 //Equivalent properties for 'special' browsers
-267 equi = {
-268 outerHeight: "offsetHeight",
-269 outerWidth: "offsetWidth",
-270 top: "posTop"
-271 };
+ 10 if (typeof document !== "undefined" && !("classList" in document.createElement("a")))
+ 11 {
+ 12 (function (view){
+ 13
+ 14 var classListProp = "classList",
+ 15 protoProp = "prototype",
+ 16 elemCtrProto = (view.HTMLElement || view.Element)[protoProp],
+ 17 objCtr = Object,
+ 18 strTrim = String[protoProp].trim ||
+ 19 function ()
+ 20 {
+ 21 return this.replace(/^\s+|\s+$/g, "");
+ 22 },
+ 23 arrIndexOf = Array[protoProp].indexOf ||
+ 24 function (item)
+ 25 {
+ 26 var
+ 27 i = 0,
+ 28 len = this.length;
+ 29 for (; i < len; i++)
+ 30 {
+ 31 if (i in this && this[i] === item)
+ 32 {
+ 33 return i;
+ 34 }
+ 35 }
+ 36 return -1;
+ 37 }
+ 38 // Vendors: please allow content code to instantiate DOMExceptions
+ 39 ,
+ 40 /**
+ 41 * @private
+ 42 */
+ 43 DOMEx = function (type, message)
+ 44 {
+ 45 this.name = type;
+ 46 this.code = DOMException[type];
+ 47 this.message = message;
+ 48 },
+ 49 /**
+ 50 * @private
+ 51 */
+ 52 checkTokenAndGetIndex = function (classList, token)
+ 53 {
+ 54 if (token === "")
+ 55 {
+ 56 throw new DOMEx("SYNTAX_ERR", "An invalid or illegal string was specified");
+ 57 }
+ 58 if (/\s/.test(token))
+ 59 {
+ 60 throw new DOMEx("INVALID_CHARACTER_ERR", "String contains an invalid character");
+ 61 }
+ 62 return arrIndexOf.call(classList, token);
+ 63 },
+ 64 /**
+ 65 * @private
+ 66 */
+ 67 ClassList = function (elem)
+ 68 {
+ 69 var
+ 70 trimmedClasses = strTrim.call(elem.className),
+ 71 classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [],
+ 72 i = 0,
+ 73 len = classes.length;
+ 74 for (; i < len; i++)
+ 75 {
+ 76 this.push(classes[i]);
+ 77 }
+ 78 this._updateClassName = function ()
+ 79 {
+ 80 elem.className = this.toString();
+ 81 };
+ 82 },
+ 83 classListProto = ClassList[protoProp] = [],
+ 84 /**
+ 85 * @private
+ 86 */
+ 87 classListGetter = function ()
+ 88 {
+ 89 return new ClassList(this);
+ 90 };
+ 91 // Most DOMException implementations don't allow calling DOMException's toString()
+ 92 // on non-DOMExceptions. Error's toString() is sufficient here.
+ 93 DOMEx[protoProp] = Error[protoProp];
+ 94 classListProto.item = function (i)
+ 95 {
+ 96 return this[i] || null;
+ 97 };
+ 98 classListProto.contains = function (token)
+ 99 {
+100 token += "";
+101 return checkTokenAndGetIndex(this, token) !== -1;
+102 };
+103 classListProto.add = function (token)
+104 {
+105 token += "";
+106 if (checkTokenAndGetIndex(this, token) === -1)
+107 {
+108 this.push(token);
+109 this._updateClassName();
+110 }
+111 };
+112 classListProto.remove = function (token)
+113 {
+114 token += "";
+115 var index = checkTokenAndGetIndex(this, token);
+116 if (index !== -1)
+117 {
+118 this.splice(index, 1);
+119 this._updateClassName();
+120 }
+121 };
+122 classListProto.toggle = function (token)
+123 {
+124 token += "";
+125 if (checkTokenAndGetIndex(this, token) === -1)
+126 {
+127 this.add(token);
+128 }
+129 else
+130 {
+131 this.remove(token);
+132 }
+133 };
+134 classListProto.toString = function ()
+135 {
+136 return this.join(" ");
+137 };
+138
+139 if (objCtr.defineProperty)
+140 {
+141 var classListPropDesc = {
+142 get: classListGetter,
+143 enumerable: true,
+144 configurable: true
+145 };
+146 try
+147 {
+148 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
+149 }
+150 catch (ex)
+151 { // IE 8 doesn't support enumerable:true
+152 if (ex.number === -0x7FF5EC54)
+153 {
+154 classListPropDesc.enumerable = false;
+155 objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
+156 }
+157 }
+158 }
+159 else if (objCtr[protoProp].__defineGetter__)
+160 {
+161 elemCtrProto.__defineGetter__(classListProp, classListGetter);
+162 }
+163
+164 }(self));
+165 }
+166
+167 /**
+168 * DOM
+169 *
+170 * Dom manipulation module
+171 */
+172 (function (){
+173
+174 "use strict";
+175
+176 var d;
+177
+178 //Private function for getting/setting attributes/properties
+179 function _attr(sel, name, value)
+180 {
+181 var oldVal, doAttr;
+182
+183 //Get the value of the attribute, if it exists
+184 if (typeof sel.hasAttribute !== "undefined")
+185 {
+186 if (sel.hasAttribute(name))
+187 {
+188 oldVal = sel.getAttribute(name);
+189 }
+190
+191 doAttr = true;
+192 }
+193 else if (typeof sel[name] !== "undefined")
+194 {
+195 oldVal = sel[name];
+196 doAttr = false;
+197 }
+198 else if (name === "class" && typeof sel.className !== "undefined") //className attribute
+199 {
+200 name = "className";
+201 oldVal = sel.className;
+202 doAttr = false;
+203 }
+204
+205 //Well, I guess that attribute doesn't exist
+206 if (typeof oldVal === "undefined" && (typeof value === "undefined" || value === null))
+207 {
+208 /*console.log(value);
+209 console.log(sel);
+210 console.log("Element does not have the selected attribute");*/
+211 return null;
+212 }
+213
+214 //No value to set? Return the current value
+215 if (typeof value === "undefined")
+216 {
+217 return oldVal;
+218 }
+219
+220 //Determine what to do with the attribute
+221 if (typeof value !== "undefined" && value !== null)
+222 {
+223 if(doAttr === true)
+224 {
+225 sel.setAttribute(name, value);
+226 }
+227 else
+228 {
+229 sel[name] = value;
+230 }
+231 }
+232 else if (value === null)
+233 {
+234 if(doAttr === true)
+235 {
+236 sel.removeAttribute(name);
+237 }
+238 else
+239 {
+240 delete sel[name];
+241 }
+242 }
+243
+244 return (typeof value !== "undefined") ? value : oldVal;
+245 }
+246
+247 /**
+248 * Change css property name to it's
+249 * javascript camel case equivalent
+250 */
+251 function _toCamel(s)
+252 {
+253 return s.replace(/(\-[a-z])/g, function($1){
+254 return $1.toUpperCase().replace('-','');
+255 });
+256 }
+257
+258 function _css(sel, prop, val)
+259 {
+260 var equi;
+261
+262 //Camel-case
+263 prop = _toCamel(prop);
+264
+265 //Equivalent properties for 'special' browsers
+266 equi = {
+267 outerHeight: "offsetHeight",
+268 outerWidth: "offsetWidth",
+269 top: "posTop"
+270 };
+271
272
-273
-274 //If you don't define a value, try returning the existing value
-275 if(typeof val === "undefined" && sel.style[prop] !== "undefined")
-276 {
-277 return sel.style[prop];
-278 }
-279 else if(typeof val === "undefined" && sel.style[equi[prop]] !== "undefined")
-280 {
-281 return sel.style[equi[prop]];
-282 }
-283
-284 //Let's try the easy way first
-285 if(typeof sel.style[prop] !== "undefined")
-286 {
-287 sel.style[prop] = val;
-288
-289 //Short circuit
-290 return null;
-291 }
-292 else if(sel.style[equi[prop]])
-293 {
-294 sel.style[equi[prop]] = val;
-295 return null;
-296 }
-297 }
-298
-299 // --------------------------------------------------------------------------
-300
-301 /**
-302 * DOM
-303 *
-304 * Dom manipulation module
-305 * @namespace
-306 * @memberOf $_
-307 * @name dom
-308 */
-309 d = {
-310 /**
-311 * Adds a class to the element(s) specified by the current
-312 * selector
-313 *
-314 * @name addClass
-315 * @memberOf $_.dom
-316 * @function
-317 * @param string class
-318 */
-319 addClass: function (c)
-320 {
-321 $_.each(function (e){
-322 e.classList.add(c);
-323 });
-324 },
-325 /**
-326 * Removes a class from the element(s) specified by the current
-327 * selector
-328 *
-329 * @name removeClass
-330 * @memberOf $_.dom
-331 * @function
-332 * @param string class
-333 */
-334 removeClass: function (c)
-335 {
-336 $_.each(function (e){
-337 e.classList.remove(c);
-338 });
-339 },
-340 /**
-341 * Hides the element(s) specified by the current selector
-342 *
-343 * @name hide
-344 * @memberOf $_.dom
-345 * @function
-346 */
-347 hide: function ()
-348 {
-349 this.css('display', 'none');
-350 },
-351 /**
-352 * Shows the element(s) specified by the current selector.
-353 * if type is specified, the element will have it's style
-354 * property set to "display:[your type]". If type is not
-355 * specified, the element is set to "display:block".
-356 *
-357 * @name show
-358 * @memberOf $_.dom
-359 * @function
-360 * @param [string] type
-361 */
-362 show: function (type)
-363 {
-364 if (typeof type === "undefined")
-365 {
-366 type = "block";
-367 }
-368
-369 this.css("display", type);
-370 },
-371 /**
-372 * Sets attributes on element(s) specified by the current
-373 * selector, or, if name is not specified, returns the
-374 * value of the attribute of the element specified by the
-375 * current selector.
-376 *
-377 * @name attr
-378 * @memberOf $_.dom
-379 * @function
-380 * @param string name
-381 * @param [string] value
-382 * @return string
-383 * @type string
-384 */
-385 attr: function (name, value)
-386 {
-387 var sel = this.el;
-388
-389 //Make sure you don't try to get a bunch of elements
-390 if (sel.length > 1 && typeof value === "undefined")
-391 {
-392 return null;
-393 }
-394 else if (sel.length > 1 && typeof value !== "undefined") //You can set a bunch, though
-395 {
-396 $_.each(function (e){
-397 return _attr(e, name, value);
-398 });
-399 }
-400 else //Normal behavior
-401 {
-402 return _attr(sel, name, value);
-403 }
-404 },
-405 /**
-406 * Sets or retrieves the text content of the element
-407 * specified by the current selector. If a value is
-408 * passed, it will set that value on the current element,
-409 * otherwise it will return the value of the current element
-410 *
-411 * @name text
-412 * @memberOf $_.dom
-413 * @function
-414 * @param [string] value
-415 * @return string
-416 * @type string
-417 */
-418 text: function (value)
-419 {
-420 var oldValue, set, type, sel;
-421
-422 sel = this.el;
-423
-424 set = (typeof value !== "undefined") ? true : false;
-425
-426 type = (typeof sel.textContent !== "undefined")
-427 ? "textContent"
-428 : (typeof sel.innerText !== "undefined")
-429 ? "innerText"
-430 : "innerHTML";
-431
-432 oldValue = sel[type];
-433
-434 if(set)
-435 {
-436 sel[type] = value;
-437 return value;
-438 }
-439 else
-440 {
-441 return oldValue;
-442 }
-443 },
-444 /**
-445 * Sets or retrieves a css property of the element
-446 * specified by the current selector. If a value is
-447 * passed, it will set that value on the current element,
-448 * otherwise it will return the value of the css property
-449 * on the current element
-450 *
-451 * @name css
-452 * @memberOf $_.dom
-453 * @function
-454 * @param string property
-455 * @param [string] value
-456 * @return string
-457 * @type string
-458 */
-459 css: function (prop, val)
-460 {
-461 //Return the current value if a value is not set
-462 if(typeof val === "undefined")
-463 {
-464 return _css(this.el, prop);
-465 }
-466
-467 $_.each(function (e){
-468 _css(e, prop, val);
-469 });
-470 },
-471 /**
-472 * Adds to the innerHTML of the current element, after the last child.
-473 *
-474 * @example $_("ul").dom.append("<li></li>") adds an li element to the end of the selected ul element
-475 * @name append
-476 * @memberOf $_.dom
-477 * @function
-478 * @param string htm
-479 */
-480 append: function(htm)
-481 {
-482 if(typeof document.insertAdjacentHTML !== "undefined")
-483 {
-484 this.el.insertAdjacentHTML('beforeend', htm);
-485 }
-486 else
-487 {
-488 this.el.innerHTML += htm;
-489 }
-490 },
-491 /**
-492 * Adds to the innerHTML of the selected element, before the current children
-493 *
-494 * @name prepend
-495 * @memberOf $_.dom
-496 * @function
-497 * @param string htm
-498 */
-499 prepend: function(htm)
-500 {
-501 if(typeof document.insertAdjacentHTML !== "undefined")
-502 {
-503 this.el.insertAdjacentHTML('afterbegin', htm);
-504 }
-505 else
-506 {
-507 this.el.innerHTML = htm + this.el.innerHTML;
-508 }
-509 },
-510 /**
-511 * Sets or gets the innerHTML propery of the element(s) passed
-512 *
-513 * @name html
-514 * @memberOf $_.dom
-515 * @function
-516 * @param [string] htm
-517 * @return string
-518 * @type string
-519 */
-520 html: function(htm)
-521 {
-522
-523 if(typeof htm !== "undefined")
-524 {
-525 this.el.innerHTML = htm;
-526 }
-527
-528 //If the parameter is undefined, just return the current value
-529 return this.el.innerHTML;
-530 }
-531 };
-532
-533 $_.ext('dom', d);
-534
-535 }());