/*! * Sambuca JavaScript Library v0.1 * * Copyright 2017 .Maui * Released under the MIT license * * Date: 2017-03-20T17:12Z */ var Sambuca; Sambuca = function (selector) { var self = {}; self.selector = selector; self.elements = (typeof selector === 'object') ? new Array(self.selector) : document.querySelectorAll(self.selector); self.length = self.elements.length; self.elements = (typeof self.elements !== 'undefined' && self.elements.length > 0) ? self.elements : null; /*self.length = function(){ return (self.elements == null) ? 0 : self.elements.length; }*/ self.on = function (type, callback) { if (!self.elements) { return undefined; } else { for (var i = 0; i < self.elements.length; i++) { self.elements[i]['on' + type] = callback; } } return self; }; self.attr = function (name, value) { if (!self.elements) { return undefined; } else if (value === undefined) { return self.elements[0].getAttribute(name); } else if (self.elements) { for (var i = 0; i < self.elements.length; i++) { self.elements[i].setAttribute(name, value); } } return self; }; self.removeAttr = function (name) { if (self.elements) { for (var i = 0; i < self.elements.length; i++) { self.elements[i].removeAttribute(name); } } return self; }; self.value = self.val = function (value) { if (!self.elements) { return undefined } else if (value === undefined) { return self.elements[0].value; } else { for (var i = 0; i < self.elements.length; i++) { self.elements[i].value = value; } } return self; }; self.text = function (value) { if (value === undefined && self.elements) return self.elements[0].textContent; else if (self.elements) { for (var i = 0; i < self.elements.length; i++) { self.elements[i].textContent = value } return self; } else { return undefined; } }; self.html = self.drink = function (value) { if (value === undefined && self.elements) { return self.elements[0].innerHTML; } else if (self.elements) { for (var i = 0; i < self.elements.length; i++) { self.elements[i].innerHTML = value } return self; } else { return undefined; } }; self.next = function () { self.elements = new Array(self.elements[0].nextElementSibling); return self; }; self.prev = function () { self.elements = new Array(self.elements[0].previousElementSibling); return self; }; self.hide = function () { if (self.elements) { for (var i = 0; i < self.elements.length ; i++) { self.elements[i].style.display = 'none'; } } return self; }; self.show = function () { //show an element if (self.elements) { for (var i = 0; i < self.elements.length; i++) { self.elements[i].style.display = ''; } } return self; }; self.after = function (htmlString) { //insert after a parent element self.elements[0].insertAdjacentHTML('afterend', htmlString); return self; }; self.replaceWith = function (htmlString) { //insert after a parent element self.elements[0].outerHTML = htmlString; return self; }; self.before = function (htmlString) { //insert before a parent element self.elements[0].insertAdjacentHTML('beforebegin', htmlString); return self; }; self.append = function (elm) { self.elements[0].appendChild(elm); return self; }; self.height = function () { //get the height of an element return self.elements[0].offsetHeight; }; self.width = function () { //get the width return self.elements[0].offsetWidth; }; self.first = function () { if (self.elements) { self.elements = new Array(self.elements[0]); } return self; }; self.parent = function () { //get parent element if (self.elements) { var tmp = new Array(); for (var i = 0; i < self.elements.length; i++) { if (tmp.indexOf(self.elements[i].parentNode) == -1) tmp[i] = self.elements[i].parentNode; } self.elements = tmp; } return self; }; self.children = function (key) { //get children elements if (!key) key = 0; self.elements[0] = self.elements[0].childNodes[key]; return self; }; self.css = function (name, value) { //add css rule inline if (self.elements) { for (var i = 0; i < self.elements.length; i++) { self.elements[i].style[name] = value; } } else { if (!value) return self.elements[0].style[name]; self.elements[0].style[name] = value; } return self; }; self.class = function (className) { //if no class set, return the current class if (!self.elements) { return undefined; } else if (className === undefined) { return self.elements[0].getAttribute('class'); } return self; }; self.addClass = function (className) { if (!className) { return null; } else if (self.elements) { for (var i = 0; i < self.elements.length; i++) { self.elements[i].className += ' ' + className; } } return self; }; self.removeClass = function (className) { if (self.elements) { for (var i = 0; i < self.elements.length; i++) { var otherClasses = self.elements[i].className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); self.elements[i].setAttribute('class', otherClasses); } } else { return undefined; } return self; }; self.toggleClass = function (className) { //toggle a class if (self.elements[0].classList) { self.elements[0].classList.toggle(className); } else { var classes = self.elements[0].className.split(' '); var existingIndex = classes.indexOf(className); if (existingIndex >= 0) { classes.splice(existingIndex, 1); } else { classes.push(className); self.elements[0].className = classes.join(' '); } } return self; }; self.exists = function () { return self.elements != null && self.elements.length > 0; }; self.each = function (fn) { if (self.elements) { for (var i = 0; i < self.elements.length; ++i) { fn.call(self.elements[i], i); } } else { return undefined; } return self; }; self.isEmpty = function () { if (self.elements) { var tagname = self.elements[0].tagName.lower(); if ((tagname == 'input' && $(self.elements[0]).attr("type").lower() == "text") || tagname == 'textarea') { return self.elements[0].value == ""; } else { return self.elements[0].innerHTML == ""; } } return undefined; }; self.isEmptyOrWhiteSpace = function () { if (self.elements) { var tagname = self.elements[0].tagName.lower(); if ((tagname == 'input' && $(self.elements[0]).attr("type").lower() == "text") || tagname == 'textarea') { return self.elements[0].value.trim() == ""; } else { return self.elements[0].innerHTML.trim() == ""; } } return undefined; }; return self; }; window.Sambuca = Sambuca; window.$ === undefined && (window.$ = Sambuca) ; (function($) { $.version = "0.1"; var win = window, _xhrf = null; var _extend = function(o) { $.each(Array.prototype.slice.call(arguments, 1), function(a) { for (var p in a) if (a[p] !== void 0) o[p] = a[p]; }); return o; }; Sambuca.xhr = function() { return new XMLHttpRequest(); }; Sambuca._xhrResp = function(xhr) { var ct = xhr.getResponseHeader("Content-Type") || "text/xml"; switch (ct.split(";")[0]) { case "text/xml": return xhr.responseXML; case "text/json": case "application/json": case "text/javascript": case "application/javascript": case "application/x-javascript": return win.JSON ? JSON.parse(xhr.responseText) : eval(xhr.responseText); default: return xhr.responseText; } }; Sambuca._formData = function(o) { var kvps = [], regEx = /%20/g; for (var k in o) kvps.push(encodeURIComponent(k).replace(regEx, "+") + "=" + encodeURIComponent(o[k].toString()).replace(regEx, "+")); return kvps.join('&'); }; Sambuca.ajax = function(o) { var xhr = Sambuca.xhr(), timer, n = 0; o = _extend({ userAgent: "XMLHttpRequest", lang: "en", type: "GET", data: null, async: true, dataType: "application/x-www-form-urlencoded" }, o); if (o.timeout) timer = setTimeout(function() { xhr.abort(); if (o.timeoutFn) o.timeoutFn(o.url); }, o.timeout); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (timer) clearTimeout(timer); if (xhr.status < 300) { if (o.success) o.success(Sambuca._xhrResp(xhr)); } else if (o.error) o.error(xhr, xhr.status, xhr.statusText); if (o.complete) o.complete(xhr, xhr.statusText); } else if (o.progress) o.progress(++n); }; var url = o.url, data = null; var isPost = o.type == "POST" || o.type == "PUT"; if (!isPost && o.data) url += "?" + Sambuca._formData(o.data); xhr.open(o.type, url, o.async); if (isPost) { var isJson = o.dataType.indexOf("json") >= 0; data = isJson ? JSON.stringify(o.data) : Sambuca._formData(o.data); xhr.setRequestHeader("Content-Type", isJson ? "application/json" : "application/x-www-form-urlencoded"); } xhr.send(data); }; Sambuca.get = function(url, param, async) { var data2send = url + "?" + param; var risposta = null; var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", data2send, async); xmlhttp.send(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) var risposta = xmlhttp.responseText; }; return risposta; }; Sambuca.post = function(url, data2send, async) { var risposta = null; var req = new XMLHttpRequest(); req.open('POST', url, async); req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); req.onreadystatechange = function() { if (req.readyState == 4) risposta = req.responseText; }; req.send(data2send); return risposta; }; Sambuca.imReady = Sambuca.imDrunk = function(a, b, c) { b = document; c = 'addEventListener'; b[c] ? b[c]('DOMContentLoaded', a) : window.attachEvent('onload', a); }; Sambuca.id = function(str) { return document.getElementById(str); }; Sambuca.cookie = function(name, value, minutes) { if (value === undefined) { name += "="; var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var c = cookies[i].trim(); if (c.indexOf(name) == 0) return c.substring(name.length, c.length); } } else { var deadline; if (minutes) { var data = new Date(); data.setTime(data.getTime() + (minutes * 60 * 1000)); deadline = "; expires=" + data.toGMTString(); } else { deadline = ""; } document.cookie = name + "=" + value + deadline + "; path=/"; } }; Sambuca.each = function(o, fn, ctx) { var breaker = null; var hasOwnProperty = Object.prototype.hasOwnProperty, nativeForEach = Array.prototype.forEach; if (o == null) return; if (nativeForEach && o.forEach === nativeForEach) { o.forEach(fn, ctx); } else if (o.length === +o.length) { for (var i = 0, l = o.length; i < l; i++) if (i in o && fn.call(ctx, o[i], i, o) === breaker) return; } else { for (var key in o) if (hasOwnProperty.call(o, key)) if (fn.call(ctx, o[key], key, o) === breaker) return; } }; Sambuca.urlParam = function(name){ var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); if (results === null) return ""; return results[1] || 0; } })(Sambuca); String.prototype.lower = function() { return this.toLowerCase() }; String.prototype.upper = function() { return this.toUpperCase() }; String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, '') }; String.prototype.contains = function(val) { return this.indexOf(val) > -1 }; String.prototype.endsWith = function(suffix) { return this.indexOf(suffix, this.length - suffix.length) !== -1; }; String.prototype.startsWith = function(prefix) { return this.lastIndexOf(prefix, 0) === 0; };