Conteúdo apagado Conteúdo adicionado
Krinkle (discussão | contribs)
 
Linha 1:
mw.loader.load('//commons.wikimedia.org/w/index.php?title=MediaWiki:Gadget-Hotcatcheck.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
/*
* CheckCategories HotCat Extension -
* removes the template when categorizing (prompts before) with HotCat and
* adds a link "Categories are Ok" to the category-section
*
* @rev 1 (2012-03-10)
* @author [[User:Rillke]], 2012
* @source User:Rillke/checkCat2.js @wikimedia Commons
*/
/*global mw:false, $:false, alert:false*/
/*jshint curly:false, smarttabs:true*/
mw.loader.using(['mediawiki.user', 'mediawiki.util', 'jquery.cookie'], function() {
'use strict';
if (6 !== mw.config.get('wgNamespaceNumber') || window.HotCatAutoRemoveCheckCatOptOut || $('.checkcategories').length === 0) return;
var chCatRE = /\{\{[Cc]heck[ _]categories[^\}\{]*\}\}/g,
selfName = '([[MediaWiki:Gadget-Hotcatcheck.js|Script]]): ',
cookieName = 'checkCat',
cookie = $.cookie(cookieName);
/**
** A few styling helper functions
**
**/
var createjIcon = function (iconClass) {
return $('<span>', { 'class': 'ui-icon ' + iconClass + ' catcheck-inline-icon', text: ' ' });
};
var createNotifyArea = function(textNode, icon, state) {
return $('<div>', { 'class': 'ui-widget' }).append(
$('<div>', { 'class': state + ' ui-corner-all', style: 'margin-top:20px; padding:.7em;' }).append($('<p>').append(
createjIcon(icon).css('margin-right', '.3em'), textNode
))
);
};
mw.util.addCSS(' .catcheck-inline-icon { display:inline-block; position:relative; top:2px; }\n');
// Remove "check categories" when using HotCat
// Only executed on first submit
$('body').one( 'submit.checkCatListener', '#hotcatCommitForm', function (e) {
if ('disabled' === cookie) return true;
var hotCatForm = this,
newVal = hotCatForm.wpTextbox1.value.replace(chCatRE, ''),
dlgButtons = {},
$dlgCheckCookie, $permaSaveHint, $textHintNode, $dlg;
var doRemove = function() {
hotCatForm.wpSummary.value = 'Removing [[Template:Check categories|{'+'{Check categories}}]] ' + hotCatForm.wpSummary.value;
hotCatForm.wpTextbox1.value = newVal;
};
var writeCookie = function(val) {
$.cookie(cookieName, val, {
expires: 7,
path: '/'
});
};
dlgButtons['Yes, Remove'] = function() {
doRemove();
if ($dlgCheckCookie[0].checked) writeCookie('auto');
$(this).dialog('close');
};
dlgButtons['No, keep it'] = function() {
if ($dlgCheckCookie[0].checked) writeCookie('disabled');
$(this).dialog('close');
};
var _addToJS = function(e) {
e.preventDefault();
if ($permaSaveHint.hasClass('ui-state-disabled')) return;
var $el = $(this);
$el.unbind('click').text('Please wait.');
$permaSaveHint.addClass('ui-state-disabled');
var params = {
action: 'edit',
title: 'User:' + mw.config.get('wgUserName') + '/common.js',
summary: selfName + 'Saving HotCat configuration.',
appendtext: $el.data('addText'),
token: (window['wikilove-edittoken'] || mw.user.tokens.get('editToken')),
format: 'json'
};
var editDone = function(editStat) {
if (!editStat) return;
if (editStat.error) {
alert('Unable to save to your common.js using the API\n' + editStat.error.code + '\n' + editStat.error.info);
$el.text('Edit-Error!');
} else {
$el.text('Done.');
$permaSaveHint.fadeOut();
}
};
$.post(mw.util.wikiScript('api'), params, editDone);
};
/**
** On COM:VP there were people who said:
** "Categorizing with HotCat does legit automated removal of the check-cat-message"
** So we invented a dialog that should be readable by users even with very few English skills.
**/
var prompt = function() {
$dlgCheckCookie = $('<input>', { type: 'checkbox', id: 'hotCatAutoRemoveCheckCatCookie' }).change(function() {
if (this.checked) {
$permaSaveHint.fadeIn();
} else {
$permaSaveHint.fadeOut();
}
});
$textHintNode = $('<ul>');
$('<li>').append($('<a>', { href: '#', text: 'Disable this feature.' }).data('addText', '\nwindow.HotCatAutoRemoveCheckCatOptOut = true;').click(_addToJS))
.appendTo($textHintNode);
$('<li>').append($('<a>', { href: '#', text: 'Remove {{check categories}} when editing using HotCat without prompting.' }).data('addText', '\nwindow.HotCatAutoRemoveCheckCat = true;').click(_addToJS))
.appendTo($textHintNode);
$permaSaveHint = createNotifyArea($('<span>', { text: 'Save these setting in your common.js: ' }).append($textHintNode), 'ui-icon-info', 'ui-state-highlight');
$dlg = $('<div>').append( $('<span>', { style: 'font-size:2em; line-height:1.8em; ' }).append(
$('<span>', { text : " {{check categories}} ", style: 'background-color:#F8CCB0; text-decoration:line-through !important; display:inline-block;' }),
$('<span>', { text : " ?" })
))
.append('<br/>', $dlgCheckCookie, $('<label>', { 'for': 'hotCatAutoRemoveCheckCatCookie', text: 'Don\'t ask again' }), '<br/>')
.append(mw.user.anonymous() ? '' : $permaSaveHint.hide());
$dlg.dialog({
modal: true,
closeOnEscape: true,
title: "{{check categories}} (−)?",
width: 450,
buttons: dlgButtons,
close: function() {
$('#hotcatCommitForm').submit();
},
open: function() {
var $buttons = $(this).parent().find('.ui-dialog-buttonpane button');
$buttons.eq(0).button({ icons: { primary: 'ui-icon-circle-check' } });
$buttons.eq(1).button({ icons: { primary: 'ui-icon-cancel' } });
}
});
};
if (newVal !== hotCatForm.wpTextbox1.value) {
if (window.HotCatAutoRemoveCheckCat || 'auto' === cookie) {
doRemove();
return true;
}
e.preventDefault();
mw.loader.using(['jquery.ui.dialog'], function() {
prompt();
});
}
return true;
});
// Add Ok-Link to the cats panel
var $okLink = $('<a>', { href: '#', html: '<s>{{Check categories}}</s>', title: 'Categories are OK! Immediately remove the template.' }).click(function(e) {
e.preventDefault();
var $el = $(this);
$el.unbind('click');
var doEdit = function(result) {
if (!result) return;
$el.text('Doing.');
var text = result.replace(chCatRE, '');
if (text === result) {
$el.text('Template not found!');
return;
}
var params = {
action: 'edit',
title: mw.config.get('wgPageName'),
nocreate: 1,
redirect: 1,
summary: selfName + 'Categories are checked and Ok. You can help [[Category:Media needing category review|reviewing]]!',
text: text,
token: (window['wikilove-edittoken'] || mw.user.tokens.get('editToken')),
format: 'json'
};
var editDone = function(editStat) {
if (!editStat) return;
if (editStat.error) {
alert('Unable to remove "Check categories" with the API\n' + editStat.error.code + '\n' + editStat.error.info);
$el.text('Edit-Error!');
} else {
$el.text('Edit Done.');
}
$('.checkcategories').fadeOut();
};
$el.text('Doing..');
$.post(mw.util.wikiScript('api'), params, editDone);
};
$el.text('Doing');
$.ajax({
url: mw.config.get('wgScript'),
data: { 'action': 'raw', title: mw.config.get('wgPageName').replace(/ /g, '_'), maxage: 0, smaxage: 0 },
dataType: 'text',
error: function() {
$el.text('Error!');
},
success: doEdit,
type: 'GET',
cache: false
});
});
$(function() {
$('#catlinks').find('ul:first').append($('<li>').append($okLink));
});
});