-
-
Save Willovent/b65eff5585f8db8f9ff1 to your computer and use it in GitHub Desktop.
The W lib (Mini JQuery with some underscore)
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
// Wilib: lightweigth JQuery clone with no ie support | |
// $ is replace by W | |
window.W = function(selector) { | |
if (selector[0] == '<' && selector[selector.length - 1] == '>') { | |
var elem = selector.replace('>', '').replace('<', ''); | |
var node = document.createElement(elem); | |
wObject(node); | |
return node; | |
} | |
var elems = document.querySelectorAll(selector); | |
return wArray(elems); | |
} | |
W.select = function(data, props) { | |
var newArray = []; | |
data.forEach(function(e) { | |
var newObj = {}; | |
if (typeof(props) === "string") | |
props = [props]; | |
props.forEach(function(prop) { | |
if (e[prop] !== undefined) | |
newObj[prop] = e[prop]; | |
}); | |
newArray.push(newObj); | |
}); | |
return newArray; | |
}; | |
W.where = function(data, predicate) { | |
var newArray = []; | |
data.forEach(function(e) { | |
var add = true; | |
for (pred in predicate) { | |
if (predicate[pred] != e[pred]) { | |
add = false; | |
break; | |
} | |
} | |
if (add) | |
newArray.push(e); | |
}); | |
return newArray; | |
}; | |
W.postJSON = function(url, data) { | |
return new Promise(function(resolve, reject) { | |
var req = new XMLHttpRequest(); | |
req.open('POST', url, true); | |
req.onreadystatechange = function() { | |
if (req.readyState == 4) { | |
if (req.status == 200) | |
resolve(JSON.parse(req.responseText)); | |
else | |
throw new Error(req.statusText); | |
} | |
}; | |
req.onerror = function() { | |
throw new Error("network error"); | |
}; | |
req.send(data); | |
}); | |
}; | |
W.getJSON = function(url, data) { | |
return new Promise(function(resolve, reject) { | |
var req = new XMLHttpRequest(); | |
req.open('GET', url, true); | |
req.onreadystatechange = function() { | |
if (req.readyState == 4) { | |
if (req.status == 200) | |
resolve(JSON.parse(req.responseText)); | |
else | |
throw new Error(req.statusText); | |
} | |
}; | |
req.onerror = function() { | |
throw new Error("network error"); | |
}; | |
req.send(data); | |
}); | |
}; | |
var wObject = function(node) { | |
node.on = function(events, callback) { | |
var eventsArray = events.split(','); | |
for (var e in eventsArray) | |
this['on' + eventsArray[e]] = function(event) { | |
event.origin = this; | |
event.target = wObject(event.target); | |
callback(event); | |
} | |
return this; | |
}; | |
node.css = function(styles) { | |
for (var prop in styles) | |
this.style[prop] = styles[prop]; | |
return this; | |
}; | |
node.find = function(selector) { | |
var elems = this.querySelectorAll(selector); | |
return wArray(elems); | |
} | |
} | |
var wArray = function(that) { | |
//Add function on node | |
for (var i = 0; i < that.length; i++) { | |
wObject(that[i]); | |
} | |
//distribute function on NodesArray | |
that.on = function(event, callback) { | |
for (var i = 0; i < this.length; i++) | |
this[i].on(event, callback); | |
return this; | |
}; | |
that.css = function(styles) { | |
for (var i = 0; i < this.length; i++) | |
this[i].css(styles); | |
return this; | |
}; | |
that.data = function(data, set) { | |
if (set !== undefined) { | |
for (var i = 0; i < this.length; i++) | |
this[i].dataset[data] = set; | |
return this; | |
} else { | |
return this[0].dataset[data]; | |
} | |
}; | |
//classic forEach | |
that.forEach = function(callback) { | |
for (var i = 0; i < this.length; i++) { | |
callback(this[i]); | |
} | |
return this; | |
}; | |
return that; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment