Дополнительные действия
Oagapov (обсуждение | вклад) Новая страница: «→Размещённый здесь код 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...» |
Oagapov (обсуждение | вклад) Уведомление о cookie: компактная плашка вместо окна |
||
| (не показаны 3 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
/* | /* Просмотр картинки по клику; 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 ); | |||
} ); | |||
}() ); | |||
Текущая версия от 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 );
} );
}() );