此腳本不應該直接安裝,它是一個供其他腳本使用的函式庫。欲使用本函式庫,請在腳本 metadata 寫上: // @require https://update.cn-greasyfork.org/scripts/369430/604943/vanilla-lib.js
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式
(我已經安裝了使用者樣式管理器,讓我安裝!)
/* vanilla-lib */
var mapFlat = ( array,func ) => array.map( x => func(x) ).reduce( (a,b) => a.concat(b) ),
parent = elem => ( ! elem ? null : elem.parentNode ),
isarr = expr => ( 'object' === typeof expr && Array === expr.constructor ),
isfn = expr => ( 'function' === typeof expr ),
test = ( expr,func,other ) => ( !! expr ? func(expr) : isfn(other) ? other(expr) : other ),
log = console.debug,
on = ( elem,event,func ) => elem.addEventListener(event, func),
$$ = ( sel,elem ) => Array.slice((elem || document).querySelectorAll(sel)),
$ = ( sel,elem ) => (elem || document).querySelector(sel);
//Array.prototype.mapFlat = function( func ) { return mapFlat(this, func); };
var aggrate = ( amount,rate,periods ) => ( ! periods ? amount : aggrate(amount * rate, rate, periods - 1) ),
toDec = expr => ( Math.round(parseFloat(expr) * 100) / 100 ),
toMny = amount => ( (segs => isNaN(segs[ 0 ]) ? null : '$ '+ segs[ 0 ] +'.'+ ((segs[ 1 ] || 0) +'00').slice(0, 2)) ((toDec(amount) +'').split('.')) );
function attr( elem, name, value ) {
if ( isarr(elem) ) {
return elem.map( el => attr(el, name, value) );
}
if ( null === value ) {
elem.removeAttribute(name);
} else {
elem.setAttribute(name, value);
}
return elem;
}
function create( html, containerType ) {
let container = null,
result = null;
containerType = containerType || 'div';
create[ containerType ] =
container = create[ containerType ] || document.createElement(containerType);
container.innerHTML = html;
result = Array.slice(container.childNodes)
.map( elem => (elem.remove(), elem) );
if ( 1 == result.length ) {
result = result[ 0 ];
}
return result;
}
function traverse( elem, up, sideways, elementsOnly, lastIfNull ) {
let last = elem;
while ( !! elem && up -- > 0 ) elem = (last = elem, parent(elem));
let prop = ( elementsOnly ? 'Element' : '' ) +'Sibling';
if ( sideways < 0 ) {
while ( !! elem && sideways ++ < 0 ) elem = (last = elem, elem[ 'previous'+ prop ]);
} else if ( sideways > 0 ) {
while ( !! elem && sideways -- > 0 ) elem = (last = elem, elem[ 'next'+ prop ]);
}
return ( ! lastIfNull ? elem : elem || last );
}