Bahaipedia
Bahaipedia
Menu
About Bahaipedia
Ask a question
General help
Random page
Recent changes
In other projects
Tools
What links here
Related changes
Upload file
Special pages
Printable version
Permanent link
Page information
Message
Discussion
View source
View history
Talk
Contributions
Create account
Log in
Navigation
About Bahaipedia
Ask a question
General help
Random page
Recent changes
In other projects
Learn more
Core topics
Bahá’í Faith
Central Figures
Teachings
Practices
Tools
What links here
Related changes
Upload file
Special pages
Printable version
Permanent link
Page information
Translations

MediaWiki:Gadget-Hotcatcheck.js

From Bahaipedia
Jump to:navigation, 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)
  • Edge: Hold Ctrl while clicking Refresh, or 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 2 (2014-03-20)
 * @author [[User:Rillke]], 2012
 * @source User:Rillke/checkCat2.js @wikimedia Commons
 */

/*global mw:false, $:false, alert:false */
/*jshint curly:false, smarttabs:true, nomen:false */

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>')
    .attr( 'class', 'ui-icon ' + iconClass + ' catcheck-inline-icon' )
    .text( ' ' );
};
var createNotifyArea = function(textNode, icon, state) {
  return $('<div>')
    .attr( 'class', 'ui-widget' )
    .append(
      $('<div>')
        .attr({
          'class': state + ' ui-corner-all',
          style: 'margin-top: 20px; padding: 0.7em;'
        })
        .append(
          $('<p>').append(
            createjIcon(icon).css('marginRight', '0.3em'),
            textNode
          )
        )
    );
};
mw.util.addCSS('.catcheck-inline-icon { display: inline-block; position: relative; top: 2px; }');

// 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" />').attr({ 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>').attr({ style: 'font-size: 2em; line-height: 1.8em;' }).append(
      $('<span>').text(" {{check categories}} ").attr({ style: 'background-color:#F8CCB0; text-decoration:line-through !important; display:inline-block;' }),
      $('<span>').text(" ?")
    ))
      .append('<br/>', $dlgCheckCookie, $('<label>').attr({ 'for': 'hotCatAutoRemoveCheckCatCookie' }).text( 'Don\'t ask again' ), '<br/>')
      .append(mw.user.isAnon() ? '' : $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 || cookie === 'auto') {
      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,
      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>
Retrieved from "https://bahaipedia.org/index.php?title=MediaWiki:Gadget-Hotcatcheck.js&oldid=53966"
This page was last edited on 6 August 2017, at 18:05.
Text is available under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.
Privacy policy
About Bahaipedia
Disclaimers
Powered by MediaWiki