Расширение страницы конкурса (таблица лидеров)

Нравится ли вам дизайн? Контент? Что хотелось бы убрать/добавить. Нам необходимо это знать.
Ответить

Нужна информация про текущее место статьи на конкурсе?

Опрос закончился Вт окт 01, 2013 16:45:44

Да, текущее
9
60%
Да, график изменений
3
20%
Нет
3
20%
 
Всего голосов: 15

phenomen
Потрогал лапой паяльник
Сообщения: 310
Зарегистрирован: Пт дек 17, 2010 14:41:25

Расширение страницы конкурса (таблица лидеров)

Сообщение phenomen »

Вот сижу и думаю, зачем показаны результаты голосования на станице конкурса, и не показаны текущие лидеры. Ведь их приходится искать думая, а это утомительно.
Думаю, давай-ка расширю функционал... Покажу первые три места в каждой категории... А может все сортирую...
А давай и то и другое...

Собственно вот для отображения первых трех мест после всех:
Спойлер

Код: Выделить всё

javascript:(function()
{
	function compare(a,b)
	{
	  if (a.mark < b.mark)
		 return 1;
	  if (a.mark > b.mark)
		return -1;
	  return 0;
	}
	
	function article(row)
	{
		this.row = row;
		var votes = row.lastElementChild.innerText;
		var re = new RegExp('[0-9]+.?[0-9]?', 'g');
		var total = re.exec(votes);
		var totalVotes = re.exec(votes);
		this.mark = total/totalVotes
	};
	
	function category(row)
	{
		this.row=row;
		this.articles = new Array();
		
		this.AddArticle = function(row)
		{
			this.articles[this.articles.length] = new article(row);
		};
	}
	
	function categories()
	{
		this.categories = new Array();
		
		this.AddCategory = function(row)
		{
			this.categories[this.categories.length] = new category(row);
		};
		
		this.AddArticleToLastCategory = function(row)
		{
			this.categories[this.categories.length - 1].AddArticle(row);
		};
	}

	if(window.location.href !== 'http://radiokot.ru/konkurs/')
	{
		alert('Вы не на странице конкурса!');
		return;
	}

	var div = document.getElementById("hypercontext");
	var table = div.firstElementChild.children[3];
	var cats = new categories();

	for (var i = 0, row; row = table.rows[i]; i++)
	{
		if(row.firstElementChild.colSpan == 2)
		{
			cats.AddCategory(row);
		}
		else
		{
			cats.AddArticleToLastCategory(row);
		}
	}
	
	var newTable = document.createElement("table");
	newTable.className = "Tbl";
	newTable.width = "65%";
	newTable.border = "1";
	newTable.align = "center";
	
	var newTableBody = document.createElement("tbody");
	newTable.appendChild(newTableBody);
	
	for (var i = 0, cat; cat = cats.categories[i]; i++)
	{
		var newCatRow = cat.row.cloneNode(true);
		newCatRow.firstElementChild.colSpan = 3;
		newTableBody.appendChild(newCatRow);
		cat.articles.sort(compare);
		
		var counter = document.createElement("td");
		
		var first = cat.articles[0].row.cloneNode(true);
		counter.innerText = 1;
		first.insertBefore(counter.cloneNode(true),first.firstElementChild);
		newTableBody.appendChild(first);
		
		var second = cat.articles[1].row.cloneNode(true);
		counter.innerText = 2;
		second.insertBefore(counter.cloneNode(true),second.firstElementChild);
		newTableBody.appendChild(second);
		
		var third = cat.articles[2].row.cloneNode(true);
		counter.innerText = 3;
		third.insertBefore(counter.cloneNode(true),third.firstElementChild);
		newTableBody.appendChild(third);		
	}
	
	var par = document.createElement("p");
	par.align = "center";
	
	var txt = document.createElement("strong");
	txt.innerText = "Таблица лидеров";
	txt.style.fontSize = "20";
	par.appendChild(txt);
	
	div.appendChild(par);
	div.appendChild(newTable);

})();
и для отображения всех в порядке убывания
Спойлер

