Вот сижу и думаю, зачем показаны результаты голосования на
станице конкурса, и не показаны текущие лидеры. Ведь их приходится искать думая, а это утомительно.
Думаю, давай-ка расширю функционал... Покажу первые три места в каждой категории... А может все сортирую...
А давай и то и другое...
Собственно вот для отображения первых трех мест после всех:
Спойлер
Код:
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=656433IE - а кто пользуется? (тоже не работает, почему - не разбирался)
Opera - без проблем
Chrome - подтирает в начале строки "javascript:". Вставить код и вручную дописать вначале "javascript:".
(За код строго не судите - работаю со скриптом второй раз в жизни и писал быстро, глуповато в некоторых местах. И я прекрасно знаю, что можно лучше.)