github.com/jincm/wesharechain@v0.0.0-20210122032815-1537409ce26a/app/script/api.js (about)

     1  /*
     2   * APICloud JavaScript Library
     3   * Copyright (c) 2014 apicloud.com
     4   */
     5  (function(window){
     6      var u = {};
     7      var isAndroid = (/android/gi).test(navigator.appVersion);
     8      var uzStorage = function(){
     9          var ls = window.localStorage;
    10          if(isAndroid){
    11             ls = os.localStorage();
    12          }
    13          return ls;
    14      };
    15      function parseArguments(url, data, fnSuc, dataType) {
    16          if (typeof(data) == 'function') {
    17              dataType = fnSuc;
    18              fnSuc = data;
    19              data = undefined;
    20          }
    21          if (typeof(fnSuc) != 'function') {
    22              dataType = fnSuc;
    23              fnSuc = undefined;
    24          }
    25          return {
    26              url: url,
    27              data: data,
    28              fnSuc: fnSuc,
    29              dataType: dataType
    30          };
    31      }
    32      u.trim = function(str){
    33          if(String.prototype.trim){
    34              return str == null ? "" : String.prototype.trim.call(str);
    35          }else{
    36              return str.replace(/(^\s*)|(\s*$)/g, "");
    37          }
    38      };
    39      u.trimAll = function(str){
    40          return str.replace(/\s*/g,'');
    41      };
    42      u.isElement = function(obj){
    43          return !!(obj && obj.nodeType == 1);
    44      };
    45      u.isArray = function(obj){
    46          if(Array.isArray){
    47              return Array.isArray(obj);
    48          }else{
    49              return obj instanceof Array;
    50          }
    51      };
    52      u.isEmptyObject = function(obj){
    53          if(JSON.stringify(obj) === '{}'){
    54              return true;
    55          }
    56          return false;
    57      };
    58      u.addEvt = function(el, name, fn, useCapture){
    59          if(!u.isElement(el)){
    60              console.warn('$api.addEvt Function need el param, el param must be DOM Element');
    61              return;
    62          }
    63          useCapture = useCapture || false;
    64          if(el.addEventListener) {
    65              el.addEventListener(name, fn, useCapture);
    66          }
    67      };
    68      u.rmEvt = function(el, name, fn, useCapture){
    69          if(!u.isElement(el)){
    70              console.warn('$api.rmEvt Function need el param, el param must be DOM Element');
    71              return;
    72          }
    73          useCapture = useCapture || false;
    74          if (el.removeEventListener) {
    75              el.removeEventListener(name, fn, useCapture);
    76          }
    77      };
    78      u.one = function(el, name, fn, useCapture){
    79          if(!u.isElement(el)){
    80              console.warn('$api.one Function need el param, el param must be DOM Element');
    81              return;
    82          }
    83          useCapture = useCapture || false;
    84          var that = this;
    85          var cb = function(){
    86              fn && fn();
    87              that.rmEvt(el, name, cb, useCapture);
    88          };
    89          that.addEvt(el, name, cb, useCapture);
    90      };
    91      u.dom = function(el, selector){
    92          if(arguments.length === 1 && typeof arguments[0] == 'string'){
    93              if(document.querySelector){
    94                  return document.querySelector(arguments[0]);
    95              }
    96          }else if(arguments.length === 2){
    97              if(el.querySelector){
    98                  return el.querySelector(selector);
    99              }
   100          }
   101      };
   102      u.domAll = function(el, selector){
   103          if(arguments.length === 1 && typeof arguments[0] == 'string'){
   104              if(document.querySelectorAll){
   105                  return document.querySelectorAll(arguments[0]);
   106              }
   107          }else if(arguments.length === 2){
   108              if(el.querySelectorAll){
   109                  return el.querySelectorAll(selector);
   110              }
   111          }
   112      };
   113      u.byId = function(id){
   114          return document.getElementById(id);
   115      };
   116      u.first = function(el, selector){
   117          if(arguments.length === 1){
   118              if(!u.isElement(el)){
   119                  console.warn('$api.first Function need el param, el param must be DOM Element');
   120                  return;
   121              }
   122              return el.children[0];
   123          }
   124          if(arguments.length === 2){
   125              return this.dom(el, selector+':first-child');
   126          }
   127      };
   128      u.last = function(el, selector){
   129          if(arguments.length === 1){
   130              if(!u.isElement(el)){
   131                  console.warn('$api.last Function need el param, el param must be DOM Element');
   132                  return;
   133              }
   134              var children = el.children;
   135              return children[children.length - 1];
   136          }
   137          if(arguments.length === 2){
   138              return this.dom(el, selector+':last-child');
   139          }
   140      };
   141      u.eq = function(el, index){
   142          return this.dom(el, ':nth-child('+ index +')');
   143      };
   144      u.not = function(el, selector){
   145          return this.domAll(el, ':not('+ selector +')');
   146      };
   147      u.prev = function(el){
   148          if(!u.isElement(el)){
   149              console.warn('$api.prev Function need el param, el param must be DOM Element');
   150              return;
   151          }
   152          var node = el.previousSibling;
   153          if(node.nodeType && node.nodeType === 3){
   154              node = node.previousSibling;
   155              return node;
   156          }
   157      };
   158      u.next = function(el){
   159          if(!u.isElement(el)){
   160              console.warn('$api.next Function need el param, el param must be DOM Element');
   161              return;
   162          }
   163          var node = el.nextSibling;
   164          if(node.nodeType && node.nodeType === 3){
   165              node = node.nextSibling;
   166              return node;
   167          }
   168      };
   169      u.closest = function(el, selector){
   170          if(!u.isElement(el)){
   171              console.warn('$api.closest Function need el param, el param must be DOM Element');
   172              return;
   173          }
   174          var doms, targetDom;
   175          var isSame = function(doms, el){
   176              var i = 0, len = doms.length;
   177              for(i; i<len; i++){
   178                  if(doms[i].isEqualNode(el)){
   179                      return doms[i];
   180                  }
   181              }
   182              return false;
   183          };
   184          var traversal = function(el, selector){
   185              doms = u.domAll(el.parentNode, selector);
   186              targetDom = isSame(doms, el);
   187              while(!targetDom){
   188                  el = el.parentNode;
   189                  if(el != null && el.nodeType == el.DOCUMENT_NODE){
   190                      return false;
   191                  }
   192                  traversal(el, selector);
   193              }
   194  
   195              return targetDom;
   196          };
   197  
   198          return traversal(el, selector);
   199      };
   200      u.contains = function(parent,el){
   201          var mark = false;
   202          if(el === parent){
   203              mark = true;
   204              return mark;
   205          }else{
   206              do{
   207                  el = el.parentNode;
   208                  if(el === parent){
   209                      mark = true;
   210                      return mark;
   211                  }
   212              }while(el === document.body || el === document.documentElement);
   213  
   214              return mark;
   215          }
   216          
   217      };
   218      u.remove = function(el){
   219          if(el && el.parentNode){
   220              el.parentNode.removeChild(el);
   221          }
   222      };
   223      u.attr = function(el, name, value){
   224          if(!u.isElement(el)){
   225              console.warn('$api.attr Function need el param, el param must be DOM Element');
   226              return;
   227          }
   228          if(arguments.length == 2){
   229              return el.getAttribute(name);
   230          }else if(arguments.length == 3){
   231              el.setAttribute(name, value);
   232              return el;
   233          }
   234      };
   235      u.removeAttr = function(el, name){
   236          if(!u.isElement(el)){
   237              console.warn('$api.removeAttr Function need el param, el param must be DOM Element');
   238              return;
   239          }
   240          if(arguments.length === 2){
   241              el.removeAttribute(name);
   242          }
   243      };
   244      u.hasCls = function(el, cls){
   245          if(!u.isElement(el)){
   246              console.warn('$api.hasCls Function need el param, el param must be DOM Element');
   247              return;
   248          }
   249          if(el.className.indexOf(cls) > -1){
   250              return true;
   251          }else{
   252              return false;
   253          }
   254      };
   255      u.addCls = function(el, cls){
   256          if(!u.isElement(el)){
   257              console.warn('$api.addCls Function need el param, el param must be DOM Element');
   258              return;
   259          }
   260          if('classList' in el){
   261              el.classList.add(cls);
   262          }else{
   263              var preCls = el.className;
   264              var newCls = preCls +' '+ cls;
   265              el.className = newCls;
   266          }
   267          return el;
   268      };
   269      u.removeCls = function(el, cls){
   270          if(!u.isElement(el)){
   271              console.warn('$api.removeCls Function need el param, el param must be DOM Element');
   272              return;
   273          }
   274          if('classList' in el){
   275              el.classList.remove(cls);
   276          }else{
   277              var preCls = el.className;
   278              var newCls = preCls.replace(cls, '');
   279              el.className = newCls;
   280          }
   281          return el;
   282      };
   283      u.toggleCls = function(el, cls){
   284          if(!u.isElement(el)){
   285              console.warn('$api.toggleCls Function need el param, el param must be DOM Element');
   286              return;
   287          }
   288         if('classList' in el){
   289              el.classList.toggle(cls);
   290          }else{
   291              if(u.hasCls(el, cls)){
   292                  u.removeCls(el, cls);
   293              }else{
   294                  u.addCls(el, cls);
   295              }
   296          }
   297          return el;
   298      };
   299      u.val = function(el, val){
   300          if(!u.isElement(el)){
   301              console.warn('$api.val Function need el param, el param must be DOM Element');
   302              return;
   303          }
   304          if(arguments.length === 1){
   305              switch(el.tagName){
   306                  case 'SELECT':
   307                      var value = el.options[el.selectedIndex].value;
   308                      return value;
   309                      break;
   310                  case 'INPUT':
   311                      return el.value;
   312                      break;
   313                  case 'TEXTAREA':
   314                      return el.value;
   315                      break;
   316              }
   317          }
   318          if(arguments.length === 2){
   319              switch(el.tagName){
   320                  case 'SELECT':
   321                      el.options[el.selectedIndex].value = val;
   322                      return el;
   323                      break;
   324                  case 'INPUT':
   325                      el.value = val;
   326                      return el;
   327                      break;
   328                  case 'TEXTAREA':
   329                      el.value = val;
   330                      return el;
   331                      break;
   332              }
   333          }
   334          
   335      };
   336      u.prepend = function(el, html){
   337          if(!u.isElement(el)){
   338              console.warn('$api.prepend Function need el param, el param must be DOM Element');
   339              return;
   340          }
   341          el.insertAdjacentHTML('afterbegin', html);
   342          return el;
   343      };
   344      u.append = function(el, html){
   345          if(!u.isElement(el)){
   346              console.warn('$api.append Function need el param, el param must be DOM Element');
   347              return;
   348          }
   349          el.insertAdjacentHTML('beforeend', html);
   350          return el;
   351      };
   352      u.before = function(el, html){
   353          if(!u.isElement(el)){
   354              console.warn('$api.before Function need el param, el param must be DOM Element');
   355              return;
   356          }
   357          el.insertAdjacentHTML('beforebegin', html);
   358          return el;
   359      };
   360      u.after = function(el, html){
   361          if(!u.isElement(el)){
   362              console.warn('$api.after Function need el param, el param must be DOM Element');
   363              return;
   364          }
   365          el.insertAdjacentHTML('afterend', html);
   366          return el;
   367      };
   368      u.html = function(el, html){
   369          if(!u.isElement(el)){
   370              console.warn('$api.html Function need el param, el param must be DOM Element');
   371              return;
   372          }
   373          if(arguments.length === 1){
   374              return el.innerHTML;
   375          }else if(arguments.length === 2){
   376              el.innerHTML = html;
   377              return el;
   378          }
   379      };
   380      u.text = function(el, txt){
   381          if(!u.isElement(el)){
   382              console.warn('$api.text Function need el param, el param must be DOM Element');
   383              return;
   384          }
   385          if(arguments.length === 1){
   386              return el.textContent;
   387          }else if(arguments.length === 2){
   388              el.textContent = txt;
   389              return el;
   390          }
   391      };
   392      u.offset = function(el){
   393          if(!u.isElement(el)){
   394              console.warn('$api.offset Function need el param, el param must be DOM Element');
   395              return;
   396          }
   397          var sl = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
   398          var st = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
   399  
   400          var rect = el.getBoundingClientRect();
   401          return {
   402              l: rect.left + sl,
   403              t: rect.top + st,
   404              w: el.offsetWidth,
   405              h: el.offsetHeight
   406          };
   407      };
   408      u.css = function(el, css){
   409          if(!u.isElement(el)){
   410              console.warn('$api.css Function need el param, el param must be DOM Element');
   411              return;
   412          }
   413          if(typeof css == 'string' && css.indexOf(':') > 0){
   414              el.style && (el.style.cssText += ';' + css);
   415          }
   416      };
   417      u.cssVal = function(el, prop){
   418          if(!u.isElement(el)){
   419              console.warn('$api.cssVal Function need el param, el param must be DOM Element');
   420              return;
   421          }
   422          if(arguments.length === 2){
   423              var computedStyle = window.getComputedStyle(el, null);
   424              return computedStyle.getPropertyValue(prop);
   425          }
   426      };
   427      u.jsonToStr = function(json){
   428          if(typeof json === 'object'){
   429              return JSON && JSON.stringify(json);
   430          }
   431      };
   432      u.strToJson = function(str){
   433          if(typeof str === 'string'){
   434              return JSON && JSON.parse(str);
   435          }
   436      };
   437      u.setStorage = function(key, value){
   438          if(arguments.length === 2){
   439              var v = value;
   440              if(typeof v == 'object'){
   441                  v = JSON.stringify(v);
   442                  v = 'obj-'+ v;
   443              }else{
   444                  v = 'str-'+ v;
   445              }
   446              var ls = uzStorage();
   447              if(ls){
   448                  ls.setItem(key, v);
   449              }
   450          }
   451      };
   452      u.getStorage = function(key){
   453          var ls = uzStorage();
   454          if(ls){
   455              var v = ls.getItem(key);
   456              if(!v){return;}
   457              if(v.indexOf('obj-') === 0){
   458                  v = v.slice(4);
   459                  return JSON.parse(v);
   460              }else if(v.indexOf('str-') === 0){
   461                  return v.slice(4);
   462              }
   463          }
   464      };
   465      u.rmStorage = function(key){
   466          var ls = uzStorage();
   467          if(ls && key){
   468              ls.removeItem(key);
   469          }
   470      };
   471      u.clearStorage = function(){
   472          var ls = uzStorage();
   473          if(ls){
   474              ls.clear();
   475          }
   476      };
   477  
   478     
   479      /*by king*/
   480      u.fixIos7Bar = function(el){
   481          if(!u.isElement(el)){
   482              console.warn('$api.fixIos7Bar Function need el param, el param must be DOM Element');
   483              return;
   484          }
   485          var strDM = api.systemType;
   486          if (strDM == 'ios') {
   487              var strSV = api.systemVersion;
   488              var numSV = parseInt(strSV,10);
   489              var fullScreen = api.fullScreen;
   490              var iOS7StatusBarAppearance = api.iOS7StatusBarAppearance;
   491              if (numSV >= 7 && !fullScreen && iOS7StatusBarAppearance) {
   492                  el.style.paddingTop = '20px';
   493              }
   494          }
   495      };
   496      u.fixStatusBar = function(el){
   497          if(!u.isElement(el)){
   498              console.warn('$api.fixStatusBar Function need el param, el param must be DOM Element');
   499              return;
   500          }
   501          var sysType = api.systemType;
   502          if(sysType == 'ios'){
   503              u.fixIos7Bar(el);
   504          }else if(sysType == 'android'){
   505              var ver = api.systemVersion;
   506              ver = parseFloat(ver);
   507              if(ver >= 4.4){
   508                  el.style.paddingTop = '25px';
   509              }
   510          }
   511      };
   512      u.toast = function(title, text, time){
   513          var opts = {};
   514          var show = function(opts, time){
   515              api.showProgress(opts);
   516              setTimeout(function(){
   517                  api.hideProgress();
   518              },time);
   519          };
   520          if(arguments.length === 1){
   521              var time = time || 500;
   522              if(typeof title === 'number'){
   523                  time = title;
   524              }else{
   525                  opts.title = title+'';
   526              }
   527              show(opts, time);
   528          }else if(arguments.length === 2){
   529              var time = time || 500;
   530              var text = text;
   531              if(typeof text === "number"){
   532                  var tmp = text;
   533                  time = tmp;
   534                  text = null;
   535              }
   536              if(title){
   537                  opts.title = title;
   538              }
   539              if(text){
   540                  opts.text = text;
   541              }
   542              show(opts, time);
   543          }
   544          if(title){
   545              opts.title = title;
   546          }
   547          if(text){
   548              opts.text = text;
   549          }
   550          time = time || 500;
   551          show(opts, time);
   552      };
   553      u.post = function(/*url,data,fnSuc,dataType*/){
   554          var argsToJson = parseArguments.apply(null, arguments);
   555          var json = {};
   556          var fnSuc = argsToJson.fnSuc;
   557          argsToJson.url && (json.url = argsToJson.url);
   558          argsToJson.data && (json.data = argsToJson.data);
   559          if(argsToJson.dataType){
   560              var type = argsToJson.dataType.toLowerCase();
   561              if (type == 'text'||type == 'json') {
   562                  json.dataType = type;
   563              }
   564          }else{
   565              json.dataType = 'json';
   566          }
   567          json.method = 'post';
   568          api.ajax(json,
   569              function(ret,err){
   570                  if (ret) {
   571                      fnSuc && fnSuc(ret);
   572                  }
   573              }
   574          );
   575      };
   576      u.get = function(/*url,fnSuc,dataType*/){
   577          var argsToJson = parseArguments.apply(null, arguments);
   578          var json = {};
   579          var fnSuc = argsToJson.fnSuc;
   580          argsToJson.url && (json.url = argsToJson.url);
   581          //argsToJson.data && (json.data = argsToJson.data);
   582          if(argsToJson.dataType){
   583              var type = argsToJson.dataType.toLowerCase();
   584              if (type == 'text'||type == 'json') {
   585                  json.dataType = type;
   586              }
   587          }else{
   588              json.dataType = 'text';
   589          }
   590          json.method = 'get';
   591          api.ajax(json,
   592              function(ret,err){
   593                  if (ret) {
   594                      fnSuc && fnSuc(ret);
   595                  }
   596              }
   597          );
   598      };
   599  
   600  /*end*/
   601      
   602  
   603      window.$api = u;
   604  
   605  })(window);
   606  
   607