User:Nathan/modern.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
importScript('User:Mr.Z-man/rollbackSummary.js');
importScript('User:Voice_of_All/Addtabs/monobook.js');
importScript('User:Misza13/statusChanger.js');
importScript('User:AzaToth/twinkle.js');
importScript('User:Ioeth/friendly.js');

// [[User:Henrik/live-edit-counter]]
importScript('User:Henrik/js/live-edit-counter.js');


//<pre><nowiki>
importScript('User:Voice of All/Addtabs/monobook.js');
 
var WindowObjectReference;
function openTab(url) {
WindowObjectReference = window.open(url, "_blank", "");
}
 
// Section organizer for ANI {{{
if (mw.config.get('wgPageName') == "Wikipedia:Administrators\'_noticeboard/Incidents" && mw.config.get('wgAction') == "view") {
   addOnloadHook(function ani_sections() {
       var headers = document.getElementsByTagName('H2');
       for(var i=1;i<headers.length;i++) {
           // starting from 1, to skip the toc header.
           var section = document.createElement("DIV");
           section.className = "sectionContainer";
           var anchor = headers[i].previousSibling;
           while(anchor.nodeType != 1) anchor = anchor.previousSibling;
           headers[i].parentNode.insertBefore(section,headers[i]);
           section.appendChild(anchor);
           section.appendChild(headers[i]);
           var innerSection = document.createElement("DIV");
           innerSection.className = "sectionContentHolder";
           section.appendChild(innerSection);
           while(section.nextSibling && section.nextSibling.tagName != 'H2' && section.nextSibling.id != 'catlinks') {
               // look ahead
               var anchorcheck = section.nextSibling.nextSibling;
               while(anchorcheck && anchorcheck.nodeType!=1) anchorcheck = anchorcheck.nextSibling;
               if(anchorcheck && anchorcheck.tagName == 'H2') break;
               innerSection.appendChild(section.nextSibling);
           }
 
           var ntimestamps = 0;
           // evil evil hack
           var lastTimestamp = new Date(0);
           var lastTimestampText = '(No Timestamp)';
           innerSection.textContent.replace(/[0-9][0-9]:[0-9][0-9], [0-3]?[0-9] [A-Z][a-z]* [0-9][0-9][0-9][0-9]/g,function(match) {
               var thisTimestamp = new Date(match);
               if(thisTimestamp.valueOf() > lastTimestamp.valueOf()) {
                   lastTimestamp = thisTimestamp;
                   lastTimestampText = match;
               }
               ntimestamps++;
           });
           // was done incorrrectly in local time, convert from UTC
           lastTimestamp.setMinutes(
              lastTimestamp.getMinutes()-lastTimestamp.getTimezoneOffset()
           );
           var age = (new Date()).getTime() - lastTimestamp.getTime();
           var hideDefault = false;
           if (age > 21600000) // 6 hours
              hideDefault = true;
           if(innerSection.textContent.length < 600) // bytes
              hideDefault = false; // no reason to hide in this case
           if(ntimestamps < 2) // unanswered
              hideDefault = false;
 
           // hide if resolved, also, place the resolved header in the visible part.
           var resolved = getElementsByClassName(innerSection,'DIV','resolved');
           if(resolved.length) {
             resolved = resolved[0];
             // [1] to skip an annoying whitespace node
             if (resolved != innerSection.firstChild && resolved != innerSection.childNodes[1]) resolved = resolved.cloneNode(true);
             section.insertBefore(resolved,innerSection);
             hideDefault = true;
           }
 
           section.insertBefore(document.createTextNode('Last: ' + lastTimestampText + ".  "),innerSection);
           section.insertBefore(document.createTextNode(innerSection.textContent.length + " text bytes. "),innerSection);
           section.insertBefore(document.createTextNode(ntimestamps + " comments. "),innerSection);
 
           (function ani_sections_closure(){
               var header = headers[i];
               var innerSectionFix = innerSection;
               var button = document.createElement('BUTTON');
               if(hideDefault)
               button.textContent = 'show';
               else
               button.textContent = 'hide';
               button.onclick = function ani_sections_onclick() {
                   if(innerSectionFix.style.display == 'none') {
                     innerSectionFix.style.display = 'block';
                     this.textContent = 'hide'; }
                   else {
                     innerSectionFix.style.display = 'none';
                     this.textContent = 'show'; }
               }
               header.insertBefore(button,header.firstChild);
               button.style.cssText='float: right';
               if(hideDefault) innerSection.style.display='none';
           })();
       }
   });
}
// [[User:Random832]] script for finding "resolved" tags. {{{
// semi-experimental, not yet adapted for anything but ANI.
if (mw.config.get('wgPageName') == "Wikipedia:Administrators\'_noticeboard/Incidents" && mw.config.get('wgAction') == "view") {
   addOnloadHook(function ANI_toc_hook(){
      var sections = $('toc').getElementsByTagName("li");
      for(var i=0;i<sections.length;i++) {
         try {
            var link = sections[i].firstChild;
            var target=document.getElementsByName(link.hash.slice(1))[0];
            var next = target.parentNode.nextSibling;
            // discard text nodes
            while(next.nodeType != 1) next = next.nextSibling;
 
            // now we have the header, now skip another
            if(next.tagName != "H2") { continue; }
            next = next.nextSibling;
            while(next.nodeType != 1) next = next.nextSibling;
 
            if ((/\bresolved\b/.test(next.className))) { 
               //resolved
               sections[i].className = "ani_resolved"
               sections[i].style.fontStyle = 'italic'
               //sections[i].appendChild(document.createTextNode("resolved"))
            } else {
               //not resolved
               sections[i].className = "ani_unresolved"
               sections[i].style.fontWeight = 'bold'
            }
            // BUG: chokes on sections beginning with a digit
            // (anchor has name instead of id).
         } catch(x) {
            if(window.console) //firebug
               console.log("caught %o",x);
         }//end try
      }//end for
   });//end onloadhook function
}//end if WP:ANI
// }}}


