Last active
March 22, 2018 08:23
-
-
Save c7x43t/7d873ce9f2ad76c3d12143998588de2c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
merc={ | |
_kEquip:function(e){ | |
e.setDefaultValue=function(value){ | |
if(!(e instanceof Array)) e=merc._Array.from(e); | |
e.map(e=>{ | |
e.value=value; | |
e.addEventListener("focusin",(e)=>{ | |
if(e.target.value===value) e.target.value=""; | |
}); | |
e.addEventListener("focusout",(e)=>{ | |
if(e.target.value==="") e.target.value=value; | |
}); | |
}); | |
} | |
return e; | |
} | |
}; | |
$$k=s=>merc._kEquip(Array.from(document.querySelectorAll(s)).map(e=>merc._kEquip(e))); | |
document.addEventListener("DOMContentLoaded",e=>{ | |
$$k("input[name='email']").setDefaultValue("e-mail"); | |
$$k("input[name='password']").setDefaultValue("password"); | |
}); | |
function $$(sel){ | |
_$=(e,sel)=>Array.from(e.querySelectorAll(sel)); // return array of elements from selector query | |
return _$(document,sel).map(e=>{ // equip elements with ... | |
e.query=sel=>_$(e,sel); // querySelectorAll shorthand | |
e.hasClass=str=>el.classList?el.classList.contains(str):new RegExp('(^| )'+str+'( |$)','gi').test(e.className); | |
e.addClass=str=>e.classList?e.classList.add(str):e.name+=' '+name; | |
e.removeClass=str=>el.classList?el.classList.remove(str):el.className=el.className.replace(new RegExp('(^|\\b)'+str.split(' ').join('|')+'(\\b|$)','gi'),' '); | |
e.after=str=>e.insertAdjacentHTML('afterend', str); | |
e.before=str=>e.insertAdjacentHTML('beforebegin', str); | |
e.append=el=>e.appendChild(el); | |
e.prepend=el=>e.insertBefore(el, e.firstChild); | |
e.remove=()=>e.parentNode.removeChild(e); | |
e.replace=str=>e.outerHTML=str; | |
e.clone=()=>e.cloneNode(true); | |
e.empty=()=>e.innerHTML=''; | |
e.attr=(str,val)=>val?e.setAttribute(str,val):e.getAttribute(str); | |
e.css=(str,val)=>val?e.style[str]=val:getComputedStyle(e)[str]; | |
e.html=str=>str?e.innerHTML=str:e.innerHTML; | |
e.text=str=>str?e.textContent=str:e.textContent; | |
e.next=()=>e.nextElementSibling; | |
e.prev=()=>e.previousElementSibling; | |
e.offset=()=>{ | |
var rect = el.getBoundingClientRect(); | |
return { | |
top: rect.top + document.body.scrollTop, | |
left: rect.left + document.body.scrollLeft | |
} | |
}; | |
e.parent=()=>e.parentNode; | |
e.siblings=()=>Array.prototype.filter.call(e.parentNode.children,child=>child !== e); | |
e.position=()=>{return{left: e.offsetLeft, top: e.offsetTop}}; | |
return e; | |
}); | |
} | |
// $$.gather(query1,query2,query3) => joined list of all uqeries | |
(()=>{ | |
// private vars | |
var a=2; | |
// private functions | |
_$=(e,sel)=>Array.from(e.querySelectorAll(sel)); | |
function equip(a){ | |
// map=fn=>a.map(e=>fn(arguments)); | |
a.html=str=>a.map(e=>str?e.innerHTML=str:e.innerHTML); | |
a.on=(str,fn)=>a.map(e=>e.addEventListener(str,fn)); | |
return a; | |
} | |
// main | |
var $$=sel=>{ | |
var els=_$(document,sel); | |
return equip(els); | |
} | |
// public vars | |
$$.ajax=()=>{ | |
} | |
// export | |
window.$$=$$; | |
})(); | |
function $$(sel){ | |
_$=(e,sel)=>Array.from(e.querySelectorAll(sel)); // return array of elements from selector query | |
var e=_$(document,sel); // equip elements with ... | |
e.query=sel=>_$(e,sel); // querySelectorAll shorthand | |
e.hasClass=str=>el.classList?el.classList.contains(str):new RegExp('(^| )'+str+'( |$)','gi').test(e.className); | |
e.addClass=str=>e.classList?e.classList.add(str):e.name+=' '+name; | |
e.removeClass=str=>el.classList?el.classList.remove(str):el.className=el.className.replace(new RegExp('(^|\\b)'+str.split(' ').join('|')+'(\\b|$)','gi'),' '); | |
e.toggleClass=str=>e.hasClass(str)?e.removeClass(str):e.addClass(str); | |
e.after=str=>e.insertAdjacentHTML('afterend', str); | |
e.before=str=>e.insertAdjacentHTML('beforebegin', str); | |
e.append=el=>e.appendChild(el); | |
e.prepend=el=>e.insertBefore(el, e.firstChild); | |
e.remove=()=>e.parentNode.removeChild(e); | |
e.replace=str=>e.outerHTML=str; | |
e.clone=()=>e.cloneNode(true); | |
e.empty=()=>e.innerHTML=''; | |
e.attr=(str,val)=>val?e.setAttribute(str,val):e.getAttribute(str); | |
e.css=(str,val)=>val?e.style[str]=val:getComputedStyle(e)[str]; | |
e.html=str=>str?e.innerHTML=str:e.innerHTML; | |
e.text=str=>str?e.textContent=str:e.textContent; | |
e.next=()=>e.nextElementSibling; | |
e.prev=()=>e.previousElementSibling; | |
e.offset=()=>{ | |
var rect = el.getBoundingClientRect(); | |
return { | |
top: rect.top + document.body.scrollTop, | |
left: rect.left + document.body.scrollLeft | |
} | |
}; | |
e.parent=()=>e.parentNode; | |
e.siblings=()=>Array.prototype.filter.call(e.parentNode.children,child=>child !== e); | |
e.position=()=>{return{left: e.offsetLeft, top: e.offsetTop}}; | |
//Events | |
e.on=(str,fn)=>e.addEventListener(str,fn); | |
e.off=(str,fn)=>e.removeEventListener(str,fn); | |
e.ready=fn=>(document.attachEvent?document.readyState==="complete":document.readyState!=="loading")?fn():document.addEventListener('DOMContentLoaded',fn); | |
return e; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// $$.gather(query1,query2,query3) => joined list of all uqeries | |
(()=>{ | |
// ## private vars ## | |
var regexPreFilter=/[.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*/; | |
var regexSpaceFilter=/ /; | |
// ## private functions ## | |
// fast functions copied from: https://github.com/codemix/fast.js/ | |
function bindInternal3(func, thisContext) { | |
return function (a, b, c) { | |
return func.call(thisContext, a, b, c); | |
}; | |
} | |
// fast Map | |
function fastMap(subject, fn, thisContext) { | |
var length = subject.length, | |
result = new Array(length), | |
iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, | |
i; | |
for (i = 0; i < length; i++) { | |
result[i] = iterator(subject[i], i, subject); | |
} | |
return result; | |
}; | |
// fast Reduce | |
function fastReduce (subject, fn, initialValue, thisContext) { | |
var length = subject.length, | |
iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn, | |
i, result; | |
if (initialValue === undefined) { | |
i = 1; | |
result = subject[0]; | |
} | |
else { | |
i = 0; | |
result = initialValue; | |
} | |
for (; i < length; i++) { | |
result = iterator(result, subject[i], i, subject); | |
} | |
return result; | |
}; | |
// fast Filter | |
function fastFilter (subject, fn, thisContext) { | |
var length = subject.length, | |
result = [], | |
iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, | |
i; | |
for (i = 0; i < length; i++) { | |
if (iterator(subject[i], i, subject)) { | |
result.push(subject[i]); | |
} | |
} | |
return result; | |
}; | |
// faster than querySelectorAll | |
function fastQuery(el,selector){ | |
var nodeList; | |
if(regexPreFilter.exec(selector)&&!regexSpaceFilter.exec(selector)){ | |
if(selector[0]==="."){ | |
nodeList=el.getElementsByClassName(selector.replace('.','')) | |
} | |
else if(selector[0]==="#"){ | |
nodeList=el.getElementById(selector.replace('#','')) | |
} | |
else{ | |
nodeList=el.getElementsByTagName(selector) | |
} | |
}else{ | |
nodeList=el.querySelectorAll(selector) | |
} | |
return nodeList; | |
} | |
/* | |
// obsolete with equip fast array native functions to nodeList | |
function queryToArray(el,selector){ | |
return Array.from(fastQuery(el,selector)); | |
}; | |
//*/ | |
function equip(nodeList){ | |
// map=fn=>a.map(e=>fn(arguments)); | |
nodeList.map=fn=>fastMap(nodeList,fn); | |
nodeList.reduce=fn=>fastReduce(nodeList,fn); | |
nodeList.filter=fn=>fastFilter(nodeList,fn); | |
nodeList.html=str=>{ | |
nodeList.map(el=>str?el.innerHTML=str:el.innerHTML); | |
return nodeList; | |
}; | |
nodeList.on=(str,fn)=>{ | |
fastMap(nodeList,el=>el.addEventListener(str,fn)); | |
return nodeList; | |
}; | |
// faster replace operations | |
// {fn} must return an element | |
nodeList.map.replace=fn=>{ | |
var list=[]; | |
var nodes=Array.from(nodeList); | |
$$.map(nodes,e=>{ | |
var k=e.cloneNode(true); | |
fn(k); | |
//list.push(k); | |
e.parentNode.replaceChild(k, e); | |
}); | |
$$.map(nodes,(e,i)=>{ | |
//e.parentNode.replaceChild(list[i], e); | |
}); | |
} | |
return nodeList; | |
} | |
// main | |
var $$=selector=>{ | |
var nodeArray=fastQuery(document,selector); | |
return equip(nodeArray); | |
} | |
// ## public vars ## | |
$$.map=fastMap; | |
$$.reduce=fastReduce; | |
$$.filter=fastFilter; | |
$$.ajax=()=>{ | |
} | |
// export | |
window.$$=$$; | |
})(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function bindInternal3 (func, thisContext) { | |
return function (a, b, c) { | |
return func.call(thisContext, a, b, c); | |
}; | |
} | |
// fast Map | |
function fastMap (subject, fn, thisContext) { | |
var length = subject.length, | |
result = new Array(length), | |
iterator = thisContext !== undefined ? bindInternal3(fn, thisContext) : fn, | |
i; | |
for (i = 0; i < length; i++) { | |
result[i] = iterator(subject[i], i, subject); | |
} | |
return result; | |
}; | |
// fast Query | |
function query(sel){ | |
var pre=/[.#]?-?[_a-zA-Z]+[_a-zA-Z0-9-]*/; | |
var sp=/ /; | |
var _=document; | |
var els; | |
if(pre.exec(s)&&!sp.exec(s)){ | |
if(s[0]==="."){ | |
els=_.getElementsByClassName(s.replace('.','')) | |
} | |
else if(s[0]==="#"){ | |
els=_.getElementById(s.replace('#','')) | |
} | |
else{ | |
els=_.getElementsByTagName(s) | |
} | |
}else{ | |
els=_.querySelectorAll(s) | |
} | |
return els; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment