Открыть меню
Платформа Эра. Документация
Toggle preferences menu
Открыть персональное меню
Вы не представились системе
Your IP address will be publicly visible if you make any edits.

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

Страница интерфейса MediaWiki
Новая страница: «→‎Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице: (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.sr...»
 
Уведомление о cookie: компактная плашка вместо окна
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
/* Просмотр картинки по клику; Ctrl/Cmd+клик открывает страницу файла как раньше.
  Стили окна — в MediaWiki:Citizen.css (.era-lightbox) */
$( function () {
  $( document ).on( 'click', '.mw-parser-output a.mw-file-description, .mw-parser-output a.image', function ( e ) {
    if ( e.ctrlKey || e.metaKey || e.shiftKey || e.button !== 0 ) return;
    var img = this.querySelector( 'img' );
    if ( !img ) return;
    e.preventDefault();


  (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
    // из адреса миниатюры получаем оригинал
  m[i].l=1*new Date();
    var full = ( img.currentSrc || img.src ).replace( /\/thumb(\/.+?\/[^\/]+)\/[^\/]+$/, '$1' );
  for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
  k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
  (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");


   ym(98923364, "init", {
    var box = document.createElement( 'div' );
        clickmap:true,
    box.className = 'era-lightbox';
        trackLinks:true,
    var big = document.createElement( 'img' );
        accurateTrackBounce:true,
    big.src = full;
        webvisor:true
    big.alt = img.alt || '';
  });
    box.appendChild( big );
 
    function close() {
      box.remove();
      document.removeEventListener( 'keydown', onKey );
      document.documentElement.style.overflow = '';
    }
    function onKey( ev ) { if ( ev.key === 'Escape' ) close(); }
 
    box.addEventListener( 'click', close );
    document.addEventListener( 'keydown', onKey );
    document.documentElement.style.overflow = 'hidden';
    document.body.appendChild( box );
  } );
} );
 
/* Уведомление о файлах cookie вместо окна расширения CookieConsent.
   Модель «продолжая пользоваться сайтом, вы соглашаетесь». Стили — в MediaWiki:Citizen.css (.era-cookie-bar) */
( function () {
  var COOKIE = 'era_cookie_notice';
 
  // Окно расширения скрыто стилями; нажимаем в нём «Принять все», чтобы оно закрылось и больше не появлялось
  var tries = 0;
  var timer = setInterval( function () {
    var btn = document.querySelector( '.cookie-consent-simple-dialog.oo-ui-window-ready .oo-ui-flaggedElement-progressive .oo-ui-buttonElement-button' );
    if ( btn ) {
      btn.click();
      clearInterval( timer );
    } else if ( ++tries > 150 ) {
      clearInterval( timer );
    }
  }, 100 );
 
  if ( document.cookie.indexOf( COOKIE + '=1' ) !== -1 ) {
    return;
  }
 
  var ns = ( mw.config.get( 'wgFormattedNamespaces' ) || {} )[ 4 ] || 'Project';
  var href = mw.config.get( 'wgArticlePath' ).replace( '$1',
    encodeURIComponent( ( ns + ':Политика обработки персональных данных' ).replace( / /g, '_' ) ) );
 
  var bar = document.createElement( 'div' );
  bar.className = 'era-cookie-bar';
  bar.setAttribute( 'role', 'region' );
  bar.setAttribute( 'aria-label', 'Уведомление о файлах cookie' );
  bar.innerHTML = '<p>Мы используем файлы cookie и сервис Яндекс Метрика для работы сайта и анализа посещаемости. ' +
    'Продолжая пользоваться сайтом, вы соглашаетесь с <a href="' + href + '">политикой обработки персональных данных</a>.</p>' +
    '<button type="button">Хорошо</button>';
 
  // На узких экранах панель навигации Citizen внизу — поднимаем плашку над ней
  function place() {
    var header = document.querySelector( '.citizen-header' );
    var r = header && header.getBoundingClientRect();
    var bottomBar = r && r.top > window.innerHeight / 2;
    bar.style.bottom = bottomBar ? ( window.innerHeight - r.top + 8 ) + 'px' : '';
  }
 
  bar.querySelector( 'button' ).addEventListener( 'click', function () {
    document.cookie = COOKIE + '=1; path=/; max-age=31536000; SameSite=Lax';
    bar.remove();
    window.removeEventListener( 'resize', place );
  } );
 
  $( function () {
    document.body.appendChild( bar );
    place();
    window.addEventListener( 'resize', place );
  } );
}() );

Текущая версия от 22:13, 27 октября 2026

/* Просмотр картинки по клику; Ctrl/Cmd+клик открывает страницу файла как раньше.
   Стили окна — в MediaWiki:Citizen.css (.era-lightbox) */
$( function () {
  $( document ).on( 'click', '.mw-parser-output a.mw-file-description, .mw-parser-output a.image', function ( e ) {
    if ( e.ctrlKey || e.metaKey || e.shiftKey || e.button !== 0 ) return;
    var img = this.querySelector( 'img' );
    if ( !img ) return;
    e.preventDefault();

    // из адреса миниатюры получаем оригинал
    var full = ( img.currentSrc || img.src ).replace( /\/thumb(\/.+?\/[^\/]+)\/[^\/]+$/, '$1' );

    var box = document.createElement( 'div' );
    box.className = 'era-lightbox';
    var big = document.createElement( 'img' );
    big.src = full;
    big.alt = img.alt || '';
    box.appendChild( big );

    function close() {
      box.remove();
      document.removeEventListener( 'keydown', onKey );
      document.documentElement.style.overflow = '';
    }
    function onKey( ev ) { if ( ev.key === 'Escape' ) close(); }

    box.addEventListener( 'click', close );
    document.addEventListener( 'keydown', onKey );
    document.documentElement.style.overflow = 'hidden';
    document.body.appendChild( box );
  } );
} );

/* Уведомление о файлах cookie вместо окна расширения CookieConsent.
   Модель «продолжая пользоваться сайтом, вы соглашаетесь». Стили — в MediaWiki:Citizen.css (.era-cookie-bar) */
( function () {
  var COOKIE = 'era_cookie_notice';

  // Окно расширения скрыто стилями; нажимаем в нём «Принять все», чтобы оно закрылось и больше не появлялось
  var tries = 0;
  var timer = setInterval( function () {
    var btn = document.querySelector( '.cookie-consent-simple-dialog.oo-ui-window-ready .oo-ui-flaggedElement-progressive .oo-ui-buttonElement-button' );
    if ( btn ) {
      btn.click();
      clearInterval( timer );
    } else if ( ++tries > 150 ) {
      clearInterval( timer );
    }
  }, 100 );

  if ( document.cookie.indexOf( COOKIE + '=1' ) !== -1 ) {
    return;
  }

  var ns = ( mw.config.get( 'wgFormattedNamespaces' ) || {} )[ 4 ] || 'Project';
  var href = mw.config.get( 'wgArticlePath' ).replace( '$1',
    encodeURIComponent( ( ns + ':Политика обработки персональных данных' ).replace( / /g, '_' ) ) );

  var bar = document.createElement( 'div' );
  bar.className = 'era-cookie-bar';
  bar.setAttribute( 'role', 'region' );
  bar.setAttribute( 'aria-label', 'Уведомление о файлах cookie' );
  bar.innerHTML = '<p>Мы используем файлы cookie и сервис Яндекс Метрика для работы сайта и анализа посещаемости. ' +
    'Продолжая пользоваться сайтом, вы соглашаетесь с <a href="' + href + '">политикой обработки персональных данных</a>.</p>' +
    '<button type="button">Хорошо</button>';

  // На узких экранах панель навигации Citizen внизу — поднимаем плашку над ней
  function place() {
    var header = document.querySelector( '.citizen-header' );
    var r = header && header.getBoundingClientRect();
    var bottomBar = r && r.top > window.innerHeight / 2;
    bar.style.bottom = bottomBar ? ( window.innerHeight - r.top + 8 ) + 'px' : '';
  }

  bar.querySelector( 'button' ).addEventListener( 'click', function () {
    document.cookie = COOKIE + '=1; path=/; max-age=31536000; SameSite=Lax';
    bar.remove();
    window.removeEventListener( 'resize', place );
  } );

  $( function () {
    document.body.appendChild( bar );
    place();
    window.addEventListener( 'resize', place );
  } );
}() );