Код: Выделить всё

javascript:(function()
{
	function compare(a,b)
	{
	  if (a.mark < b.mark)
		 return 1;
	  if (a.mark > b.mark)
		return -1;
	  return 0;
	}
	
	function article(row)
	{
		this.row = row;
		var votes = row.lastElementChild.innerText;
		var re = new RegExp('[0-9]+.?[0-9]?', 'g');
		var total = re.exec(votes);
		var totalVotes = re.exec(votes);
		this.mark = total/totalVotes
	};
	
	function category(row)
	{
		this.row=row;
		this.articles = new Array();
		
		this.AddArticle = function(row)
		{
			this.articles[this.articles.length] = new article(row);
		};
	}
	
	function categories()
	{
		this.categories = new Array();
		
		this.AddCategory = function(row)
		{
			this.categories[this.categories.length] = new category(row);
		};
		
		this.AddArticleToLastCategory = function(row)
		{
			this.categories[this.categories.length - 1].AddArticle(row);
		};
	}

	if(window.location.href !== 'http://radiokot.ru/konkurs/')
	{
		alert('Вы не на странице конкурса!');
		return;
	}

	var div = document.getElementById("hypercontext");
	var table = div.firstElementChild.children[3];
	var cats = new categories();

	for (var i = 0, row; row = table.rows[i]; i++)
	{
		if(row.firstElementChild.colSpan == 2)
		{
			row.firstElementChild.colSpan = 3;
			cats.AddCategory(row);
		}
		else
		{
			cats.AddArticleToLastCategory(row);
		}
	}
	
	var newTable = document.createElement("table");
	newTable.className = "Tbl";
	newTable.width = "65%";
	newTable.border = "1";
	newTable.align = "center";
	
	var newTableBody = document.createElement("tbody");
	newTable.appendChild(newTableBody);
	
	for (var i = 0, cat; cat = cats.categories[i]; i++)
	{
		newTableBody.appendChild(cat.row.cloneNode(true));
		cat.articles.sort(compare);

		for(var j = 0, art; art = cat.articles[j]; j++)
		{
			var counter = document.createElement("td");
			counter.innerText = j + 1;
			/*Do it without copy to show main table with places*/
			art.row.insertBefore(counter,art.row.firstElementChild);
			newTableBody.appendChild(art.row.cloneNode(true));
		}
	
	}
	
	var par = document.createElement("p");
	par.align = "center";
	
	var txt = document.createElement("strong");
	txt.innerText = "Таблица лидеров";
	txt.style.fontSize = "20";
	par.appendChild(txt);
	
	div.appendChild(par);
	div.appendChild(newTable);

})();
Вставить в адресную строку браузера на странице конкурса.
На Firefox-е не будет работать. https://bugzilla.mozilla.org/show_bug.cgi?id=656433
IE - а кто пользуется? (тоже не работает, почему - не разбирался)
Opera - без проблем
Chrome - подтирает в начале строки "javascript:". Вставить код и вручную дописать вначале "javascript:".

(За код строго не судите - работаю со скриптом второй раз в жизни и писал быстро, глуповато в некоторых местах. И я прекрасно знаю, что можно лучше.)
Реклама
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Re: Расширение страницы конкурса (таблица лидеров)

Сообщение demson »

Да но не забывайте что в этих результатах учтены голоса накрутчиков. Реальная картина будет доступна после сортировки голосов и вычеркивания голосов накрутчиков. 8)
в спорах рождается ИСТИНА [AND] flud.
Реклама
phenomen
Потрогал лапой паяльник
Сообщения: 310
Зарегистрирован: Пт дек 17, 2010 14:41:25

Re: Расширение страницы конкурса (таблица лидеров)

Сообщение phenomen »

Согласен, все может существенно изменится по окончании... Но мною управляло любопытство. Дважды. Кто же в лидерах? И смогу ли я написать что-то на JS.
Ответить

Вернуться в «О нашем сайте...»