Skip to content

Instantly share code, notes, and snippets.

@PifyZ
Last active January 4, 2016 06:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PifyZ/8581761 to your computer and use it in GitHub Desktop.
Save PifyZ/8581761 to your computer and use it in GitHub Desktop.
Mini jQuery
(function() {
var _ = {};
_.concat = function(destination, source) {
for (var property in source) {
if (source.hasOwnProperty(property)) {
destination[property] = source[property];
}
}
return destination;
};
var element = (function() {
return function(el) {
var is_uniq = !(el instanceof NodeList);
var els = is_uniq ? [el] : el;
// contient-il la classe ?
var has_class = function(an_element, classname) {
return an_element.className.match(new RegExp('(\\s|^)' + classname + '(\\s|$)')) ? true : false;
};
return {
// récupérer un attribut
get_attribute: function(attr) {
return is_uniq ? (el.getAttribute(attr) || el[attr]) : undefined;
},
// modifie un attribut
set_attribute: function(attr, value) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i][attr] = value;
}
return this;
},
// ajoute un évènement
on: function(type, fn, capture) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].addEventListener(type, fn, capture || false);
}
return this;
},
// supprime un évènement
off: function(type, fn, capture) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].removeEventListener(type, fn, capture || false);
}
return this;
},
// affiche les éléments
show: function() {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].style.display = 'block';
}
return this;
},
// cache les éléments
hide: function() {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].style.display = 'none';
}
return this;
},
// obtenir le texte de l'élément
text: function(new_text) {
if (!is_uniq)
return undefined;
if (new_text) {
el.innerHTML = new_text;
return this;
} else {
return el.innerHTML;
}
},
// obtenir un élément data
data: function(data) {
return is_uniq ? el.getAttribute('data-' + data) : undefined;
},
// contient-il la classe ?
has_class: function(classname) {
//return has_class(el, classname);
return el.classList.contains(classname);
},
// ajouter une classe
add_class: function(classname) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].classList.add(classname);
}
return this;
},
// supprimer une classe
remove_class: function(classname) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].classList.remove(classname);
}
return this;
},
// supprimer les classes
clear_class: function() {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].className = '';
}
return this;
},
// remplacer une classe
replace_class: function(old_classname, new_classname) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].classList.remove(old_classname);
els[i].classList.add(new_classname);
}
return this;
},
// remplacer les classes par des nouvelles
replace_classes: function(classnames) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].className = classnames;
}
return this;
},
// basculer une classe
toggle_class: function(classname) {
for (var i = 0, len = els.length ; i < len ; i++) {
els[i].classList.toggle(classname);
}
return this;
},
parent: function() {
return $(els.parentNode);
},
next: function() {
return $(els.nextSibling);
},
previous: function() {
return $(els.previousSibling);
},
children: function() {
return $(els.children);
},
first_child: function() {
return $(els.children[0]);
},
last_child: function() {
return $(eks.lastElementChild)
},
fade_out: function() {
for (var i = 0, len = els.length ; i < len ; i++) {
var s = els[i].style;
s.opacity = 1;
(function fade(){
(s.opacity -= .1) < 0 ? s.display = 'none' : setTimeout(fade, 40);
})();
}
},
// retourne l'élément du DOM
dom: function() {
return el;
}
}
}
})();
var $ = function(el) {
// L'élément est-il déjà identifié ?
if (el instanceof HTMLElement || el === document || el === window) {
return element(el);
} else {
return element(document.querySelectorAll(el));
}
};
$.fn = {}; // todo
// à finir : http://api.jquery.com/jquery.ajax/
$.ajax = function(opts) {
var opts_default = {
type: 'POST',
url: window.location.href,
data: '',
success: function(data) {}
};
opts = _.concat(opts_default, opts);
var r = new XMLHttpRequest();
r.open(opts.type, opts.url, true);
console.log(r);
r.onreadystatechange = function () {
console.log(r);
if (r.readyState == 4 && (r.status == 200 || r.status == 0))
opts.success(r);
};
r.send(opts.data);
};
window.$ = $;
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment