MediaWiki:Common.js: различия между версиями

 
(не показано 85 промежуточных версий 2 участников)
Строка 1: Строка 1:
var preloader = document.createElement('div');
+
// functions
preloader.className = 'preloader';
+
var fnLoad = {
preloader.innerHTML = '<img class="preloader__image preloader__image--0" src="/static/images/preloader/preloader_00.png"><img class="preloader__image preloader__image--1" src="/static/images/preloader/preloader_01.png"><img class="preloader__image preloader__image--2" src="/static/images/preloader/preloader_02.png"><img class="preloader__image preloader__image--3" src="/static/images/preloader/preloader_03.png"><img class="preloader__image preloader__image--4" src="/static/images/preloader/preloader_04.png">';
+
  module: function( name ) {
document.body.prepend(preloader);
+
    mw.loader.load( name );
document.body.classList.add('preloader-active');
+
  },
 +
  script: function( name ) {
 +
    mw.loader.load( '/wiki/index.php?title=mediawiki:scripts/' + name + '.js&ctype=text%2Fjavascript&action=raw' );
 +
  },
 +
  style: function ( name ) {
 +
    DOMhead.append( '<link rel="stylesheet" href="/wiki/index.php?title=mediawiki:styles/' + name + '.css&ctype=text%2Fcss&action=raw">' );
 +
  }
 +
};
 +
 
 +
// date
 +
var date = new Date();
 +
 
 +
// common dom elements
 +
var DOMhtml,
 +
    DOMhead,
 +
    DOMbody,
 +
    DOMcontent,
 +
    DOMmwNavigation,
 +
    DOMfirstHeading;
 +
$( function() {
 +
  DOMhtml = $( 'html' );
 +
  DOMhead = $( 'head' );
 +
  DOMbody = $( 'body' );
 +
  DOMcontent = $( '#content' );
 +
  DOMmwNavigation = $( '#mw-navigation' );
 +
  DOMfirstHeading = $( '#firstHeading, .firstHeading' );
 +
} );
 +
 
 +
// user info
 +
var user = {
 +
  anonymous: undefined,
 +
  id: mw.config.get( 'wgUserId' )
 +
};
 +
if ( user.id != null ) {
 +
  user.anonymous = false;
 +
} else {
 +
  user.anonymous = true;
 +
};
 +
 
 +
// redirect anonymous users from special pages
 +
$( function() {
 +
  if (
 +
    user.anonymous &&
 +
    mw.config.get( 'wgNamespaceNumber' ) != 0 &&
 +
    mw.config.get( 'wgNamespaceNumber' ) != 10 &&
 +
    mw.config.get( 'wgCanonicalSpecialPageName' ) != 'Search'
 +
  ) {
 +
    window.location.replace( '/wiki/' );
 +
  };
 +
} );
  
document.querySelector('link[href*="skins.vector.styles"]').remove();
+
// modules customization
 +
$( function() {
 +
  $( 'link[href*="skins.vector.styles"]' ).each( function() {
 +
    var href = $( 'link[href*="skins.vector.styles"]' ).attr( 'href' );
 +
    href = href.replace( /skins.vector.styles/i, '' );
 +
    href = href.replace( /mediawiki.toc.styles/i, '' );
 +
    href = href.replace( /mediawiki.skinning.interface/i, '' );
 +
    href = href.replace( /mediawiki.legacy.commonPrint%2Cshared/i, '' );
 +
    $( this ).attr( 'href', href );
 +
  } );
 +
} );
 +
 
 +
// design system
 +
var breakpoint = {
 +
  width: {
 +
    game: 1012,
 +
    desktop: 1280,
 +
    tablet: 720,
 +
    mobile: 320
 +
  },
 +
  height: {
 +
    game: 682
 +
  }
 +
};
 +
var device;
 +
$( window ).resize( function() {
 +
  device = {
 +
    width: $( window ).width(),
 +
    height: $( window ).height(),
 +
    type: undefined
 +
  };
 +
  if (
 +
    device.width == breakpoint.width.game &&
 +
    device.height <= breakpoint.height.game
 +
  ) {
 +
    device.type = 'game';
 +
  } else if ( device.width < breakpoint.width.tablet ) {
 +
    device.type = 'mobile';
 +
  } else if ( device.width < breakpoint.width.desktop ) {
 +
    device.type = 'tablet';
 +
  } else {
 +
    device.type = 'desktop';
 +
  };
 +
} );
 +
$( window ).resize();
  
var html = $('html'),
+
// add html/css/js to the page
    head = $('head'),
+
$( function() {
     body = $('body');
+
  $( '.add_html' ).each( function() {
 +
    $( this )
 +
      .after( $( this ).text() )
 +
      .remove();
 +
  } );
 +
  $( '.add_css' ).each( function() {
 +
    $( this )
 +
      .after( '<style>' + $( this ).text() + '</style>' )
 +
      .remove();
 +
  } );
 +
  $( '[data-style]' ).each( function() {
 +
    var attrStyle = $( this ).attr( 'style' ),
 +
        attrDataStyle = $( this ).attr( 'data-style' ),
 +
        attrStyleNew;
 +
    if ( attrStyle != undefined ) {
 +
      attrStyleNew = attrStyle + ' ' + attrDataStyle;
 +
     } else {
 +
      attrStyleNew = attrDataStyle;
 +
    };
 +
    $( this )
 +
      .attr( 'style', attrStyleNew )
 +
      .removeAttr( 'data-style' );
 +
  } );
 +
  $( '.add_js' ).each( function() {
 +
    fnLoad.script( $( this ).text() );
 +
    $( this ).remove();
 +
  } );
 +
} );
  
head.prepend('<meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="HandheldFriendly" content="true"><meta name="MobileOptimized" content="width"><meta name="apple-mobile-web-app-capable" content="yes">');
+
// google analytics
 +
var googleAnalytics = {
 +
  constructor: function() {
 +
    var html =
 +
        '<noscript>'
 +
      + '<iframe src="//www.googletagmanager.com/ns.html?id=GTM-NLDGMH4" height="0" width="0" style="display: none; visibility: hidden;"></iframe>'
 +
      + '</noscript>';
 +
    DOMbody.prepend( html );
 +
  }
 +
};
 +
$( googleAnalytics.constructor );
  
var date = new Date();
+
// meta
 +
var meta = {
 +
  constructor: function() {
 +
    var html =
 +
        '<meta http-equiv="X-UA-Compatible" content="IE=edge">'
 +
      + '<meta name="viewport" content="width=device-width, initial-scale=1.0">'
 +
      + '<meta name="HandheldFriendly" content="true">'
 +
      + '<meta name="MobileOptimized" content="width">'
 +
      + '<meta name="apple-mobile-web-app-capable" content="yes">'
 +
      + '<link rel="apple-touch-icon" sizes="57x57" href="/wiki/images/9/9d/Apple-touch-icon-57x57.png">'
 +
      + '<link rel="apple-touch-icon" sizes="60x60" href="/wiki/images/0/03/Apple-touch-icon-60x60.png">'
 +
      + '<link rel="apple-touch-icon" sizes="72x72" href="/wiki/images/1/15/Apple-touch-icon-72x72.png">'
 +
      + '<link rel="apple-touch-icon" sizes="76x76" href="/wiki/images/e/e2/Apple-touch-icon-76x76.png">'
 +
      + '<link rel="apple-touch-icon" sizes="114x114" href="/wiki/images/1/15/Apple-touch-icon-114x114.png">'
 +
      + '<link rel="apple-touch-icon" sizes="120x120" href="/wiki/images/8/85/Apple-touch-icon-120x120.png">'
 +
      + '<link rel="apple-touch-icon" sizes="144x144" href="/wiki/images/a/a2/Apple-touch-icon-144x144.png">'
 +
      + '<link rel="apple-touch-icon" sizes="152x152" href="/wiki/images/5/5d/Apple-touch-icon-152x152.png">'
 +
      + '<link rel="apple-touch-icon" sizes="180x180" href="/wiki/images/4/49/Apple-touch-icon-180x180.png">'
 +
      + '<link rel="icon" type="image/png" sizes="16x16" href="/wiki/images/c/c5/Favicon-16x16.png">'
 +
      + '<link rel="icon" type="image/png" sizes="32x32" href="/wiki/images/4/46/Favicon-32x32.png">'
 +
      + '<link rel="icon" type="image/png" sizes="96x96" href="/wiki/images/4/43/Favicon-96x96.png">'
 +
      + '<link rel="shortcut icon" href="//la-static.prod-my.games/static/images/favicon/favicon.ico" type="image/x-icon">'
 +
      + '<link rel="icon" href="//la-static.prod-my.games/static/images/favicon/favicon.ico" type="image/x-icon">';
 +
    DOMhead.prepend( html );
 +
  }
 +
};
 +
$( meta.constructor );
  
$(function(){
+
// preloader (start)
 +
var preloader = {
 +
  constructor: function() {
 +
    var html =
 +
        '<div class="preloader">'
 +
      + '<img class="preloader__img preloader__img--0" src="https://la-static.prod-my.games/static/images/preloader/preloader_00.png">'
 +
      + '<img class="preloader__img preloader__img--1" src="https://la-static.prod-my.games/static/images/preloader/preloader_01.png">'
 +
      + '<img class="preloader__img preloader__img--2" src="https://la-static.prod-my.games/static/images/preloader/preloader_02.png">'
 +
      + '<img class="preloader__img preloader__img--3" src="https://la-static.prod-my.games/static/images/preloader/preloader_03.png">'
 +
      + '<img class="preloader__img preloader__img--4" src="https://la-static.prod-my.games/static/images/preloader/preloader_04.png">'
 +
      + '</div>';
 +
    DOMbody
 +
      .prepend( html )
 +
      .addClass( 'body--preloader_active' )
 +
      .show();
 +
  },
 +
  hide: function() {
 +
    $( '.preloader' ).hide();
 +
    DOMbody.removeClass( 'body--preloader_active' );
 +
  }
 +
};
 +
$( preloader.constructor );
  
   body.prepend('<div class="header"><a class="logo" href="/wiki/"></a></div>');
+
// navigation
 +
var DOMnavigation,
 +
    DOMnavigationHamburger,
 +
    DOMnavigationMenu,
 +
    DOMnavigationMenuLink;
 +
var navigation = {
 +
   constructor: function() {
 +
    var html =
 +
        '<section class="navigation-section">'
 +
      + '<div class="user-header flex align-i--center">'
 +
      + '<div class="user-header__left-side flex">'
 +
      + '<a class="user-header__link" href="/l/support" target="_blank">Поддержка</a>'
 +
      + '<a class="user-header__link" href="/promocode">Активировать промокод</a>'
 +
      + '<a class="user-header__link" href="/inventory">Мои предметы</a>'
 +
      + '</div>'
 +
      + '<div class="user-header__right-side"></div>'
 +
      + '</div>'
 +
      + '<div class="navigation">'
 +
      + '<a class="navigation__logo" href="/"></a>'
 +
      + '<button class="navigation__hamburger"></button>'
 +
      + '<div class="navigation__mobile">'
 +
      + '<nav class="navigation__menu"></nav>'
 +
      + '<div class="navigation__button flex flex--center"><a class="button button--medium" href="/download">Скачать игру</a></div>'
 +
      + '</div>'
 +
      + '</div>'
 +
      + '</section>';
 +
    DOMbody.prepend( html );
 +
    DOMnavigation = $( '.navigation' );
 +
    DOMnavigationHamburger = $( '.navigation__hamburger' );
 +
    DOMnavigationMenu = $( '.navigation__menu' );
 +
    DOMnavigationMenu.load( '/ .navigation__menu-list', function( response, status, xhr ) {
 +
      if ( status == 'success' ) {
 +
        DOMnavigationMenuLink = $( '.navigation__menu-link' );
 +
        DOMnavigationMenuLink.on( 'click', function() {
 +
          if ( device.type == 'mobile' ) {
 +
            $( this )
 +
              .parent()
 +
              .toggleClass( 'is-open' );
 +
            return false;
 +
          };
 +
        } );
 +
      };
 +
    } );
 +
    DOMnavigationHamburger.on( 'click', function() {
 +
      DOMnavigation.toggleClass( 'is-open' );
 +
    } );
 +
  }
 +
};
 +
$( navigation.constructor );
  
   var mwNav = $('#mw-navigation'),
+
// header
       mwHead = $('#mw-head'),
+
var header = {
      mwPanel = $('#mw-panel');
+
   constructor: function() {
 +
    var html =
 +
        '<div class="header">'
 +
       + '<img class="header__img" src="/wiki/images/9/98/Bg.jpg">'
 +
      + '</div>';
 +
    DOMbody.prepend( html );
 +
  }
 +
};
 +
$( header.constructor );
  
   mwHead.prepend('<a href="https://la.mail.ru/" id="god-game">Сайт игры</a><a href="https://support.my.games/la" id="god-support">Поддержка</a><a href="https://la.mail.ru/download" id="god-download">Скачать</a>');
+
// footer
  mwPanel.prepend('<a href="/wiki/">Главная</a><a href="/wiki/Special:Search">Поиск</a>');
+
var footer = {
  mwNav.after('<div class="navigation"><div class="navigation__hamburger"></div><div class="navigation__mobile"><nav class="navigation__menu"><div class="navigation__menu-list"><div class="navigation__menu-item"><a class="navigation__menu-link">Основное <i class="icon icon-arrow"></i></a><ul class="navigation__menu-dropdown"><li><a href="/wiki/Новичку" class="navigation__menu-dropdown-link">Новичку</a></li><li><a href="/wiki/Классы" class="navigation__menu-dropdown-link">Классы</a></li><li><a href="/wiki/История_мира" class="navigation__menu-dropdown-link">История мира</a></li><li><a href="/wiki/Обитатели_мира" class="navigation__menu-dropdown-link">Обитатели мира</a></li><li><a href="/wiki/Карта_мира" class="navigation__menu-dropdown-link">Карта мира</a></li></ul></div><div class="navigation__menu-dot"></div><div class="navigation__menu-item"><a class="navigation__menu-link">Приключения <i class="icon icon-arrow"></i></a><ul class="navigation__menu-dropdown"><li><a href="/wiki/Задания" class="navigation__menu-dropdown-link">Задания</a></li><li><a href="/wiki/Инстансы" class="navigation__menu-dropdown-link">Инстансы</a></li><li><a href="/wiki/PvP" class="navigation__menu-dropdown-link">PvP</a></li><li><a href="/wiki/Битвы_за_Сильмаэль" class="navigation__menu-dropdown-link">Битвы за Сильмаэль</a></li><li><a href="/wiki/Мореплавание" class="navigation__menu-dropdown-link">Мореплавание</a></li><li><a href="/wiki/Атлас_Искателя" class="navigation__menu-dropdown-link">Атлас Искателя</a></li><li><a href="/wiki/Коллекции" class="navigation__menu-dropdown-link">Коллекции</a></li><li><a href="/wiki/Репутация" class="navigation__menu-dropdown-link">Репутация</a></li><li><a href="/wiki/Карточные_бои" class="navigation__menu-dropdown-link">Карточные бои</a></li></ul></div><div class="navigation__menu-dot"></div><div class="navigation__menu-item"><a class="navigation__menu-link">Персонаж <i class="icon icon-arrow"></i></a><ul class="navigation__menu-dropdown"><li><a href="/wiki/Бой" class="navigation__menu-dropdown-link">Бой</a></li><li><a href="/wiki/Ремесло" class="navigation__menu-dropdown-link">Ремесло</a></li><li><a href="/wiki/Развитие_героя" class="navigation__menu-dropdown-link">Развитие героя</a></li><li><a href="/wiki/Снаряжение" class="navigation__menu-dropdown-link">Снаряжение</a></li><li><a href="/wiki/Ноты" class="navigation__menu-dropdown-link">Ноты</a><li><a href="/wiki/Эмоции" class="navigation__menu-dropdown-link">Эмоции</a></li><li><a href="/wiki/Транспорт" class="navigation__menu-dropdown-link">Транспорт</a></li><li><a href="/wiki/Питомцы" class="navigation__menu-dropdown-link">Питомцы</a></li></ul></div><div class="navigation__menu-dot"></div><div class="navigation__menu-item"><a class="navigation__menu-link">Экономика <i class="icon icon-arrow"></i></a><ul class="navigation__menu-dropdown"><li><a href="/wiki/Магазин" class="navigation__menu-dropdown-link">Магазин</a></li><li><a href="/wiki/Чёрный_рынок" class="navigation__menu-dropdown-link">Чёрный рынок</a></li><li><a href="/wiki/Премиум" class="navigation__menu-dropdown-link">Премиум</a></li><li><a href="/wiki/Валюты" class="navigation__menu-dropdown-link">Валюты</a></li><li><a href="/wiki/Торговля_и_обмен" class="navigation__menu-dropdown-link">Торговля и обмен</a></li></ul></div><div class="navigation__menu-dot"></div><div class="navigation__menu-item"><a class="navigation__menu-link">Сообщество <i class="icon icon-arrow"></i></a><ul class="navigation__menu-dropdown"><li><a href="/wiki/Друзья" class="navigation__menu-dropdown-link">Друзья</a></li><li><a href="/wiki/Группы" class="navigation__menu-dropdown-link">Группы</a></li><li><a href="/wiki/Гильдия" class="navigation__menu-dropdown-link">Гильдия</a></li></ul></div></div></nav></div></div>');
+
   constructor: function() {
 +
    var html =
 +
        '<footer class="footer">'
 +
      + '<div class="footer__socials flex flex--center">'
 +
      + '<a class="footer__social" href="https://vk.com/lostark" target="_blank"><i class="icon icon-social-vkontakte"></i></a>'
 +
      + '<a class="footer__social" href="https://www.youtube.com/LOSTARKRU" target="_blank"><i class="icon icon-social-youtube"></i></a>'
 +
      + '<a class="footer__social" href="https://discord.com/invite/lostarkru" target="_blank"><i class="icon icon-social-discord"></i></a>'
 +
      + '<a class="footer__social" href="https://ok.ru/group/54524030353588" target="_blank"><i class="icon icon-social-odnoklassniki"></i></a>'
 +
      + '<a class="footer__social" href="https://www.twitch.tv/lostark_ru" target="_blank"><i class="icon icon-social-twitch"></i></a>'
 +
      + '<a class="footer__social" href="https://t.me/playlostark_ru" target="_blank"><i class="icon icon-social-telegram"></i></a>'
 +
      + '</div>'
 +
      + '<div class="footer__logos flex flex--center">'
 +
      + '<img class="footer__logo" src="//la-static.vkplay.ru/static/images/common/footer-logo-smilegate.svg" width="147px">'
 +
      + '<a href="https://astrum-entertainment.ru/" target="_blank"><img class="footer__logo" src="//la-static.vkplay.ru/static/images/common/footer-logo-astrum.svg" width="147px"></a>'
 +
      + '<a href="https://vkplay.ru/" target="_blank"><img class="footer__logo" src="//la-static.vkplay.ru/static/images/common/footer-logo-vkplay.svg" width="146px"></a>'
 +
      + '</div>'
 +
      + '<div class="footer__copyright">'
 +
      + '<p>©' + date.getFullYear() + ' Smilegate RPG, Inc. Published by <a href="https://astrum-entertainment.ru/" target="_blank">ООО "АСТРУМ"</a>.</p>'
 +
      + '<p>All rights reserved. All trademarks are the property of their respective owners.</p>'
 +
      + '</div>'
 +
      + '<div class="footer__links flex flex--center">'
 +
      + '<a class="footer__link" href="/l/support" target="_blank">Поддержка</a>'
 +
      + '<a class="footer__link" href="/documents">Документы</a>'
 +
      + '<div class="footer__pegi-wrap">'
 +
      + '<div class="footer__pegi flex align-i--center justify-c--end">12+</div>'
 +
      + '</div>'
 +
      + '</div>'
 +
      + '</footer>';
 +
    DOMbody.append( html );
 +
    $( '#footer' ).remove();
 +
  }
 +
};
 +
$( footer.constructor );
  
  var nav = $('.navigation'),
+
// error page
       navHamburger = $('.navigation__hamburger'),
+
var errorPage = {
      navMenuLink = $('.navigation__menu-link');
+
  constructor: function() {
 +
    if( $( '#error-page' ).length ) {
 +
       var html =
 +
          '<section class="error-page">'
 +
        + '<div class="error-page__wrap flex align-i--center flex-dir--col">'
 +
        + '<h1 class="error-page__title">Страница не существует или удалена</h1>'
 +
        + '<p class="error-page__text"><a href="/wiki/">Вернуться на главную страницу</a></p>'
 +
        + '<div class="error-page__num">404</div>'
 +
        + '</div>'
 +
        + '</section>';
 +
      DOMbody
 +
        .prepend( html )
 +
        .addClass( 'body--error-page_active' );
 +
    };
 +
  }
 +
};
 +
$( errorPage.constructor );
  
   navHamburger.on('click', function() {
+
// page heading
     navHamburger.toggleClass('type-opened');
+
var heading = {
    nav.toggleClass('type-opened');
+
   constructor: function() {
   });
+
     if( $( '.heading' ).length ) {
 +
      DOMfirstHeading.remove();
 +
    };
 +
   }
 +
};
 +
$( heading.constructor );
  
   navMenuLink.on('click', function() {
+
// toc
     if ($(window).width() <= 768) {
+
var toc = {
       $(this).parent().toggleClass('type-opened');
+
   constructor: function() {
      return false; 
+
    var html = '<i class="icon icon-arrow-decor pagedetail__toc-icon"></i>';
 +
     if ( $( '#toc, .toc' ).length ) {
 +
       $( '.toctitle h2' ).append( html );
 
     };
 
     };
   });
+
   }
 +
};
 +
$( toc.constructor );
  
  var footer = $('#footer');
 
  
  footer.prepend('<div class="footer-social"><a href="https://vk.com/lostark" target="_blank"><i class="icon-social-vkontakte"></i></a><a href="https://www.youtube.com/LOSTARKRU" target="_blank"><i class="icon-social-youtube"></i></a><a href="https://discord.com/invite/lostarkru" target="_blank"><i class="icon-social-discord"></i></a><a href="https://www.instagram.com/lost.ark.ru" target="_blank"><i class="icon-social-instagram"></i></a><a href="https://ok.ru/group/54524030353588" target="_blank"><i class="icon-social-odnoklassniki"></i></a><a href="https://la.mail.ru/forums/" target="_blank"><i class="icon-social-forum"></i></a></div><div class="footer__groups"><div class="footer__group type-sg"><img src="/wiki/images/8/87/Footer-logo-smilegate.png"></div><a href="https://mail.ru/" target="_blank" class="footer__group type-mg"><img src="/wiki/images/a/ac/Footer-logo-mailru.png"></a><div class="footer-pegi"><span>12+</span></div></div><div class="footer__copyright"><p>© ' + date.getFullYear() + ' Smilegate RPG, Inc. Published by Mail.Ru LLC. All rights reserved.</p><p>All trademarks are the property of their respective owners.</p></div>');
+
/*--[navigation wiki]--*/
 +
var DOMnavigationWiki;
 +
var navigationWiki = {
 +
  constructor: function() {
 +
    DOMnavigationWiki = $( '.navigation-wiki' );
 +
    DOMnavigationWiki.removeAttr( 'style' );
 +
  }
 +
};
 +
$( navigationWiki.constructor );
 +
/*--[/navigation wiki]--*/
  
  var content = $('#content'),
 
      header = $('.header');
 
  
   if ($('#error-page').length) {
+
/*--[search]--*/
    body
+
var DOMsearchForm,
       .addClass('error-page-active')
+
    DOMsearchInput,
       .prepend('<section class="error-page"><div class="error-page__wrap"><h1 class="error-page__title">Страница не существует или удалена</h1><p class="error-page__text"><a href="/wiki/">Вернуться на главную страницу</a></p><div class="error-page__num">404</div></div></section>');
+
    DOMsuggestions,
   };
+
    DOMnavigationWikiIconSearch,
 +
    DOMnavigationWikiIconSearchCross,
 +
    DOMsearchSection;
 +
var search = {
 +
   constructor: function() {
 +
    DOMsearchForm = $( '#searchform' );
 +
    DOMsearchInput = $( '#searchInput' );
 +
    DOMnavigationWikiIconSearch = $( '.navigation-wiki__icon--search' );
 +
    DOMnavigationWikiIconSearchCross = $( '.navigation-wiki__icon--search-cross' );
 +
    DOMsearchInput.removeAttr( 'title' );
 +
    if ( mw.config.get( 'wgPageName' ) == 'Main' ) {
 +
      DOMsearchSection = $( '.section-search' );
 +
      DOMsearchSection.append( DOMsearchForm );
 +
       DOMsearchInput.on( 'click', function() {
 +
        $( this ).off( 'click' );
 +
        DOMsuggestions = $( '.suggestions' );
 +
        DOMsuggestions.addClass( 'suggestions--main' );
 +
      } );
 +
    } else {
 +
       DOMnavigationWiki.prepend( DOMsearchForm );
 +
      search.searchOpen();
 +
      search.searchClose();
 +
      DOMsearchInput.on( 'click', function() {
 +
        $( this ).off( 'click' );
 +
        DOMsuggestions = $( '.suggestions' );
 +
        DOMsuggestions.addClass( 'suggestions--navigation-wiki' );
 +
      } );
 +
    };
 +
  },
 +
  searchOpen: function() {
 +
    DOMnavigationWikiIconSearch.on( 'click', function() {
 +
      $( this ).addClass( 'is-open' );
 +
      DOMsearchForm.addClass( 'is-open' );
 +
      DOMnavigationWikiIconSearchCross.addClass( 'is-open' );
 +
      DOMsearchInput.focus();
 +
    } );
 +
  },
 +
  searchClose: function() {
 +
    DOMnavigationWikiIconSearchCross.on( 'click', function() {
 +
      $( this ).removeClass( 'is-open' );
 +
      DOMsearchForm.removeClass( 'is-open' );
 +
      DOMnavigationWikiIconSearch.removeClass( 'is-open' );
 +
      DOMsearchInput.val( '' );
 +
    } );
 +
  }
 +
};
 +
$( search.constructor );
 +
/*--[/search]--*/
 +
 
 +
 
 +
// read also
 +
var readAlso = {
 +
  constructor: function() {
 +
    if( $( '.read-also' ).length ) {
 +
      var html = '<div class="read-also-section"></div>';
 +
      DOMcontent.after( html );
 +
      $( '.read-also-section' ).html( $( '.read-also' ) );
 +
    };
 +
   }
 +
};
 +
$( readAlso.constructor );
  
  var breadcrumbs = $('.breadcrumbs');
+
// spoiler
  if (breadcrumbs.length) {
+
var spoiler = {
    content.before(breadcrumbs);
+
  constructor: function() {
    breadcrumbs.addClass('breadcrumbs_state_visible');
+
    DOMbody.on( 'click', '.spoiler__title', function() {
   };
+
      $( this )
 +
        .parent()
 +
        .toggleClass( 'is-open' );
 +
    } );
 +
   }
 +
};
 +
$( spoiler.constructor );
  
  var searchForm = $('.search-form'),
+
/*--[youtube]--*/
      searchButton = $('#searchButton');
+
var youtubeIframe = {
   if (searchForm.length) {
+
  constructor: function() {
     searchForm.before($('#searchform'));
+
   if( device.type == 'game' ) {
     $('#simpleSearch').append('<i class="icon icon-search search-form__icon"></i><button class="search-form__button button button--base"><span>Найти</span></button>');
+
     $( 'iframe[src*="youtube"]' )
    $('.search-form__button').append(searchButton);
+
     .attr( 'sandbox', 'allow-same-origin allow-scripts' )
 +
    .wrap('<div class="iframe-wrap--youtube"></div>');
 +
    $( '.iframe-wrap--youtube' ).each( function() {
 +
      $( this ).after( $( '.iframe-wrap--youtube' ).text() );
 +
    } );
 
   };
 
   };
 +
  }
 +
};
 +
$( youtubeIframe.constructor );
 +
/*--[/youtube]--*/
  
  var spoiler = function() {
+
// web iframe
     var spoilerTitle = $('.spoiler__title');
+
var webIframe = {
    spoilerTitle.on('click', function() {
+
  constructor: function() {
       $(this).parent().toggleClass('type-opened');
+
     if ( $( '.web-iframe' ).length ) {
     });
+
       DOMbody.addClass( 'body--web-iframe' );
   };
+
     };
  spoiler();
+
   }
 +
};
 +
$( webIframe.constructor );
  
 +
// legasy
 +
$( function() {
 +
  var html = $('html'),
 +
    head = $('head'),
 +
    body = $('body');
 
   var jsPopup = $('.js-popup').parent();
 
   var jsPopup = $('.js-popup').parent();
 
   jsPopup.on('click', function() {
 
   jsPopup.on('click', function() {
Строка 89: Строка 466:
 
     $('.popup').remove();
 
     $('.popup').remove();
 
   });
 
   });
 
 
   $('.link_target_blank').on('click', 'a', function() {
 
   $('.link_target_blank').on('click', 'a', function() {
 
     $(this).attr('target', '_blank');
 
     $(this).attr('target', '_blank');
 
   });
 
   });
 
  if ($('.page-Служебная_Поиск').length) {
 
    $('#searchText input').attr('placeholder', 'Введите поисковый запрос');
 
    $('#search .oo-ui-actionFieldLayout-button button').before($('.mw-search-nonefound'));
 
  };
 
 
 
   if ($('.itemdic').length) {
 
   if ($('.itemdic').length) {
 
     head.append('<link rel="stylesheet" href="/wiki/index.php?title=MediaWiki:Itemdic.css&ctype=text%2Fcss&action=raw">');
 
     head.append('<link rel="stylesheet" href="/wiki/index.php?title=MediaWiki:Itemdic.css&ctype=text%2Fcss&action=raw">');
Строка 125: Строка 495:
 
   };
 
   };
  
   /* new (begin) */
+
   function cssDictionary() {
  if ($('.dictionary').length) {
 
 
     head.append('<link rel="stylesheet" href="/wiki/index.php?title=Template:Css/dictionary&ctype=text%2Fcss&action=raw">');
 
     head.append('<link rel="stylesheet" href="/wiki/index.php?title=Template:Css/dictionary&ctype=text%2Fcss&action=raw">');
 +
  };
 +
  function cssInfobox() {
 +
    head.append('<link rel="stylesheet" href="/wiki/index.php?title=Template:Css/infobox&ctype=text%2Fcss&action=raw">');
 +
  };
 +
  function cssItem() {
 +
    head.append('<link rel="stylesheet" href="/wiki/index.php?title=Template:Css/item&ctype=text%2Fcss&action=raw">');
 +
  };
 +
  function jsDictionary() {
 
     $.getScript('/wiki/index.php?title=MediaWiki:Js/dictionary&ctype=text%2Fjavascript&action=raw');
 
     $.getScript('/wiki/index.php?title=MediaWiki:Js/dictionary&ctype=text%2Fjavascript&action=raw');
 +
  };
 +
  if ($('.dictionary').length) {
 +
    cssDictionary();
 +
    cssInfobox();
 +
    cssItem();
 +
    jsDictionary();
 +
  };
 +
  if ($('.infobox').length) {
 +
    cssInfobox();
 +
    cssItem();
 +
  };
 +
  if ($('.itembox').length) {
 +
    cssItem();
 
   };
 
   };
  
Строка 146: Строка 536:
 
     };
 
     };
 
   });
 
   });
   /* new (end) */
+
   if (document.getElementById('la-iframe')) {
 +
    document.querySelector('body').classList.add("la-iframe");
 +
  };
 +
} );
  
  if ($('#pt-logout').length) {
+
// preloader (end)
    body.addClass('user-edit');
+
$( function() {
    head.prepend('<link rel="stylesheet" href="/wiki/load.php?modules=mediawiki.action.edit.styles%7Cmediawiki.editfont.styles%7Cmediawiki.widgets.styles&only=styles">');
+
  if ( user.anonymous ) {
    $('#p-tb ul').prepend($('#n-recentchanges'));
+
     preloader.hide();
     $('#p-cactions ul').prepend($('#n-purge'));
 
 
   } else {
 
   } else {
     body.addClass('user-anon');
+
     preloader.hide();
 
   };
 
   };
 
+
} );
  function preloader() {
 
    $('.preloader').addClass('preloader--hidden');
 
    body.removeClass('preloader-active').css("display", "block");
 
    html.css("background", "transparent");
 
  }
 
  setTimeout(preloader, 2000);
 
 
 
});
 
 
 
/* (begin) legacy */
 
if (document.getElementById('la-iframe')) {
 
  document.querySelector('body').classList.add("la-iframe");
 
};
 
 
 
if (document.getElementById('la-wiki-1-0')) {
 
  document.querySelector('#bodyContent').classList.add("la-wiki-1-0-body");
 
};
 
 
 
$(document).on('click', '.js-title-type', function(){
 
var parent = $(this).parent(),
 
tabs = parent.find('.js-title-type')
 
eq = tabs.index($(this)),
 
targets = parent.next().find('.js-title-type-target');
 
tabs.removeClass('active');
 
$(this).addClass('active');
 
targets.removeClass('active');
 
targets.eq(eq).addClass('active');
 
});
 
 
 
$(document).on('click', '.js-title-gender', function(){
 
var parent = $(this).parent(),
 
tabs = parent.find('.js-title-gender')
 
eq = tabs.index($(this)),
 
targets = parent.next().find('.js-title-gender-target');
 
tabs.removeClass('active');
 
$(this).addClass('active');
 
targets.removeClass('active');
 
targets.eq(eq).addClass('active');
 
});
 
 
 
$(document).on('click', '.js-la-tab-one', function(){
 
var parent = $(this).parent(),
 
tabs = parent.find('.js-la-tab-one')
 
eq = tabs.index($(this)),
 
targets = parent.next().find('.js-la-target-one');
 
tabs.removeClass('active');
 
$(this).addClass('active');
 
targets.removeClass('active');
 
targets.eq(eq).addClass('active');
 
});
 
 
 
$(document).on('click', '.js-la-tab-two', function(){
 
var parent = $(this).parent(),
 
tabs = parent.find('.js-la-tab-two')
 
eq = tabs.index($(this)),
 
targets = parent.next().find('.js-la-target-two');
 
tabs.removeClass('active');
 
$(this).addClass('active');
 
targets.removeClass('active');
 
targets.eq(eq).addClass('active');
 
});
 
 
 
$(function(){
 
var laScrollBottom = document.getElementById("la-scroll_bottom");
 
laScrollBottom.scrollTop = laScrollBottom.scrollHeight;
 
});
 
 
 
