MediaWiki:Gadget-wikificator.js
Версия от 21:16, 6 января 2023; Андрей Фоменко (обсуждение | вклад)
Замечание. Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
- Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
- Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
- Opera: Перейдите в Menu → Настройки (Opera → Настройки на Mac), а затем Безопасность → Очистить историю посещений → Кэшированные изображения и файлы
mw.loader.using( 'jquery.client', function () { var wmCantWork = 'Викификатор не может работать в вашем браузере', wmFullText = 'Викификатор обработает ВЕСЬ текст на этой странице. Продолжить?', wmTalkPage = 'Викификатор не обрабатывает страницы обсуждения целиком.\n\nВыделите ваше сообщение — обработано будет только оно'; window.wfPlugins = window.wfPlugins || []; window.Wikify = function ( input ) { 'use strict'; var txt = '', hidden = [], winScroll = document.documentElement.scrollTop; // Поверхностная проверка на то, что перед нами поле ввода if ( !input || !input.tagName || input.value === undefined ) { input = document.editform.wpTextbox1; } // FUNCTIONS function r( r1, r2 ) { txt = txt.replace( r1, r2 ); } function processText() { var i, u = '\u00A0'; // non-breaking space if ( mw.config.get('wgNamespaceNumber') % 2 || mw.config.get('wgNamespaceNumber') === 4 ) { // is talk page var sigs = txt.match( /\d\d:\d\d, \d\d? \S{3,8} 20\d\d \(UTC\)/g ); if ( sigs && sigs.length > 1 ) { alert( wmTalkPage ); return; } } // Hyphens to em-dashes r( /(\s)-{1,3} /g, '$1— ' ); // hyphen -> — r( /(\d)-(\d)/g, '$1—$2' ); // -> — r( /(\d)--(\d)/g, '$1—$2' ); // -> — r( /(\d)---(\d)/g, '$1—$2' ); // -> — r( /«|»|“|”|„/g, '"' ); // temp // "" → «» for ( i = 1; i <= 2; i++ ) { r( /([\s\x02!|#'"\/([{;+\-])"([^"]*)([^\s"([{|])"([^a-zа-яё])/ig, '$1«$2$3»$4' ); // " } while ( /«[^»]*«/.test( txt ) ) { r( /«([^»]*)«([^»]*)»/g, '«$1„$2“' ); } r( 'ёё' , '</div>\n<hr class=newtheme>\n<div class=newtheme>' ); r( 'ёёё' , '<hr class=newtheme>\n' ); } function processAllText() { txt = input.value; processText(); r( /^[\n\r]+/, '' ); input.value = txt; txt = ''; } // Check regexp support try { txt = 'ая'.replace( /а/g, 'б' ).replace( /б(?=я)/, 'в' ); } catch ( e ) {} if ( txt !== 'вя' ) { alert( wmCantWork ); return; } input.focus(); // Modern browsers if ( typeof input.selectionStart !== 'undefined' ) { var textScroll = input.scrollTop, startPos = input.selectionStart, endPos = input.selectionEnd; txt = input.value.substring( startPos, endPos ); if ( txt === '' ) { processAllText(); } else { processText(); input.value = input.value.substring( 0, startPos ) + txt + input.value.substring( endPos ); } input.selectionStart = startPos; input.selectionEnd = startPos + txt.length; input.scrollTop = textScroll; // IE } else if ( document.selection && document.selection.createRange ) { var range = document.selection.createRange(); txt = range.text; if ( txt === '' ) { processAllText(); } else { processText(); range.text = txt; if ( range.moveStart ) { range.moveStart( 'character', -txt.length ); } range.select(); } // Other browsers } else if ( confirm( wmFullText ) ) { processAllText(); } document.documentElement.scrollTop = winScroll; // scroll back, for IE/Opera }; window.AddLinesToNames = function ( input ) { // получим строки в массив input = document.getElementById("wpTextbox1"); var lines = input.value.split('\n'); var TimePosition = []; // // найдём позиции // var ThemesCount = 0; var LineFrom = 0; for(var i = 0; i<lines.length; i++){ if (lines[i] === "==Темы==") { LineFrom = i+1; } if (lines[i] === "==Места==") { LineTo = i-1; } if (lines[i] === "==Лица==") { LineFromA = i+1; } if (lines[i].substring(1, 6) === "{{что|") { ThemesCount = ThemesCount + 1; } if (lines[i] === "{{КонецПередачи}}") { LineToA = i-1; } } LineToA = LineToA - ThemesCount; // // заполняем массив времён // for (I=LineFrom; I<LineTo-1; I++){ if ( lines[I] === "<div class=newtheme>" ){ // проверим, есть ли время в следующей строке if (lines[I+1].substring(4, 5) === ":") { TimeStr = lines[I+1].substring(2, 7); TimePosition.push(TimeStr); } else { TimeStr = lines[I+2].substring(2, 7); TimePosition.push(TimeStr); } } } // // дополняем раздел имён // var N = 0; for (I=LineFromA; I<LineToA; I++){ TimeStr = lines[I].substring(2, 7); if (TimeStr >= TimePosition[N]) { lines[I] = "<hr class=newtheme>\n" + lines[I]; N = N + 1; } } // // возвращаем результат в форму // input.value = lines.join("\n"); input.focus(); }; // // регистрация // function registerWikificatorTool() { registerTool( { name: 'wikificator', position: 100, title: strings.name, label: strings.tooltip, callback: Wikify, classic: { icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png', }, visual: { icon: '//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Wikificator_VE_icon.svg/20px-Wikificator_VE_icon.svg.png', modes: [ 'source' ], addRightAway: true, }, } ); } $.when( mw.loader.using( [ 'mediawiki.util', 'user.options' ] ), $.getScript( 'https://ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-registerTool.js&action=raw&ctype=text/javascript' ) ).done( registerWikificatorTool );