Участник:Serhio Magpie/enhanceWikitextEditor.js: различия между версиями
Перейти к навигации
Перейти к поиску
Содержимое удалено Содержимое добавлено
м v0.0.8 |
м v0.0.10 |
||
Строка 1: | Строка 1: | ||
// <nowiki> |
// <nowiki> |
||
( function () { |
$( function () { |
||
var nodes = {}; |
var nodes = {}; |
||
Строка 69: | Строка 69: | ||
init(); |
init(); |
||
} |
} ); |
||
// </nowiki> |
// </nowiki> |
Версия от 21:36, 30 декабря 2018
// <nowiki>
$( function () {
var nodes = {};
function addCSS( css ) {
let styleElem = document.createElement( 'style' );
styleElem.appendChild( document.createTextNode( css ) );
document.getElementsByTagName( 'head' )[0].appendChild( styleElem );
}
function getNodes() {
nodes.$textbox = $( '#wpTextbox1' );
nodes.$toolbar = $( '#wikiEditor-ui-toolbar' );
nodes.$toolbarMain = $( '#wikiEditor-section-main' );
nodes.$codeMirrorButton = $( '#mw-editbutton-codemirror .oo-ui-buttonElement-button' );
nodes.$wpPreviewLive = $( '#wpPreviewLive' );
nodes.$wpDiffLive = $( '#wpDiffLive' );
}
function resizeTextbox(){
// Переопрделяем настройки CodeMirror
if( typeof CodeMirror !== 'undefined' ) {
CodeMirror.defaults.viewportMargin = Infinity;
}
// Масштабируем textarea при вводе текста и при переключении режима подстветки
nodes.$codeMirrorButton.on( 'click', resizeTextboxHanlder );
nodes.$textbox.on( 'keyup', resizeTextboxHanlder );
// Масштабируем textarea
resizeTextboxHanlder();
}
function resizeTextboxHanlder() {
let top = $( window ).scrollTop();
nodes.$textbox.css( 'height', 'auto' );
nodes.$textbox.css( 'height', nodes.$textbox.prop( 'scrollHeight' ) + 'px' );
$( window ).scrollTop( top );
}
function moveAjaxPreviewButtons() {
// Перемещать только если задана позиция справа
if ( typeof ajaxPreviewPos !== 'undefined' && ajaxPreviewPos === 'right' ) {
nodes.$ajaxPreviewContainer = nodes.$wpPreviewLive.parent();
nodes.$ajaxPreviewContainer.css( 'margin', '4px' );
nodes.$ajaxPreviewContainer.insertBefore( nodes.$toolbarMain );
}
}
function init() {
let isEditing = [ 'edit', 'submit' ].includes( mw.config.get( 'wgAction' ) );
let isRightNamespace = mw.config.get( 'wgNamespaceNumber' ) === 10;
// Запускать только на страницах в пространстве шаблонов в режиме редактирования
if ( isEditing && isRightNamespace ){
// Подготовить все нужные ноды
getNodes();
// Добавить переопределение стилей высоты и прикрепить верхнюю панель
addCSS( '\
.wikiEditor-ui .wikiEditor-ui-top { position:sticky; top:0; z-index:20; }\
.mw-editform #wpTextbox1 { max-height:none; overflow:hidden; }\
.CodeMirror { height:auto !important; }\
' );
// Автоматическое масштабирования окна редактирования
resizeTextbox();
// Перемещаем кнопки гаджета [[Википедия:Гаджеты/Ajax-предпросмотр]] на панель редактора
mw.hook( 'wikieditor.toolbar.gadgetsgroup' ).add( moveAjaxPreviewButtons );
}
}
init();
} );
// </nowiki>