$( "#la-calendar a" ).each(function( index, el ) {
 
  $(el).attr("target","_blank");
 
});
 
/* (end) legacy */
 

Текущая версия на 17:10, 23 апреля 2024

// functions
var fnLoad = {
  module: function( name ) {
    mw.loader.load( name );
  },
  script: function( name ) {
    mw.loader.load( '/wiki/index.php?title=mediawiki:scripts/' + name + '.js&ctype=text%2Fjavascript&action=raw' );
  },
  style: function ( name ) {
    DOMhead.append( '<link rel="stylesheet" href="/wiki/index.php?title=mediawiki:styles/' + name + '.css&ctype=text%2Fcss&action=raw">' );
  }
};

// date
var date = new Date();

// common dom elements
var DOMhtml,
    DOMhead,
    DOMbody,
    DOMcontent,
    DOMmwNavigation,
    DOMfirstHeading;
$( function() {
  DOMhtml = $( 'html' );
  DOMhead = $( 'head' );
  DOMbody = $( 'body' );
  DOMcontent = $( '#content' );
  DOMmwNavigation = $( '#mw-navigation' );
  DOMfirstHeading = $( '#firstHeading, .firstHeading' );
} );

// user info
var user = {
  anonymous: undefined,
  id: mw.config.get( 'wgUserId' )
};
if ( user.id != null ) {
  user.anonymous = false;
} else {
  user.anonymous = true;
};

// redirect anonymous users from special pages
$( function() {
  if (
    user.anonymous &&
    mw.config.get( 'wgNamespaceNumber' ) != 0 && 
    mw.config.get( 'wgNamespaceNumber' ) != 10 && 
    mw.config.get( 'wgCanonicalSpecialPageName' ) != 'Search'
  ) {
    window.location.replace( '/wiki/' );
  };
} );

// modules customization 
$( function() {
  $( 'link[href*="skins.vector.styles"]' ).each( function() {
    var href = $( 'link[href*="skins.vector.styles"]' ).attr( 'href' );
    href = href.replace( /skins.vector.styles/i, '' );
    href = href.replace( /mediawiki.toc.styles/i, '' );
    href = href.replace( /mediawiki.skinning.interface/i, '' );
    href = href.replace( /mediawiki.legacy.commonPrint%2Cshared/i, '' );
    $( this ).attr( 'href', href );
  } );
} );

// design system
var breakpoint = {
  width: {
    game: 1012,
    desktop: 1280,
    tablet: 720,
    mobile: 320
  },
  height: {
    game: 682
  }
};
var device;
$( window ).resize( function() {
  device = {
    width: $( window ).width(),
    height: $( window ).height(),
    type: undefined
  };
  if (
    device.width == breakpoint.width.game &&
    device.height <= breakpoint.height.game
  ) {
    device.type = 'game';
  } else if ( device.width < breakpoint.width.tablet ) {
    device.type = 'mobile';
  } else if ( device.width < breakpoint.width.desktop ) {
    device.type = 'tablet';
  } else {
    device.type = 'desktop';
  };
} );
$( window ).resize();

// add html/css/js to the page
$( function() {
  $( '.add_html' ).each( function() {
    $( this )
      .after( $( this ).text() )
      .remove();
  } );
  $( '.add_css' ).each( function() {
    $( this )
      .after( '<style>' + $( this ).text() + '</style>' )
      .remove();
  } );
  $( '[data-style]' ).each( function() {
    var attrStyle = $( this ).attr( 'style' ),
        attrDataStyle = $( this ).attr( 'data-style' ),
        attrStyleNew;
    if ( attrStyle != undefined ) {
      attrStyleNew = attrStyle + ' ' + attrDataStyle;
    } else {
      attrStyleNew = attrDataStyle;
    };
    $( this )
      .attr( 'style', attrStyleNew )
      .removeAttr( 'data-style' );
  } );
  $( '.add_js' ).each( function() {
    fnLoad.script( $( this ).text() );
    $( this ).remove();
  } );
} );

// google analytics
var googleAnalytics = {
  constructor: function() {
    var html =
        '<noscript>'
      + '<iframe src="//www.googletagmanager.com/ns.html?id=GTM-NLDGMH4" height="0" width="0" style="display: none; visibility: hidden;"></iframe>'
      + '</noscript>';
    DOMbody.prepend( html );
  }
};
$( googleAnalytics.constructor );

// meta
var meta = {
  constructor: function() {
    var html =
        '<meta http-equiv="X-UA-Compatible" content="IE=edge">'
      + '<meta name="viewport" content="width=device-width, initial-scale=1.0">'
      + '<meta name="HandheldFriendly" content="true">'
      + '<meta name="MobileOptimized" content="width">'
      + '<meta name="apple-mobile-web-app-capable" content="yes">'
      + '<link rel="apple-touch-icon" sizes="57x57" href="/wiki/images/9/9d/Apple-touch-icon-57x57.png">'
      + '<link rel="apple-touch-icon" sizes="60x60" href="/wiki/images/0/03/Apple-touch-icon-60x60.png">'
      + '<link rel="apple-touch-icon" sizes="72x72" href="/wiki/images/1/15/Apple-touch-icon-72x72.png">'
      + '<link rel="apple-touch-icon" sizes="76x76" href="/wiki/images/e/e2/Apple-touch-icon-76x76.png">'
      + '<link rel="apple-touch-icon" sizes="114x114" href="/wiki/images/1/15/Apple-touch-icon-114x114.png">'
      + '<link rel="apple-touch-icon" sizes="120x120" href="/wiki/images/8/85/Apple-touch-icon-120x120.png">'
      + '<link rel="apple-touch-icon" sizes="144x144" href="/wiki/images/a/a2/Apple-touch-icon-144x144.png">'
      + '<link rel="apple-touch-icon" sizes="152x152" href="/wiki/images/5/5d/Apple-touch-icon-152x152.png">'
      + '<link rel="apple-touch-icon" sizes="180x180" href="/wiki/images/4/49/Apple-touch-icon-180x180.png">'
      + '<link rel="icon" type="image/png" sizes="16x16" href="/wiki/images/c/c5/Favicon-16x16.png">'
      + '<link rel="icon" type="image/png" sizes="32x32" href="/wiki/images/4/46/Favicon-32x32.png">'
      + '<link rel="icon" type="image/png" sizes="96x96" href="/wiki/images/4/43/Favicon-96x96.png">'
      + '<link rel="shortcut icon" href="//la-static.prod-my.games/static/images/favicon/favicon.ico" type="image/x-icon">'
      + '<link rel="icon" href="//la-static.prod-my.games/static/images/favicon/favicon.ico" type="image/x-icon">';
    DOMhead.prepend( html );
  }
};
$( meta.constructor );

