/* * APICloud JavaScript Library * Copyright (c) 2014 apicloud.com */ (function(window) { var u = {}; var isAndroid = (/android/gi).test(navigator.appVersion); u.baseUrl = 'http://cdyapi.saas.dianwutong.com'; // u.baseUrl = 'https://api.dianwutong.com'; var uzStorage = function() { var ls = window.localStorage; if (isAndroid) { ls = os.localStorage(); } return ls; }; function parseArguments(url, data, fnSuc, dataType) { if (typeof(data) == 'function') { dataType = fnSuc; fnSuc = data; data = undefined; } if (typeof(fnSuc) != 'function') { dataType = fnSuc; fnSuc = undefined; } return { url: url, data: data, fnSuc: fnSuc, dataType: dataType }; } u.trim = function(str) { if (String.prototype.trim) { return str == null ? "" : String.prototype.trim.call(str); } else { return str.replace(/(^\s*)|(\s*$)/g, ""); } }; u.trimAll = function(str) { return str.replace(/\s*/g, ''); }; u.isElement = function(obj) { return !!(obj && obj.nodeType == 1); }; u.isArray = function(obj) { if (Array.isArray) { return Array.isArray(obj); } else { return obj instanceof Array; } }; u.isEmptyObject = function(obj) { if (JSON.stringify(obj) === '{}') { return true; } return false; }; u.addEvt = function(el, name, fn, useCapture) { if (!u.isElement(el)) { console.warn('$api.addEvt Function need el param, el param must be DOM Element'); return; } useCapture = useCapture || false; if (el.addEventListener) { el.addEventListener(name, fn, useCapture); } }; u.rmEvt = function(el, name, fn, useCapture) { if (!u.isElement(el)) { console.warn('$api.rmEvt Function need el param, el param must be DOM Element'); return; } useCapture = useCapture || false; if (el.removeEventListener) { el.removeEventListener(name, fn, useCapture); } }; u.one = function(el, name, fn, useCapture) { if (!u.isElement(el)) { console.warn('$api.one Function need el param, el param must be DOM Element'); return; } useCapture = useCapture || false; var that = this; var cb = function() { fn && fn(); that.rmEvt(el, name, cb, useCapture); }; that.addEvt(el, name, cb, useCapture); }; u.dom = function(el, selector) { if (arguments.length === 1 && typeof arguments[0] == 'string') { if (document.querySelector) { return document.querySelector(arguments[0]); } } else if (arguments.length === 2) { if (el.querySelector) { return el.querySelector(selector); } } }; u.domAll = function(el, selector) { if (arguments.length === 1 && typeof arguments[0] == 'string') { if (document.querySelectorAll) { return document.querySelectorAll(arguments[0]); } } else if (arguments.length === 2) { if (el.querySelectorAll) { return el.querySelectorAll(selector); } } }; u.byId = function(id) { return document.getElementById(id); }; u.first = function(el, selector) { if (arguments.length === 1) { if (!u.isElement(el)) { console.warn('$api.first Function need el param, el param must be DOM Element'); return; } return el.children[0]; } if (arguments.length === 2) { return this.dom(el, selector + ':first-child'); } }; u.last = function(el, selector) { if (arguments.length === 1) { if (!u.isElement(el)) { console.warn('$api.last Function need el param, el param must be DOM Element'); return; } var children = el.children; return children[children.length - 1]; } if (arguments.length === 2) { return this.dom(el, selector + ':last-child'); } }; u.eq = function(el, index) { return this.dom(el, ':nth-child(' + index + ')'); }; u.not = function(el, selector) { return this.domAll(el, ':not(' + selector + ')'); }; u.prev = function(el) { if (!u.isElement(el)) { console.warn('$api.prev Function need el param, el param must be DOM Element'); return; } var node = el.previousSibling; if (node.nodeType && node.nodeType === 3) { node = node.previousSibling; return node; } }; u.next = function(el) { if (!u.isElement(el)) { console.warn('$api.next Function need el param, el param must be DOM Element'); return; } var node = el.nextSibling; if (node.nodeType && node.nodeType === 3) { node = node.nextSibling; return node; } }; u.closest = function(el, selector) { if (!u.isElement(el)) { console.warn('$api.closest Function need el param, el param must be DOM Element'); return; } var doms, targetDom; var isSame = function(doms, el) { var i = 0, len = doms.length; for (i; i < len; i++) { if (doms[i].isEqualNode(el)) { return doms[i]; } } return false; }; var traversal = function(el, selector) { doms = u.domAll(el.parentNode, selector); targetDom = isSame(doms, el); while (!targetDom) { el = el.parentNode; if (el != null && el.nodeType == el.DOCUMENT_NODE) { return false; } traversal(el, selector); } return targetDom; }; return traversal(el, selector); }; u.contains = function(parent, el) { var mark = false; if (el === parent) { mark = true; return mark; } else { do { el = el.parentNode; if (el === parent) { mark = true; return mark; } } while (el === document.body || el === document.documentElement); return mark; } }; u.remove = function(el) { if (el && el.parentNode) { el.parentNode.removeChild(el); } }; u.attr = function(el, name, value) { if (!u.isElement(el)) { console.warn('$api.attr Function need el param, el param must be DOM Element'); return; } if (arguments.length == 2) { return el.getAttribute(name); } else if (arguments.length == 3) { el.setAttribute(name, value); return el; } }; u.removeAttr = function(el, name) { if (!u.isElement(el)) { console.warn('$api.removeAttr Function need el param, el param must be DOM Element'); return; } if (arguments.length === 2) { el.removeAttribute(name); } }; u.hasCls = function(el, cls) { if (!u.isElement(el)) { console.warn('$api.hasCls Function need el param, el param must be DOM Element'); return; } if (el.className.indexOf(cls) > -1) { return true; } else { return false; } }; u.addCls = function(el, cls) { if (!u.isElement(el)) { console.warn('$api.addCls Function need el param, el param must be DOM Element'); return; } if ('classList' in el) { el.classList.add(cls); } else { var preCls = el.className; var newCls = preCls + ' ' + cls; el.className = newCls; } return el; }; u.removeCls = function(el, cls) { if (!u.isElement(el)) { console.warn('$api.removeCls Function need el param, el param must be DOM Element'); return; } if ('classList' in el) { el.classList.remove(cls); } else { var preCls = el.className; var newCls = preCls.replace(cls, ''); el.className = newCls; } return el; }; u.toggleCls = function(el, cls) { if (!u.isElement(el)) { console.warn('$api.toggleCls Function need el param, el param must be DOM Element'); return; } if ('classList' in el) { el.classList.toggle(cls); } else { if (u.hasCls(el, cls)) { u.removeCls(el, cls); } else { u.addCls(el, cls); } } return el; }; u.val = function(el, val) { if (!u.isElement(el)) { console.warn('$api.val Function need el param, el param must be DOM Element'); return; } if (arguments.length === 1) { switch (el.tagName) { case 'SELECT': var value = el.options[el.selectedIndex].value; return value; break; case 'INPUT': return el.value; break; case 'TEXTAREA': return el.value; break; } } if (arguments.length === 2) { switch (el.tagName) { case 'SELECT': el.options[el.selectedIndex].value = val; return el; break; case 'INPUT': el.value = val; return el; break; case 'TEXTAREA': el.value = val; return el; break; } } }; u.prepend = function(el, html) { if (!u.isElement(el)) { console.warn('$api.prepend Function need el param, el param must be DOM Element'); return; } el.insertAdjacentHTML('afterbegin', html); return el; }; u.append = function(el, html) { if (!u.isElement(el)) { console.warn('$api.append Function need el param, el param must be DOM Element'); return; } el.insertAdjacentHTML('beforeend', html); return el; }; u.before = function(el, html) { if (!u.isElement(el)) { console.warn('$api.before Function need el param, el param must be DOM Element'); return; } el.insertAdjacentHTML('beforebegin', html); return el; }; u.after = function(el, html) { if (!u.isElement(el)) { console.warn('$api.after Function need el param, el param must be DOM Element'); return; } el.insertAdjacentHTML('afterend', html); return el; }; u.html = function(el, html) { if (!u.isElement(el)) { console.warn('$api.html Function need el param, el param must be DOM Element'); return; } if (arguments.length === 1) { return el.innerHTML; } else if (arguments.length === 2) { el.innerHTML = html; return el; } }; u.text = function(el, txt) { if (!u.isElement(el)) { console.warn('$api.text Function need el param, el param must be DOM Element'); return; } if (arguments.length === 1) { return el.textContent; } else if (arguments.length === 2) { el.textContent = txt; return el; } }; u.offset = function(el) { if (!u.isElement(el)) { console.warn('$api.offset Function need el param, el param must be DOM Element'); return; } var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft); var st = Math.max(document.documentElement.scrollTop, document.body.scrollTop); var rect = el.getBoundingClientRect(); return { l: rect.left + sl, t: rect.top + st, w: el.offsetWidth, h: el.offsetHeight }; }; u.css = function(el, css) { if (!u.isElement(el)) { console.warn('$api.css Function need el param, el param must be DOM Element'); return; } if (typeof css == 'string' && css.indexOf(':') > 0) { el.style && (el.style.cssText += ';' + css); } }; u.cssVal = function(el, prop) { if (!u.isElement(el)) { console.warn('$api.cssVal Function need el param, el param must be DOM Element'); return; } if (arguments.length === 2) { var computedStyle = window.getComputedStyle(el, null); return computedStyle.getPropertyValue(prop); } }; u.jsonToStr = function(json) { if (typeof json === 'object') { return JSON && JSON.stringify(json); } }; u.strToJson = function(str) { if (typeof str === 'string') { return JSON && JSON.parse(str); } }; u.setStorage = function(key, value) { if (arguments.length === 2) { var v = value; if (typeof v == 'object') { v = JSON.stringify(v); v = 'obj-' + v; } else { v = 'str-' + v; } var ls = uzStorage(); if (ls) { ls.setItem(key, v); } } }; u.getStorage = function(key) { var ls = uzStorage(); if (ls) { var v = ls.getItem(key); if (!v) { return; } if (v.indexOf('obj-') === 0) { v = v.slice(4); return JSON.parse(v); } else if (v.indexOf('str-') === 0) { return v.slice(4); } } }; u.rmStorage = function(key) { var ls = uzStorage(); if (ls && key) { ls.removeItem(key); } }; u.clearStorage = function() { var ls = uzStorage(); if (ls) { ls.clear(); } }; /*by king*/ u.fixIos7Bar = function(el) { if (isAndroid) { if (!u.isElement(el)) { console.warn('$api.fixIos7Bar Function need el param, el param must be DOM Element'); return; } var strDM = api.systemType; if (strDM == 'ios') { var strSV = api.systemVersion; var numSV = parseInt(strSV, 10); var fullScreen = api.fullScreen; var iOS7StatusBarAppearance = api.iOS7StatusBarAppearance; if (numSV >= 7 && !fullScreen && iOS7StatusBarAppearance) { el.style.paddingTop = '20px'; } } } else { return u.fixStatusBar(el); } }; u.fixStatusBar = function(el) { if (isAndroid) { if (!u.isElement(el)) { console.warn('$api.fixStatusBar Function need el param, el param must be DOM Element'); return; } var sysType = api.systemType; if (sysType == 'ios') { u.fixIos7Bar(el); } else if (sysType == 'android') { var ver = api.systemVersion; ver = parseFloat(ver); if (ver >= 4.4) { el.style.paddingTop = '25px'; } } } else { if (!u.isElement(el)) { console.warn('$api.fixStatusBar Function need el param, el param must be DOM Element'); return 0; } el.style.paddingTop = api.safeArea.top + 'px'; return el.offsetHeight; } }; // 解决底部标签栏被虚拟home键遮挡 u.fixTabBar = function(el) { if (!u.isElement(el)) { console.warn('$api.fixTabBar Function need el param, el param must be DOM Element'); return 0; } el.style.paddingBottom = api.safeArea.bottom + 'px'; return el.offsetHeight; } u.toast = function(title, text, time) { var opts = {}; var show = function(opts, time) { api.showProgress(opts); setTimeout(function() { api.hideProgress(); }, time); }; if (arguments.length === 1) { var time = time || 500; if (typeof title === 'number') { time = title; } else { opts.title = title + ''; } show(opts, time); } else if (arguments.length === 2) { var time = time || 500; var text = text; if (typeof text === "number") { var tmp = text; time = tmp; text = null; } if (title) { opts.title = title; } if (text) { opts.text = text; } show(opts, time); } if (title) { opts.title = title; } if (text) { opts.text = text; } time = time || 500; show(opts, time); }; u.post = function( /*url,data,fnSuc,dataType*/ ) { var argsToJson = parseArguments.apply(null, arguments); var json = {}; var fnSuc = argsToJson.fnSuc; argsToJson.url && (json.url = argsToJson.url); // 如果有token 自动加上token var token = $api.getStorage("token"); // if (token) { // argsToJson.data.token = token; // } argsToJson.data && (json.data = { body: argsToJson.data }); json.headers = argsToJson.headers json.headers = { 'Content-Type':'application/json' } if (argsToJson.dataType) { var type = argsToJson.dataType.toLowerCase(); if (type == 'text' || type == 'json') { json.dataType = type; } } else { json.dataType = 'json'; } json.method = 'post'; //json.url = "https://api.dianwutong.com" + json.url+'?token=' + token; if(token) { json.url = u.baseUrl + json.url+'?token=' + token; }else { json.url = u.baseUrl + json.url; } //console.log(JSON.stringify(json)); api.ajax(json, function(ret, err) { fnSuc && fnSuc(ret, err); //console.warn(JSON.stringify(ret)); } ); }; u.uploadFile = function( url,data,fnSuc,dataType) { var json = {}; var fnSuc = fnSuc; url && (json.url = url); // 如果有token 自动加上token var token = $api.getStorage("token"); data && (json.data = { stream: data }); // json.headers = { // 'Content-Type':'application/x-www-form-urlencoded;' // } json.method = 'post'; if(token) { json.url = u.baseUrl + json.url+'?token=' + token; }else { json.url = u.baseUrl + json.url; } api.ajax(json, function(ret, err) { fnSuc && fnSuc(ret, err); } ); }; u.put = function( /*url,data,fnSuc,dataType*/ ) { var argsToJson = parseArguments.apply(null, arguments); var json = {}; var fnSuc = argsToJson.fnSuc; argsToJson.url && (json.url = argsToJson.url); // 如果有token 自动加上token var token = $api.getStorage("token"); argsToJson.data && (json.data = { body: argsToJson.data }); json.headers = argsToJson.headers json.headers = { 'Content-Type':'application/json' } if (argsToJson.dataType) { var type = argsToJson.dataType.toLowerCase(); if (type == 'text' || type == 'json') { json.dataType = type; } } else { json.dataType = 'json'; } json.method = 'put'; //json.url = "https://api.dianwutong.com" + json.url+'?token=' + token; if(token) { json.url = u.baseUrl + json.url+'?token=' + token; }else { json.url = u.baseUrl + json.url; } api.ajax(json, function(ret, err) { fnSuc && fnSuc(ret, err); } ); }; u.get = function( /*url,data,fnSuc,dataType*/ ) { if (u.disabledRequest) { return; } var argsToJson = parseArguments.apply(null, arguments); var json = {}; var fnSuc = argsToJson.fnSuc; argsToJson.url && (json.url = argsToJson.url); // json.url = "https://api.dianwutong.com" + json.url; json.url = u.baseUrl + json.url; if (argsToJson.dataType) { var type = argsToJson.dataType.toLowerCase(); if (type == 'text' || type == 'json') { json.dataType = type; } } else { json.dataType = 'json'; } json.method = 'get'; // 如果参数不为空 将参数拼接到url后面 var queries = []; // 如果已经登录 传入token var token = $api.getStorage("token"); if (token) { queries.push('token=' + token); } var data = argsToJson.data; if (data) { for (var i in data) { if (data.hasOwnProperty(i) && data[i] != null && data[i] != undefined) { queries.push(i + '=' + data[i]); } } } var queryString = queries.join('&'); if (queryString) { json.url = json.url + '?' + queryString; } api.ajax(json, function(ret, err) { if (ret) { // token失效的标志1006 if (ret.code == 1006) { api.sendEvent({ name: 'loginout' }); if (!u.disabledRequest) { api.alert({ title: '登录过期,请重新登录。' }, function() { u.clearStorage(); api.closeWin({ name: 'index' }); api.openWin({ name: 'login', url: 'widget://html/user/login.html', }); }) u.disabledRequest = true; } } else { fnSuc && fnSuc(ret); } } } ); }; u.getVersion = function(fnSuc) { var json = {}; json.url = 'https://cdn.dianwutong.com/app/dianwutong_saas/version.json'; json.dataType = 'json'; json.method = 'get'; api.ajax(json, function(ret, err) { if (ret) { fnSuc && fnSuc(ret); } } ); }; var keys = u.getStorage("guestKeys"); if (keys) { // 体验账号需要被替换掉的关键字的正则表达式 u.guestKeysPattern = new RegExp(keys.replace(/,/g, '|'), 'g'); } else { // 瞎写一个 不然后面使用会抛错 u.guestKeysPattern = new RegExp('。%#@#@!@#'); } u.guestName = u.getStorage("realName"); u.guestPrName = u.guestName + '配电室'; // 存储客户信息 u.setStorageOfCus = function(customer) { u.setStorage("cusId", customer['cusId']); $api.setStorage("userHead", u.prefix + customer['cusLogo']); $api.setStorage("realName", customer['cusName']); } // 存储体验客户信息 u.setStorageOfExperCus = function(customer) { u.setStorage("cusId", customer['cusId']); } u.getFormattedDate = function(format,time) { var date; if(time){ date = new Date(time); } else { date = new Date(); } if (!format) { format = "yyyy-MM-dd hh:mm:ss"; } var o = { "M+": date.getMonth() + 1, //month "d+": date.getDate(), //day "h+": date.getHours(), //hour "m+": date.getMinutes(), //minute "s+": date.getSeconds(), //second "q+": Math.floor((date.getMonth() + 3) / 3), //quarter "S": date.getMilliseconds() //millisecond } if (/(y+)/.test(format)) { format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)); } } return format; } /*end*/ window.$api = u; })(window); function _log(ob, tag) { console.log(tag ? tag : '' + JSON.stringify(ob, null, 4)); }