Например TDA7294

Форум РадиоКот • Просмотр темы - Расширение страницы конкурса (таблица лидеров)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 21:09:53

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Нужна информация про текущее место статьи на конкурсе?
Голосование закончилось Вт окт 01, 2013 16:45:44
Да, текущее 60%  60%  [ 9 ]
Да, график изменений 20%  20%  [ 3 ]
Нет 20%  20%  [ 3 ]
Всего голосов : 15
Автор Сообщение
Не в сети
 Заголовок сообщения: Расширение страницы конкурса (таблица лидеров)
СообщениеДобавлено: Чт сен 26, 2013 16:45:44 
Потрогал лапой паяльник

Карма: 6
Рейтинг сообщений: 17
Зарегистрирован: Пт дек 17, 2010 14:41:25
Сообщений: 310
Рейтинг сообщения: 0
Вот сижу и думаю, зачем показаны результаты голосования на станице конкурса, и не показаны текущие лидеры. Ведь их приходится искать думая, а это утомительно.
Думаю, давай-ка расширю функционал... Покажу первые три места в каждой категории... А может все сортирую...
А давай и то и другое...

Собственно вот для отображения первых трех мест после всех:
Спойлер
Код:
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:".

(За код строго не судите - работаю со скриптом второй раз в жизни и писал быстро, глуповато в некоторых местах. И я прекрасно знаю, что можно лучше.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Расширение страницы конкурса (таблица лидеров)
СообщениеДобавлено: Пт сен 27, 2013 21:38:50 
IT KT
Аватар пользователя

Карма: 19
Рейтинг сообщений: 10
Зарегистрирован: Пн авг 25, 2008 08:49:33
Сообщений: 1308
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Да но не забывайте что в этих результатах учтены голоса накрутчиков. Реальная картина будет доступна после сортировки голосов и вычеркивания голосов накрутчиков. 8)

_________________
в спорах рождается ИСТИНА [AND] flud.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Расширение страницы конкурса (таблица лидеров)
СообщениеДобавлено: Сб сен 28, 2013 12:26:37 
Потрогал лапой паяльник

Карма: 6
Рейтинг сообщений: 17
Зарегистрирован: Пт дек 17, 2010 14:41:25
Сообщений: 310
Рейтинг сообщения: 0
Согласен, все может существенно изменится по окончании... Но мною управляло любопытство. Дважды. Кто же в лидерах? И смогу ли я написать что-то на JS.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y