// preloader (start)
var preloader = {
  constructor: function() {
    var html =
        '<div class="preloader">'
      + '<img class="preloader__img preloader__img--0" src="https://la-static.prod-my.games/static/images/preloader/preloader_00.png">'
      + '<img class="preloader__img preloader__img--1" src="https://la-static.prod-my.games/static/images/preloader/preloader_01.png">'
      + '<img class="preloader__img preloader__img--2" src="https://la-static.prod-my.games/static/images/preloader/preloader_02.png">'
      + '<img class="preloader__img preloader__img--3" src="https://la-static.prod-my.games/static/images/preloader/preloader_03.png">'
      + '<img class="preloader__img preloader__img--4" src="https://la-static.prod-my.games/static/images/preloader/preloader_04.png">'
      + '</div>';
    DOMbody
      .prepend( html )
      .addClass( 'body--preloader_active' )
      .show();
  },
  hide: function() {
    $( '.preloader' ).hide();
    DOMbody.removeClass( 'body--preloader_active' );
  }
};
$( preloader.constructor );

// navigation
var DOMnavigation,
    DOMnavigationHamburger,
    DOMnavigationMenu,
    DOMnavigationMenuLink;
var navigation = {
  constructor: function() {
    var html =
        '<section class="navigation-section">'
      + '<div class="user-header flex align-i--center">'
      + '<div class="user-header__left-side flex">'
      + '<a class="user-header__link" href="/l/support" target="_blank">Поддержка</a>'
      + '<a class="user-header__link" href="/promocode">Активировать промокод</a>'
      + '<a class="user-header__link" href="/inventory">Мои предметы</a>'
      + '</div>'
      + '<div class="user-header__right-side"></div>'
      + '</div>'
      + '<div class="navigation">'
      + '<a class="navigation__logo" href="/"></a>'
      + '<button class="navigation__hamburger"></button>'
      + '<div class="navigation__mobile">'
      + '<nav class="navigation__menu"></nav>'
      + '<div class="navigation__button flex flex--center"><a class="button button--medium" href="/download">Скачать игру</a></div>'
      + '</div>'
      + '</div>'
      + '</section>';
    DOMbody.prepend( html );
    DOMnavigation = $( '.navigation' );
    DOMnavigationHamburger = $( '.navigation__hamburger' );
    DOMnavigationMenu = $( '.navigation__menu' );
    DOMnavigationMenu.load( '/ .navigation__menu-list', function( response, status, xhr ) {
      if ( status == 'success' ) {
        DOMnavigationMenuLink = $( '.navigation__menu-link' );
        DOMnavigationMenuLink.on( 'click', function() {
          if ( device.type == 'mobile' ) {
            $( this )
              .parent()
              .toggleClass( 'is-open' );
            return false;
          };
        } );
      };
    } );
    DOMnavigationHamburger.on( 'click', function() {
      DOMnavigation.toggleClass( 'is-open' );
    } );
  }
};
$( navigation.constructor );

// header
var header = {
  constructor: function() {
    var html =
        '<div class="header">'
      + '<img class="header__img" src="/wiki/images/9/98/Bg.jpg">'
      + '</div>';
    DOMbody.prepend( html );
  }
};
$( header.constructor );

// footer
var footer = {
  constructor: function() {
    var html =
        '<footer class="footer">'
      + '<div class="footer__socials flex flex--center">'
      + '<a class="footer__social" href="https://vk.com/lostark" target="_blank"><i class="icon icon-social-vkontakte"></i></a>'
      + '<a class="footer__social" href="https://www.youtube.com/LOSTARKRU" target="_blank"><i class="icon icon-social-youtube"></i></a>'
      + '<a class="footer__social" href="https://discord.com/invite/lostarkru" target="_blank"><i class="icon icon-social-discord"></i></a>'
      + '<a class="footer__social" href="https://ok.ru/group/54524030353588" target="_blank"><i class="icon icon-social-odnoklassniki"></i></a>'
      + '<a class="footer__social" href="https://www.twitch.tv/lostark_ru" target="_blank"><i class="icon icon-social-twitch"></i></a>'
      + '<a class="footer__social" href="https://t.me/playlostark_ru" target="_blank"><i class="icon icon-social-telegram"></i></a>'
      + '</div>'
      + '<div class="footer__logos flex flex--center">'
      + '<img class="footer__logo" src="//la-static.vkplay.ru/static/images/common/footer-logo-smilegate.svg" width="147px">'
      + '<a href="https://astrum-entertainment.ru/" target="_blank"><img class="footer__logo" src="//la-static.vkplay.ru/static/images/common/footer-logo-astrum.svg" width="147px"></a>'
      + '<a href="https://vkplay.ru/" target="_blank"><img class="footer__logo" src="//la-static.vkplay.ru/static/images/common/footer-logo-vkplay.svg" width="146px"></a>'
      + '</div>'
      + '<div class="footer__copyright">'
      + '<p>©' + date.getFullYear() + ' Smilegate RPG, Inc. Published by <a href="https://astrum-entertainment.ru/" target="_blank">ООО "АСТРУМ"</a>.</p>'
      + '<p>All rights reserved. All trademarks are the property of their respective owners.</p>'
      + '</div>'
      + '<div class="footer__links flex flex--center">'
      + '<a class="footer__link" href="/l/support" target="_blank">Поддержка</a>'
      + '<a class="footer__link" href="/documents">Документы</a>'
      + '<div class="footer__pegi-wrap">'
      + '<div class="footer__pegi flex align-i--center justify-c--end">12+</div>'
      + '</div>'
      + '</div>'
      + '</footer>';
    DOMbody.append( html );
    $( '#footer' ).remove();
  }
};
$( footer.constructor );

// error page
var errorPage = {
  constructor: function() {
    if( $( '#error-page' ).length ) {
      var html =
          '<section class="error-page">'
        + '<div class="error-page__wrap flex align-i--center flex-dir--col">'
        + '<h1 class="error-page__title">Страница не существует или удалена</h1>'
        + '<p class="error-page__text"><a href="/wiki/">Вернуться на главную страницу</a></p>'
        + '<div class="error-page__num">404</div>'
        + '</div>'
        + '</section>';
      DOMbody
        .prepend( html )
        .addClass( 'body--error-page_active' );
    };
  }
};
$( errorPage.constructor );

// page heading
var heading = {
  constructor: function() {
    if( $( '.heading' ).length ) {
      DOMfirstHeading.remove();
    };
  }
};
$( heading.constructor );

// toc
var toc = {
  constructor: function() {
    var html = '<i class="icon icon-arrow-decor pagedetail__toc-icon"></i>';
    if ( $( '#toc, .toc' ).length ) {
      $( '.toctitle h2' ).append( html );
    };
  }
};
$( toc.constructor );


/*--[navigation wiki]--*/
var DOMnavigationWiki;
var navigationWiki = {
  constructor: function() {
    DOMnavigationWiki = $( '.navigation-wiki' );
    DOMnavigationWiki.removeAttr( 'style' );
  }
};
$( navigationWiki.constructor );
/*--[/navigation wiki]--*/


/*--[search]--*/
var DOMsearchForm,
    DOMsearchInput,
    DOMsuggestions,
    DOMnavigationWikiIconSearch,
    DOMnavigationWikiIconSearchCross,
    DOMsearchSection;
