pavone@0: function each(container, fun) pavone@0: { pavone@110: if (container instanceof Array || container instanceof HTMLCollection || container instanceof NodeList) { pavone@0: for (var i = 0; i < container.length; i++) { pavone@23: fun(i, container[i]); pavone@0: } pavone@0: } else { pavone@0: for (var i in container) { pavone@0: if (container.hasOwnProperty(i)) { pavone@0: fun(i, container[i]); pavone@0: } pavone@0: } pavone@0: } pavone@0: } pavone@0: pavone@25: function q(query, el) pavone@0: { pavone@25: return el === undefined ? document.querySelector(query) : el.querySelector(query); pavone@0: } pavone@25: function qall(query, el) pavone@0: { pavone@25: return el === undefined ? document.querySelectorAll(query) : el.querySelectorAll(query); pavone@0: } pavone@0: pavone@0: function hide(el) pavone@0: { pavone@0: el.style.display = 'none'; pavone@0: } pavone@0: pavone@0: function show(el, dtype) pavone@0: { pavone@0: if (dtype === undefined) { pavone@0: dtype = 'block'; pavone@0: } pavone@9: el.style.display = dtype; pavone@0: } pavone@0: pavone@0: function onReady(fun) pavone@0: { pavone@0: if (document.readyState == 'complete') { pavone@0: fun(); pavone@0: } else { pavone@0: document.onreadystatechange = function() { pavone@0: if (document.readyState == 'complete') { pavone@0: fun(); pavone@0: document.onreadystatechange = null; pavone@0: } pavone@0: } pavone@0: } pavone@0: } pavone@0: pavone@0: function addClass(el, classname) pavone@0: { pavone@0: var classes = el.className.split(' '); pavone@0: if (classes.indexOf(classname) == -1) { pavone@0: classes.push(classname); pavone@0: el.className = classes.join(' '); pavone@0: } pavone@0: } pavone@0: pavone@0: function removeClass(el, classname) pavone@0: { pavone@0: var classes = el.className.split(' '); pavone@0: var idx = classes.indexOf(classname); pavone@0: if (idx > -1) { pavone@0: classes.splice(idx, 1); pavone@0: el.className = classes.join(' '); pavone@0: } pavone@0: } pavone@0: pavone@110: function hasClass(el, classname) pavone@110: { pavone@110: return el.className == classname || el.className.split(' ').indexOf(classname) > -1 pavone@110: } pavone@110: pavone@9: function ajax(method, url, data, onSuccess, onFail, onOthers) pavone@9: { pavone@9: var req; pavone@9: try { pavone@9: req = new XMLHttpRequest(); pavone@9: } catch (e) { pavone@9: req = new ActiveXObject("Microsoft.XMLHTTP"); pavone@9: } pavone@9: req.onreadystatechange = function() { pavone@9: if (req.readyState == 4) { pavone@9: if ((req.status >= 200 && req.status <= 299) || req.status == 0) { pavone@9: onSuccess(req); pavone@9: } else if(onFail) { pavone@9: onFail(req); pavone@9: } else { pavone@9: console.log('request failed:', req); pavone@9: } pavone@9: } else if(onOthers) { pavone@9: onOthers(req); pavone@9: } pavone@9: } pavone@9: req.open(method, url); pavone@9: if (data && 'mime' in data) { pavone@9: req.setRequestHeader('Content-Type', data.mime); pavone@9: req.send(data); pavone@9: } else { pavone@9: req.send(data); pavone@9: } pavone@9: } pavone@9: pavone@9: function get(url, onSuccess, onFail, onOthers) pavone@9: { pavone@9: ajax('GET', url, undefined, onSuccess, onFail, onOthers); pavone@9: } pavone@9: pavone@9: function post(url, data, onSuccess, onFail, onOthers) pavone@9: { pavone@9: ajax('POST', url, data, onSuccess, onFail, onOthers); pavone@9: } pavone@9: pavone@14: function newEl(tagname, props) pavone@14: { pavone@14: var el = document.createElement(tagname); pavone@14: if (typeof props == 'object') { pavone@14: each(props, function (key, val) { pavone@14: el[key] = val; pavone@14: }); pavone@14: } pavone@14: return el; pavone@14: } pavone@14: pavone@31: function setText(parent, text) pavone@31: { pavone@31: parent.innerHTML = ''; pavone@31: parent.appendChild(document.createTextNode(text)); pavone@31: return parent; pavone@31: } pavone@31: pavone@106: function bubble(el, event, handler) pavone@106: { pavone@106: el.addEventListener(event, handler, false); pavone@106: } pavone@106: pavone@106: function capture(el, event, handler) pavone@106: { pavone@106: el.addEventListener(event, handler, true); pavone@106: } pavone@106: pavone@106: