Показать сообщение отдельно
  #29 (permalink)  
Старый 11.01.2014, 14:37
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от nerv_
если ты не можешь придумать имя переменной - это говорит об уровне кодера
Могу, просто я люблю ставить правильные имена, не всякие var data, ololo, sobitie и т.д., а именно правильные: callback, formRemove, setHelper и т.д. Но иногда бывает влом придумывать имя.

Сообщение от nerv_
первый признак говнокодера
Не считаю себя говнокодером.

var d = document,
	h = d.documentElement,
	i, mk,
	w = window;

(function() {	
	mk = function(selector) {
		if('mk' in this) return mk.call(typeof selector == 'object' ? selector : d.querySelector(selector));
		for(i in _mk) this[i] = _mk[i];
		return this;
	};
	var XMLRequest = XMLHttpRequest || w.ActiveXObject && function() {
			return new ActiveXObject('Msxml2.XMLHTTP');
		},
		reqTimeout,
		classList = 'classList' in h,
		matches = h.matches || h.matchesSelector || h.webkitMatchesSelector || h.oMatchesSelector || h.mozMatchesSelector || h.msMatchesSelector || function(selector) {
     		var elems = this.parentNode.querySelectorAll(selector);
			for(i=0; i<elems.length; i++) if(elems[i] === this) return true;
		},
		_mk = {
			append: function() {
				var childs = arguments;
				for(i=0; i<childs.length; i++) this.appendChild(childs[i]);
				return this;
			},
			classAdd: function(name) {
				if(classList) this.classList.add(name);
				else this.className += this.classHas(name) ? '' : (this.className ? ' ' + name : name);
				return this;
			},
			classHas: function(name) {
				return classList ? this.classList.contains(name) : !!~(' ' + this.className + ' ').indexOf(' ' + name + ' ');
			},
			classRemove: function(name) {
				if(classList) this.classList.remove(name);
				else if(this.classHas(name)) this.className = this.className.replace(new RegExp(' ?' + name + ' ?'), '');
				return this;
			},
			classToggle: function(name) {
				if(classList) this.classList.toggle(name);
				else this.classHas(name) ? this.classRemove(name) : this.classAdd(name);
				return this;
			},
			delegate: function(type, selector, callback) {
				this.event(type, function(event) {
					var target = event && event.target || w.event.srcElement;
					while(target != this) {
						if(matches.call(target, selector)) {
							callback.call(target, event);
							break;
						}
						target = target.parentNode;
					}
				});
				return this;
			},
			effect: function(name, remove) {
				var self = this;
				self.classToggle('mk-' + name);
				if(remove) setTimeout(function() {
					self.remove();
				}, 500);
				return self;
			},
			event: function(type, callback) {
				var self = this;
				if('addEventListener' in self) self.addEventListener(type, callback, false);
				else self.attachEvent('on' + type, function(event) {
					callback.call(self, event);
				});
				return this;
			},
			props: function(props) {
				for(i in props) this[i] = props[i];
				return this;
			},
			query: function(selector) {
				return this.querySelector(selector);
			},
			remove: function() {
				this.parentNode.removeChild(this);
			},
		};
	
	mk.create = function(tagName, props) {
		var elem = d.createElement(tagName);
		mk(elem).props(props);
		return elem;
	};
	mk.message = function(icon, title, message, clicked) {
		var elem = mk.create('div', {className: 'mk-msg mk-show'}),
			img = mk.create('img', {align: 'left', alt: '', src: icon}),
			div = mk(mk.create('div')).append(mk.create('b', {textContent: title}), mk.create('span', {textContent: message})),
			params = arguments.callee;
		elem = mk(elem).append(img, div);
		mk('#mk-msgs').insertBefore(elem, params.len === 0 ? null : params.tmp);
		params.len = params.len + 1 || 1;
		params.tmp = elem;
		var timeout = setTimeout(elem.onclick = function() {
			elem.effect('show', true);
			params.len--;
			clearTimeout(timeout);
			if(clicked) clicked();
		}, 4E3);
		elem.clientWidth;
		elem.effect('show');
	};
	mk.request = function(url, params, callback, error) {
		var keys = [],
			req = new XMLRequest(),
			self = this;
		req.open('POST', url, true);
		req.onreadystatechange = function() {
			if(req.readyState != 4) return;
			clearTimeout(reqTimeout);
			if(req.status == 200) callback.call(self, req.responseText);
			else if(error) error(req.statusText);
		};
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		for(i in params) keys.push(i + '=' + params[i]);
		req.send(keys.join('&') || null);
		reqTimeout = setTimeout(function() {
			req.abort();
			if(error) error();
		}, 5E3);
	};
})();


ТЕСТ!

На class* не знаю, ставить регулярку или оставить такой костыль?

И ещё вопрос: насколько кроссбраузерен будет XMLHttp запрос (mk.request)? Ничего не упустил?

Последний раз редактировалось ruslan_mart, 11.01.2014 в 15:05.
Ответить с цитированием