// Edit summary check {{{
addOnSubmitValidator(function() {
  var editsummary = document.getElementById('wpSummary').value;
  if( /^\/\*.*\*\/\s*$/.test(editsummary)) editsummary = ''
  if(!editsummary) return confirm("Submit this edit without an edit summary?");
  else return true;
});
// }}} */

 */

// Adapted from:
//http://en.wikipedia.org/wiki/Wikipedia:WikiProject_User_scripts/Scripts/Force_edit_summary

// The original value of the edit summary field is stored here
var editsummOriginalSummary = new String();

// A global ref to the dropdown with canned edit summaries
var editsummDropdown = null;

function editsummInitialize()
{
    // Save the original value of the edit summary field
    editsummOriginalSummary = document.forms.editform.wpSummary.value;

    // For convenience, add a dropdown box with some canned edit
    // summaries to the form.

    var dropdown = document.createElement("select");
    dropdown.onchange = new Function("editsummOnCannedSummarySelected()");

    editsummAddOptionToDropdown(dropdown,"");
    editsummAddOptionToDropdown(dropdown,"add categories");
    editsummAddOptionToDropdown(dropdown,"add category");
    editsummAddOptionToDropdown(dropdown,"add citation");
    editsummAddOptionToDropdown(dropdown,"add external link");
    editsummAddOptionToDropdown(dropdown,"add internal link");
    editsummAddOptionToDropdown(dropdown,"add quotation");
    editsummAddOptionToDropdown(dropdown,"add ref");
    editsummAddOptionToDropdown(dropdown,"add section");
    editsummAddOptionToDropdown(dropdown,"create redirect page");
    editsummAddOptionToDropdown(dropdown,"create stub article");
    editsummAddOptionToDropdown(dropdown,"delete external link");
    editsummAddOptionToDropdown(dropdown,"delete internal link");
    editsummAddOptionToDropdown(dropdown,"delete section");
    editsummAddOptionToDropdown(dropdown,"fix broken link");
    editsummAddOptionToDropdown(dropdown,"fix case");
    editsummAddOptionToDropdown(dropdown,"fix grammar");
    editsummAddOptionToDropdown(dropdown,"fix punctuation");
    editsummAddOptionToDropdown(dropdown,"fix quote marks");
    editsummAddOptionToDropdown(dropdown,"fix spelling");
    editsummAddOptionToDropdown(dropdown,"indent");
    editsummAddOptionToDropdown(dropdown,"make existing text into link (wikify)");
    editsummAddOptionToDropdown(dropdown,"make link into plain text (dewikify)");
    editsummAddOptionToDropdown(dropdown,"move section");
    editsummAddOptionToDropdown(dropdown,"move unrefd material to talk page");
    editsummAddOptionToDropdown(dropdown,"new article");
    editsummAddOptionToDropdown(dropdown,"remove repetition");
    editsummAddOptionToDropdown(dropdown,"reorder links");
    editsummAddOptionToDropdown(dropdown,"sectioning");
    editsummAddOptionToDropdown(dropdown,"start article");

    var insertBeforeThis = document.forms.editform.wpSummary.nextSibling;
    var theParent = insertBeforeThis.parentNode;
    theParent.insertBefore(dropdown,insertBeforeThis);

    // Store a global ref to it
    editsummDropdown = dropdown;
}

function editsummAddOptionToDropdown(dropdown,optionText)
{
    var option = document.createElement("option");
    var optionTextNode = document.createTextNode(optionText);
    option.appendChild(optionTextNode);
    dropdown.appendChild(option);
}

// There's a cross-browser issue when accessing the selected text:
// *In Firefox you can use: selectObj.value
// *In IE, you have to use: selectObj.options[selectObj.selectedIndex].text
// *The latter method also works in Firefox
function editsummOnCannedSummarySelected()
{
    var idx = editsummDropdown.selectedIndex;
    var canned = editsummDropdown.options[idx].text;

    var newSummary = editsummOriginalSummary;
    if (newSummary.length!=0) newSummary += " - ";
    newSummary += canned;
    document.forms.editform.wpSummary.value = newSummary;
}