| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 | /* * APICloud JavaScript Library * Copyright (c) 2014 apicloud.com */(function(window){    var u = {};    var isAndroid = (/android/gi).test(navigator.appVersion);    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].isSameNode(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();        }    };    u.fixIos7Bar = function(el){        return u.fixStatusBar(el);    };    u.fixStatusBar = function(el){        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;    };    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);        argsToJson.data && (json.data = argsToJson.data);        if(argsToJson.dataType){            var type = argsToJson.dataType.toLowerCase();            if (type == 'text'||type == 'json') {                json.dataType = type;            }        }else{            json.dataType = 'json';        }        json.method = 'post';        api.ajax(json,            function(ret,err){                if (ret) {                    fnSuc && fnSuc(ret);                }            }        );    };    u.get = function(/*url,fnSuc,dataType*/){        var argsToJson = parseArguments.apply(null, arguments);        var json = {};        var fnSuc = argsToJson.fnSuc;        argsToJson.url && (json.url = argsToJson.url);        //argsToJson.data && (json.data = argsToJson.data);        if(argsToJson.dataType){            var type = argsToJson.dataType.toLowerCase();            if (type == 'text'||type == 'json') {                json.dataType = type;            }        }else{            json.dataType = 'text';        }        json.method = 'get';        api.ajax(json,            function(ret,err){                if (ret) {                    fnSuc && fnSuc(ret);                }            }        );    };/*end*/        window.$api = u;})(window);
 |