vanilla-lib

Vanilla JS library

目前为 2018-06-11 提交的版本,查看 最新版本

此脚本不应直接安装,它是供其他脚本使用的外部库。如果你需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/369430/604938/vanilla-lib.js

  1. /* vanilla-lib */
  2. var mapFlat = ( array,func ) => array.map( x => func(x) ).reduce( (a,b) => a.concat(b) ),
  3. parent = elem => ( ! elem ? null : elem.parentNode ),
  4. isarr = expr => ( 'object' === typeof expr && Array === expr.constructor ),
  5. isfn = expr => ( 'function' === typeof expr ),
  6. test = ( expr,func,other ) => ( !! expr ? func(expr) : isfn(other) ? other(expr) : other ),
  7. log = console.debug,
  8. on = ( elem,event,func ) => elem.addEventListener(event, func),
  9. $$ = ( sel,elem ) => Array.slice((elem || document).querySelectorAll(sel)),
  10. $ = ( sel,elem ) => (elem || document).querySelector(sel);
  11.  
  12. //Array.prototype.mapFlat = function( func ) { return mapFlat(this, func); };
  13.  
  14. function attr( elem, name, value ) {
  15. if ( isarr(elem) ) {
  16. return elem.map( el => attr(el, name, value) );
  17. }
  18.  
  19. if ( null === value ) {
  20. elem.removeAttribute(name);
  21. } else {
  22. elem.setAttribute(name, value);
  23. }
  24. return elem;
  25. }
  26.  
  27. function create( html, containerType ) {
  28. let container = null,
  29. result = null;
  30. containerType = containerType || 'div';
  31. create[ containerType ] =
  32. container = create[ containerType ] || document.createElement(containerType);
  33. container.innerHTML = html;
  34. result = Array.slice(container.childNodes)
  35. .map( elem => (elem.remove(), elem) );
  36. if ( 1 == result.length ) {
  37. result = result[ 0 ];
  38. }
  39. return result;
  40. }
  41.  
  42. function traverse( elem, up, sideways, elementsOnly, lastIfNull ) {
  43. let last = elem;
  44. while ( !! elem && up -- > 0 ) elem = (last = elem, parent(elem));
  45.  
  46. let prop = ( elementsOnly ? 'Element' : '' ) +'Sibling';
  47. if ( sideways < 0 ) {
  48. while ( !! elem && sideways ++ < 0 ) elem = (last = elem, elem[ 'previous'+ prop ]);
  49. } else if ( sideways > 0 ) {
  50. while ( !! elem && sideways -- > 0 ) elem = (last = elem, elem[ 'next'+ prop ]);
  51. }
  52.  
  53. return ( ! lastIfNull ? elem : elem || last );
  54. }