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