Форум РадиоКот https://radiokot.ru/forum/ |
|
Расширение страницы конкурса (таблица лидеров) https://radiokot.ru/forum/viewtopic.php?f=19&t=94881 |
Страница 1 из 1 |
Автор: | phenomen [ Чт сен 26, 2013 16:45:44 ] |
Заголовок сообщения: | Расширение страницы конкурса (таблица лидеров) |
Вот сижу и думаю, зачем показаны результаты голосования на станице конкурса, и не показаны текущие лидеры. Ведь их приходится искать думая, а это утомительно. Думаю, давай-ка расширю функционал... Покажу первые три места в каждой категории... А может все сортирую... А давай и то и другое... Собственно вот для отображения первых трех мест после всех: СпойлерКод: 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 [ Пт сен 27, 2013 21:38:50 ] |
Заголовок сообщения: | Re: Расширение страницы конкурса (таблица лидеров) |
Да но не забывайте что в этих результатах учтены голоса накрутчиков. Реальная картина будет доступна после сортировки голосов и вычеркивания голосов накрутчиков. |
Автор: | phenomen [ Сб сен 28, 2013 12:26:37 ] |
Заголовок сообщения: | Re: Расширение страницы конкурса (таблица лидеров) |
Согласен, все может существенно изменится по окончании... Но мною управляло любопытство. Дважды. Кто же в лидерах? И смогу ли я написать что-то на JS. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |