Користувач:Andriy.v/ImgsCleanUp.js
Зовнішній вигляд
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
- Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
- Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5.
/*
* Original author [[User:RLuts]]
* ver. 1.00 alfa
* modifyed by [[User:Andriy.v]]
*/
if( window.ImgsCleanUp === undefined ) {
window.ImgsCleanUp = {
install: function () {
this.icu = 'FairUse Clean Up';
mw.util.addPortletLink( 'p-cactions', 'javascript:window.ImgsCleanUp.showDialog()', this.icu );
},
selects: {},
information: '',
furation: '',
newfuration: '',
pagecontent: '',
showDialog: function () {
var icu = this;
if( $( '#icu-dialog' ).length === 0 ) {
$( '#mw-content-text' ).append('<div id="icu-dialog" style="display:none;" title="' + this.icu + '"></div>');
this.getTpls();
}
mw.loader.using( 'jquery.ui', function () {
$( '#icu-dialog' ).dialog({
width: 400,
buttons: {
'Зберегти': function () {
icu.savePage();
}
}
});
});
},
getTpls: function () {
var icu = this;
mw.util.addCSS( '#icu-dialog select {width:100%; height: 1.7em} #icu-dialog input:not([type="checkbox"]) {width:100%; height: 1.3em} #icu-dialog p {margin-bottom: 0}' );
mw.util.addCSS('.icu-addtf {font-size:.8em; background-color:#FF0; margin-right:3px; cursor:pointer}');
var cats = mw.config.get('wgCategories', []), pur;
if(cats.indexOf('Зображення:Обкладинки друкованих творів') >= 0) {
pur = ' про книгу ';
} else if(cats.indexOf('Зображення:Обкладинки альбомів') >= 0) {
pur = ' про альбом ';
} else {
pur = ' ';
}
var page = $('.mw-imagepage-linkstoimage-ns0').children('a').first().text();
if(pur && page) {
pur = pur + '[[' + page + ']]';
} else {
pur = '';
}
var res = $('.fileInfo').text().match(/[0-9]{1,3}\s×\s[0-9]{1,3}/gi);
if(typeof res === 'object' && res !== null) {
res = ' (' + res[0] + ')';
} else {
res = '';
}
this.addForm('Опис', 'icu-descr', undefined, true);
this.addForm('Джерело', 'icu-source', {'невідоме': '{\{unknown|source}}'});
this.addForm('Стаття', 'icu-article', {'стаття':''+ page});
this.addForm('Автор', 'icu-author', {'невідомий': '{\{unknown|author}}'});
this.addForm('Час створення', 'icu-date', {'невідомий': 'Невідомий'});
this.addForm('Частина', 'icu-part', {'повністю': 'Зображення повністю'});
this.addForm('Роздільність', 'icu-res', {'низька': 'Низька' + res});
this.addForm('Мета', 'icu-purp', {'ілюстр.': 'Проілюструвати статтю' + pur});
this.addForm('Замінність', 'icu-subst', {'заміна неможл.': 'Заміна вільним файлом неможлива', 'створ. неможл.': 'Створити вільну альтернативу цьому файлу неможливо (авторський твір)'});
this.addForm('Інше', 'icu-oth', {'відп. КДВ': 'Завантажене зображення відповідає [[ВП:КДВ|всім критеріям добропорядного використання]]. Його використання не порушує закон США про авторське право'});
$( '#icu-dialog' ).append('<p><input style="display: inline" type="checkbox" id="icu-furremove" checked />Вилучити шаблон disputed-fairuse</p>');
$( '#icu-dialog' ).append('<p><input type="checkbox" id="icu-keepinftpl" checked />Додати/залишити шаблон «Зображення» у описі файлу</p>');
$( '.icu-addtf' ).click( function() {
if( $( this ).parent().children( 'input' ) ) {
$( this ).parent().children( 'input' ).val( $( this ).attr( 'title' ) );
}
} );
var content, tpl, pars;
var param = {
action: 'query',
prop: 'revisions',
format: 'json',
rvprop: 'content',
rvlimit: '1',
titles: mw.config.get('wgPageName'),
indexpageids: ''
};
$.get(mw.util.wikiScript('api'), param).done(function(data) {
content = data.query.pages[data.query.pageids[0]].revisions[0]['*'];
icu.pagecontent = content;
tpl = 'Обґрунтування добропорядного використання|ОДВ|Non-free fair use rationale|ОСВ|Non-free media rationale|Non-free image rationale|Non-free use rationale|Обґрунтування сумлінного використання';
tpltext = icu.getTplText(content, tpl);
if(tpltext !== undefined) {
icu.furation = tpltext;
pars = ['Опис', 'Автор', 'Джерело', 'Стаття', 'Час створення', 'Частина', 'Роздільність', 'Мета', 'Замінність', 'Інше'];
var ration = icu.getTplPars(tpltext, pars);
}
tpl = 'Зображення|Information';
tpltext = icu.getTplText(content, tpl);
if(tpltext !== undefined) {
icu.information = tpltext;
pars = ['Назва', 'Опис', 'Автор', 'Джерело', 'Час створення', 'Ліцензія'];
var inform = icu.getTplPars(tpltext, pars);
}
if(ration === undefined && inform === undefined) {
console.log('Templates not found');
return false;
} else if(ration === undefined) {
console.log('FairUse Rationale template not found');
ration = {};
} else if(inform === undefined) {
console.log('Information template not found');
inform = {};
}
var sp = ['Опис', 'Автор', 'Джерело', 'Час створення'];
var c = [];
for (var i in icu.selects) c.push(i);
for (var a in c) {
if(sp.indexOf(c[a]) == -1 || inform[c[a]] === undefined || ration[c[a]] == inform[c[a]]) {
$('#' + icu.selects[c[a]]).val(ration[c[a]]);
} else if(ration[c[a]] === undefined) {
$('#' + icu.selects[c[a]]).val(inform[c[a]]);
} else if(ration[c[a]] != inform[c[a]]) {
$('#' + icu.selects[c[a]]).replaceWith('<select id="'+ icu.selects[c[a]] +'"><option></option><option value="ration">' + ration[c[a]] +'</option><option value="inform">' + inform[c[a]] + '</option></select>');
}
}
$( '#icu-dialog select' ).change(function() {
$(this).replaceWith('<input id="' + $(this).attr('id') + '" value="' + $(this).children('option:selected').text() + '"/>');
});
});
},
getTplText: function (content, tpl) {
content = content.replace(/<\s*nowiki\s*\>[\s\S]*?<\s*\/nowiki\s*\>/gi, '');
var a;
if(a = content.match(RegExp('\\{\\{(' + tpl + ')[\\S\\s]*?(\\{\\{[\\s\\S]*?}}[\\s\\S]*?)*?}}', 'gi'))) {
return a[0];
}
},
getTplPars: function (tpltext, pars) {
var b = {}, c;
for(var a in pars) {
if(c = tpltext.match(RegExp('\\|\\s*(?:' + pars[a] + ')\\s*=\\s*(.*?(\\[\\[.*?\\|?.*]].*?)*?(\\{\\{.*?\\|?.*}}.*?)*?)\\s*(?:\\||}}$)'))) {
if(c[1].match(/\S/gi))
b[pars[a]] = c[1];
}
}
return(b);
},
addForm: function (text, id, addtf) {
this.selects[text] = id;
$( '#icu-dialog' ).append('<div>');
$( '#icu-dialog div' ).last().append('<p>' + text + ':</p><input id="' + id + '" value="" />');
if (typeof addtf == 'object') {
$.each( addtf, function( key, value ) {
$( '#icu-dialog div' ).last().append('<span class="icu-addtf" title="' + value + '">' + key + '</span>');
});
}
},
getLicSect: function() {
return this.pagecontent.match(/\n==\s?Ліцензування?\s?==\s+([\s\S]*?)(?=\n==|$)/i);
},
getDescSect: function() {
return this.pagecontent.match(/==\s?Опис файлу?\s?==\s+([\s\S]*?)(?=\n==|$)/i);
},
savePage: function() {
if( $('#icu-dialog select').length > 0 ) {
$('#icu-dialog').append('<p style="color:red; font-size: 80%">Виберіть параметри шаблону із списку</p>');
$('#icu-dialog select').first().focus();
return false;
}
$('#icu-dialog').dialog('close');
$( '#mw-content-text' ).append('<div id="icu-modal"></div>')
$( '#icu-modal' ).html('<p style="font-size:1.5em">Зачекайте, будь ласка...</p>');
$('#icu-modal').dialog({buttons: false, modal: true});
var icu = this, newcont, licen, tpltext;
if( icu.information !== '' && icu.getTplPars( icu.information, ['Ліцензія'] )['Ліцензія'] !== undefined ) {
licen = icu.getTplPars( icu.information, ['Ліцензія'] )['Ліцензія'];
}
if($( '#icu-keepinftpl' ).is(':checked') ) {
icu.newfuration = "{\{Зображення\n| Опис = " + $( '#icu-descr' ).val() + "\n| Джерело = " + $( '#icu-source' ).val() + " \n| Автор = " + $( '#icu-author' ).val() + " \n| Час створення= " + $( '#icu-date' ).val() + "\n| Ліцензія = \n}}\n";
icu.newfuration += "{\{Обґрунтування добропорядного використання\n| Стаття = " + $( '#icu-article' ).val() + " \n| Частина = " + $( '#icu-part' ).val() + " \n| Роздільність = " + $( '#icu-res' ).val() + " \n| Мета = " + $( '#icu-purp' ).val() + " \n| Замінність = " + $( '#icu-subst' ).val() + " \n| Інше = " + $( '#icu-oth' ).val() + "\n}}";
} else {
icu.newfuration = "{\{Обґрунтування добропорядного використання\n| Опис = " + $( '#icu-descr' ).val() + "\n| Джерело = " + $( '#icu-source' ).val() + " \n| Стаття = " + $( '#icu-article' ).val() + " \n| Автор = " + $( '#icu-author' ).val() + " \n| Час створення= " + $( '#icu-date' ).val() + " \n| Частина = " + $( '#icu-part' ).val() + " \n| Роздільність = " + $( '#icu-res' ).val() + " \n| Мета = " + $( '#icu-purp' ).val() + " \n| Замінність = " + $( '#icu-subst' ).val() + " \n| Інше = " + $( '#icu-oth' ).val() + "\n}}";
}
if(licen !== undefined && !icu.getLicSect()) { // якщо параметр «Ліцензія» в шаблоні «Зображення» не порожній та немає розділу «Ліцензування»
icu.newfuration = icu.newfuration + '\n\n== Ліцензування ==\n' + licen;
}
else if(!icu.getLicSect()) {
icu.newfuration = icu.newfuration + '\n\n== Ліцензування ==';
}
if(!icu.getDescSect()) { // якщо параметр «Ліцензія» в шаблоні «Зображення» не порожній та немає розділу «Ліцензування»
icu.newfuration = '== Опис файлу ==\n' + icu.newfuration;
}
if(icu.furation !== '' && icu.information !== '') { // є ОДВ та шаблон Зображення
newcont = icu.pagecontent.replace(icu.furation, '').replace(icu.information, icu.newfuration);
} else if(icu.furation !== '') { // тільки ОДВ
newcont = icu.pagecontent.replace(icu.furation, icu.newfuration);
} else if(icu.information !== '') { // тільки шаблон Зображення
newcont = icu.pagecontent.replace(icu.information, icu.newfuration);
} else {
newcont = icu.newfuration + '\n' + icu.pagecontent;
}
if( $( '#icu-furremove' ).is(':checked') ) {
tpltext = icu.getTplText(newcont, 'Disputed-fairuse');
newcont = newcont.replace(tpltext, '');
}
console.log(newcont);
//Збереження та перевантаження сторінки
icu.writeInPage( mw.config.get( 'wgPageName' ), newcont, 'FairUse clean up ([[User:Andriy.v/ImgsCleanUp.js|ImgsCleanUp.js]] alfa)', undefined, undefined, function() {
location.reload();
});
},
writeInPage: function ( title, content, summary, option, section, success ) {
var param = {
action: 'edit',
title: title,
summary: summary,
token: mw.user.tokens.get('csrfToken'),
format: 'json'
};
param[option || 'text'] = content;
if (section || section === 0)
param.section = section;
$.post(mw.util.wikiScript('api'), param, function() {
if (typeof(success) === 'function')
success();
});
}
};
}
$( document ).ready(function () {
if(mw.config.get('wgCategories', []).indexOf('Невільні файли') >= 0)
ImgsCleanUp.install();
});