Last active
January 4, 2016 06:28
-
-
Save PifyZ/8581761 to your computer and use it in GitHub Desktop.
Mini jQuery
This file contains 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() { | |
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