On November 27th, 2022, the 8,000th article was added to the SuccuWiki!
MediaWiki:Gadget-Hotcatcheck.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/* * CheckCategories HotCat Extension - * removes the template when categorizing (prompts before) with HotCat and * adds a link "Categories are Ok" to the category-section * * <nowiki> * * @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)); }); }); //</nowiki>