Skip to content

Instantly share code, notes, and snippets.

@Willovent
Last active September 26, 2015 13:27
Show Gist options
  • Save Willovent/b65eff5585f8db8f9ff1 to your computer and use it in GitHub Desktop.
Save Willovent/b65eff5585f8db8f9ff1 to your computer and use it in GitHub Desktop.
The W lib (Mini JQuery with some underscore)
// 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