var search = {
  constructor: function() {
    DOMsearchForm = $( '#searchform' );
    DOMsearchInput = $( '#searchInput' );
    DOMnavigationWikiIconSearch = $( '.navigation-wiki__icon--search' );
    DOMnavigationWikiIconSearchCross = $( '.navigation-wiki__icon--search-cross' );
    DOMsearchInput.removeAttr( 'title' );
    if ( mw.config.get( 'wgPageName' ) == 'Main' ) {
      DOMsearchSection = $( '.section-search' );
      DOMsearchSection.append( DOMsearchForm );
      DOMsearchInput.on( 'click', function() {
        $( this ).off( 'click' );
        DOMsuggestions = $( '.suggestions' );
        DOMsuggestions.addClass( 'suggestions--main' );
      } );
    } else {
      DOMnavigationWiki.prepend( DOMsearchForm );
      search.searchOpen();
      search.searchClose();
      DOMsearchInput.on( 'click', function() {
        $( this ).off( 'click' );
        DOMsuggestions = $( '.suggestions' );
        DOMsuggestions.addClass( 'suggestions--navigation-wiki' );
      } );
    };
  },
  searchOpen: function() {
    DOMnavigationWikiIconSearch.on( 'click', function() {
      $( this ).addClass( 'is-open' );
      DOMsearchForm.addClass( 'is-open' );
      DOMnavigationWikiIconSearchCross.addClass( 'is-open' );
      DOMsearchInput.focus();
    } );
  },
  searchClose: function() {
    DOMnavigationWikiIconSearchCross.on( 'click', function() {
      $( this ).removeClass( 'is-open' );
      DOMsearchForm.removeClass( 'is-open' );
      DOMnavigationWikiIconSearch.removeClass( 'is-open' );
      DOMsearchInput.val( '' );
    } );
  }
};
$( search.constructor );
/*--[/search]--*/


// read also
var readAlso = {
  constructor: function() {
    if( $( '.read-also' ).length ) {
      var html = '<div class="read-also-section"></div>';
      DOMcontent.after( html );
      $( '.read-also-section' ).html( $( '.read-also' ) );
    };
  }
};
$( readAlso.constructor );

// spoiler
var spoiler = {
  constructor: function() {
    DOMbody.on( 'click', '.spoiler__title', function() {
      $( this )
        .parent()
        .toggleClass( 'is-open' );
    } );
  }
};
$( spoiler.constructor );

/*--[youtube]--*/
var youtubeIframe = {
  constructor: function() {
  if( device.type == 'game' ) {
    $( 'iframe[src*="youtube"]' )
    .attr( 'sandbox', 'allow-same-origin allow-scripts' )
    .wrap('<div class="iframe-wrap--youtube"></div>');
    $( '.iframe-wrap--youtube' ).each( function() {
      $( this ).after( $( '.iframe-wrap--youtube' ).text() );
    } );
  };
  }
};
$( youtubeIframe.constructor );
/*--[/youtube]--*/

// web iframe
var webIframe = {
  constructor: function() {
    if ( $( '.web-iframe' ).length ) {
      DOMbody.addClass( 'body--web-iframe' );
    };
  }
};
$( webIframe.constructor );

// legasy
$( function() {
  var html = $('html'),
    head = $('head'),
    body = $('body');
  var jsPopup = $('.js-popup').parent();
  jsPopup.on('click', function() {
    body
      .addClass('popup-opened')
      .append('<div class="popup"><div class="popup__overlay"><div class="popup__wrap"><div class="popup__image-wrapper"><div class="popup__image"><img src="' + $(this).attr('href') + '"></div></div><div class="popup__closer controller-close"></div></div></div></div>');
    return false;
  });
  body.on('click', '.popup__overlay, .popup__closer', function() {
    body.removeClass('popup-opened');
    $('.popup').remove();
  });
  $('.link_target_blank').on('click', 'a', function() {
    $(this).attr('target', '_blank');
  });
  if ($('.itemdic').length) {
    head.append('<link rel="stylesheet" href="/wiki/index.php?title=MediaWiki:Itemdic.css&ctype=text%2Fcss&action=raw">');
    $.getScript('/wiki/index.php?title=MediaWiki:Itemdic.js&ctype=text%2Fjavascript&action=raw');
  };

  if ($('[data-key]').length) {
    $.getScript('/wiki/index.php?title=MediaWiki:Data-json.js&ctype=text%2Fjavascript&action=raw');
  };

  if ($('[data-filter-target]').length) {
    $('[data-filter-target]').on('click', function() {
        var filterTarget = $(this).attr('data-filter-target'),
          filterParent = $(this).closest('[data-filter-parent='+filterTarget+']'),
            filterValue = $(this).attr('data-filter-value');
      filterParent.attr('data-filter-active', filterValue);
      filterParent.find('[data-filter-target='+filterTarget+']').removeClass('type-active');
      filterParent.find('[data-filter-target-'+filterTarget+']').hide();
      $(this).addClass('type-active');
      filterParent.find('[data-filter-target-'+filterTarget+'='+filterValue+']').show();
    });
  };

  if ($('#web-iframe').length) {
    html.addClass('web-iframe');
  };

  function cssDictionary() {
    head.append('<link rel="stylesheet" href="/wiki/index.php?title=Template:Css/dictionary&ctype=text%2Fcss&action=raw">');
  };
  function cssInfobox() {
    head.append('<link rel="stylesheet" href="/wiki/index.php?title=Template:Css/infobox&ctype=text%2Fcss&action=raw">');
  };
  function cssItem() {
    head.append('<link rel="stylesheet" href="/wiki/index.php?title=Template:Css/item&ctype=text%2Fcss&action=raw">');
  };
  function jsDictionary() {
    $.getScript('/wiki/index.php?title=MediaWiki:Js/dictionary&ctype=text%2Fjavascript&action=raw');
  };
  if ($('.dictionary').length) {
    cssDictionary();
    cssInfobox();
    cssItem();
    jsDictionary();
  };
  if ($('.infobox').length) {
    cssInfobox();
    cssItem();
  };
  if ($('.itembox').length) {
    cssItem();
  };

  $('[data-sort]').on('click', function() {
    var sortSelect = $(this),
        sortSelects = sortSelect.parent(),
        sortTarget = sortSelect.attr('data-sort'),
        sortValue = sortSelect.attr('data-sort-value'),
        sortParent = sortSelect.closest('[data-sort-parent="' + sortTarget + '"]');
    sortSelects.children('.is-active').removeClass('is-active');
    sortSelect.addClass('is-active');
    sortParent.find('[data-sort-' + sortTarget + ']').hide();
    if (sortValue > 0) {
      sortParent.find('[data-sort-' + sortTarget + '*="' + sortValue + '"]').show();
    } else {
      sortParent.find('[data-sort-' + sortTarget + ']').show();
    };
  });
  if (document.getElementById('la-iframe')) {
    document.querySelector('body').classList.add("la-iframe");
  };
} );

// preloader (end)
$( function() {
  if ( user.anonymous ) {
    preloader.hide();
  } else {
    preloader.hide();
  };
} );