vanilla-lib

Vanilla JS library

当前为 2018-06-15 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/369430/605944/vanilla-lib.js

  1. /* vanilla-lib */
  2. function ImportVanillaLib( scope ) {
  3. if ( null === scope || 'undefined' === typeof scope ) {
  4. return false;
  5. }
  6.  
  7. scope.mapFlat = ( array,func ) => array.map( x => func(x) ).reduce( (a,b) => a.concat(b) );
  8. scope.parenth = ( elem,nth ) => traverse(elem, scope.ifndef(nth, 1), 0);
  9. scope.ifndef = ( expr,value ) => ( scope.ndef(expr) ? value : expr );
  10. scope.ispojo = expr => scope.isobj(expr, Object);
  11. scope.export = ( source,target,members ) => ( Object.keys(source).filter( key => ! members || members.includes(key) )
  12. .forEach( key => target[ key ] = source[ key ] );
  13. scope.ifnan = ( expr,value ) => ( isNaN(expr) ? value : expr );
  14. scope.isobj = ( expr,type ) => ( 'object' === typeof expr && ( ! type || scope.isfn(expr.constructor
  15. && type === ( scope.isfn(type) ? expr.constructor : expr.constructor.name ) ) );
  16. scope.isarr = expr => scope.isobj(expr, Array);
  17. scope.isstr = expr => ( 'string' === typeof expr );
  18. scope.isfn = expr => ( 'function' === typeof expr );
  19. scope.ndef = expr => ( 'undefined' === typeof expr );
  20. scope.test = ( expr,func,other ) => ( !! expr ? func(expr) : scope.isfn(other) ? other(expr) : other );
  21. scope.fire = ( elem,event,args ) => elem.dispatchEvent( scope.isobj(event) ? even
  22. : new Event( event, scope.ifndef(args, { 'bubbles':true, 'cancelable':true }) ) );
  23. scope.warn = console.warn;
  24. scope.log = console.debug;
  25. scope.on = ( elem,event,func ) => elem.addEventListener(event, func);
  26. scope.$$ = ( sel,elem ) => Array.slice((elem || document).querySelectorAll(sel));
  27. scope.$ = ( sel,elem ) => (elem || document).querySelector(sel);
  28. scope.aggRate = ( amount,rate,periods ) => ( ! periods ? amount : scope.aggRate(amount * rate, rate, periods - 1) ),
  29. scope.toDec = expr => ( Math.round(parseFloat((expr +'').replace(/\$|,/g, '')) * 100) / 100 );
  30. //Array.prototype.mapFlat = function( func ) { return mapFlat(this, func); };
  31. scope.appendTo = function( element, parent, reference ) {
  32. if ( !! reference ) {
  33. parent = reference.parentNode;
  34. reference = reference.nextSibling;
  35. }
  36. if ( !! reference ) {
  37. return scope.prependTo(element, parent, reference);
  38. } else if ( !! parent ) {
  39. parent.append(element);
  40. } else {
  41. scope.warn('*** appendTo() could not add element: No parent or reference element provided');
  42. }
  43. return element;
  44. };
  45. scope.attr = function( elem, name, value ) {
  46. if ( scope.isarr(elem) ) {
  47. return elem.map( el => scope.attr(el, name, value) );
  48. }
  49. scope.keysAndValues(name, value, ( n,v ) => ( null === v ? elem.removeAttribute(n) : elem.setAttribute(n, v) ) );
  50. return elem;
  51. };
  52. scope.create = function( html, containerType ) {
  53. let container = null,
  54. result = null,
  55. attrs, style;
  56. if ( scope.isobj(containerType) ) {
  57. attrs = containerType.attrs;
  58. style = containerType.style;
  59. containerType = containerType.container;
  60. }
  61. containerType = containerType || 'div';
  62. create[ containerType ] =
  63. container = create[ containerType ] || document.createElement(containerType);
  64. container.innerHTML = html;
  65. result = Array.slice(container.childNodes)
  66. .map( elem => (elem.remove(), elem) );
  67. if ( !! attrs ) {
  68. scope.attr(result, attrs);
  69. }
  70. if ( !! style ) {
  71. scope.css(result, style);
  72. }
  73. if ( 1 == result.length ) {
  74. result = result[ 0 ];
  75. }
  76. return result;
  77. };
  78. scope.css = function( element, key, value ) {
  79. if ( isarr(element) ) {
  80. return element.map( el => css(el, key, value) );
  81. }
  82. keysAndValues(key, value, ( k,v ) => element.style[ k ] = v );
  83. return element;
  84. };
  85. scope.keysAndValues = function( key, value, action ) {
  86. // Case 1: key is an object (and there is no value)
  87. if ( scope.isobj(key) && ! value ) {
  88. return Object.keys(key)
  89. .map( k => action(k, key[ k ]) );
  90. // Case 2: key is an array
  91. } else if ( scope.isarr(key) ) {
  92. // Case 1.a: value is an array of the same length
  93. if ( scope.isarr(value) && key.length === value.length ) {
  94. return key.map( ( k,i ) => action(k, value[ i ]) );
  95. // Case 1.b: value is considered a simple, plain value
  96. } else {
  97. return key.map( k => action(k, value) );
  98. }
  99. // Default Case: key and value considered as simple, plain values
  100. } else {
  101. return action(key, value);
  102. }
  103. };
  104. scope.prependTo = function( element, parent, reference ) {
  105. if ( ! reference && !! parent ) {
  106. reference = parent.childNodes[ 0 ];
  107. }
  108. if ( !! reference ) {
  109. reference.parentNode.insertBefore(element, reference);
  110. } else if ( !! parent ) {
  111. parent.append(element);
  112. } else {
  113. scope.warn('*** prependTo() could not add element: No parent or reference element provided');
  114. }
  115. return element;
  116. };
  117. scope.toDec2 = function( amount ) {
  118. amount = scope.toDec(amount);
  119. if ( isNaN(amount) ) {
  120. return null;
  121. }
  122. let segs = (amount +'').split('.');
  123. return segs[ 0 ] +'.'+ ((segs[ 1 ] || 0) +'0').slice(0, 2);
  124. };
  125. scope.toMoney = function( amount ) {
  126. let dec2 = scope.toDec2(amount);
  127. return ( isNaN(dec2) ? null : dec2 < 0 ? '-$ '+ (-dec2) : '$ '+ dec2 );
  128. };
  129. scope.traverse = function( elem, up, sideways, elementsOnly, lastIfNull ) {
  130. let last = elem;
  131. while ( !! elem && up -- > 0 ) elem = (last = elem, elem.parentNode);
  132. let prop = ( elementsOnly ? 'Element' : '' ) +'Sibling';
  133. if ( sideways < 0 ) {
  134. while ( !! elem && sideways ++ < 0 ) elem = (last = elem, elem[ 'previous'+ prop ]);
  135. } else if ( sideways > 0 ) {
  136. while ( !! elem && sideways -- > 0 ) elem = (last = elem, elem[ 'next'+ prop ]);
  137. }
  138. return ( ! lastIfNull ? elem : elem || last );
  139. };
  140. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址