/** * @fileoverview delta javascript library */ (function (window) { var DEBUG = false, VERSION = "0.0.1.0", CLASS_HIDDEN = "dj-hidden", document = window.document, location = window.location, navigator = window.navigator, dj_ = window.dj, /** * @namespace dj */ dj = {}; /** * show debug message * @param {String} msg */ dj.debugMsg = function (msg) { if (DEBUG) { if (typeof console === "object") { if (console.log) { console.log(msg); } } else { alert(msg); } } }; dj.isArray = function (target) { return (target && typeof target === "object" && typeof target.length === "number" && !(target.propertyIsEnumerable("length"))) ? true : false; }; dj.isNodeList = function (target) { var result = Object.prototype.toString.call(target); if (/^\[object (HTMLCollection|NodeList)\]$/.test(result)) { return true; } if (typeof target !== "object") { return false; } if (target.length == 0 || (typeof target[0] === "object" && target[0].nodeType > 0)) { return true; } return false; }; /** * executing a function for each matched element * @param {Object []} elements * @param {Function} func */ dj.eachEls = function (elements, func) { var i = 0, j = elements.length; for (; i < j; i++) { func(i, elements[i]); } }; /** * @param {String} className * @param {String} [tagName="*"] * @param {String} [root="document"] * @returns {Object []} objects */ dj.getElsByClass = function (className, tagName, root) { if (!root) { root = document; } else if (typeof root == "string") { root = document.getElementById(root); } if (!tagName) { tagName = "*"; } var all = root.getElementsByTagName(tagName); if (!className) { return all; } var elements = []; for (var i = 0, j = all.length; i < j; i++) { var element = all[i]; if (isMember(element, className)) { elements.push(element); } } return elements; function isMember(element, className) { var classes = element.className; if (!classes) { return false; } if (classes == className) { return true; } var whitespace = /\s+/; if (!whitespace.test(classes)) { return false; } var c = classes.split(whitespace); for(var i = 0; i < c.length; i++) { if (c[i] == className) { return true; } } return false; } }; /** * @param {String} id * @param {String} [root="document"] * @returns {Ojbect} object */ dj.getElById = function (id, root) { if (!root) { root = document; } else if (typeof root == "string") { root = document.getElementById(root); } return root.getElementById(id); }; /** * @param {String} name * @param {String} [root="document"] * @returns {Object []} objects */ dj.getElsByName = function (name, root) { if (!root) { root = document; } else if (typeof root == "string") { root = document.getElementById(root); } return root.getElementsByName(name); }; dj.get = function (target) { if ((/^\./).test(target)) { return dj.getElsByClass(target.slice(1), '', document.body); } else if ((/^name=.*$/).test(target)) { return document.getElementsByName(target.slice(5)); } else { return document.getElementById(target); } return null; }; dj.getEls = function (ids) { var els = [], el, i = 0, iMax = arguments.length; for (; i < iMax; i++) { el = dj.get(arguments[i]); if (el) { els.push(el); } } return els; }; /** * */ function getInputType_ (target) { if (dj.isNodeList(target)) { if (target[0].type) { return target[0].type.toUpperCase(); } else { if (target.nodeName === "SELECT") { return (target.multiple) ? "SELECT-MULTIPLE" : "SELECT-ONE"; } } } else { return target.type.toUpperCase(); } } function setNormalVal_ (target, val) { target.value = val; return true; } function getNormalVal_(target) { return target.value; } function setCheckboxVal_ (target, val) { dj.eachEls(target, function (index, element) { element.checked = (element.value == val[index]) ? true : false; }); return true; } function getCheckboxVal_ (target) { var retVal = []; dj.eachEls(target, function (index, element) { if (element.checked === true) { retVal.push(element.value); } }); return retVal; } function setRadioVal_ (target, val) { dj.eachEls(target, function (index, element) { element.checked = (element.value === val) ? true : false; }); return true; } function getRadioVal_ (target) { var retVal = ""; dj.eachEls(target, function (index, element) { if (element.checked === true) { retVal = element.value; } }); return retVal; } function setSelectVal_ (target, val) { var si = 0, sj = target.options.length; for (; si < sj; si++) { if (target.options[si].value == val) { target.selectedIndex = si; } } return true; } function getSelectVal_ (target) { return target.options[target.selectedIndex].value; } function setMultiSelectVal_(target, valArr) { var si = 0, sj = target.options.length, vi = 0, vj = valArr.length, option; for (; si < sj; si++) { option = target.options[si]; option.selected = false; for (vi = 0; vi < vj; vi++) { if (option.value == valArr[vi]) { option.selected = true; break; } } } return true; } function getMultiSelectVal_ (target) { var si = 0, sj = target.options.length, valArr = [], option; for (; si < sj; si++) { option = target.options[si]; if (option.selected == true) { valArr.push(option.value); } } return valArr; } /** * */ dj.val = function (targetStr, val) { var target, type, isSetVal = false, i, iMax, obj; if (arguments.length === 2) { isSetVal = true; } if (dj.isArray(targetStr)) { target = []; i = 0; iMax = targetStr.length; for (; i < iMax; i++) { obj = dj.get(targetStr[i]); if (!obj) { return (isSetVal) ? false : undefined; } target.push(obj); } } else { obj = dj.get(targetStr); if (!obj) { return (isSetVal) ? false : undefined; } target = obj; } type = getInputType_(target); switch (type) { case "BUTTON": case "RESET": case "SUBMIT": case "HIDDEN": case "PASSWORD": case "TEXT": if (isSetVal) { return setNormalVal_(target, val); } else { return getNormalVal_(target); } break; case "FILE": if (isSetVal) { dj.debugMsg("unimplemented type" + type); } else { return getNormalVal_(target); } break; case "CHECKBOX": if (isSetVal) { return setCheckboxVal_(target, val); } else { return getCheckboxVal_(target); } break; case "RADIO": if (isSetVal) { return setRadioVal_(target, val); } else { return getRadioVal_(target); } break; case "SELECT-ONE": if (isSetVal) { return setSelectVal_(target, val); } else { return getSelectVal_(target); } break; case "SELECT-MULTIPLE": if (isSetVal) { return setMultiSelectVal_(target, val); } else { return getMultiSelectVal_(target); } break; default: dj.debugMsg("unimplemented type" + type); return (isSetVal) ? false : undefined; } }; /** * @param {Object} element * @param {String} action * @param {Function} handler */ dj.addEventListener = function (element, action, handler) { if (element) { if (document.addEventListener) { // W3C element.addEventListener(action, handler, false); } else if (document.attachEvent) { // IE element.attachEvent("on" + action, handler); } else { // last resort element["on" + action] = handler; } } }; dj.addEventListener_ = function (action_) { var action = action_; return function (target, handler) { var element = dj.get(target); if (element) { if (document.addEventListener) { // W3C element.addEventListener(action, handler, false); } else if (document.attachEvent) { // IE element.attachEvent("on" + action, handler); } else { // last resort element["on" + action] = handler; } } }; }; /** * when the pointer is moved onto an element * @function * @param {Object} element * @param {Function} handler */ dj.mouseover = dj.addEventListener_("mouseover"); /** * when a user moves the mouse pointer out of an element * @function * @param {Object} element * @param {Function} handler */ dj.mouseout = dj.addEventListener_("mouseout"); /** * element change event * @function * @param {Object} element * @param {Function} handler */ dj.change = dj.addEventListener_("change"); /** * element click event * @function * @param {Object} element * @param {Function} handler */ dj.click = dj.addEventListener_("click"); /** * element submit event * @function * @param {Object} element * @param {Function} handler */ dj.submit = dj.addEventListener_("submit"); /** * call this function to stop submit * @param {EventObject} e * @param {Boolean} allowSubmit */ dj.submitEnd = function (ev, allowSubmit) { if (!allowSubmit) { if (ev.preventDefault) { ev.preventDefault(); } else if (window.event) /* for ie */ { window.event.returnValue = false; } } else { if (dj.get("alertError")) { dj.hideEls([dj.get("alertError")]); } dj.alertShowInfoMsg(dj.msg["EXECUTING"]); } }; /** * @param {Object []} elements * @param {String} className * @returns {Object []} elements */ dj.addElsClass = function (elements, className) { var pattern = "\\b" + className + "\\b"; dj.eachEls(elements, function (index, element) { if (element) { if ((new RegExp(pattern).test(element.className)) != true) { element.className += " " + className; } } }); return elements; }; /** * @param {Object []} elements * @param {String} className * @returns {Object []} elements */ dj.rmElsClass = function (elements, className) { var pattern = "\\b" + className + "\\b"; dj.eachEls(elements, function (index, element) { if (element) { element.className = element.className.replace(new RegExp(pattern, ''), ""); } }); return elements; }; /** * @param {Object []} elements * @returns {Object []} elements */ dj.hideEls = function (elements) { dj.addElsClass(elements, CLASS_HIDDEN); return elements; }; /** * @param {Object []} elements * @returns {Object []} elements */ dj.showEls = function (elements) { dj.rmElsClass(elements, CLASS_HIDDEN); return elements; }; /** * @param {Object []} elements * @returns {Object []} elements */ dj.disableEls = function (elements) { dj.eachEls(elements, function (index, element) { element.disabled = true; }); return elements; }; /** * @param {Object []} elements * @returns {Object []} elements */ dj.enableEls = function (elements) { dj.eachEls(elements, function (index, element) { element.disabled = false; }); return elements; }; /** * */ dj.xhrGet = function () { var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } return function (url, func) { xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { func(xmlhttp.responseText.replace(/(\r\n|\n|\r)/gm,"")); } }; xmlhttp.open("GET", url, true); xmlhttp.send(); }; }; dj.xhrGetSync = function (url, func) { if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET", url, false); xmlhttp.send(); func(xmlhttp.responseText.replace(/(\r\n|\n|\r)/gm,"")); }; /** * */ dj.mlang2 = { init: function (root, strTable) { var table = strTable; function translate (node) { if (node.nodeType == 3) { var result = (node.data).match(/<#[\w\/\s():.+-]*#>/g); if (result != null) { var i = 0, j = result.length; for (; i < j; i++) { var key = result[i], value = table[key]; if (value != undefined) { var newstr = (node.data).replace(key, value); node.data = newstr; } else { dj.debugMsg("undifined:" + key); } } } } else if (node.nodeType == 1) { for (var child = node.firstChild; child != null; child = child.nextSibling) { if (table[child.value]) { child.value = table[child.value]; } translate(child); } } } translate(root); dj.rmElsClass(dj.getElsByClass("dj-mlang"), "dj-mlang"); }, strs: {} }; dj.mlang = function (root, strTable) { var table = strTable; function translate (node) { if (node.nodeType == 3) { var result = (node.data).match(/<#[\w\/\s():.+-]*#>/g); if (result != null) { var i = 0, j = result.length; for (; i < j; i++) { var key = result[i], value = table[key]; if (value != undefined) { var newstr = (node.data).replace(key, value); node.data = newstr; } else { dj.debugMsg("undifined:" + key); } } } } else if (node.nodeType == 1) { for (var child = node.firstChild; child != null; child = child.nextSibling) { if (table[child.value]) { child.value = table[child.value]; } translate(child); } } } translate(root); dj.rmElsClass(dj.getElsByClass("dj-mlang"), "dj-mlang"); }; /** * */ dj.runOnLoad = function (f) { if (dj.runOnLoad.loaded) f(); else dj.runOnLoad.funcs.push(f); }; dj.runOnLoad.funcs = []; dj.runOnLoad.loaded = false; dj.runOnLoad.run = function () { if (dj.runOnLoad.loaded) return; for (var i = 0; i < dj.runOnLoad.funcs.length; i++) { try { dj.runOnLoad.funcs[i](); } catch (ex) {} } dj.runOnLoad.loaded = true; delete dj.runOnLoad.funcs; delete dj.runOnLoad.run; }; if (window.addEventListener) window.addEventListener("load", dj.runOnLoad.run, false); else if (window.attachEvent) window.attachEvent("onload", dj.runOnLoad.run); else window.onload = dj.runOnLoad.run; // export window.dj = dj; })(window);