Skip to content
Snippets Groups Projects
tinyDOM.js 3.05 KiB
Newer Older
//Prevent pollution of global namespace with closure
(function() {
    'use strict';

	var tinyDOM = function(selector) {
		if (selector === null || typeof (selector) === 'undefined') {
		} else if(typeof(selector) === 'string') {
			var elements = document.querySelectorAll(selector);
			for(var i = 0; i < elements.length; i++) {
				if(typeof(e.td_prop) === 'undefined') {
					e.td_prop = {
						isHidden: false
					};
				}
				this[i] = elements.item(i);
		} else {
			this[0] = selector;
			this.length = 1;
		}

		return this;
	}

	tinyDOM.fn = tinyDOMFunction.prototype = {
		each: function(fn) {
			var l = this.length;
			while(l--) {
				fn(l, this[l], this);
			}
			return this;
		},
		hide: function(){
			this.each(function(i, e) {
				if(!e.td_prop.isHidden) {
					e.style.td_previousDisplay = e.style.display;
					e.style.display = 'none';
					e.td_prop.isHidden = true;
				}
			});
			return this;
		},
		show: function() {
			this.each(function(i, e) {
					if(typeof(e.style.td_previousDisplay) !== 'undefined') {
						e.style.display = e.style.td_previousDisplay;
					} else {
						e.style.display = 'block';
					}
					e.td_prop.isHidden = false;
				}
			});
			return this;
		},
		on: function(ev, fn) {
			this.each(function(i, e) {
		first: function() {
			if(typeof(this[0]) !== 'undefined') {
		data: function(key, value) {
			if(typeof(value) !== 'undefined') {
				e.setAttribute('data-'+key, value);
				return this;
			} else {
				return e.getAttribute('data-'+key);
			}
		}
	}

	tinyDOM.exists = function(obj) {
		return obj !== null && typeof(obj) !== 'undefined';
	}

	tinyDOM.merge = function(json1, json2) {
		if(!this.exists(json1) || !this.exists(json2)) {
			return null;
		} else {
			for(var prop in json2) {
				if(json2.hasOwnProperty(prop)) {
					json1[prop] = json2[prop];
				}
			}
			return json1;
		}
	}

	tinyDOM.ajax = function(options) {
Commander-lol's avatar
Commander-lol committed
		var req = new XMLHttpRequest();
		var _this = this;

		var params = {
			method: 'GET',
			url: '',
			async: true,
			user: null,
			password: null,
			responseType: 'text',
			data: null,
			headers: [],
			callbacks: {}
Commander-lol's avatar
Commander-lol committed
		}

		this.merge(params, options);

		req.responseType = params.responseType;

		if(this.exists(params.callbacks)) {
			for(var ev in params.callbacks) {
				if(params.callbacks.hasOwnProperty(ev)) {
					req.addEventListener(ev, params.callbacks[ev]);
Commander-lol's avatar
Commander-lol committed
				}
			}
		}

		req.open(
			params.method,
			params.url,
			params.async,
			params.user,
			params.password
		);

		for(var i = 0; i < params.headers.length; i++) {
Commander-lol's avatar
Commander-lol committed
			req.setRequestHeader(params.headers[i].header, params.headers[i].value);
		}

		req.send(params.data);
		return req;
Commander-lol's avatar
Commander-lol committed
	};

	if(!window.μ) {
Commander-lol's avatar
Commander-lol committed
		window.μ = tinyDOM;
	if(!window.mu) {
Commander-lol's avatar
Commander-lol committed
		window.mu = tinyDOM;
	}
})();