Показать сообщение отдельно
  #8 (permalink)  
Старый 14.03.2015, 12:42
Кандидат Javascript-наук
Отправить личное сообщение для zhurchik Посмотреть профиль Найти все сообщения от zhurchik
 
Регистрация: 04.06.2011
Сообщений: 116

А это говно-код, как вы думаете?

функция $() - не Jquery это моя (пользовательская) функция
ниже представленный код работает на голом JS без каких-либо библиотек.

hunt = {
isBlocked:false,
href:[],
q:'',

find: function()
{
	if (this.isBlocked){return false;}
	this.isBlocked = true;

	if (document['searchform']['q'].value != '') {
		this.q = encodeURIComponent(document['searchform']['q'].value);
	}

	var allFormNodes = document['advancedsrc'].getElementsByTagName("input");

	for (var i=0; i < allFormNodes.length; i++)
	{
		if (allFormNodes[i].type == 'text' || allFormNodes[i].type == 'search' || allFormNodes[i].type == 'hidden') {
			if (allFormNodes[i].value == '') {
				continue;
			}
			this.q += "&"+ allFormNodes[i].name +"="+ allFormNodes[i].value;

		} else if (allFormNodes[i].type == 'radio' || allFormNodes[i].type == 'checkbox') {
			if (allFormNodes[i].checked){
				this.q += "&"+ allFormNodes[i].name +"="+ allFormNodes[i].value;
			}
		}
	}

	this.newRequest();

	return false;
},


newRequest: function()
{
	if (typeof this.href[0] === 'undefined'){
		this.href = ["/src"];
	}

	this.q = this.href[0] +"?q="+ this.q;

$("searchResults").innerHTML = '<div class="c">Загрузка данных... '+ progress +'</div>';

	xhr({_push:"searchengine",
	file: this.q + (this.q.indexOf("?") < 0 ? "?" : "&") +"ajax",
	answer:function(d)
	{
		hunt.isBlocked = false;

		$("searchResults").innerHTML = d;

		hunt.q = '';
		inc.addHistory(hunt.q);
	}});
},


createPopup: function(e)
{
	killPropagation(e);

	if ($("popup"))
	{
		if ($("popup").style.display == "none") {
			$("popup").style.marginTop = (scroll.curPosition() + 107) +"px";
			$("popup").style.display = "block";
			this.destroyPopup();
			inc.addHistory(hunt.href[0]);
		}
		return false;
	}

	this.destroyPopup();

	if (this.isBlocked){return false;}
	this.isBlocked = true;


	if (typeof this.href[0] === 'undefined'){
		this.href = ["/src"];

	} else {
		if (typeof this.href[1] !== 'undefined' && pathname() != this.href[1]) {
			this.href = ["/src"];
		}
	}

	this.href[1] = pathname();


	var popup = document.createElement("div");
	popup.innerHTML = '<div id="popup" class="c">Загрузка... '+ progress +'</div>';
	$("content").appendChild(popup);

	xhr({_push:"searchengine",
	file: this.href[0] +"?ajax",
	answer:function(d)
	{
		var popup = $("popup");
		if (!popup) {//На случай, если ответ уже поступил, но юзер в этот момент на другую страницу перешел
			return false;
		}

		d = reincJS.cut(d);

		popup.parentNode.innerHTML = d;

		reincJS.put("popup");

		popup.style.marginTop = (scroll.curPosition() + 107) +"px";

		inc.addHistory(hunt.href[0]);

		hunt.isBlocked = false;
	}});
},


destroyPopup: function()
{
	document.body.onmousedown = function(e)
	{
		if (mywhich() != 1) {
			return false;
		}

		var e = myevent(e);
		var obj = e.target || window.event.srcElement;

		if (obj.tagName == "A")
		{
			document.body.onmousedown = function(){};
			hunt.isBlocked = false;

			if (typeof http['searchengine'] !== "undefined") {
				http['searchengine'].abort();
				delete http['searchengine'];
			}
			return false;
		}

		if (hunt.isBlocked) {
			return false;
		}


		do {
			if (obj.tagName == "DIV")
			{
				var id = obj.getAttribute("id");
				if (typeof id === "string" && id == 'popup') {
					break;
				}
			} else {
				if (obj.tagName == "BODY")
				{
					hunt.isBlocked = false;
					hunt.q = '';

					document.body.onmousedown = function(){};

					$("popup").style.display = "none";

					inc.addHistory(hunt.href[1]);
					document['searchform']['q'].value = '';

					break;
				}
			}

			obj = obj.parentNode;

		} while (true);
	};
}
}
Ответить с цитированием