MediaWiki:Gadget-common-special-upload.js
Перейти к навигации
Перейти к поиску
JS-код ниже относится к скрытому гаджету common-special-upload. Связанный CSS-файл: MediaWiki:Gadget-common-special-upload.css. Он включён по умолчанию.
После сохранения или недавних изменений очистите кэш браузера.
// Не удаляйте проверку на название спецстраницы
( function() {
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Upload' ) {
return;
}
function uploadPage() {
$( 'input[name="wpUpload"]' ).addClass( 'mw-ui-button mw-ui-progressive' );
$( 'p.mw-upload-editlicenses' ).addClass( 'group-sysop-show group-engineer-show' );
var $license = $( '#wpLicense' );
if ( $license.val() === null ) {
$license.val( '' );
}
if ( mw.config.get( 'wgUploadAutoFill' ) ) {
upForm = document.getElementById( 'mw-upload-form' );
upForm.onsubmit = checkUpForm;
}
var desc = document.getElementById( 'wpUploadDescription' );
var tmpl = document.getElementById( 'imageinfo' );
if ( mw.config.get( 'wgUploadAutoFill' ) && tmpl && desc && !desc.value ) {
desc.value = tmpl.textContent;
}
var span = document.getElementById( 'insertlink-free' );
if ( span ) {
var a = document.createElement( 'a' );
a.href = 'javascript:addInfoTemplate("rationale", "imageinfo", 8)';
a.className = 'insertlink';
a.setAttribute('style', span.getAttribute('style'));
span.setAttribute('style', '');
span.parentNode.insertBefore( a, span );
a.appendChild( span );
}
var span = document.getElementById( 'insertlink-unfree' );
if ( span ) {
var a = document.createElement( 'a' );
a.href = 'javascript:addInfoTemplate("imageinfo", "rationale", 16)';
a.className = 'insertlink';
a.setAttribute('style', span.getAttribute('style'));
span.setAttribute('style', '');
span.parentNode.insertBefore( a, span );
a.appendChild( span );
}
}
window.addInfoTemplate = function( oldId, newId, rows ) {
$( '#wikiPreview' ).empty();
var desc = document.getElementById( 'wpUploadDescription' );
var oldTmpl = document.getElementById( oldId );
var tmpl = document.getElementById( newId );
if ( desc && oldTmpl && desc.value == oldTmpl.textContent ) {
mw.loader.using( 'jquery.textSelection', function() {
$( desc ).textSelection( 'setContents', tmpl.textContent );
desc.rows = rows;
} );
} else if ( desc && tmpl && desc.value.indexOf( tmpl.textContent.substring( 0, 8 ) ) == -1 ) {
mw.loader.using( 'jquery.textSelection', function() {
$( desc ).textSelection( 'setContents', desc.value + '\n' + tmpl.textContent );
desc.rows = 20;
} );
}
licList = document.getElementsByTagName( 'option', document.getElementById( 'wpLicense' ) );
licList[ 0 ].selected = 'selected';
if ( licList.length && newId == 'rationale' ) {
licList[ 0 ].textContent = 'Действуйте согласно инструкции для несвободных файлов, указанной сверху страницы';
} else if (licList.length ){
licList[ 0 ].textContent = 'Ничего не выбрано';
}
};
function decapitalizeExtension() {
var reupl = document.getElementById( 'wpForReUpload' );
if ( reupl !== null && reupl.value == 1 ) { return; }
var fld = document.getElementById( 'wpDestFile' );
var fname = fld.value;
var repl = function ( s, p1, p2 ) {
return p1.replace( /^(.*?)[\s\.]+$/, '$1' ) + '.' + p2.toLowerCase();
};
fname = fname.replace( /^(.*)\.([^\.]+)$/, repl );
fld.value = fname;
}
function checkUpForm() {
upForm = document.getElementById( 'mw-upload-form' );
var desc = document.getElementById( 'wpUploadDescription' );
var lcns = document.getElementById( 'wpLicense' );
var wrn = document.createElement( 'div' );
wrn.innerHTML = '';
if ( lcns.value != '' && /\{\{Несвободный файл/i.exec( desc.value ) ) { wrn.innerHTML += '<li>Вы используете устаревшую схему описания несвободных файлов. Пожалуйста, прочтите инструкцию выше.</li>'; }
if ( lcns.value == '' && /^[^\{\}]*(\{\{Изображение[^\{\}]+\}\}[^\{\}]*)*$/i.exec( desc.value ) ) { wrn.innerHTML += '<li>Не указана лицензия. Выберите лицензию в выпадающем списке выше.</li>'; }
if ( lcns.value != '' && lcns.value != 'subst:ET' && /\{\{Обоснование добросовестного использования/i.exec( desc.value ) ) { wrn.innerHTML += '<li>Для несвободного файла выбрана лицензия в выпадающем списке. Возможно, вы где-то ошиблись.</li>'; }
if ( lcns.value == '' && /\{\{Изображение\s*((\|\s*)+[\s\wа-яё]+=\s*)*(\|\s*)*\}\}/i.exec( desc.value ) ) { wrn.innerHTML += '<li>Не заполнен шаблон {' + '{Изображение}}.</li>'; }
if ( lcns.value == '' && /\{\{Обоснование добросовестного использования\s*((\|\s*)+([\wа-яё]+\s*)+=\s*)*(\|\s*)*\}\}/i.exec( desc.value ) ) { wrn.innerHTML += '<li>Не заполнен шаблон {' + '{Обоснование добросовестного использования}}.</li>'; }
if ( /\{\{(Несвободный файл|Изображение)[^\{\}]*Источник\s*=\s*(из|с|https?:\/\/(www\.)?)?\s*(интернет|internet|гугл|google|яндекс|yandex|яху|yahoo|рамблер|rambler)[^\{\}]*\}\}/i.test( desc.value ) ) { wrn.innerHTML += '<li>«Интернет» или поисковая система не являются источником, подтверждающим лицензионный статус изображения. Укажите более конкретный источник.</li>'; }
if ( wrn.innerHTML != '' ) {
wrn.innerHTML = '<p style="text-align:center; font-weight:bold;">Автоматическая проверка выявила следующие ошибки:</p><ul style="font-weight:bold">' + wrn.innerHTML;
wrn.innerHTML += '</ul><p style="padding:0.2em 0.8em">При повторном нажатии на кнопку «Загрузить файл» данное предупреждение будет проигнорировано. Помните, что файлы без лицензии или с некорректной лицензией будут удалены. Если у вас возникли проблемы или вопросы, обращайтесь на <a href="//ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F:%D0%A4%D0%BE%D1%80%D1%83%D0%BC/%D0%90%D0%B2%D1%82%D0%BE%D1%80%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE">форум по авторскому праву</a>.</p>';
var oldWrn = document.getElementById( 'jsUploadWarnings' );
if ( oldWrn ) {
decapitalizeExtension();
return true;
} else {
wrn.style.border = '1px solid red';
wrn.style.background = '#ffe4e1';
wrn.id = 'jsUploadWarnings';
upNode = document.getElementById( 'mw-htmlform-options' ).parentNode;
upNode.parentNode.insertBefore( wrn, upNode );
}
return false;
} else {
decapitalizeExtension();
return true;
}
}
/* Ajax Preview */
function modifyLicensePreview() {
if ( $( '#wikiPreview' ).length ) {
return $( '#wikiPreview' );
}
$( 'td#mw-license-preview' ).wrapInner( '<div id="mw-license-preview"></div>' );
setTimeout( function() {
if ( $( 'div#mw-license-preview' ).length ) {
$( 'td#mw-license-preview' ).removeAttr( 'id' );
modifyLicensePreview();
}
}, 1000 );
return $( '<div id="wikiPreview" />' ).insertBefore( 'div#mw-license-preview' );
}
function uploadPreviewRun() {
var $PD = $( '#wikiPreview' ).empty();
if ( !$PD.length ) {
$PD = modifyLicensePreview();
}
$PD.injectSpinner( 'preview' );
mw.loader.using( 'mediawiki.api', function() {
( new mw.Api() ).parse( $( '#wpUploadDescription' ).val(), {
title: $( '#wpDestFile' ).val() || 'File:Sample.jpg',
prop: 'text',
pst: true,
uselang: mw.config.get( 'wgUserLanguage' )
} ).done( function( resp ) {
if ( $PD.length && resp ) {
$PD.html( resp )[ 0 ].scrollIntoView();
}
} ).always( function() {
$.removeSpinner( 'preview' );
} );
} );
}
function uploadPreviewInit() {
$( '<button type="button" class="wikiPreviewToggle mw-ui-button">Предпросмотр</button>' )
.click( uploadPreviewRun )
.insertAfter( '#wpDestFile' );
if ( $( '#wpLicense' ).val() ) {
$( '#wpLicense' ).trigger( 'change' );
}
$( '#wpLicense' ).on( 'change', uploadPreviewRun );
mw.requestIdleCallback( modifyLicensePreview );
}
$.when(
$.ready,
mw.loader.using( [
'jquery.spinner'
] )
).done( function() {
$( uploadPreviewInit );
$( uploadPage );
} );
}() );