MediaWiki:Gadget-statuses.js

Материал из Традиция: Право
Перейти к: навигация, поиск
/*
 *  Показ статусов в сетях связи:
 *
 *   *) показывает значок статуса ICQ в шаблоне {{ICQ}}
 *
 *   *) показывает значок статуса Skype в шаблоне {{Skype}}
 *
 *   *) показывает консоль для отслеживания статуса игры Quake II
 *      на странице [[Quake II Deathmatch]]
*/
$(function(){
   // ICQ status background
   $('span.ICQ').each(function(){
      var ICQURL = 'http://status.icq.com/online.gif?icq=' + this.id + '&img=5';
      $(this).css({
         'padding' :          '0 0 0 20px',
         'background-image':  'url(' + ICQURL + ')',
         'background-repeat': 'no-repeat'
      });
   });

   // Skype status
   $('span.skypeTemplate').each(function(){
      var $this = $(this);
      var username = $this.find('span.skypeUserName').text();

      // А теперь защита от взлома Традиции, совершаемого впрыскиванием левого кода.
      // По адресу https://login.skype.com/account/signup-form сказано:
      // What is my Skype Name?
      // Your Skype Name is your unique username for Skype.
      // It must be between 6-32 characters, start with a letter
      // and contain only letters and numbers (no spaces or special characters).
      if (username.match(/^[a-zA-Z][a-zA-Z01-9-]{5,31}$/) === null) return;

      $this.html(
         '<a href="skype:' + username + '?call" class="val-3"><img ' +
         'src="http://mystatus.skype.com/smallicon/' + username + '" ' +
         'width="16" height="16" alt="[Skype status]" title=""></a> ' +
         '<a href="skype:' + username + '?call"><span class="skypeUserName">' +
         username + '</span></a>'
      );
   });

   // Quake II consoles
   $('span.quake2traditio').each(function(){
      var $this = $(this);
      // проверяем, действительно ли указано имя сервера
      // (защита от взлома Традиции, совершаемого впрыскиванием левого кода)
      // имя.имя.имя...имя:порт, где имя == [a-zA-Z01-9][a-zA-Z01-9-]*
      //                           а порт не обязателен
      var TheText = $this.text();
      if (TheText.match(/^([a-zA-Z01-9][a-zA-Z01-9-]*\.)+([a-zA-Z01-9][a-zA-Z01-9-]*)(:[1-9][01-9]*)?$/)
                  === null)
      {
         // не сервер:
         $this.html('<b>' + TheText + ' не является сервером Quake&nbsp;II</b>');
      } else {
         // сервер:
         $this.html('<embed style="width: 100%;" height=388 type="application/x-q3plug-plugin" ' +
                    'name="' + TheText + '" color="#ffeedd" color2="#88ff88" game="Q2" ' +
                    'pluginspage="http://members.liwest.at/mb/q3plug" />');
      } // конец проверки того, действительно ли указано имя сервера
   });
});