icewelder/Citationstyle.js

This page is not available in other languages.

//  // NOTICE: This script is a fork of Meteor sandwich yum's Tidy citations script, all credit goes to them /**  * This script is used to clean up whitespace in citation templates  * Please leave bug reports and suggestions on my talk page  */  /**  * TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.  * @see https://meta.wikimedia.org/wiki/TemplateScript  * @update-token [[File:Pathoschild/templatescript.js]]  */ $.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', {     dataType: 'script',     cache: true }).then(function () {     pathoschild.TemplateScript.add([         {             category: 'Citation Style', name: '{{Tidy}}', isMinorEdit: true, script: function (editor) {                 format_citations(editor, 'tidy', false);             }         },         {             category: 'Citation Style', name: '{{Tidy}} (vertically)', isMinorEdit: true, script: function (editor) {                 format_citations(editor, 'tidy', true);             }         },         {             category: 'Citation Style', name: '{{Crammed}}', isMinorEdit: true, script: function (editor) {                 format_citations(editor, 'crammed', false);             }         },         {             category: 'Citation Style', name: '{{Crammed}} (vertically)', isMinorEdit: true, script: function (editor) {                 format_citations(editor, 'crammed', true);             }         },         {             category: 'Citation Style', name: '{{Roomy}}', isMinorEdit: true, script: function (editor) {                 format_citations(editor, 'roomy', false);             }         },         {             category: 'Citation Style', name: '{{Roomy}} (vertically)', isMinorEdit: true, script: function (editor) {                 format_citations(editor, 'roomy', true);             }         }     ]); });  /** ------------------------------------------------------------------------ **/  function format_citations(editor, variation, vertical) {     var text = editor.get();     var original = text;      // Fill an array with one entry per each recognized citation template     var originalTemplates = text.match(/\s*{{[Cc]it(?:ation|e[a-zA-Z0-9\-_\s]+)\s*\|(?:{{[^}]*}}|[^}])+}}\s*/g) || [];      // Duplicate the array for editing; we need to keep the original strings for the replacement step     var tweakedTemplates = originalTemplates.slice();      var replace_regex = /\s*\|\s*([a-zA-Z0-9\-_\s]+(?: [a-zA-Z0-9\-_\s])*)\s*=\s*/g;     var format_parameter = function (prefix, group, suffix) {         return (vertical ? '\n' : '') + prefix + group.replace(/(?:^\s*|\s*$)/g, '') + suffix;     };      for (var i = 0; i < originalTemplates.length; ++i) {         // Normalize spaces around the pipes and equals signs         switch (variation) {             case 'tidy':                 tweakedTemplates[i] = tweakedTemplates[i].replace(replace_regex, function (match, group) {                     return format_parameter(' |', group, '=');                 });                 break;             case 'crammed':                 tweakedTemplates[i] = tweakedTemplates[i].replace(replace_regex, function (match, group) {                     return format_parameter('|', group, '=');                 });                 break;             case 'roomy':                 tweakedTemplates[i] = tweakedTemplates[i].replace(replace_regex, function (match, group) {                     return format_parameter(' | ', group, ' = ');                 });                 break;         }          // Prepend newlines for vertical align         if (vertical) {             tweakedTemplates[i] = '\n' + tweakedTemplates[i];         }          // Align end of the template         if (!vertical) {             tweakedTemplates[i] = tweakedTemplates[i].replace(/\s*}}(\s*)$/g, '}}$1');         } else {             tweakedTemplates[i] = tweakedTemplates[i].replace(/\s*}}(\s*)$/g, '\n}}$1');         }          // Normalize multiple spaces to one         tweakedTemplates[i] = tweakedTemplates[i].replace(/  +/g, ' ');          // Replace the original templates with the tweaked versions         text = text.replace(originalTemplates[i], tweakedTemplates[i]);     }      // Normalize ref tag capitalization     text = text.replace(/, ');     text = text.replace(/<\/ref/gi, ');      // Normalize newlines between citation templates and ref tags     text = text.replace(/(|\/>).)*>)\s*{{/g, '$1{{');     text = text.replace(/}}\s*<\/ref>/g, '}}');      // Only insert the edit summary when something has changed     if (text !== original) {         editor.set(text);         editor.appendEditSummary('harmonize whitespace in citation templates by [[w:User:IceWelder/citationstyle.js|script]]');         editor.clickDiff();     } } //  

Tags:

🔥 Trending searches on Wiki English:

Daniela MelchiorTartanList of bridge failuresNavneet Kaur RanaAbby and Brittany HenselMatt SchlappFrierenBattle of BadrTokyo Vice (TV series)Judy GarlandEgyptKepler's SupernovaLucian GraingeDakota JohnsonAJennifer LawrenceRule 34Francis Scott Key Bridge collapseThe Guest (2014 American film)Albert EinsteinUnited Arab EmiratesList of Indian Premier League records and statisticsTiger WoodsThe Three-Body Problem (novel)Kendrick LamarCarl RuizHaitiRosalind ChaoAlex SharpEarthMike TysonLok SabhaOppenheimer (film)ExhumaDead Internet theoryPeaky BlindersLast SupperCherry blossomCristiano RonaldoInstagramLondonShogunAfzal AnsariFlipkartNepalJann MardenboroughEaster MondayCleopatraNirmala SitharamanGodzilla (franchise)A Serbian FilmSibgatullah AnsariForge (character)European UnionImmaculate (2024 film)Usher (musician)Frank SinatraCrocus City Hall attackIlia MalininLindsay LohanMarilyn MonroeJeff HealeyJennifer Lopez2024 in filmSam Bankman-FriedUEFA Champions LeagueJennette McCurdyPope FrancisWiki FoundationSuge KnightChatGPTMinecraftShohei Ohtani🡆 More