|
ট্যাগ: মোবাইল সম্পাদনা মোবাইল ওয়েব সম্পাদনা উচ্চতর মোবাইল সম্পাদনা |
| (একই ব্যবহারকারী দ্বারা সম্পাদিত ৬৫টি মধ্যবর্তী সংশোধন দেখানো হচ্ছে না) |
| ১ নং লাইন: |
১ নং লাইন: |
| // This script aligns dates into one of two formats allowed by [[WP:MOSNUM]]. | | mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/রোলব্যাক নিশ্চিতকারক.js&action=raw&ctype=text/javascript'); |
| // PLEASE READ THE DOCUMENTATION at [[User:Ohconfucius/script/MOSNUM dates]] (click on the link above) before using. | | mw.loader.load('//commons.m.wikimedia.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript'); |
| | |
| | $(document).ready(function() { |
| | |
| | function customAlert(msg,duration){ |
| | var pageId = mw.config.get('wgArticleId'); |
| | var div = document.createElement('div'); |
| | div.style ='position: fixed; right:500px; top:100px;height:51px;padding-top:13px;width:300px;font-size:25px; display:block;border: solid 1px black;background-color:white'; |
| | div.innerHTML = "<center><img src='https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Chulito_verde.jpg/21px-Chulito_verde.jpg'>"+" "+msg+"</center>"; |
| | setTimeout(function() { |
| | div.parentNode.removeChild(div); |
| | },duration); |
| | document.body.appendChild(div);}; |
| | var bnSpellChecker = function() { |
| | $('#wpTextbox1').wikiEditor('addToToolbar', { |
| | 'section': 'main', |
| | 'group': 'insert', |
| | 'tools': { |
| | 'bnSpellChecker': { |
| | label: 'বানান শুদ্ধি করুন', |
| | type: 'button', |
| | icon: '//upload.wikimedia.org/wikipedia/commons/thumb/0/01/Lachit_SpellChecker.png/25px-Lachit_SpellChecker.png', |
| | action: { |
| | type: 'callback', |
| | execute: function() { |
| | |
| | getText = $('#wpTextbox1').val(); |
| | x = getText.replace(/ +/g, " "); |
| | |
| | //wiki special |
| | x = x.replace(/\u09DF/g, 'য়'); |
| | x = x.replace(/{{ /g, '{{'); |
| | // x = x.replace(/ডঃ/g, 'ড°'); |
| | x = x.replace(/ঐতিয্য/g, 'ঐতিহ্য'); |
| | x = x.replace(/নিম্নপ্রদত্ব/g, 'নিম্নপ্রদত্ত'); |
| | x = x.replace(/কাহানি/g, 'কাহিনী'); |
| | x = x.replace(/মনোনিত/g, 'মনোনীত'); |
| | |
| | // From Dibya Dutta's Pratishapan |
| | x = x.replace(/৷/g, "।"); |
| | x = x.replace(/ ।/g, "।"); |
| | x = x.replace(/ ৷/g, "।"); |
| | x = x.replace(/ \?/g, "?"); |
| | x = x.replace(/ ॥/g, "॥"); |
| | x = x.replace(/ !/g, "!"); |
| | x = x.replace(/ ;/g, ";"); |
| | x = x.replace(/ ,/g, ','); |
| | x = x.replace(/।।/g, '॥'); |
| | x = x.replace(/৷৷/g, "॥"); |
| | x = x.replace(/াে/g, "ো"); |
| | x = x.replace(/ো/g, "ো"); |
| | x = x.replace(/অাা/g, 'আ'); |
| | x = x.replace(/অা/g, 'আ'); |
| | x = x.replace(/আা/g, 'আ'); |
|
| |
|
| // Feedback and constructive criticism are welcome | | //Lachit Spellchecker |
| | x = x.replace(/য়/g, 'য়'); |
| | // x = x.replace(/ন্ট/g, 'ণ্ট'); |
| | x = x.replace(/থ্থ/g, 'ত্থ'); |
| | x = x.replace(/ট্ন/g, 'ত্ন'); |
| | x = x.replace(/ধ্ধ/g, 'দ্ধ'); |
| | x = x.replace(/ন্ঠ/g, 'ণ্ঠ'); |
| | // x = x.replace(/ন্ড/g, 'ণ্ড'); |
| | x = x.replace(/ণ্দ/g, 'ন্দ'); |
| | x = x.replace(/ণ্ধ/g, 'ন্ধ'); |
| | x = x.replace(/ন্ঢ/g, 'ণ্ঢ'); |
| | x = x.replace(/ণ্ত/g, 'ন্ত'); |
| | x = x.replace(/ণ্জ/g, 'ঞ্জ'); |
| | x = x.replace(/ন্জ/g, 'ঞ্জ'); |
| | x = x.replace(/ন্চ/g, 'ঞ্চ'); |
| | x = x.replace(/ন্ছ/g, 'ঞ্ছ'); |
| | x = x.replace(/ণ্চ/g, 'ঞ্চ'); |
| | x = x.replace(/ণ্ছ/g, 'ঞ্ছ'); |
| | x = x.replace(/ণ্স/g, 'ন্স'); |
| | x = x.replace(/ষ্ন/g, 'ষ্ণ'); |
| | // x = x.replace(/স্ট/g, 'ষ্ট'); (প্রতিবর্ণীতে ভুল ফলাফল দিচ্ছে) |
| | x = x.replace(/স্হ/g, 'স্থ'); |
| | x = x.replace(/ষ্হ/g, 'স্থ'); |
| | x = x.replace(/ন্হ/g, 'ন্থ'); |
| | x = x.replace(/স্ঠ/g, 'ষ্ঠ'); |
| | x = x.replace(/ঙঁ/g, 'ঙ'); |
| | x = x.replace(/ঞঁ/g, 'ঞ'); |
| | x = x.replace(/নঁ/g, 'ন'); |
| | x = x.replace(/ণঁ/g, 'ণ'); |
| | x = x.replace(/মঁ/g, 'ম'); |
| | x = x.replace(/অা/g, 'আ'); |
| | x = x.replace(/অাা/g, 'আ'); |
| | x = x.replace(/অাা/g, 'আ'); |
|
| |
|
| /**
| |
| * TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
| |
| * @see https://meta.wikimedia.org/wiki/TemplateScript
| |
| */
| |
| // <pre>
| |
| if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) {
| |
| $.ajax(
| |
| '//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js',
| |
| {dataType: 'script', cache: true}
| |
| ).done(function () {
| |
| $.when(
| |
| mw.loader.using(['mediawiki.util']),
| |
| $.ajax('//en.wikipedia.org/w/index.php?title=User:Ohconfucius/script/MOSNUM_utils.js&action=raw&ctype=text/javascript',
| |
| {dataType: 'script', cache: true}),
| |
| $.ready
| |
| ).done(function () {
| |
| var add = function() {
| |
| return mw.util.addPortletLink.apply(mw.util, arguments);
| |
| };
| |
|
| |
|
| $(add('p-tb', '#', 'DATES to dmy', 'dmy-unitfixer', 'Align all dates to dmy', '', '')).click(ohc_all_to_dmy_driver);
| |
| $(add('p-tb', '#', 'DATES to mdy', 'mdy-unitfixer', 'Align all dates to mdy', '', '')).click(ohc_all_to_mdy_driver);
| |
| // $(add('p-tb', '#', 'Expand ref dates', 't-expandref', 'Expand month names within refs', '', '')).click(ohc_expand_ref_dates_driver);
| |
| // $(add('p-tb', '#', 'Expand all dates', 't-expandall', 'Expand month names throughout', '', '')).click(ohc_expand_all_dates_driver);
| |
| $( add('p-tb', '#', 'US-slash dates', 't-US', 'US-slash', '', '') ).click(ohc_US_slash_dates_driver);
| |
| $( add('p-tb', '#', 'UK-slash dates', 't-UK', 'UK-slash', '', '') ).click(ohc_UK_slash_dates_driver);
| |
| });
| |
| });
| |
| }
| |
|
| |
|
| function ohc_fix_unambiguous_dates()
| | //crucial part starts |
| {
| | // do not fiddle here |
| // resolvable ambiguous date formats
| | //removes multiple question marks, exclamation |
| // UK style
| | |
| ohc_regex(/([^-\w/:\.])@DD\.@MM\.@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
| | x = x.replace(/\?\?\?/g, '?'); //removes triple question marks with spaces |
| if (d.d == d.m) return true;
| | x = x.replace(/\?\?/g, '?'); //removed double question marks with spaces |
| if (d.d > 12) return true;
| | // x = x.replace(/!!!/g, '!'); //removes triple exclamation with spaces NOT FOR WIKI |
| return false;
| | // x = x.replace(/!!/g, '!'); //removes double exclamation with spaces NOT FOR WIKI |
| });
| |
| ohc_regex(/([^-\w/:\.])@DD\/@MM\/@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) {
| |
| if (d.d == d.m) return true;
| |
| if (d.d > 12) return true;
| |
| return false;
| |
| });
| |
|
| |
|
| // US style
| | // crucial part ends |
| ohc_regex(/([^-\w/:\.])@MM\.@DD\.@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
| |
| if (d.d > 12) return true;
| |
| return false;
| |
| });
| |
| ohc_regex(/([^-\w/:\.])@MM\/@DD\/@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) {
| |
| if (d.d > 12) return true;
| |
| return false;
| |
| });
| |
| }
| |
|
| |
|
| function ohc_US_slash_dates_to_mdy()
| | // brings the question marks, exclamation, full stop before inverted comma |
| {
| | // new in Version 3.0 |
| //ranges | | // x = x.replace(/"। /g, '।" '); // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK |
| ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
| | x = x.replace(/"\?/g, '?"'); // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK |
| ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
| | x = x.replace(/"! /g, '!" '); // ” = RIGHT DOUBLE QUOTATION MARK “ = LEFT DOUBLE QUOTATION MARK |
| ohc_regex(/(\| ?)@MM\/@DD\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2");
| | |
| ohc_regex(/(\| ?)@MM\.@DD\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon @Day2, @Year2");
| | |
| | //corrects commonly mistaken words |
| | |
| | x = x.replace(/অংক/g, 'অঙ্ক'); |
| | x = x.replace(/অংকন/g, 'অঙ্কন'); |
| | x = x.replace(/অংকুর/g, 'অঙ্কুর'); |
| | x = x.replace(/অংগ /g, 'অঙ্গ '); |
| | x = x.replace(/অংগন/g, 'অঙ্গন'); |
| | x = x.replace(/অংগাংগী/g, 'অঙ্গাঙ্গি'); |
| | x = x.replace(/অকল্যান/g, 'অকল্যাণ'); |
| | x = x.replace(/অকারন/g, 'অকারণ'); |
| | x = x.replace(/অগ্রগন্য/g, 'অগ্রগণ্য'); |
| | x = x.replace(/অগ্রহায়ন/g, 'অগ্রহায়ণ'); |
| | x = x.replace(/অচিন্ত/g, 'অচিন্ত্য'); |
| | x = x.replace(/অচিন্ত্যনীয়/g, 'অচিন্তনীয়'); |
| | x = x.replace(/অঞ্জলী/g, 'অঞ্জলি'); |
| | x = x.replace(/অণ্বেষণ/g, 'অন্বেষণ'); |
| | x = x.replace(/অতিথী/g, 'অতিথি'); |
| | x = x.replace(/অতিব /g, 'অতীব '); |
| | x = x.replace(/অতিষ্ট/g, 'অতিষ্ঠ'); |
| | x = x.replace(/অত্যাধিক/g, 'অত্যধিক'); |
| | x = x.replace(/অত্যান্ত/g, 'অত্যন্ত'); |
| | x = x.replace(/অদ্ভূত/g, 'অদ্ভুত'); |
| | x = x.replace(/অদ্যপি/g, 'অদ্যাপি'); |
| | x = x.replace(/অদ্যবদি/g, 'অদ্যাবধি'); |
| | x = x.replace(/অধঃস্তন/g, 'অধস্তন'); |
| | x = x.replace(/অধিকরন/g, 'অধিকরণ'); |
| | x = x.replace(/অধীনস্ত/g, 'অধীনস্থ'); |
| | x = x.replace(/অধ্যাবসায়/g, 'অধ্যবসায়'); |
| | x = x.replace(/অধ্যায়ণ/g, 'অধ্যয়ন'); |
| | x = x.replace(/অধ্যূষিত/g, 'অধ্যুষিত'); |
| | x = x.replace(/অনিন্দসুন্দর/g, 'অনিন্দ্যসুন্দর'); |
| | x = x.replace(/অনিষ্ঠ/g, 'অনিষ্ট'); |
| | x = x.replace(/অনু /g, 'অণু '); |
| | x = x.replace(/অনুকুল/g, 'অনুকূল'); |
| | x = x.replace(/অনুর্ধ্ব/g, 'অনূর্ধ্ব'); |
| | x = x.replace(/অনুসঙ্গ/g, 'অনুষঙ্গ'); |
| | x = x.replace(/অন্তঃসত্তা/g, 'অন্তসত্ত্বা'); |
| | x = x.replace(/অন্তকরণ/g, 'অন্তঃকরণ'); |
| | x = x.replace(/অন্তর্ভূক্ত/g, 'অন্তর্ভুক্ত'); |
| | x = x.replace(/অন্তর্মুখি/g, 'অন্তর্মুখী'); |
| | x = x.replace(/অন্যমনষ্ক/g, 'অন্যমনস্ক'); |
| | x = x.replace(/অপসৃয়মান/g, 'অপসৃয়মাণ'); |
| | x = x.replace(/অপাংক্তেয়/g, 'অপাঙ্ক্তেয়'); |
| | x = x.replace(/অপেক্ষমান/g, 'অপেক্ষমাণ'); |
| | x = x.replace(/অভিভুত/g, 'অভিভূত'); |
| | x = x.replace(/অভিমুখি /g, 'অভিমুখী '); |
| | x = x.replace(/অভ্যন্তরিক/g, 'আভ্যন্তরিক'); |
| | x = x.replace(/অভ্যস্থ/g, 'অভ্যস্ত'); |
| | x = x.replace(/অমানুসিক/g, 'অমানুষিক'); |
| | x = x.replace(/অমাবশ্যা/g, 'অমাবস্যা'); |
| | x = x.replace(/অমিতাক্ষর/g, 'অমিত্রাক্ষর'); |
| | x = x.replace(/অর্ধ্ব/g, 'অর্ধ'); |
| | x = x.replace(/অর্পণা/g, 'অপর্ণা'); |
| | x = x.replace(/অলংঘ/g, 'অলঙ্ঘ্য'); |
| | x = x.replace(/অশিরিরী/g, 'অশরীরী'); |
| | x = x.replace(/অসুয়া/g, 'অসূয়া'); |
| | x = x.replace(/অস্তমান/g, 'অস্তায়মান'); |
| | x = x.replace(/অহঃরহ/g, 'অহরহ'); |
| | x = x.replace(/আঁড়াআড়ি/g, 'আড়াআড়ি'); |
| | x = x.replace(/আঁড়িপাতা/g, 'আড়িপাতা'); |
| | x = x.replace(/আকষ্কিক/g, 'আকস্মিক'); |
| | x = x.replace(/আকাংখা/g, 'আকাঙ্ক্ষা'); |
| | x = x.replace(/আকাবাকা/g, 'আঁকাবাঁকা'); |
| | x = x.replace(/আকুতি/g, 'আকূতি'); |
| | x = x.replace(/আকূল/g, 'আকুল'); |
| | x = x.replace(/আক্রমন/g, 'আক্রমণ'); |
| | x = x.replace(/আটপৌড়ে/g, 'আটপৌরে'); |
| | x = x.replace(/আড়ষ্ঠ/g, 'আড়ষ্ট'); |
| | x = x.replace(/আড়ৎ/g, 'আড়ত'); |
| | x = x.replace(/আতংক/g, 'আতঙ্ক'); |
| | x = x.replace(/আত্মস্যাৎ/g, 'আত্মসাৎ'); |
| | x = x.replace(/আদ্যান্ত/g, 'আদ্যন্ত'); |
| | x = x.replace(/আদ্র/g, 'আর্দ্র'); |
| | x = x.replace(/আনবিক/g, 'আণবিক'); |
| | x = x.replace(/আনুষাঙ্গিক/g, 'আনুষঙ্গিক'); |
| | x = x.replace(/আপাতঃদৃষ্টে/g, 'আপাতদৃষ্টে'); |
| | x = x.replace(/আপাততঃ/g, 'আপাতত'); |
| | x = x.replace(/আপোষ/g, 'আপোস'); |
| | x = x.replace(/আভ্যন্তরীণ/g, 'অভ্যন্তরীণ'); |
| | x = x.replace(/আয়ত্ব/g, 'আয়ত্ত'); |
| | x = x.replace(/আয়ত্বাধীন/g, 'আয়ত্তাধীন'); |
| | x = x.replace(/আরাম্ভ/g, 'আরম্ভ'); |
| | x = x.replace(/আলিংগন/g, 'আলিঙ্গন'); |
| | x = x.replace(/আলোচ্যমান/g, 'আলোচ্য'); |
| | x = x.replace(/আশংকা/g, 'আশঙ্কা'); |
| | x = x.replace(/আশক্তি/g, 'আসক্তি'); |
| | x = x.replace(/আশ্বস্থ/g, 'আশ্বস্ত'); |
| | x = x.replace(/আস্তাকুঁড়/g, 'আঁস্তাকুড়'); |
| | x = x.replace(/ইংগিত/g, 'ইঙ্গিত'); |
| | x = x.replace(/ইতঃস্তত/g, 'ইতস্তত'); |
| | x = x.replace(/ইতিপূর্বে/g, 'ইতঃপূর্বে'); |
| | x = x.replace(/ইতিমধ্যে/g, 'ইতোমধ্যে'); |
| | x = x.replace(/ইদানিং/g, 'ইদানীং'); |
| | x = x.replace(/ইয়ত্বা/g, 'ইয়ত্তা'); |
| | x = x.replace(/ইষ্ঠ/g, 'ইষ্ট'); |
| | x = x.replace(/ইষৎ/g, 'ঈষৎ'); |
| | x = x.replace(/ঈস্পিত/g, 'ঈপ্সিত'); |
| | x = x.replace(/উচিৎ/g, 'উচিত'); |
| | x = x.replace(/উচ্চৈস্বরে/g, 'উচ্চৈঃস্বরে'); |
| | x = x.replace(/উচ্ছ্বল/g, 'উচ্ছল'); |
| | x = x.replace(/উজ্বল/g, 'উজ্জ্বল'); |
| | x = x.replace(/উত্তরন/g, 'উত্তরণ'); |
| | x = x.replace(/উত্তরসুরী/g, 'উত্তরসূরি'); |
| | x = x.replace(/উত্তলন/g, 'উত্তোলন'); |
| | x = x.replace(/উত্যক্ত/g, 'উত্ত্যক্ত'); |
| | x = x.replace(/উদীচি/g, 'উদীচী'); |
| | x = x.replace(/উদ্দান/g, 'উদ্যান'); |
| | x = x.replace(/উদ্দ্যোগ/g, 'উদ্যোগ'); |
| | x = x.replace(/উদ্ধত্য/g, 'ঔদ্ধত্য'); |
| | x = x.replace(/উদ্বিঘ্ন/g, 'উদ্বিগ্ন'); |
| | x = x.replace(/উদ্ভিজ/g, 'উদ্ভিজ্জ'); |
| | x = x.replace(/উদ্ভুত/g, 'উদ্ভূত'); |
| | x = x.replace(/উনবিংশ/g, 'ঊনবিংশ'); |
| | x = x.replace(/উপকুল/g, 'উপকূল'); |
| | x = x.replace(/উপচার্য/g, 'উপাচার্য'); |
| | x = x.replace(/উপরোক্ত/g, 'উপরিউক্ত'); |
| | x = x.replace(/উপলক্ষ্য/g, 'উপলক্ষ'); |
| | x = x.replace(/উভয়চর/g, 'উভচর'); |
| | x = x.replace(/উর্ধ্ব/g, 'ঊর্ধ্ব'); |
| | x = x.replace(/উর্মি/g, 'ঊর্মি'); |
| | x = x.replace(/উশৃঙ্খল/g, 'উচ্ছৃঙ্খল'); |
| | x = x.replace(/উষর/g, 'ঊষর'); |
| | x = x.replace(/উহ্য/g, 'ঊহ্য'); |
| | x = x.replace(/উৎকর্ষতা/g, 'উৎকর্ষ'); |
| | x = x.replace(/ঊনিশ/g, 'উনিশ'); |
| | x = x.replace(/এককৃত/g, 'একীকৃত'); |
| | x = x.replace(/একনিষ্ট/g, 'একনিষ্ঠ'); |
| | x = x.replace(/একভূত/g, 'একীভূত'); |
| | x = x.replace(/একাধিক্রমে/g, 'একাদিক্রমে'); |
| | x = x.replace(/এক্ষুণি/g, 'এক্ষুনি'); |
| | x = x.replace(/এতদ্সঙ্গে/g, 'এতৎসঙ্গে'); |
| | x = x.replace(/এতদ্সত্ত্বেও/g, 'এতৎসত্ত্বেও'); |
| | x = x.replace(/এশিয় /g, 'এশীয় '); |
| | x = x.replace(/ঐকবদ্ধ/g, 'ঐক্যবদ্ধ'); |
| | x = x.replace(/ঐক্যতা/g, 'একতা'); |
| | x = x.replace(/ঐক্যতান/g, 'ঐকতান'); |
| | x = x.replace(/ঐক্যমত/g, 'ঐকমত্য'); |
| | x = x.replace(/ওতঃপ্রোত/g, 'ওতপ্রোত'); |
| | x = x.replace(/ঔচিত্ত/g, 'ঔচিত্য'); |
| | x = x.replace(/কংকণ/g, 'কঙ্কণ'); |
| | x = x.replace(/কংকাল/g, 'কঙ্কাল'); |
| | x = x.replace(/কচিৎ/g, 'ক্বচিৎ'); |
| | x = x.replace(/কটুক্তি/g, 'কটূক্তি'); |
| | x = x.replace(/কতৃক/g, 'কর্তৃক'); |
| | x = x.replace(/কতৃত্ত্ব/g, 'কর্তৃত্ব'); |
| | x = x.replace(/কতৃপক্ষ/g, 'কর্তৃপক্ষ'); |
| | x = x.replace(/কথপোকথন/g, 'কথোপকথন'); |
| | x = x.replace(/কদাচিত/g, 'কদাচিৎ'); |
| | x = x.replace(/ কনা/g, ' কণা'); |
| | x = x.replace(/কনিষ্ট/g, 'কনিষ্ঠ'); |
| | x = x.replace(/কন্ঠশিল্পী/g, 'কণ্ঠশিল্পী'); |
| | x = x.replace(/কন্ঠস্ত/g, 'কণ্ঠস্থ'); |
| | x = x.replace(/কয়েদী/g, 'কয়েদি'); |
| | x = x.replace(/করনিক/g, 'করণিক'); |
| | x = x.replace(/কর্তী/g, 'কর্ত্রী'); |
| | x = x.replace(/কর্মচারি/g, 'কর্মচারী'); |
| | x = x.replace(/কলংক/g, 'কলঙ্ক'); |
| | x = x.replace(/কলসী/g, 'কলসি'); |
| | x = x.replace(/কল্যান/g, 'কল্যাণ'); |
| | x = x.replace(/কল্যানীয়াষু/g, 'কল্যাণীয়াসু'); |
| | x = x.replace(/কল্যানীয়েসু/g, 'কল্যাণীয়েষু'); |
| | x = x.replace(/কষ্ঠি/g, 'কষ্টি'); |
| | x = x.replace(/কাঁচ/g, 'কাচ'); |
| | x = x.replace(/কাঁছাকাছি/g, 'কাছাকাছি'); |
| | x = x.replace(/কাংখিত/g, 'কাঙ্খিত'); |
| | x = x.replace(/কাকলী/g, 'কাকলি'); |
| | x = x.replace(/কাচা/g, 'কাঁচা'); |
| | x = x.replace(/কাতলা/g, 'কাৎলা'); |
| | x = x.replace(/কার্যতঃ/g, 'কার্যত'); |
| | x = x.replace(/কিংবদন্তী/g, 'কিংবদন্তি'); |
| | x = x.replace(/কিম্বা/g, 'কিংবা'); |
| | x = x.replace(/কুটনীতি/g, 'কূটনীতি'); |
| | x = x.replace(/কুৎসিৎ/g, 'কুৎসিত'); |
| | x = x.replace(/কূটিল/g, 'কুটিল'); |
| | x = x.replace(/কৃচ্ছতা/g, 'কৃচ্ছ্রতা'); |
| | x = x.replace(/কৃচ্ছসাধন/g, 'কৃচ্ছ্রসাধন'); |
| | x = x.replace(/কৃষিজীবি/g, 'কৃষিজীবী'); |
| | x = x.replace(/কৃষ্টিবান/g, 'কৃষ্টিমান'); |
| | x = x.replace(/কেন্দ্রিয়/g, 'কেন্দ্রীয়'); |
| | x = x.replace(/কেরাণী/g, 'কেরানি'); |
| | x = x.replace(/কোণাকুণি/g, 'কোনাকুনি'); |
| | x = x.replace(/কৌতুহল/g, 'কৌতূহল'); |
| | x = x.replace(/কৌতূক/g, 'কৌতুক'); |
| | x = x.replace(/ক্রুর/g, 'ক্রূর'); |
| | x = x.replace(/ক্ষীয়মান/g, 'ক্ষীয়মাণ'); |
| | x = x.replace(/ক্ষুন্ন/g, 'ক্ষুণ্ণ'); |
| | x = x.replace(/ক্ষুব্দ/g, 'ক্ষুব্ধ'); |
| | x = x.replace(/ক্ষেপন/g, 'ক্ষেপণ'); |
| | x = x.replace(/ক্ষেপনাস্ত্র/g, 'ক্ষেপণাস্ত্র'); |
| | x = x.replace(/খঞ্জনী/g, 'খঞ্জনি'); |
| | x = x.replace(/খুটিনাটি/g, 'খুঁটিনাটি'); |
| | x = x.replace(/খুড়ী/g, 'খুড়ি'); |
| | x = x.replace(/খুশী/g, 'খুশি'); |
| | x = x.replace(/খেতমজুর/g, 'ক্ষেতমজু'); |
| | x = x.replace(/খেলাধূলা/g, 'খেলাধুলা'); |
| | x = x.replace(/খেলোয়ার/g, 'খেলোয়াড়'); |
| | x = x.replace(/খোজ/g, 'খোঁজ'); |
| | x = x.replace(/খোলাখোলি/g, 'খোলাখুলি'); |
| | x = x.replace(/গংগা/g, 'গঙ্গা'); |
| | x = x.replace(/গগণ/g, 'গগন'); |
| | x = x.replace(/গড্ডালিকা/g, 'গড্ডলিকা'); |
| | x = x.replace(/গত্যান্তর/g, 'গত্যন্তর'); |
| | x = x.replace(/ গন /g, ' গণ '); |
| | x = x.replace(/গননা/g, 'গণনা'); |
| | x = x.replace(/গনিত/g, 'গণিত'); |
| | x = x.replace(/গন্য /g, 'গণ্য '); |
| | x = x.replace(/গন্জ/g, 'গঞ্জ'); |
| | x = x.replace(/গবেষনা/g, 'গবেষণা'); |
| | x = x.replace(/গরীব/g, 'গরিব'); |
| | x = x.replace(/গর্ধব/g, 'গর্ধভ'); |
| | x = x.replace(/গাড়ী/g, 'গাড়ি'); |
| | x = x.replace(/গার্হস্থ /g, 'গার্হস্থ্য '); |
| | x = x.replace(/গীর্জা/g, 'গির্জা'); |
| | x = x.replace(/গুড়া/g, 'গুঁড়া'); |
| | x = x.replace(/গুড়ো/g, 'গুঁড়ো'); |
| | x = x.replace(/গুণে গুণে/g, 'গুনে গুনে'); |
| | x = x.replace(/গৃহস্ত/g, 'গৃহস্থ'); |
| | x = x.replace(/গৃহিত/g, 'গৃহীত'); |
| | x = x.replace(/গোধুলি/g, 'গোধূলি'); |
| | x = x.replace(/গোষ্ঠি/g, 'গোষ্ঠী'); |
| | x = x.replace(/গোস্পদ/g, 'গোষ্পদ'); |
| | x = x.replace(/গ্রন্থী/g, 'গ্রন্থি'); |
| | x = x.replace(/গ্রহন/g, 'গ্রহণ'); |
| | x = x.replace(/গ্রহিতা/g, 'গ্রহীতা'); |
| | x = x.replace(/গ্রামীন/g, 'গ্রামীণ'); |
| | x = x.replace(/গ্রীক/g, 'গ্রিক'); |
| | x = x.replace(/গ্রীস/g, 'গ্রিস'); |
| | x = x.replace(/ঘনিষ্ট/g, 'ঘনিষ্ঠ'); |
| | x = x.replace(/ঘরণী/g, 'ঘরনি'); |
| | x = x.replace(/ ঘাটি/g, ' ঘাঁটি'); |
| | x = x.replace(/ঘুরাঘুরি/g, 'ঘোরাঘুরি'); |
| | x = x.replace(/ঘুর্ণীয়মান/g, 'ঘূর্ণায়মান'); |
| | x = x.replace(/ঘুর্নি/g, 'ঘূর্ণি'); |
| | x = x.replace(/ঘুসখোর/g, 'ঘুষখোর'); |
| | x = x.replace(/ঘূণ/g, 'ঘুণ'); |
| | x = x.replace(/ঘোষনা/g, 'ঘোষণা'); |
| | x = x.replace(/ঘ্রান/g, 'ঘ্রাণ'); |
| | x = x.replace(/চত্তর/g, 'চত্বর'); |
| | x = x.replace(/চরক/g, 'চড়ক'); |
| | x = x.replace(/চাকরানী/g, 'চাকরানি'); |
| | x = x.replace(/চাকরী/g, 'চাকরি'); |
| | x = x.replace(/চাকুরী/g, 'চাকুরী'); |
| | x = x.replace(/চাতুর্যতা/g, 'চাতুর্য'); |
| | x = x.replace(/চীৎকার/g, 'চিৎকার'); |
| | x = x.replace(/চুড়মার/g, 'চুরমার'); |
| | x = x.replace(/চুড়ান্ত/g, 'চূড়ান্ত'); |
| | x = x.replace(/চূষ্য/g, 'চোষ্য'); |
| | x = x.replace(/চৌচিড়/g, 'চৌচির'); |
| | x = x.replace(/ছাকনি/g, 'ছাঁকনি'); |
| | x = x.replace(/ ছাকা/g, ' ছাঁকা'); |
| | x = x.replace(/ছাত্রীবাস/g, 'ছাত্রীনিবাস'); |
| | x = x.replace(/ছোওয়া/g, 'ছোঁয়া'); |
| | x = x.replace(/ছোকড়া/g, 'ছোকরা'); |
| | x = x.replace(/ছোটখাট /g, 'ছোটোখাটো '); |
| | x = x.replace(/ছোটাছোটি/g, 'ছোটাছুটি'); |
| | x = x.replace(/জংগল/g, 'জঙ্গল'); |
| | x = x.replace(/জগত/g, 'জগৎ'); |
| | x = x.replace(/জঘণ্য/g, 'জঘন্য'); |
| | x = x.replace(/জটীল/g, 'জটিল'); |
| | x = x.replace(/জবানবন্দী/g, 'জবানবন্দি'); |
| | x = x.replace(/জরুরী/g, 'জরুরি'); |
| | x = x.replace(/জাগরুক/g, 'জাগরূক'); |
| | x = x.replace(/জাতিয়/g, 'জাতীয়'); |
| | x = x.replace(/জাতী /g, 'জাতি '); |
| | x = x.replace(/জাতীয়করন/g, 'জাতীয়করণ'); |
| | x = x.replace(/জানুয়ারী/g, 'জানুয়ারি'); |
| | x = x.replace(/জিনিষ/g, 'জিনিস'); |
| | x = x.replace(/জীবীকা/g, 'জীবিকা'); |
| | x = x.replace(/জেষ্ঠ্য/g, 'জ্যেষ্ঠ'); |
| | x = x.replace(/জৈষ্ঠ্য/g, 'জ্যৈষ্ঠ'); |
| | x = x.replace(/জ্বরাজীর্ণ/g, 'জরাজীর্ণ'); |
| | x = x.replace(/টাকশাল/g, 'টাঁকশাল'); |
| | x = x.replace(/টেঁকসই/g, 'টেকসই'); |
| | x = x.replace(/ডাইনী/g, 'ডাইনি'); |
| | x = x.replace(/তক্ষুণি/g, 'তক্ষুনি'); |
| | x = x.replace(/তছরূপ/g, 'তছরুপ'); |
| | x = x.replace(/তড়িত/g, 'তড়িৎ'); |
| | x = x.replace(/ততক্ষণাৎ/g, 'তৎক্ষণাৎ'); |
| | x = x.replace(/ততধিক/g, 'ততোধিক'); |
| | x = x.replace(/তত্তজ্ঞান/g, 'তত্ত্বজ্ঞান'); |
| | x = x.replace(/তত্তাবদায়ক/g, 'তত্ত্বাবধায়ক'); |
| | x = x.replace(/তত্তাবধান/g, 'তত্ত্বাবধান'); |
| | x = x.replace(/তদসংক্রান্ত/g, 'তৎসংক্রান্ত'); |
| | x = x.replace(/তদানুসারে/g, 'তদনুসারে'); |
| | x = x.replace(/তদ্রুপ/g, 'তদ্রূপ'); |
| | x = x.replace(/তফাত/g, 'তফাৎ'); |
| | x = x.replace(/তরংগ/g, 'তরঙ্গ'); |
| | x = x.replace(/তরান্বিত/g, 'ত্বরান্বিত'); |
| | x = x.replace(/তর্জনি/g, 'তর্জনী'); |
| | x = x.replace(/তষ্কর/g, 'তস্কর'); |
| | x = x.replace(/তাঁতী/g, 'তাঁতি'); |
| | x = x.replace(/তাবত/g, 'তাবৎ'); |
| | x = x.replace(/তিতীক্ষা/g, 'তিতিক্ষা'); |
| | x = x.replace(/তিরষ্কার/g, 'তিরস্কার'); |
| | x = x.replace(/ত্বরিৎ/g, 'ত্বরিত'); |
| | x = x.replace(/ত্যজ্য/g, 'ত্যাজ্য'); |
| | x = x.replace(/ত্রান/g, 'ত্রাণ'); |
| | x = x.replace(/ত্রিভূজ/g, 'ত্রিভুজ'); |
| | x = x.replace(/তৎবিষয়ক/g, 'তদ্বিষয়ক'); |
| | x = x.replace(/থুত্থুরে/g, 'থুত্থুড়ে'); |
| | x = x.replace(/দক্ষিন/g, 'দক্ষিণ'); |
| | x = x.replace(/দণ্ডবত/g, 'দণ্ডবৎ'); |
| | x = x.replace(/দরকারী/g, 'দরকারি'); |
| | x = x.replace(/দরুণ/g, 'দরুন'); |
| | x = x.replace(/দারিদ্রতা/g, 'দরিদ্রতা, দারিদ্র'); |
| | x = x.replace(/দারুন/g, 'দারুণ'); |
| | x = x.replace(/দিকভ্রান্ত/g, 'দিগভ্রান্ত'); |
| | x = x.replace(/দিক্ষা/g, 'দীক্ষা'); |
| | x = x.replace(/দিঘী/g, 'দিঘি'); |
| | x = x.replace(/দীর্ঘসূত্রিতা/g, 'দীর্ঘসূত্রতা'); |
| | x = x.replace(/দুতাবাস/g, 'দূতাবাস'); |
| | x = x.replace(/দুরবীক্ষন/g, 'দূরবীক্ষণ'); |
| | x = x.replace(/দুরাবস্থা/g, 'দুরবস্থা'); |
| | x = x.replace(/দুষ /g, 'দোষ '); |
| | x = x.replace(/দুষ্কৃতীকারী/g, 'দুষ্কৃতকারী'); |
| | x = x.replace(/দূরবীক্ষন/g, 'দূরবীক্ষণ'); |
| | x = x.replace(/দূরবীণ/g, 'দূরবীন'); |
| | x = x.replace(/দূরারোগ্য/g, 'দুরারোগ্য'); |
| | x = x.replace(/দূরুহ/g, 'দুরূহ'); |
| | x = x.replace(/দূর্গ/g, 'দুর্গ'); |
| | x = x.replace(/দৃঢ়করণ/g, 'দৃঢ়ীকরণ'); |
| | x = x.replace(/দৃষ্টিকোন/g, 'দৃষ্টিকোণ'); |
| | x = x.replace(/দৃষ্ঠিভঙ্গি/g, 'দৃষ্টিভঙ্গি'); |
| | x = x.replace(/দেদীপ্যমাণ/g, 'দেদীপ্যমান'); |
| | x = x.replace(/দেরী/g, 'দেরি'); |
| | x = x.replace(/দৈনতা/g, 'দীনতা, দৈন্য'); |
| | x = x.replace(/দোষনীয়/g, 'দূষণীয়'); |
| | x = x.replace(/দৌরাত্ম/g, 'দৌরাত্ম্য'); |
| | x = x.replace(/দ্বন্দ/g, 'দ্বন্দ্ব'); |
| | x = x.replace(/দ্বিতীয়তঃ/g, 'দ্বিতীয়ত'); |
| | x = x.replace(/ধজা/g, 'ধ্বজা'); |
| | x = x.replace(/ধরণ/g, 'ধরন'); |
| | x = x.replace(/ধাধা/g, 'ধাঁধা'); |
| | x = x.replace(/ধারন/g, 'ধারণ'); |
| | x = x.replace(/ধারনা/g, 'ধারণা'); |
| | x = x.replace(/ধুমপান/g, 'ধূমপান'); |
| | x = x.replace(/ধুর্ত/g, 'ধূর্ত'); |
| | x = x.replace(/ধুলি/g, 'ধূলি'); |
| | x = x.replace(/ধুসর/g, 'ধূসর'); |
| | x = x.replace(/ধূলা/g, 'ধুলা'); |
| | x = x.replace(/ধ্বনী/g, 'ধ্বনি'); |
| | x = x.replace(/ধ্বস/g, 'ধ্স'); |
| | x = x.replace(/ধ্বস্তাধ্বস্তি/g, 'ধ্স্তাধস্তি'); |
| | x = x.replace(/নচেত/g, 'নচেৎ'); |
| | x = x.replace(/নচ্ছাড়/g, 'নচ্ছাড়'); |
| | x = x.replace(/নবীণ/g, 'নবীন'); |
| | x = x.replace(/নমষ্কার/g, 'নমস্কার'); |
| | x = x.replace(/নিক্কন/g, 'নিক্বণ'); |
| | x = x.replace(/নিন্দ্যনীয়/g, 'নিন্দনীয়'); |
| | x = x.replace(/নিরব/g, 'নীরব'); |
| | x = x.replace(/নিরস /g, 'নীরস '); |
| | x = x.replace(/নিরুপন/g, 'নিরূপণ'); |
| | x = x.replace(/নিরোগ/g, 'নীরোগ'); |
| | x = x.replace(/নির্দোষী/g, 'নির্দোষ'); |
| | x = x.replace(/নির্ধনী/g, 'নির্ধন'); |
| | x = x.replace(/নির্নয়/g, 'নির্ণয়'); |
| | x = x.replace(/নিস্কাশন/g, 'নিষ্কাশন'); |
| | x = x.replace(/নিস্প্রভ/g, 'নিষ্প্রভ'); |
| | x = x.replace(/নিস্প্রয়োজন/g, 'নিষ্প্রয়োজন'); |
| | x = x.replace(/নিহারীকা/g, 'নীহারিকা'); |
| | x = x.replace(/নীচে/g, 'নিচে'); |
| | x = x.replace(/নীজ/g, 'নিজ'); |
| | x = x.replace(/নীরলস/g, 'নিরলস'); |
| | x = x.replace(/নূন্যতম/g, 'ন্যূনতম'); |
| | x = x.replace(/নৃসংশ/g, 'নৃশংস'); |
| | x = x.replace(/নৈশব্দ্য/g, 'নৈঃশব্দ্য'); |
| | x = x.replace(/ন্যয়/g, 'ন্যায়'); |
| | x = x.replace(/ন্যয্য/g, 'ন্যায্য'); |
| | x = x.replace(/পংক/g, 'পঙ্ক'); |
| | x = x.replace(/পংক্তি/g, 'পঙক্তি'); |
| | x = x.replace(/পক্ক/g, 'পক্ব'); |
| | x = x.replace(/পড়শী/g, 'পড়শি'); |
| | x = x.replace(/পড়াশুনা/g, 'পড়াশোনা'); |
| | x = x.replace(/পথমধ্যে/g, 'পথিমধ্যে'); |
| | x = x.replace(/পথিকৃত/g, 'পথিকৃৎ'); |
| | x = x.replace(/পন্য /g, 'পণ্য '); |
| | x = x.replace(/পরবর্তীতে /g, 'পরবর্তীকালে '); |
| | x = x.replace(/পরমানু/g, 'পরমাণু'); |
| | x = x.replace(/পরষ্পর/g, 'পরস্পর'); |
| | x = x.replace(/পরাস্থ/g, 'পরাস্ত'); |
| | x = x.replace(/পরিনাম/g, 'পরিণাম'); |
| | x = x.replace(/পরিবহণ/g, 'পরিবহন'); |
| | x = x.replace(/পরিমান/g, 'পরিমাণ'); |
| | x = x.replace(/পরিষ্ফুট/g, 'পরিস্ফুট'); |
| | x = x.replace(/পরিস্কার/g, 'পরিষ্কার'); |
| | x = x.replace(/পশ্চাদপট/g, 'পশ্চাৎপট'); |
| | x = x.replace(/পশ্চাদপদ/g, 'পশ্চাৎপদ'); |
| | x = x.replace(/পশ্চাৎগামী/g, 'পশ্চাদগামী'); |
| | x = x.replace(/পশ্চাৎভূমি/g, 'পশ্চাদভূমি'); |
| | x = x.replace(/পারদর্শীতা/g, 'পারদর্শিতা'); |
| | x = x.replace(/পারমানবিক/g, 'পারমাণবিক'); |
| | x = x.replace(/পার্বন/g, 'পার্বণ'); |
| | x = x.replace(/পালংক/g, 'পালঙ্ক'); |
| | x = x.replace(/পাষান/g, 'পাষাণ'); |
| | x = x.replace(/পিচাশ/g, 'পিশাচ'); |
| | x = x.replace(/পিঠস্থান/g, 'পীঠস্থান'); |
| | x = x.replace(/পিপিলিকা/g, 'পিপীলিকা'); |
| | x = x.replace(/পুংখানুপুংখ/g, 'পুঙ্খানুপুঙ্খ'); |
| | x = x.replace(/পুজা/g, 'পূজা'); |
| | x = x.replace(/পুণবিবেচনা/g, 'পুনর্বিবেচনা'); |
| | x = x.replace(/পুন্য/g, 'পুণ্য'); |
| | x = x.replace(/পুরষ্কার/g, 'পুরস্কার'); |
| | x = x.replace(/পুর্ন/g, 'পূর্ণ'); |
| | x = x.replace(/পুস্করিনী/g, 'পুষ্করিণী'); |
| | x = x.replace(/পূজো/g, 'পুজো'); |
| | x = x.replace(/পূবালী/g, 'পুবালি'); |
| | x = x.replace(/পূর্ণগঠন/g, 'পুনর্গঠন'); |
| | x = x.replace(/পৈত্রিক/g, 'পৈতৃক'); |
| | x = x.replace(/পোষাক/g, 'পোশাক'); |
| | x = x.replace(/পৌনঃপৌনিক/g, 'পৌনঃপুনিক'); |
| | x = x.replace(/পৌরহিত্য/g, 'পৌরোহিত্য'); |
| | x = x.replace(/প্রজ্জলন/g, 'প্রজ্বলন'); |
| | x = x.replace(/প্রজ্জলিত/g, 'প্রজ্বলিত'); |
| | x = x.replace(/প্রণয়ণ/g, 'প্রণয়ন'); |
| | x = x.replace(/প্রতিকুল/g, 'প্রতিকূল'); |
| | x = x.replace(/প্রতিযোগীতা/g, 'প্রতিযোগিতা'); |
| | x = x.replace(/প্রত্যয়ণ/g, 'প্রত্যায়ন'); |
| | x = x.replace(/প্রথমতঃ/g, 'প্রথমত'); |
| | x = x.replace(/প্রধানতঃ/g, 'প্রধানত'); |
| | x = x.replace(/প্রনালী/g, 'প্রণালী'); |
| | x = x.replace(/প্রনিধান/g, 'প্রণিধান'); |
| | x = x.replace(/প্রবাহমাণ/g, 'প্রবাহমান'); |
| | x = x.replace(/প্রবীন/g, 'প্রবীণ'); |
| | x = x.replace(/প্রভুত/g, 'প্রভূত'); |
| | x = x.replace(/প্রয়ান/g, 'প্রয়াণ'); |
| | x = x.replace(/প্রশস্থ/g, 'প্রশস্ত'); |
| | x = x.replace(/প্রসংগ/g, 'প্রসঙ্গ'); |
| | x = x.replace(/প্রসংশা/g, 'প্রশংসা'); |
| | x = x.replace(/প্রাংগন/g, 'প্রাঙ্গণ'); |
| | x = x.replace(/প্রাণপন/g, 'প্রাণপণ'); |
| | x = x.replace(/প্রানীজগৎ/g, 'প্রাণীজগৎ'); |
| | x = x.replace(/প্রানীবিদ্যা/g, 'প্রাণীবিদ্যা'); |
| | x = x.replace(/ফলতঃ/g, 'ফলত'); |
| | x = x.replace(/ফলপ্রসু/g, 'ফলপ্রসূ'); |
| | x = x.replace(/ফাল্গুণ/g, 'ফাল্গুন'); |
| | x = x.replace(/ফেব্রুয়ারী/g, 'ফেব্রুয়ারি'); |
| | x = x.replace(/বংগ/g, 'বঙ্গ'); |
| | x = x.replace(/বনষ্পতি/g, 'বনস্পতি'); |
| | x = x.replace(/বনিক/g, 'বণিক'); |
| | x = x.replace(/বন্টন/g, 'বণ্টন'); |
| | x = x.replace(/বন্দোপাধ্যায়/g, 'বন্দ্যোপাধ্যায়'); |
| | x = x.replace(/বয়ষ্ক/g, 'বয়স্ক'); |
| | x = x.replace(/বয়োকনিষ্ট/g, 'বয়ঃকনিষ্ঠ'); |
| | x = x.replace(/বর্ণালী/g, 'বর্ণালি'); |
| | x = x.replace(/বর্ত্তমান/g, 'বর্তমান'); |
| | x = x.replace(/বর্ষন/g, 'বর্ষণ'); |
| | x = x.replace(/বাঁশী/g, 'বাঁশি'); |
| | x = x.replace(/বাকদত্তা/g, 'বাগদত্তা'); |
| | x = x.replace(/বাঞ্চনীয়/g, 'বাঞ্ছনীয়'); |
| | x = x.replace(/বাঞ্চা/g, 'বাঞ্ছা'); |
| | x = x.replace(/ বাড়ী/g, ' বাড়ি'); |
| | x = x.replace(/বাদুর/g, 'বাদুড়'); |
| | x = x.replace(/বানিজ্য/g, 'বাণিজ্য'); |
| | x = x.replace(/বিদ্যান/g, 'বিদ্বান'); |
| | x = x.replace(/বিপদগ্রস্থ/g, 'বিপদগ্রস্ত'); |
| | x = x.replace(/বিপদজনক/g, 'বিপজ্জনক'); |
| | x = x.replace(/বিপনন/g, 'বিপণন'); |
| | x = x.replace(/বিপনী/g, 'বিপণী'); |
| | x = x.replace(/বিশ্বস্থ/g, 'বিশ্বস্ত'); |
| | x = x.replace(/বিষ্ফোরণ/g, 'বিস্ফোরণ'); |
| | x = x.replace(/বীভৎস্য/g, 'বীভৎস'); |
| | x = x.replace(/বুদ্ধিজীবি/g, 'বুদ্ধজীবী'); |
| | // x = x.replace(/বেশী/g, 'বেশি'); দ্ব্যর্থক শব্দ, দুটো ভিন্ন অর্থ প্রকাশ করে |
| | x = x.replace(/ব্যকরণ/g, 'ব্যাকরণ'); |
| | x = x.replace(/ব্যপক/g, 'ব্যাপক'); |
| | x = x.replace(/ব্যহত/g, 'ব্যাহত'); |
| | x = x.replace(/ব্যাতিক্রম/g, 'ব্যতিক্রম'); |
| | x = x.replace(/ব্যাথা/g, 'ব্যথা'); |
| | x = x.replace(/ব্যাপি/g, 'ব্যাপী'); |
| | x = x.replace(/ব্যাবধান/g, 'ব্যবধান'); |
| | x = x.replace(/ব্যাবহার/g, 'ব্যবহার'); |
| | x = x.replace(/ব্যাভিচার/g, 'ব্যভিচার'); |
| | x = x.replace(/ব্যায় /g, 'ব্যয় '); |
| | x = x.replace(/ব্যার্থ/g, 'ব্যর্থ'); |
| | x = x.replace(/ব্যুৎপত্তি/g, 'বুৎপত্তি'); |
| | x = x.replace(/ব্রাক্ষণ/g, 'ব্রাহ্মণ'); |
| | x = x.replace(/ভংগ/g, 'ভঙ্গ'); |
| | x = x.replace(/ভংগী/g, 'ভঙ্গি'); |
| | x = x.replace(/ভংগুর/g, 'ভঙ্গুর'); |
| | x = x.replace(/ভনিতা/g, 'ভণিতা'); |
| | x = x.replace(/ভবিষ্যৎবাণী/g, 'ভবিষ্যদ্বাণী'); |
| | x = x.replace(/ভরনপোষণ/g, 'ভরণপোষণ'); |
| | x = x.replace(/ভষ্ম/g, 'ভস্ম'); |
| | x = x.replace(/ভাষ্কর/g, 'ভাস্কর'); |
| | x = x.replace(/ভিখারী/g, 'ভিখারি'); |
| | x = x.replace(/ভিরু/g, 'ভীরু'); |
| | x = x.replace(/ভীড়/g, 'ভিড়'); |
| | x = x.replace(/ভুড়ি/g, 'ভুঁড়ি'); |
| | x = x.replace(/ভুতপূর্ব/g, 'ভূতপূর্ব'); |
| | x = x.replace(/ভুমিষ্ট/g, 'ভূমিষ্ঠ'); |
| | x = x.replace(/ভুয়সী/g, 'ভূয়সী'); |
| | x = x.replace(/ভুরিভোজন/g, 'ভূরিভোজন'); |
| | x = x.replace(/ভূবন/g, 'ভুবন'); |
| | x = x.replace(/ভূয়া/g, 'ভুয়া'); |
| | x = x.replace(/ভূল/g, 'ভুল'); |
| | x = x.replace(/ভৌগলিক/g, 'ভৌগোলিক'); |
| | x = x.replace(/ভ্রমন/g, 'ভ্রমণ'); |
| | x = x.replace(/ভ্রাম্যমান/g, 'ভ্রাম্যমাণ'); |
| | x = x.replace(/ভ্রুক্ষেপ/g, 'ভ্রূক্ষেপ'); |
| | x = x.replace(/মজুরী/g, 'মজুরি'); |
| | x = x.replace(/মণিষা/g, 'মনীষা'); |
| | x = x.replace(/মনমালিন্য/g, 'মনোমালিন্য'); |
| | x = x.replace(/মনিষী/g, 'মনীষী'); |
| | x = x.replace(/মন্ত্রনালয়/g, 'মন্ত্রণালয়'); |
| | x = x.replace(/ময়ুর/g, 'ময়ূর'); |
| | x = x.replace(/মরুদ্যান/g, 'মরূদ্যান'); |
| | x = x.replace(/মশারী/g, 'মশারি'); |
| | x = x.replace(/মস্তিস্ক/g, 'মস্তিষ্ক'); |
| | x = x.replace(/মহত্ত/g, 'মহত্ত্ব'); |
| | x = x.replace(/মহামতী/g, 'মহামতি'); |
| | x = x.replace(/মহামারি/g, 'মহামারী'); |
| | x = x.replace(/মহিয়সী/g, 'মহীয়সী'); |
| | x = x.replace(/ মাংশ /g, ' মাংস '); |
| | x = x.replace(/মানিক্য/g, 'মানিক'); |
| | x = x.replace(/মাসী/g, 'মাসি'); |
| | x = x.replace(/মাহাত্ম/g, 'মাহাত্ম্য'); |
| | x = x.replace(/মিতালী/g, 'মিতালি'); |
| | x = x.replace(/মিমাংসা/g, 'মীমাংসা'); |
| | x = x.replace(/মিরিচিকা/g, 'মরীচিকা'); |
| | x = x.replace(/মুখস্ত/g, 'মুখস্থ'); |
| | x = x.replace(/মুঢ়/g, 'মূঢ়'); |
| | x = x.replace(/মুত্র/g, 'মূত্র'); |
| | x = x.replace(/মুদ্রন/g, 'মুদ্রণ'); |
| | x = x.replace(/মুমুর্ষ/g, 'মুমূর্ষু'); |
| | x = x.replace(/মুর্খ/g, 'মূর্খ'); |
| | x = x.replace(/মুর্তি/g, 'মূর্তি'); |
| | x = x.replace(/মুর্ধন্য/g, 'মূর্ধন্য'); |
| | x = x.replace(/মুষ্ঠি/g, 'মুষ্টি'); |
| | x = x.replace(/মুহুর্ত/g, 'মুহূর্ত'); |
| | x = x.replace(/মুহূর্মুহু/g, 'মুহুর্মুহু'); |
| | x = x.replace(/মুহ্যবান/g, 'মোহ্যমান/মুহ্যমান'); |
| | x = x.replace(/মূখ্য/g, 'মুখ্য'); |
| | x = x.replace(/মূল্যায়ণ/g, 'মূল্যায়ন'); |
| | x = x.replace(/মৃয়মান/g, 'ম্রিয়মাণ'); |
| | x = x.replace(/মোটামোটি/g, 'মোটামুটি'); |
| | x = x.replace(/মৌনতা/g, 'মৌন'); |
| | x = x.replace(/যক্ষা/g, 'যক্ষ্মা'); |
| | x = x.replace(/যথেষ্ঠ/g, 'যথেষ্ট'); |
| | x = x.replace(/যদ্যাপি/g, 'যদ্যপি'); |
| | x = x.replace(/যন্ত্রনা/g, 'যন্ত্রণা'); |
| | x = x.replace(/যাদুঘর/g, 'জাদুঘর'); |
| | x = x.replace(/রংগ/g, 'রঙ্গ'); |
| | x = x.replace(/রঙিণ/g, 'রঙিন'); |
| | x = x.replace(/রঙ্গিণ/g, 'রঙ্গিন'); |
| | x = x.replace(/রথি/g, 'রথী'); |
| | x = x.replace(/রসায়ণ/g, 'রসায়ন'); |
| | x = x.replace(/রাংগামাটি/g, 'রাঙ্গামাটি'); |
| | x = x.replace(/রামায়ন/g, 'রামায়ণ'); |
| | x = x.replace(/রাষ্ট্রিয়/g, 'রাষ্ট্রীয়'); |
| | x = x.replace(/রূপায়ন/g, 'রূপায়ণ'); |
| | x = x.replace(/রোপন/g, 'রোপণ'); |
| | x = x.replace(/লংকা/g, 'লঙ্কা'); |
| | x = x.replace(/লংঘন/g, 'লঙ্ঘন'); |
| | x = x.replace(/লক্ষী/g, 'লক্ষ্মী'); |
| | x = x.replace(/লক্ষ্যণীয়/g, 'লক্ষণীয়'); |
| | x = x.replace(/লঘুকরণ/g, 'লঘূকরণ'); |
| | x = x.replace(/লজ্জাষ্কর/g, 'লজ্জাকর'); |
| | x = x.replace(/লবন/g, 'লবণ'); |
| | x = x.replace(/লাইব্রেরী/g, 'লাইব্রেরি'); |
| | x = x.replace(/লাবন্য/g, 'লাবণ্য'); |
| | x = x.replace(/শংকর/g, 'শঙ্কর'); |
| | x = x.replace(/শংকা/g, 'শঙ্কা'); |
| | x = x.replace(/শংকিত/g, 'শঙ্কিত'); |
| | x = x.replace(/শরীক/g, 'শরিক'); |
| | x = x.replace(/শশাংক/g, 'শশাঙ্ক'); |
| | x = x.replace(/শশুর/g, 'শ্বশুর'); |
| | x = x.replace(/শশ্মান/g, 'শ্মশান'); |
| | x = x.replace(/শাড়ী/g, 'শাড়ি'); |
| | x = x.replace(/শাষণ/g, 'শাসন'); |
| | x = x.replace(/শারীরীক/g, 'শারীরিক'); |
| | x = x.replace(/শাশুড়ী/g, 'শাশুড়ি'); |
| | x = x.replace(/শিক্ষাঙ্গন/g, 'শিক্ষাঙ্গণ'); |
| | x = x.replace(/শিরচ্ছেদ/g, 'শিরশ্ছেদ'); |
| | x = x.replace(/শিরধার্য/g, 'শিরোধার্য'); |
| | x = x.replace(/শিরনাম/g, 'শিরোনাম'); |
| | x = x.replace(/শিরমণি/g, 'শিরোমণি'); |
| | x = x.replace(/শুভাকাংখী/g, 'শুভাকাঙ্খী'); |
| | x = x.replace(/শুশ্রুষা/g, 'শুশ্রূষা'); |
| | x = x.replace(/শূণ্য/g, 'শুন্য'); |
| | x = x.replace(/শৃংখলা/g, 'শৃঙ্খলা'); |
| | x = x.replace(/শ্বাশত/g, 'শাশ্বত'); |
| | x = x.replace(/শ্রদ্ধাঞ্জলী/g, 'শ্রদ্ধাঞ্জলি'); |
| | x = x.replace(/শ্রদ্ধাভাজনীয়/g, 'শ্রদ্ধাভাজন'); |
| | x = x.replace(/শ্রদ্ধাষ্পদ/g, 'শ্রদ্ধাস্পদ'); |
| | x = x.replace(/শ্রমজীবি/g, 'শ্রমজীবী'); |
| | x = x.replace(/শ্রাবন/g, 'শ্রাবণ'); |
| | x = x.replace(/শ্রীমতি/g, 'শ্রীমতী'); |
| | x = x.replace(/শ্রেষ্ট/g, 'শ্রেষ্ঠ'); |
| | x = x.replace(/ষষ্ট/g, 'ষষ্ঠ'); |
| | x = x.replace(/ষষ্ঠদশ/g, 'ষোড়শ'); |
| | x = x.replace(/সংগা/g, 'সংজ্ঞা'); |
| | x = x.replace(/সংগী/g, 'সঙ্গী'); |
| | x = x.replace(/সখ/g, 'শখ'); |
| | x = x.replace(/সতীন/g, 'সতিন'); |
| | x = x.replace(/সত্বেও/g, 'সত্ত্বেও'); |
| | x = x.replace(/সত্যয়িত/g, 'সত্যায়িত'); |
| | x = x.replace(/সদ্যজাত/g, 'সদ্যোজাত'); |
| | x = x.replace(/সদ্যস্নাত/g, 'সদ্যঃস্নাত'); |
| | x = x.replace(/সনাক্ত/g, 'শনাক্ত'); |
| | x = x.replace(/সন্মান/g, 'সম্মান'); |
| | x = x.replace(/সন্মানীত/g, 'সম্মানীত'); |
| | x = x.replace(/সন্মুখ/g, 'সম্মুখ'); |
| | x = x.replace(/সন্মেলন/g, 'সম্মেলন'); |
| | x = x.replace(/সমীচিন/g, 'সমীচীন'); |
| | x = x.replace(/সম্বরণ/g, 'সংবরণ'); |
| | x = x.replace(/সম্বর্ধনা/g, 'সংবর্ধনা'); |
| | x = x.replace(/সম্বলিত/g, 'সংবলিত'); |
| | x = x.replace(/সরকারী/g, 'সরকারি'); |
| | x = x.replace(/সরণী/g, 'সরণি'); |
| | x = x.replace(/সরনী/g, 'সরণি'); |
| | x = x.replace(/সর্বাঙ্গীন/g, 'সর্বাঙ্গীণ'); |
| | x = x.replace(/সলজ্জিত/g, 'সলজ্জ'); |
| | x = x.replace(/সশংকিত/g, 'সশঙ্ক'); |
| | x = x.replace(/সহকারি/g, 'সহকারী'); |
| | x = x.replace(/সাংগ/g, 'সাঙ্গ'); |
| | x = x.replace(/সাক্ষাতকার/g, 'সাক্ষাৎকার'); |
| | x = x.replace(/সাড়াশী/g, 'সাঁড়াশি'); |
| | x = x.replace(/সাধারন/g, 'সাধারণ'); |
| | x = x.replace(/সান্তনা/g, 'সান্ত্বনা'); |
| | x = x.replace(/সামগ্রীক/g, 'সামগ্রিক'); |
| | x = x.replace(/সৌখিন/g, 'শৌখিন'); |
| | x = x.replace(/স্বচ্ছল/g, 'সচ্ছল'); |
| | x = x.replace(/স্বরস্বতী/g, 'সরস্বতী'); |
| | x = x.replace(/স্বস্ত্রীক/g, 'সস্ত্রীক'); |
| | x = x.replace(/স্বাতন্ত্র/g, 'স্বাতন্ত্র্য'); |
| | x = x.replace(/স্বাধীকার/g, 'স্বাধিকার'); |
| | x = x.replace(/স্বায়ত্ত্বশাসন/g, 'স্বায়ত্তশাসন'); |
| | x = x.replace(/স্মরন/g, 'স্মরণ'); |
| | x = x.replace(/স্রোতঃস্বতী/g, 'স্রোতস্বতী'); |
| | x = x.replace(/হীনমন্যতা/g, 'হীনম্মন্যতা'); |
| | x = x.replace(/হৃদপিণ্ড/g, 'হৃৎপিণ্ড'); |
| | x = x.replace(/হৃদস্পন্দন/g, 'হৃৎস্পন্দন'); |
| | x = x.replace(/হৃৎরোগ/g, 'হৃদরোগ'); |
| | |
| | //added by YAHYA |
| | x = x.replace(/আঘাট/g, 'আঘাত'); |
| | x = x.replace(/সাংঘাটিক/g, 'সাংঘাতিক'); |
| | x = x.replace(/আবিস্কার/g, 'আবিষ্কার'); |
| | x = x.replace(/আনুসংগিক/g, 'আনুষঙ্গিক'); |
| | x = x.replace(/শীততাপ/g, 'শীতাতপ'); |
| | x = x.replace(/অতীষ্ঠ/g, 'অতিষ্ঠ'); |
| | x = x.replace(/আষ্ফালন/g, 'আস্ফালন'); |
| | x = x.replace(/আয়ত্ব/g, 'আয়ত্ত'); |
| | x = x.replace(/ঐশ্চর্য/g, 'ঐশ্বর্য'); |
| | x = x.replace(/ক্রুটি/g, 'ত্রুটি'); |
| | x = x.replace(/অংকণ/g, 'অঙ্কন'); |
| | x = x.replace(/কোরাণ/g, 'কোরান'); |
| | x = x.replace(/খরছ/g, 'খরচ'); |
| | x = x.replace(/আরো /g, 'আরও '); |
| | x = x.replace(/বাহ্যিক লিঙ্ক/g, 'বহিঃসংযোগ'); |
| | x = x.replace(/বাহ্যিক লিংক/g, 'বহিঃসংযোগ'); |
|
| |
|
| // resolvable ambiguous date formats | | //নতুন শব্দ এই লাইনের উপরে যোগ হবে। |
| ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
| |
| ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
| |
| ohc_regex(/([^-\d/:\.])@MM[-–]@DD[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY');
| |
| ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
| |
| ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
| |
| // ohc_regex(/(\| ?)@MM[-–]@DD[-–]@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY');
| |
| }
| |
|
| |
| function ohc_UK_slash_dates_to_dmy()
| |
| {
| |
| //ranges
| |
| ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
| |
| ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
| |
| ohc_regex(/(\| ?)@DD\/@MM\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
| |
| ohc_regex(/(\| ?)@DD\.@MM\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");
| |
|
| |
|
| // resolvable ambiguous date formats | | // wiki formatting |
| ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
| | x = x.replace(/। </g, '।<'); |
| ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
| | x = x.replace(/! -/g, '!-'); |
| ohc_regex(/([^-\d/:\.])@DD[-–]@MM[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY');
| | x = x.replace(/“।/g, '।”'); |
| ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
| | x = x.replace(/। ”/g, '।”'); |
| ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY');
| | x = x.replace(/! \|/g, '!|'); |
| // ohc_regex(/(\| ?)@DD[-–]@MM[-–]@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY'); | | x = x.replace(/! }/g, '!}'); |
| }
| | x = x.replace(/! !/g, '!!'); |
| | x = x.replace(/। "/g, '।" '); |
| | x = x.replace(/! "/g, '!" '); |
| | |
| | // some more formatting for bnwiki |
| | x = x.replace(/ <ref>/g, '<ref>'); |
| | x = x.replace(/ <ref /g, '<ref '); |
| | x = x.replace(/{{reflist/g, '{{সূত্র তালিকা'); |
| | x = x.replace(/{{Reflist/g, '{{সূত্র তালিকা'); |
| | x = x.replace(/<\/references>/g, '{{সূত্র তালিকা}}'); |
|
| |
|
| function ohc_remove_leading_zeroes()
| | // fixing error |
| {
| |
| ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @LYear");
| |
| ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?(?=\W\D)/gi, "$1@LMonth @Day");
| |
| ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @LYear");
| |
| ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month(?=\W\D)/gi, "$1@Day @LMonth");
| |
| }
| |
|
| |
|
| function ohc_delink_dates()
| | x = x.replace(/বৈচিত্র/g, 'বৈচিত্র্য'); |
| {
| | x = x.replace(/বৈচিত্র্য্য/g, 'বৈচিত্র্য'); |
| //add missing space between wikilinks
| | x = x.replace(/তামুল/g, 'তামোল'); |
| regex(/(\]\])(\[\[)/gi, '$1 $2'); //remove (?!file:) to ensure a space between all links
| | x = x.replace(/ফূর্তি/g, 'স্ফূর্তি'); |
|
| | x = x.replace(/স্ফুর্তি/g, 'স্ফূর্তি'); |
| // rem redundant quote marks and parentheses
| | x = x.replace(/স্স্স্ফূর্তি/g, 'স্ফূর্তি'); |
| regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'\'([^|}\[\]]*)\'\'\'(?=\s*[|}])/gi, "$1$2");
| | x = x.replace(/স্স্ফূর্তি/g, 'স্ফূর্তি'); |
| regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'([^|}\[\]]*)\'\'(?=\s*[|}])/gi, "$1$2");
| | x = x.replace(/নৈশব্দ/g, 'নৈঃশব্দ্য'); |
| regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\"([^|}\[\]]*)\"(?=\s*[|}])/gi, "$1$2");
| | x = x.replace(/নৈঃশব্দ/g, 'নৈঃশব্দ্য'); |
| regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\(([^|}\[\]]*)\)(?=\s*[|}])/gi, "$1$2");
| | x = x.replace(/নৈঃশব্দ্য্য্য/g, 'নৈঃশব্দ্য'); |
| | x = x.replace(/নৈঃশব্দ্য্য/g, 'নৈঃশব্দ্য'); |
| | x = x.replace(/নৈঃশব্দ্যতা/g, 'নৈঃশব্দ্য'); |
| | x = x.replace(/বৈশিষ্ট্য্য/g, 'বৈশিষ্ট্য'); |
| | x = x.replace(/নিরালস্য্য/g, 'নিরালস্য'); |
| | x = x.replace(/দৈর্ঘ্য্য/g, 'দৈর্ঘ্য'); |
| | x = x.replace(/কেচাঁ/g, 'কেঁচা'); |
| | x = x.replace(/কেঁচাঁ/g, 'কেঁচা'); |
| | x = x.replace(/অন্তঃসত্বা/g, 'অন্তঃসত্ত্বা'); |
| | x = x.replace(/অন্তসত্তা/g, 'অন্তঃসত্ত্বা'); |
| | x = x.replace(/অন্তঃসত্তা/g, 'অন্তঃসত্ত্বা'); |
| | x = x.replace(/ন্দ্ব্ব/g, 'ন্দ্ব'); |
| | x = x.replace(/ধ্ব্ব/g, 'ধ্ব'); |
| | x = x.replace(/ত্ব্ব/g, 'ত্ব'); |
| | x = x.replace(/ঁঁ/g, 'ঁ'); |
| | x = x.replace(/মাননি\u09DF/g, 'মাননী\u09DF'); |
| | x = x.replace(/মাননিয়/g, 'মাননীয়'); |
| | x = x.replace(/বিদূষী/g, 'বিদুষী'); |
| | x = x.replace(/বয়সীয়াল/g, 'বয়সিয়াল'); |
| | x = x.replace(/রিস্কা/g, 'রিক্সা'); |
| | //x = x.replace(/অনসুয়া/g, 'অনসূয়া'); |
| | x = x.replace(/অনুসূয়া/g, 'অনসুয়া'); |
| | x = x.replace(/মুমূর্ষুু/g, 'মুমূর্ষু'); |
| | x = x.replace(/নিরবিচ্ছিন্ন/g, 'নিরবচ্ছিন্ন'); |
| | x = x.replace(/ণ্ধ/g, 'ন্ধ'); |
|
| |
|
| //delink unpiped dates | | // removes double space between anything |
| //delink full dates
| | x = x.replace(/ /g, ' '); // makes double space into one |
| ohc_regex(/\[\[@Day[\s_](?:of[\s_])?@Month(?:\]\]\s?\[\[\| )@YYYY\]\]/gi, "@Day @LMonth @YYYY");
| | x = x.replace(/ /g, ' '); //makes triple space into one |
| ohc_regex(/\[\[@Month (?:the\s)?@Day(?:\]\],? \[\[|, )@YYYY\]\]/gi, "@LMonth @Day, @YYYY");
| |
|
| |
|
| //delink yyyy-mm-dd dates
| | x = x.replace(/য়/g, '\u09DF'); |
| ohc_regex(/\[\[@YYYY(?:\]\]-\[\[|-)@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");
| |
| ohc_regex(/@YYYY-\[\[@MM-@DD\]\]/gi, "@YYYY-@MM-@DD");
| |
|
| |
|
| //underscore and nbsp in linked dates
| | $('#wpTextbox1').val(x); |
| ohc_regex(/\[\[@DD@th?(?:\s|_| )@Month\]\]/gi, "@Day @LMonth");
| | customAlert('বানান শুদ্ধি সম্পন্ন!','3000'); |
| ohc_regex(/\[\[@Month(?:\s|_| )@DD@th?\]\]@th?/gi, "@LMonth @Day"); //consolidated regex with flexible removal of ordinal simple date
| | } |
| ohc_regex(/\[\[@Day @Month\]\]/gi, "@Day @LMonth");
| | } |
| ohc_regex(/\[\[@Month @YYYY\]\]/gi, "@LMonth @YYYY");
| | } |
| ohc_regex(/\[\[@YYYY\]\]/gi, "@YYYY");
| | } |
| | }); |
|
| |
|
| //remove leading zero and links from linked date
| | }; |
| ohc_regex(/\[\[@Month(?:[ _]| )@ZD@th\]\]/gi, "@LMonth @Day");
| | |
| ohc_regex(/\[\[@ZD@th(?:[ _]| )@Month\]\]/gi, "@Day @LMonth");
| | /* Check if view is in edit mode and that the required modules are available. Then, customize the toolbar … */ |
| | if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) { |
| | $.when(mw.loader.using('ext.wikiEditor'), $.ready) |
| | .then(bnSpellChecker); |
| | } |
| | }); |
|
| |
|
| // remove nowrap template from dm and md dates
| |
| ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@DD(?:[ _]| )@Month)( @yyyy|)\}\}/gi, '$1@DD @LMonth$2');
| |
| ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@Month(?:[ _]| )@DD)( @yyyy|)\}\}/gi, '$1@LMonth @DD$2');
| |
|
| |
| //delink single dm or 'dth the m'
| |
| ohc_regex(/(?:the\s)?\[\[@Day@th?[\s_](?:of[\s_])?@Month\]\]/gi, "@Day @LMonth");
| |
| //delink single md or 'm the dth'
| |
| ohc_regex(/\[\[@Month[\s_](?:the[\s_])?@Day@th?\]\](?=\W)/gi, "@LMonth @Day");
| |
|
| |
|
| //month+day piped | | // This script aligns dates into one of two formats allowed by [[WP:MOSNUM]]. |
| ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|((?:@month |)@day)@th?\]\]/gi, "$1");
| | // PLEASE READ THE DOCUMENTATION at [[User:Ohconfucius/script/MOSNUM dates]] (click on the link above) before using. |
| ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|@Day@th?[\s_](@month|)\]\]/gi, "@Day $1");
| |
|
| |
|
| // ohc_regex(/\[\[@month @dd(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1"); | | // Feedback and constructive criticism are welcome |
| // ohc_regex(/\[\[@dd @month(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1");
| |
| ohc_regex(/\[\[@month @yyyy(?:#[^|]+|)\|([^|\]]+)\]\]/gi, "$1");
| |
|
| |
|
| //month+day+year pseudo-ISO dates
| | /** |
| ohc_regex(/\[\[@Month @DD\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY"); | | * TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor. |
| ohc_regex(/\[\[@DD\s@Month\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY");
| | * @see https://meta.wikimedia.org/wiki/TemplateScript |
| | */ |
| | // <pre> |
| | if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) !== -1) { |
| | $.ajax( |
| | '//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', |
| | {dataType: 'script', cache: true} |
| | ).done(function () { |
| | $.when( |
| | mw.loader.using(['mediawiki.util']), |
| | $.ajax('//en.wikipedia.org/w/index.php?title=User:Ohconfucius/script/MOSNUM_utils.js&action=raw&ctype=text/javascript', |
| | {dataType: 'script', cache: true}), |
| | $.ready |
| | ).done(function () { |
| | var add = function() { |
| | return mw.util.addPortletLink.apply(mw.util, arguments); |
| | }; |
|
| |
|
| //'[[month day|xxXxx]]Xyyyy ' to 'month day, year'
| | $(add('p-tb', '#', 'DATES to dmy', 'dmy-unitfixer', 'Align all dates to dmy', '', '')).click(ohc_all_to_dmy_driver); |
| ohc_regex(/\[\[@Month\s@Day\|@dd.@dd\]\].@YYYY/gi, "@LMonth @Day, @YYYY");
| | $(add('p-tb', '#', 'DATES to mdy', 'mdy-unitfixer', 'Align all dates to mdy', '', '')).click(ohc_all_to_mdy_driver); |
| //'[[day month|xxXxx]]Xyyyy' to 'day month year'
| | // $(add('p-tb', '#', 'Expand ref dates', 't-expandref', 'Expand month names within refs', '', '')).click(ohc_expand_ref_dates_driver); |
| ohc_regex(/\[\[@Day\s@Month\|@dd.@dd\]\].@YYYY/gi, "@Day @LMonth @YYYY");
| | // $(add('p-tb', '#', 'Expand all dates', 't-expandall', 'Expand month names throughout', '', '')).click(ohc_expand_all_dates_driver); |
| | $( add('p-tb', '#', 'US-slash dates', 't-US', 'US-slash', '', '') ).click(ohc_US_slash_dates_driver); |
| | $( add('p-tb', '#', 'UK-slash dates', 't-UK', 'UK-slash', '', '') ).click(ohc_UK_slash_dates_driver); |
| | }); |
| | }); |
| | } |
|
| |
|
| // century | | function ohc_fix_unambiguous_dates() |
| regex(/\[\[((?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first[\s\-])centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?)\]\]/gi, '$1'); | | { |
| regex(/\[\[(?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first)[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?\|([^\]]{1,30})\]\]/gi, '$1'); | | // resolvable ambiguous date formats |
| regex(/\[\[(\d{1,2}(?:st|[nr]d|th))[\s\-_](centur(?:y|ies))(\s(?:AD|BC|CE|BCE)|)\]\]/gi, '$1 $2$3');
| | // UK style |
| ohc_regex(/\[\[\d{1,2}@th[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE)|)\|([^\]]{1,30})\]\]/gi, '$1'); | | ohc_regex(/([^-\w/:\.])@DD\.@MM\.@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) { |
| | if (d.d == d.m) return true; |
| | if (d.d > 12) return true; |
| | return false; |
| | }); |
| | ohc_regex(/([^-\w/:\.])@DD\/@MM\/@YYYY(?=[^-–/\w&])/gi, "$1@Day @Month @YYYY", function(d) { |
| | if (d.d == d.m) return true; |
| | if (d.d > 12) return true; |
| | return false; |
| | }); |
|
| |
|
| // months | | // US style |
| ohc_regex(/\[\[@Month\]\]/gi, "@LMonth"); | | ohc_regex(/([^-\w/:\.])@MM\.@DD\.@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) { |
| ohc_regex(/\[\[@FullMonth\|([^\]]{1,30})\]\]/gi, "$1"); | | if (d.d > 12) return true; |
| | return false; |
| | }); |
| | ohc_regex(/([^-\w/:\.])@MM\/@DD\/@YYYY(?=[^-–/\w&])/gi, "$1@Month @Day, @YYYY", function(d) { |
| | if (d.d > 12) return true; |
| | return false; |
| | }); |
| | } |
|
| |
|
| // decades and years
| | function ohc_US_slash_dates_to_mdy() |
| regex(/(\d{1,3}0)[‘`´’′]?s/g, '$1s'); | | { |
| regex(/\[\[(\d{1,3}0)\'?s\]\]/g, '$1s');
| | //ranges |
| regex(/\[\[\d{1,3}0\'?s?\|([^\]]{1,30})\]\]/g, '$1');
| | ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2"); |
| regex(/\[\[(\d{1,3}0)\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3'); | | ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2"); |
| regex(/\[\[(\d{1,4}[\s_]?)(AD|BC|CE|BCE)\]\]/gi, '$1$2');
| | ohc_regex(/(\| ?)@MM\/@DD\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon2 @Day2, @Year2"); |
| regex(/\[\[(AD|BC|CE|BCE)([\s_]?)(\d{1,4})\]\]/gi, '$1$2$3'); | | ohc_regex(/(\| ?)@MM\.@DD\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, "$1@Mon1 @Day1, @Year1$2 – @Mon @Day2, @Year2"); |
| ohc_regex(/([-–])\[\[\s?@yyyy\s?\|\s?(\d{2,4})\s?\]\]/gi, '$1$2'); //piped year
| |
| regex(/\[\[([12]\d{3}|[1-9]\d{0,2})\]\]/gi, '$1'); | |
| regex(/\[\[\d{1,3}0\'?s?\s(?:AD|BC|CE|BCE)\|([^\]]{1,30})\]\]/gi, '$1');
| |
| regex(/\[\[\d{1,3}0\'?s?\s\(decade\)\|([^\]]{1,30})\]\]/gi, '$1');
| |
|
| |
|
| //month+year
| | // resolvable ambiguous date formats |
| //Identify surprise or 'Easter egg' diversions linking month+years to year articles. Turn them into month+year links to be dealt with below | | ohc_regex(/([^-\d/:\.])@MM\/@DD\/@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY'); |
| ohc_regex(/\[\[@yyyy in[^|\]]+\|@Day @Month @YYYY\]\]/gi, "@Day @LMonth @YYYY"); | | ohc_regex(/([^-\d/:\.])@MM\.@DD\.@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY'); |
| ohc_regex(/\[\[@yyyy in[^|\]]+\|@Month @Day,? @YYYY\]\]/gi, "@LMonth @Day, @YYYY"); | | ohc_regex(/([^-\d/:\.])@MM[-–]@DD[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Month @Day, @YYYY'); |
| ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month\s|)(@yyyy)\]\]/gi, "$1$2"); | | ohc_regex(/(\| ?)@MM\/@DD\/@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY'); |
| ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month|@yyyy)\]\]/gi, "$1"); | | ohc_regex(/(\| ?)@MM\.@DD\.@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY'); |
| ohc_regex(/\[\[(@month\s@yyyy)\]\]/gi, "$1"); | | // ohc_regex(/(\| ?)@MM[-–]@DD[-–]@YYNN(?=\s*\|)/gi, '$1@Month @Day, @YYYY'); |
| ohc_regex(/\[\[@month\s@yyyy\|([^\]]{1,30})\]\]/gi, "$1"); | | } |
| ohc_regex(/\[\[(?:List of |)Bollywood films of @yyyy\|@YYYY\]\](?= [^\[]{2}^B)/gi, "@YYYY"); | | |
| | function ohc_UK_slash_dates_to_dmy() |
| | { |
| | //ranges |
| | ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2"); |
| | ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2"); |
| | ohc_regex(/(\| ?)@DD\/@MM\/@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2"); |
| | ohc_regex(/(\| ?)@DD\.@MM\.@YYNN( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2"); |
|
| |
|
| ohc_regex(/(\[\[@yyyy[^|\]]+\|@yyyy)(\]\])( season)/gi, "$1$3$2"); | | // resolvable ambiguous date formats |
| | | ohc_regex(/([^-\d/:\.])@DD\/@MM\/@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY'); |
| //removed piped years when in full date (excepting disambiguated parentheses - updated 24/2/2012) | | ohc_regex(/([^-\d/:\.])@DD\.@MM\.@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY'); |
| // ohc_regex(/\[\[[^|\]\(\)]{1,32}\|@YYYY\]\]/gi, '@Year'); // 23/6/2021 – disabled delinking "other" year-in articles
| | ohc_regex(/([^-\d/:\.])@DD[-–]@MM[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Day @Month @YYYY'); |
| | ohc_regex(/(\| ?)@DD\/@MM\/@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY'); |
| | ohc_regex(/(\| ?)@DD\.@MM\.@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY'); |
| | // ohc_regex(/(\| ?)@DD[-–]@MM[-–]@YYNN(?=\s*\|)/gi, '$1@Day @Month @YYYY'); |
| | } |
|
| |
|
| //Identify surprise or 'Easter egg' diversions linking months to year or "year in" articles.
| | function ohc_remove_leading_zeroes() |
| ohc_regex(/\[\[\d{1,4}#[^|\]]+\|@Month\]\]/gi, "@LMonth"); | | { |
| ohc_regex(/\[\[@yyyy \w[^|\]]{3,12}\|@Year\]\]/gi, '@Year');
| | ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @LYear"); |
| | | ohc_regex(/(\D[^\w\/])@Month\s@ZD@th?(?=\W\D)/gi, "$1@LMonth @Day"); |
| // month and day piped
| | ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @LYear"); |
| ohc_regex(/\[\[@month[\s_]@day\|@MM-@DD\]\]/gi, "@MM-@DD"); | | ohc_regex(/(\D[^\w\/])@ZD@th?\s@Month(?=\W\D)/gi, "$1@Day @LMonth"); |
| ohc_regex(/\[\[@month[\s_]@day\|([^\]]{1,30})\]\]/gi, "$1"); | |
| ohc_regex(/\[\[@day(?:\s|_|@th )(?:of[\s_]|)?@month\|([^\]]{1,30})\]\]/gi, "$1"); | |
| | |
| //years piped
| |
| regex(/\[\[\d{1,4}\|([^\]]{1,30})\]\]/gi, '$1');
| |
| } | | } |
|
| |
|
| function ohc_fix_common_errors() | | function ohc_delink_dates() |
| { | | { |
| ohc_regex(/(\d)<sup>@th<\/sup>/gi, '$1th'); | | //add missing space between wikilinks |
| // remove dashbot comment from dates
| | regex(/(\]\])(\[\[)/gi, '$1 $2'); //remove (?!file:) to ensure a space between all links |
| regex(/<!-- ?DASHBot ?-->/gi, ''); | | |
| ohc_regex(/(\|\s*(?:date|year)\s*=)\s*c(?:irca|a\.)?\s?((?:@day |)@month @year)(?=[\s\n]*[<|}])/gi, '$1c. $2'); //add space
| | // rem redundant quote marks and parentheses |
| //common cs1 errors | | regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'\'([^|}\[\]]*)\'\'\'(?=\s*[|}])/gi, "$1$2"); |
| regex(/(\|\s*(?:date|year)\s*=)\s*(1[7-9]\d|20[0-1])\?(?=[\s\n]*[<|}])/gi, '$1c. $20'); | | regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\'\'([^|}\[\]]*)\'\'(?=\s*[|}])/gi, "$1$2"); |
| regex(/(\|\s*(?:date|year)\s*=\s*(1[7-9])\d{2})[-–](\d{2})(?=[\s\n]*[<|}])/gi, '$1–$2$3');
| | regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\"([^|}\[\]]*)\"(?=\s*[|}])/gi, "$1$2"); |
| // regex(/(\|\s*(?:date|year)\s*=\s*(20)[0-1]\d)[-–]([0-2]\d)(?=[\s\n]*[<|}])/gi, '$1–$2$3');
| | regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)\(([^|}\[\]]*)\)(?=\s*[|}])/gi, "$1$2"); |
| regex(/(\|\s*(?:date|year)\s*=\s*)@YYYY\s*[-–/]\s*@YYYY(?=[\s\n]*[<|}])/gi, '$1@YYYY1–@YYYY2'); //common cs1 error | |
| regex(/(\|\s*(?:date)\s*=)\s*s(pring|ummer),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1S$2 $3'); //common cs1 error
| |
| regex(/(\|\s*(?:date)\s*=)\s*a(utumn),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1A$2 $3'); //common cs1 error
| |
| regex(/(\|\s*(?:date)\s*=)\s*f(all),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1F$2 $3'); //common cs1 error
| |
| regex(/(\|\s*(?:date)\s*=)\s*w(inter),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1W$2 $3'); //common cs1 error | |
| ohc_regex(/(\|\s*access-?date\s*=)\s*(@month @year)(?=[\s\n]*[<|}])/gi, '$11 $2'); //common cs1 error
| |
| // ohc_regex(/(\|\s*date\s*=\s*)@year\?(?=[\s\n]*[<|}])/gi, '$1@Year'); //common cs1 error
| |
| // ohc_regex(/(\|\s*(?:date|year)\s*=)\s*@year\?(?=[\s\n]*[<|}])/gi, '$1c. @Year'); //common cs1 error
| |
| // ohc_regex(/(\|\s*(?:date|year)\s*=)\s*(@month @year)\?(?=[\s\n]*[<|}])/gi, '$1c. $2'); //common cs1 error
| |
| ohc_regex(/(\|\s*access-?date\s*=)\s*@month @day, (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001) | |
| ohc_regex(/(\|\s*access-?date\s*=)\s*@day @month.? (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001)
| |
| ohc_regex(/(\|\s*access-?date\s*=)\s*31( (?:এপ্রিল|জুন|সেপ্টেম্বর|নভেম্বর) @year)(?=[\s\n]*[<|}])/gi, '$130$2'); //rem nonsense access date (short months)
| |
| ohc_regex(/(\|\s*access-?date\s*=)\s*29( ফেব্রুয়ারি (?:200[1235679]|201[1345789]))(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access date 29 ফেব্রুয়ারি (non-leap year)
| |
| ohc_regex(/(\|\s*access-?date\s*=)\s*(?:3[01])( ফেব্রুয়ারি @yyyy)(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access dates ফেব্রুয়ারি
| |
| regex(/(\|\s*access-?date\s*=)\s*(\d{4})(?=[\s\n]*[<|}])/gi, ''); //common cs1 error
| |
|
| |
| //month+day+year pseudo-ISO dates
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*@dd)-@Mon-@YYYY/gi, "$1 @FullMonth @YYYY");
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@YYYY-@DD-@Mon/gi, "$1 @DD @FullMonth @YYYY");
| |
|
| |
|
| regex(/(\|\s*(?:date|year)\s*=)\s*(?:(?:date |)unknown|(?:not? |non-|un)date[ds])(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error | | //delink unpiped dates |
| regex(/(\|\s*(?:date|year)\s*=)\s*n\.?d(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error | | //delink full dates |
| regex(/(\|\s*)year(\s*=\s*)(?=n\.?d\.)(?=[\s\n]*[<|}])/gi, '$1date$2'); //common cs1 error
| | ohc_regex(/\[\[@Day[\s_](?:of[\s_])?@Month(?:\]\]\s?\[\[\| )@YYYY\]\]/gi, "@Day @LMonth @YYYY"); |
| | ohc_regex(/\[\[@Month (?:the\s)?@Day(?:\]\],? \[\[|, )@YYYY\]\]/gi, "@LMonth @Day, @YYYY"); |
|
| |
|
| // remove parasitic metadata - days of the week/descriptives
| | //delink yyyy-mm-dd dates |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:[^|}\d]*|)@Day\s+@Month\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Day @Month @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020 | | ohc_regex(/\[\[@YYYY(?:\]\]-\[\[|-)@MM-@DD\]\]/gi, "@YYYY-@MM-@DD"); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)[^|}]*@Month\s+@Day,\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Month @Day, @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020
| | ohc_regex(/@YYYY-\[\[@MM-@DD\]\]/gi, "@YYYY-@MM-@DD"); |
| // ohc_regex(/(\|\s*date\s*=\s*)(?:[^|}–<]*\D|)@Day\s+@Month\s+@YYYY ?– ?@Day\s+@Month\s+@YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Day1 @Mon1 @Year1 – @Day2 @Mon2 @Year2");
| |
| // ohc_regex(/(\|\s*date\s*=\s*)[^|}–<]*@Month\s+@Day,\s+@YYYY ?– ?@Month @Day, @YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Mon1 @Day1, @Year1 – @@Mon2 Day2, @Year2");
| |
| // regex(/(\|\s*author\s*=\s*)(?:posted|published)(?: by\b| on\b|)[\s:](?=\w)/gi, "$1");
| |
| // regex(/(\|\s*(?:date|archive-?date|access-?date|author|year)\s*=\s*)(?:accessed|retrieved|entered|posted|published|(?:last |)updated?|©)(?: by\b| on\b|)[\s:]*(?=\w)/gi, "$1");
| |
| regex(/(\|\s*(?:author|first|last)\s*=\s*)(?:by\b|on\b)[\s:]*(?=\w)/gi, "$1");
| |
| regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day,?)\s/gi, "$1");
| |
| regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:Mon|Tues?|Wed|Thur?|Fri|Sat)[\.,]?\s/gi, "$1"); //<!-- rem "Sun" - false positives -->
| |
|
| |
|
| // remove deprecated parameters (|day= and |month)
| | //underscore and nbsp in linked dates |
| ohc_regex(/(\|\s*)day(?:\s*=\s*)@DD ?\| ?month(?:\s*=\s*)@Month ?\| ?year(?:\s*=\s*)@YYYY(?=[|}\s])/gi, '$1date=@Day @Month @Year');
| | ohc_regex(/\[\[@DD@th?(?:\s|_| )@Month\]\]/gi, "@Day @LMonth"); |
| ohc_regex(/(\|\s*)year(?:\s*=\s*)@YYYY ?\| ?month(?:\s*=\s*)@Month ?\| ?day(?:\s*=\s*)@DD(?=[|}\s])/gi, '$1date=@Month @Day, @Year');
| | ohc_regex(/\[\[@Month(?:\s|_| )@DD@th?\]\]@th?/gi, "@LMonth @Day"); //consolidated regex with flexible removal of ordinal simple date |
|
| | ohc_regex(/\[\[@Day @Month\]\]/gi, "@Day @LMonth"); |
| // typos | | ohc_regex(/\[\[@Month @YYYY\]\]/gi, "@LMonth @YYYY"); |
| ohc_regex(/(date *= *)@Day @Month ?@th/gi, '$1@Day @Month'); | | ohc_regex(/\[\[@YYYY\]\]/gi, "@YYYY"); |
| ohc_regex(/(date *= *)@Day @Month\w(?= \d{3,4})/gi, '$1@Day @Month'); | |
|
| |
|
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary'); | | //remove leading zero and links from linked date |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )J[anu]{3,5}r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি');
| | ohc_regex(/\[\[@Month(?:[ _]| )@ZD@th\]\]/gi, "@LMonth @Day"); |
| ohc_regex(/(date *= *(?:[12]?\d) )Febua?r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি'); | | ohc_regex(/\[\[@ZD@th(?:[ _]| )@Month\]\]/gi, "@Day @LMonth"); |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )M\w{2,3}ch(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30) )A[bpv\[]\w{2,3}l\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )Ma[tui](?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে'); | |
| ohc_regex(/(date *= *(?:[12]?\d|30) )J\wn\w(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30) )J\w{1,2}e(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )জুলাই\w{1,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )A[oug]{2,3}\w{1,4}t(?:\w|us)?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30) )S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )O\w{0,2}t\w{1,3}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30) )[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর');
| |
| ohc_regex(/(date *= *(?:[12]?\d|30|31) )D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর');
| |
|
| |
|
| ohc_regex(/(date *= *)@Month\w(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1@Month'); //rem stray digit at the end of year string | | // remove nowrap template from dm and md dates |
|
| | ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@DD(?:[ _]| )@Month)( @yyyy|)\}\}/gi, '$1@DD @LMonth$2'); |
| ohc_regex(/(date *= *)(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary');
| | ohc_regex(/(date[ ]*=[ ]*)\{\{(?:j|no ?(?:break|wrap))\|(?:@Month(?:[ _]| )@DD)( @yyyy|)\}\}/gi, '$1@LMonth @DD$2'); |
| ohc_regex(/(date *= *)J[anu]{3,5}r\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি'); | | |
| ohc_regex(/(date *= *)Febua?r\w{0,2}(?=(?: (?:[12]?\d),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি');
| | //delink single dm or 'dth the m' |
| ohc_regex(/(date *= *)M\w{2,3}ch(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ'); | | ohc_regex(/(?:the\s)?\[\[@Day@th?[\s_](?:of[\s_])?@Month\]\]/gi, "@Day @LMonth"); |
| ohc_regex(/(date *= *)A[bpv\[]\w{2,3}l\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল'); | | //delink single md or 'm the dth' |
| ohc_regex(/(date *= *)Ma[tui](?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে');
| | ohc_regex(/\[\[@Month[\s_](?:the[\s_])?@Day@th?\]\](?=\W)/gi, "@LMonth @Day"); |
| ohc_regex(/(date *= *)J\wn\w(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); | | |
| ohc_regex(/(date *= *)J\w{1,2}e(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); | | //month+day piped |
| ohc_regex(/(date *= *)জুলাই\w{1,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই');
| | ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|((?:@month |)@day)@th?\]\]/gi, "$1"); |
| ohc_regex(/(date *= *)A[oug]{2,3}\w{1,4}t(?:\w|us)?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট');
| | ohc_regex(/\[\[(?:@dd@th?[\s_](?:of[\s_])?@month|@month[\s_]@dd@th?)\|@Day@th?[\s_](@month|)\]\]/gi, "@Day $1"); |
| ohc_regex(/(date *= *)(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember'); | |
| ohc_regex(/(date *= *)S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর');
| |
| ohc_regex(/(date *= *)O\w{0,2}t\w{1,3}[er]{2,3}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর'); | |
| ohc_regex(/(date *= *)[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর');
| |
| ohc_regex(/(date *= *)D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর');
| |
|
| |
|
| //insert comma to separate date from army unit | | // ohc_regex(/\[\[@month @dd(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1"); |
| ohc_regex(/@FullMonth ((?:the |)\d\d*@th (?:Air(?:borne|)|Arm(?:ou?red|y)|Artillery|Battalion|Brigade|Co(?:mpan|)y|Division|Fleet|Group|Infantry|Land|Panzer|Regiment|Squadron|Sqn)\b)/g, "@Month, $1");
| | // ohc_regex(/\[\[@dd @month(?:#[^|]+|)\|([^|\]]+)@th?\]\]/gi, "$1"); |
| | ohc_regex(/\[\[@month @yyyy(?:#[^|]+|)\|([^|\]]+)\]\]/gi, "$1"); |
|
| |
|
| // remove parasitic metadata - time | | //month+day+year pseudo-ISO dates |
| ohc_regex(/(\|\s*\w*date\s*=\s*@yyyy-@mm-@dd)\s?(?:T[0-2]\d:[0-5]\d:[0-5]\d(?:\s*| |)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))(?=\s*[|}])/g, "$1"); | | ohc_regex(/\[\[@Month @DD\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY"); |
| ohc_regex(/(\|\s*\w*date\s*=\s*@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
| | ohc_regex(/\[\[@DD\s@Month\|\d\d-\d\d\]\]-(?:\[\[)?(?:@yyyy[^|]*\|)?@YYYY(?:\]\])/gi, "@Day @LMonth @YYYY"); |
| ohc_regex(/(\|\s*\w*date\s*=\s*@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
| |
| ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1"); | |
| ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1");
| |
| ohc_regex(/(\|\s*\w*date\s*=[^:|}]*)\s?(?:T?[0-2]\d:[0-5]\d:[0-5]\d(?:\s*| |)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))/g, "$1");
| |
|
| |
|
| // add back spaces or comma or remove other single artefact after date string | | //'[[month day|xxXxx]]Xyyyy ' to 'month day, year' |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Day\s{,2}@Month\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Day @Month @YYYY$2");
| | ohc_regex(/\[\[@Month\s@Day\|@dd.@dd\]\].@YYYY/gi, "@LMonth @Day, @YYYY"); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Month\s{,2}@Day,?\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Month @Day, @YYYY$2"); | | //'[[day month|xxXxx]]Xyyyy' to 'day month year' |
| //long-hand palliative for observed failure to insert spaces
| | ohc_regex(/\[\[@Day\s@Month\|@dd.@dd\]\].@YYYY/gi, "@Day @LMonth @YYYY"); |
| ohc_regex(/(\|\s*(?:archive|access|air)-?date\s*=\s*)(?:on |)([0-2]?\d|30|31)\s*(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|সেপ্টেম্বর|অক্টোবর|নভেম্বর|ডিসেম্বর)\s*((?:19\d|20[0-1])\d\s?)[^|{}\s<>]*(?=\s*[|}])/gi, "$1$2 $3 $4");
| |
| // ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Day\s*@Month\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Day @Month @YYYY$2");
| |
| // ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Month\s*@Day,\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Month @Day, @YYYY$2");
| |
|
| |
|
| //remove extraneous bracket //from Batty | | // century |
| ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:archive-?|access-?|publication-?)?date\s*=\s*)([\w\s-]+)\](?=\s*[\|}<])/gi, '{{$1$2$3$4'); | | regex(/\[\[((?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first[\s\-])centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?)\]\]/gi, '$1'); |
| | regex(/\[\[(?:first|second|third|(?:four|fif|six|seven|eigh|nin|ten|eleven|twelf|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twentie)th|twenty[\s\-]first)[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE))?\|([^\]]{1,30})\]\]/gi, '$1'); |
| | regex(/\[\[(\d{1,2}(?:st|[nr]d|th))[\s\-_](centur(?:y|ies))(\s(?:AD|BC|CE|BCE)|)\]\]/gi, '$1 $2$3'); |
| | ohc_regex(/\[\[\d{1,2}@th[\s\-_]centur(?:y|ies)(?:\s(?:AD|BC|CE|BCE)|)\|([^\]]{1,30})\]\]/gi, '$1'); |
|
| |
|
| //fix bda template redirect | | // months |
| // regex(/\{\{bda\|([^}]+)\}\}/gi, '{{birth date and age|$1}}');
| | ohc_regex(/\[\[@Month\]\]/gi, "@LMonth"); |
| // regex(/\{\{dda\|([^}]+)\}\}/gi, '{{death date and age|$1}}');
| | ohc_regex(/\[\[@FullMonth\|([^\]]{1,30})\]\]/gi, "$1"); |
|
| |
|
| //zap redundant {{date}}, {{accessdate}} {{retrieved}}, {{monthname}} and {{#dateformat}} | | // decades and years |
| // regex(/({{(?:end|start)[-–]date)\|df=y(?:es|)/gi, "$1"); //rem deprecated parameter - disabled: doesn't work here, so ejected to the formatting script
| | regex(/(\d{1,3}0)[‘`´’′]?s/g, '$1s'); |
| ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:[^\}]*)}}/gi, "@Day @Month @YYYY"); | | regex(/\[\[(\d{1,3}0)\'?s\]\]/g, '$1s'); |
| regex(/{{#formatdate:([^}]+)}}/gi, "$1"); | | regex(/\[\[\d{1,3}0\'?s?\|([^\]]{1,30})\]\]/g, '$1'); |
| regex(/\{\{#dateformat:([^}\|]+)(?:\|dmy|\|mdy)?\}\}/gi, '$1'); | | regex(/\[\[(\d{1,3}0)\'?(s)?\s(AD|BC|CE|BCE)\]\]/gi, '$1$2 $3'); |
| // ohc_regex(/(date[ ]*=[ ]*)\{\{(?:Start|End) ?date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\|@DD(?:\|df=y(?:es|)|)\}\}/gi, '$1@Month @DD, @YYYY'); //stripping start/end template notes inside "|date=" parameter (line 72)
| | regex(/\[\[(\d{1,4}[\s_]?)(AD|BC|CE|BCE)\]\]/gi, '$1$2'); |
| ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:\|(?:[dmy]{3}|iso)|)}}/gi, "@Day @Month @YYYY"); | | regex(/\[\[(AD|BC|CE|BCE)([\s_]?)(\d{1,4})\]\]/gi, '$1$2$3'); |
| ohc_regex(/\{\{date\|@YYYY-@MM-@DD\}\}/gi, "@Day @Month @YYYY");
| | ohc_regex(/([-–])\[\[\s?@yyyy\s?\|\s?(\d{2,4})\s?\]\]/gi, '$1$2'); //piped year |
| ohc_regex(/\{\{date\|(@DD[\-\s]@Mon|@Mon[\-\s]@DD)\}\}/gi, "@Day @Month"); | | regex(/\[\[([12]\d{3}|[1-9]\d{0,2})\]\]/gi, '$1'); |
| regex(/\{\{date\|([^}\|]+)(?:\|l?(?:[dmy]{3}|iso|none|link))?\}\}/gi, '$1');
| | regex(/\[\[\d{1,3}0\'?s?\s(?:AD|BC|CE|BCE)\|([^\]]{1,30})\]\]/gi, '$1'); |
| ohc_regex(/[ ]*\{\{accessdate\|@YYYY-@MM-@DD[ ]*\}\}/gi, " Retrieved @YYYY-@MM-@DD"); | | regex(/\[\[\d{1,3}0\'?s?\s\(decade\)\|([^\]]{1,30})\]\]/gi, '$1'); |
| ohc_regex(/[ ]*\{\{retrieved[ ]*\|[ ]accessdate=([\-\w, ]*)\}\}/gi, " Retrieved $1");
| |
| // ohc_regex(/(date[ ]*=[ ]*|\w{2,}[ ]*)\{\{(?:start|end).date[^|}]*(?:\|df=y(?:es|)|)\|@YYYY(?:\|df=y(?:es|)|)\}\}/gi, '$1@YYYY'); //stripping start/end template (disabling to placate Pigsonthewing)
| |
| // ohc_regex(/\{\{(?:Start|End) date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\}\}/gi, '@Month @YYYY') //stripping start/end template notes
| |
| // ohc_regex(/<!--(?:Use)? \{\{(?:Start|End) date\|@YYYY\|@MM\|@DD\}\} -->/gi, ''); //stripping start/end template notes
| |
| ohc_regex(/(\{\{MONTHNAME\|@MM\}\})/gi, "@Month")
| |
|
| |
|
| //expand one and two-digit years in ranges | | //month+year |
| regex(/(\()@Month @YYYY[-–]@Month @YYNN(\))/gi, '$1@Month1 @YYYY1 – @Month2 @YYYY2$2'); | | //Identify surprise or 'Easter egg' diversions linking month+years to year articles. Turn them into month+year links to be dealt with below |
| regex(/(\(1[789])(\d)(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4'); | | ohc_regex(/\[\[@yyyy in[^|\]]+\|@Day @Month @YYYY\]\]/gi, "@Day @LMonth @YYYY"); |
| regex(/(\(1[789])(\d)(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
| | ohc_regex(/\[\[@yyyy in[^|\]]+\|@Month @Day,? @YYYY\]\]/gi, "@LMonth @Day, @YYYY"); |
| regex(/(\(1[789])(\d)(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4'); | | ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month\s|)(@yyyy)\]\]/gi, "$1$2"); |
| regex(/(\(1[789])(\d)(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4');
| | ohc_regex(/\[\[@yyyy#[^|\]]+\|(@month|@yyyy)\]\]/gi, "$1"); |
| regex(/(\(1[789])(\d)(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4'); | | ohc_regex(/\[\[(@month\s@yyyy)\]\]/gi, "$1"); |
| regex(/(\(1[789])(\d)(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4');
| | ohc_regex(/\[\[@month\s@yyyy\|([^\]]{1,30})\]\]/gi, "$1"); |
| regex(/(\(1[789])(\d)(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4'); | | ohc_regex(/\[\[(?:List of |)Bollywood films of @yyyy\|@YYYY\]\](?= [^\[]{2}^B)/gi, "@YYYY"); |
| regex(/(\(1[789])(\d)(8)[-–](9\))/gi, '$1$2$3–$2$4');
| | |
| regex(/(\(20)([01])(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4'); | | ohc_regex(/(\[\[@yyyy[^|\]]+\|@yyyy)(\]\])( season)/gi, "$1$3$2"); |
| regex(/(\(20)([01])(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4');
| |
| regex(/(\(20)([01])(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4');
| |
| regex(/(\(20)([01])(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4'); | |
| regex(/(\(20)([01])(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4');
| |
| regex(/(\(20)([01])(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4'); | |
| regex(/(\(20)([01])(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4');
| |
| regex(/(\(20)([01])(8)[-–](9\))/gi, '$1$2$3–$2$4');
| |
|
| |
|
| ohc_regex(/(\W)@DD@th?, @DD@th?((?:[ ]| )(?:and|&|to|or)(?:[ ]| ))@DD@th?(?:\sof\s?)?([ ]| )@Month(?=\W)/gi, '$1@Day1, @Day2$2@Day3$3@LMonth'); | | //removed piped years when in full date (excepting disambiguated parentheses - updated 24/2/2012) |
| ohc_regex(/(\W)@DD@th?((?:[ ]| )(?:and|&|to|or)(?:[ ]| ))@DD@th?(?:\sof\s?|)([ ]| )@Month(?=\W)/gi, '$1@Day1$2@Day2$3@LMonth');
| | // ohc_regex(/\[\[[^|\]\(\)]{1,32}\|@YYYY\]\]/gi, '@Year'); // 23/6/2021 – disabled delinking "other" year-in articles |
| ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month,? @YYYY(?=\W\D)/g, '$1@Day @LMonth @YYYY');
| | |
| ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month(?=\W\D)/g, '$1@Day @LMonth'); | | //Identify surprise or 'Easter egg' diversions linking months to year or "year in" articles. |
| ohc_regex(/(\W)@Day@th?(?:\sof|)([ _]| |{{(?:break|nbsp)}})@Month(?=[^|\]\w])/gi, '$1@Day$2@LMonth'); | | ohc_regex(/\[\[\d{1,4}#[^|\]]+\|@Month\]\]/gi, "@LMonth"); |
| ohc_regex(/(\W)@Month\s(?:the\s)?@DD@th?,(?:\sthe\s)?(?: | )@DD@th?(\s(?:and|&|to|or)(?:[ _]| ))(?:the\s)?@DD@th?(?=[^|\]\w])/gi, '$1@LMonth @Day1, @Day2$2@Day3');
| | ohc_regex(/\[\[@yyyy \w[^|\]]{3,12}\|@Year\]\]/gi, '@Year'); |
| ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?:,?(?:[ _]| )|\sof\s)?(\d{3,4}\W\D)/gi, '$1$2 $3$4$5@Day, $6'); | |
| ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?=\W\D)/gi, '$1$2 $3$4$5@Day');
| |
| ohc_regex(/(\W)@Month([ _]| |{{(?:break|nbsp)}})(?:the\s)?@DD@th?,? @Year/gi, '$1@LMonth$2@Day, @Year');
| |
| ohc_regex(/(\W)@Month @Day(?:\sof|,|)([ _]| |{{(?:break|nbsp)}})@Year(?=[^|\]\w])/gi, '$1@Month @Day,$2@Year');
| |
|
| |
|
| // consolidating/amalgamating date fields | | // month and day piped |
| ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day)\s*\|[ ]*month=[ ]*(@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2 $3"); | | ohc_regex(/\[\[@month[\s_]@day\|@MM-@DD\]\]/gi, "@MM-@DD"); |
| ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day.?@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2"); | | ohc_regex(/\[\[@month[\s_]@day\|([^\]]{1,30})\]\]/gi, "$1"); |
| ohc_regex(/(\|[ ]*date[ ]*=[ ]*@month.?@day)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2"); | | ohc_regex(/\[\[@day(?:\s|_|@th )(?:of[\s_]|)?@month\|([^\]]{1,30})\]\]/gi, "$1"); |
|
| |
|
| // eliminating dates and time placed in author parameter | | //years piped |
| //removing artefacts from Indian news sites (TNN আগষ্ট 30, 2012, 05.46AM) | | regex(/\[\[\d{1,4}\|([^\]]{1,30})\]\]/gi, '$1'); |
| ohc_regex(/(\|\s*author\s*=\s*(?:[A-Z]{2,3}\b))(?:[^|}]*)\d{4}, [\d\.:]{4,5}( |)[AP]M IST(?=[ ]*\|)/g, '$1$2');
| | } |
| // ohc_regex(/(\|\s*author=(?:[^\[\]|{}]*))(TNN|PTI) @day @month @yyyy, [\d\.:]{4,5}( |)[AP]M IST(?=[ ]*\|)/g, '$1$2');
| |
|
| |
|
| ohc_regex(/(\|\s*author\s*=\s*)@month @day,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1"); | | function ohc_fix_common_errors() |
| ohc_regex(/(\|\s*author\s*=\s*)@day @month,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1"); | | { |
| ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@month @day,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1");
| | ohc_regex(/(\d)<sup>@th<\/sup>/gi, '$1th'); |
| ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@day @month,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1"); | | // remove dashbot comment from dates |
| ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@dd-@mm-@yyyy/gi, "$1"); | | regex(/<!-- ?DASHBot ?-->/gi, ''); |
| ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@YYYY-@MM-@DD ?/gi, "$1");
| | ohc_regex(/(\|\s*(?:date|year)\s*=)\s*c(?:irca|a\.)?\s?((?:@day |)@month @year)(?=[\s\n]*[<|}])/gi, '$1c. $2'); //add space |
| regex(/(\|\s*(?:date|archive-?date|access-?date|author)\s*=\s*(?:\w[\w\s]+)?)[0-2]\d:[0-5]\d(?:[ ]| )?(?:[ap]m|[ap]\.m\.|)(?: ?(?:[A-Z]{1,2}T|UTC)[\.,]?|)/gi, "$1"); | | //common cs1 errors |
| // ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)\s*[0-2]\d[\.:][0-5]\d(?:[\.:][0-5]\d|)/gi, "$1"); //let's see later if we need this | | regex(/(\|\s*(?:date|year)\s*=)\s*(1[7-9]\d|20[0-1])\?(?=[\s\n]*[<|}])/gi, '$1c. $20'); |
| | | regex(/(\|\s*(?:date|year)\s*=\s*(1[7-9])\d{2})[-–](\d{2})(?=[\s\n]*[<|}])/gi, '$1–$2$3'); |
| // eliminating mm-dd-yyyy dates
| | // regex(/(\|\s*(?:date|year)\s*=\s*(20)[0-1]\d)[-–]([0-2]\d)(?=[\s\n]*[<|}])/gi, '$1–$2$3'); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY"); | | regex(/(\|\s*(?:date|year)\s*=\s*)@YYYY\s*[-–/]\s*@YYYY(?=[\s\n]*[<|}])/gi, '$1@YYYY1–@YYYY2'); //common cs1 error |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Mon[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY");
| | regex(/(\|\s*(?:date)\s*=)\s*s(pring|ummer),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1S$2 $3'); //common cs1 error |
| ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Month $1, @YYYY");
| | regex(/(\|\s*(?:date)\s*=)\s*a(utumn),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1A$2 $3'); //common cs1 error |
| // ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY"); | | regex(/(\|\s*(?:date)\s*=)\s*f(all),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1F$2 $3'); //common cs1 error |
| | | regex(/(\|\s*(?:date)\s*=)\s*w(inter),?\s*((?:1[7-9]\d|20[0-1])\d)(?=[\s\n]*[<|}])/gi, '$1W$2 $3'); //common cs1 error |
| ohc_regex(/([ =|])@Mon[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | ohc_regex(/(\|\s*access-?date\s*=)\s*(@month @year)(?=[\s\n]*[<|}])/gi, '$11 $2'); //common cs1 error |
| ohc_regex(/([ =|])@Mon\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | // ohc_regex(/(\|\s*date\s*=\s*)@year\?(?=[\s\n]*[<|}])/gi, '$1@Year'); //common cs1 error |
| ohc_regex(/([ =|])@Mon\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | // ohc_regex(/(\|\s*(?:date|year)\s*=)\s*@year\?(?=[\s\n]*[<|}])/gi, '$1c. @Year'); //common cs1 error |
| ohc_regex(/([ =|])@Mon (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | // ohc_regex(/(\|\s*(?:date|year)\s*=)\s*(@month @year)\?(?=[\s\n]*[<|}])/gi, '$1c. $2'); //common cs1 error |
| ohc_regex(/([ =|])@MM[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | ohc_regex(/(\|\s*access-?date\s*=)\s*@month @day, (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001) |
| ohc_regex(/([ =|])@MM\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | ohc_regex(/(\|\s*access-?date\s*=)\s*@day @month.? (1[7-9]\d{2}|2000)(?=[\s\n]*[<|}])/gi, '$1'); //rem access date before Wikipedia (জানুয়ারি 2001) |
| ohc_regex(/([ =|])@MM\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | ohc_regex(/(\|\s*access-?date\s*=)\s*31( (?:এপ্রিল|জুন|সেপ্টেম্বর|নভেম্বর) @year)(?=[\s\n]*[<|}])/gi, '$130$2'); //rem nonsense access date (short months) |
| ohc_regex(/([ =|])@MM (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); | | ohc_regex(/(\|\s*access-?date\s*=)\s*29( ফেব্রুয়ারি (?:200[1235679]|201[1345789]))(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access date 29 ফেব্রুয়ারি (non-leap year) |
| | ohc_regex(/(\|\s*access-?date\s*=)\s*(?:3[01])( ফেব্রুয়ারি @yyyy)(?=[\s\n]*[<|}])/gi, '$128$2'); //rem nonsense access dates ফেব্রুয়ারি |
| | regex(/(\|\s*access-?date\s*=)\s*(\d{4})(?=[\s\n]*[<|}])/gi, ''); //common cs1 error |
| | |
| | //month+day+year pseudo-ISO dates |
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*@dd)-@Mon-@YYYY/gi, "$1 @FullMonth @YYYY"); |
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@YYYY-@DD-@Mon/gi, "$1 @DD @FullMonth @YYYY"); |
| | |
| | regex(/(\|\s*(?:date|year)\s*=)\s*(?:(?:date |)unknown|(?:not? |non-|un)date[ds])(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error |
| | regex(/(\|\s*(?:date|year)\s*=)\s*n\.?d(?=[\s\n]*[<|}])/gi, '$1n.d.'); //common cs1 error |
| | regex(/(\|\s*)year(\s*=\s*)(?=n\.?d\.)(?=[\s\n]*[<|}])/gi, '$1date$2'); //common cs1 error |
|
| |
|
| // eliminating dd-mm-yyyy dates (assumed default)
| | // remove parasitic metadata - days of the week/descriptives |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY"); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:[^|}\d]*|)@Day\s+@Month\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Day @Month @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020 |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Mon[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY"); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)[^|}]*@Month\s+@Day,\s+@YYYY((?:[a-z]\b|)\s?)[^|<}]*(?=[\s\n]*[<|}])/gi, "$1@Month @Day, @YYYY$2"); //rem negate "<", "hyphens" "dashes" 26/6/2020 |
| ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Day @Month @YYYY");
| | // ohc_regex(/(\|\s*date\s*=\s*)(?:[^|}–<]*\D|)@Day\s+@Month\s+@YYYY ?– ?@Day\s+@Month\s+@YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Day1 @Mon1 @Year1 – @Day2 @Mon2 @Year2"); |
| ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY");
| | // ohc_regex(/(\|\s*date\s*=\s*)[^|}–<]*@Month\s+@Day,\s+@YYYY ?– ?@Month @Day, @YYYY[^|}–<]*(?=[\s\n]*[<|}])/gi, "$1@Mon1 @Day1, @Year1 – @@Mon2 Day2, @Year2"); |
| ohc_regex(/([ =|])@DD[-–]@Mon[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
| | // regex(/(\|\s*author\s*=\s*)(?:posted|published)(?: by\b| on\b|)[\s:](?=\w)/gi, "$1"); |
| ohc_regex(/([ =|])@DD\/@Mon\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
| | // regex(/(\|\s*(?:date|archive-?date|access-?date|author|year)\s*=\s*)(?:accessed|retrieved|entered|posted|published|(?:last |)updated?|©)(?: by\b| on\b|)[\s:]*(?=\w)/gi, "$1"); |
| ohc_regex(/([ =|])@DD\.@Mon\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
| | regex(/(\|\s*(?:author|first|last)\s*=\s*)(?:by\b|on\b)[\s:]*(?=\w)/gi, "$1"); |
| ohc_regex(/([ =|])@DD @Mon @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
| | regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day,?)\s/gi, "$1"); |
| ohc_regex(/([ =|])@DD[-–]@MM[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
| | regex(/(\|\s*(?:date|archive-?date|access-?date|author|first|last)\s*=\s*)(?:Mon|Tues?|Wed|Thur?|Fri|Sat)[\.,]?\s/gi, "$1"); //<!-- rem "Sun" - false positives --> |
| ohc_regex(/([ =|])@DD\/@MM\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY");
| |
| ohc_regex(/([ =|])@DD\.@MM\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); | |
| ohc_regex(/([ =|])@DD @MM @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); | |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Month[-–\/\.=\s]@YYNN(?=\s*[|}\n])/gi, '$1@Day @Month @YYYY'); | |
|
| |
|
| //convert yyyy-dd-mm to yyyy-mm-dd | | // remove deprecated parameters (|day= and |month) |
| ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:publication|archive|access|air|)-?date\s*=\s*(?:1[0-9]|20)\d{2})[-/\.=\s](1[3-9]|2\d|3[01])[-/\.=\s](0?\d|1[0-2])(\s*[\|}<])/gi, '{{$1$2$3-$5-$4$6'); //from Batty
| | ohc_regex(/(\|\s*)day(?:\s*=\s*)@DD ?\| ?month(?:\s*=\s*)@Month ?\| ?year(?:\s*=\s*)@YYYY(?=[|}\s])/gi, '$1date=@Day @Month @Year'); |
| | ohc_regex(/(\|\s*)year(?:\s*=\s*)@YYYY ?\| ?month(?:\s*=\s*)@Month ?\| ?day(?:\s*=\s*)@DD(?=[|}\s])/gi, '$1date=@Month @Day, @Year'); |
| | |
| | // typos |
| | ohc_regex(/(date *= *)@Day @Month ?@th/gi, '$1@Day @Month'); |
| | ohc_regex(/(date *= *)@Day @Month\w(?= \d{3,4})/gi, '$1@Day @Month'); |
|
| |
|
| // eliminating other errant formats | | ohc_regex(/(date *= *(?:[12]?\d|30|31) )(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary'); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)([0-2]?\d|30|31) @Month \2,? @YYYY(?=\s*[|}])/gi, "$1$2 @Month @YYYY"); //repeated digits | | ohc_regex(/(date *= *(?:[12]?\d|30|31) )J[anu]{3,5}r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি'); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day ?@Month ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Day @Month 20$2"); | | ohc_regex(/(date *= *(?:[12]?\d) )Febua?r\w{0,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি'); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month ?@Day,? ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Month @Day, 20$2"); | | ohc_regex(/(date *= *(?:[12]?\d|30|31) )M\w{2,3}ch(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30) )A[bpv\[]\w{2,3}l\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30|31) )Ma[tui](?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30) )J\wn\w(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30) )J\w{1,2}e(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30|31) )জুলাই\w{1,2}(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30|31) )A[oug]{2,3}\w{1,4}t(?:\w|us)?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30|31) )(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30) )S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30|31) )O\w{0,2}t\w{1,3}[er]{2,3}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30) )[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর'); |
| | ohc_regex(/(date *= *(?:[12]?\d|30|31) )D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?= (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর'); |
|
| |
|
| ohc_regex(/([ ]\()@DD-@MM-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2'); | | ohc_regex(/(date *= *)@Month\w(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1@Month'); //rem stray digit at the end of year string |
| ohc_regex(/([ ]\()@DD-@Month-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2'); | | |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@Month, @DD, @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); | | ohc_regex(/(date *= *)(জানুয়ারি|Febr)[\w ]?[aur]{3,4}\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2uary'); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@DD[\.,] @Month,? @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); | | ohc_regex(/(date *= *)J[anu]{3,5}r\w{0,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জানুয়ারি'); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month @DD(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); | | ohc_regex(/(date *= *)Febua?r\w{0,2}(?=(?: (?:[12]?\d),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ফেব্রুয়ারি'); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @DD @Month(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); | | ohc_regex(/(date *= *)M\w{2,3}ch(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মার্চ'); |
| ohc_regex(/[ ]\(@YYYY,? @Month @DD\)/gi, " (@Day @Month @YYYY)"); | | ohc_regex(/(date *= *)A[bpv\[]\w{2,3}l\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1এপ্রিল'); |
| ohc_regex(/[ ]\(@YYYY @MM @DD\)/gi, " (@Day @Month @YYYY)"); | | ohc_regex(/(date *= *)Ma[tui](?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1মে'); |
| ohc_regex(/[ ]\(@YYYY, @DD @Month\)/gi, " (@Day @Month @YYYY)"); | | ohc_regex(/(date *= *)J\wn\w(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month(?=\s*[|}])/gi, "$1@Month @YYYY"); | | ohc_regex(/(date *= *)J\w{1,2}e(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুন'); |
| ohc_regex(/[ ]\(@YYYY, @Month\)/gi, " (@Month @YYYY)"); | | ohc_regex(/(date *= *)জুলাই\w{1,2}(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1জুলাই'); |
| ohc_regex(/[ ]\(@Mon@YYYY\)/gi, " (@Mon @YYYY)"); | | ohc_regex(/(date *= *)A[oug]{2,3}\w{1,4}t(?:\w|us)?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1আগষ্ট'); |
| | ohc_regex(/(date *= *)(সেপ্টেম্বর|নভেম্বর|ডিসেম্বর)\w{2,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1$2ember'); |
| | ohc_regex(/(date *= *)S\w{0,2}p[ \[]?\w{2,5}[er]{2,3}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1সেপ্টেম্বর'); |
| | ohc_regex(/(date *= *)O\w{0,2}t\w{1,3}[er]{2,3}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1অক্টোবর'); |
| | ohc_regex(/(date *= *)[MN]\w{1,2}[bv] ?\w{1,3}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1নভেম্বর'); |
| | ohc_regex(/(date *= *)D[ie]?[cs] ?\w{1,4}b[er]{1,2}\w?(?=(?: (?:[12]?\d|30|31),?|) (?:1[6-9]\d|20[01])\d\b)/gi, '$1ডিসেম্বর'); |
|
| |
|
| //CS1 errors ISO-like dates (too few or too many digits)
| | //insert comma to separate date from army unit |
| ohc_regex(/(date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][–—‐]\[\[|[–—‐])@MM[\-–—‐]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes | | ohc_regex(/@FullMonth ((?:the |)\d\d*@th (?:Air(?:borne|)|Arm(?:ou?red|y)|Artillery|Battalion|Brigade|Co(?:mpan|)y|Division|Fleet|Group|Infantry|Land|Panzer|Regiment|Squadron|Sqn)\b)/g, "@Month, $1"); |
| ohc_regex(/(\|\s*access-?date\s*=)\s*@YYYY-0[–—]@DD(?=\s*[|}])/gi, ""); //rem nonsense access date
| |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[-–—]@MM[-–—]@DD(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes
| |
| // ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[\-–—‐]@MM(?=\s*[|}])/gi, "$1@Month @YYYY"); //transform "yyyy-mm" to "month year"
| |
| ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[–—]@MM[–—]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3");
| |
| ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-]@MM[-]([1-9])([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2$3 @Month @YYYY$4");
| |
|
| |
|
| // spaces and commas between month and year | | // remove parasitic metadata - time |
| ohc_regex(/@Month(?:,?|\s+of|)(\s| )@YYYY(?=\D)/gi, "@LMonth$1@YYYY"); | | ohc_regex(/(\|\s*\w*date\s*=\s*@yyyy-@mm-@dd)\s?(?:T[0-2]\d:[0-5]\d:[0-5]\d(?:\s*| |)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))(?=\s*[|}])/g, "$1"); |
| | | ohc_regex(/(\|\s*\w*date\s*=\s*@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1"); |
| // fix month names (capitalize, remove dots) | | ohc_regex(/(\|\s*\w*date\s*=\s*@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1"); |
| ohc_regex(/(\W)@DD\s@FullMonth(\s+|\s*,)/gi, "$1@Day @FullMonth$2"); | | ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@month @day,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1"); |
| ohc_regex(/(\W)@DD\s@Mon(\s+|\s*,)/gi, "$1@Day @Mon$2"); | | ohc_regex(/(\|\s*\w*date\s*=\s*\w[\w\s]+@day @month,? @yyyy)\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|))(?=\|)/g, "$1"); |
| ohc_regex(/(\W)@FullMonth\s@DD(\s+|\s*,)/gi, "$1@FullMonth @Day$2"); | | ohc_regex(/(\|\s*\w*date\s*=[^:|}]*)\s?(?:T?[0-2]\d:[0-5]\d:[0-5]\d(?:\s*| |)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|Z))/g, "$1"); |
| ohc_regex(/(\W)@Mon\s@DD(\s+|\s*,)/gi, "$1@Mon @Day$2"); | | |
| regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?=[ ]*(=|BC|AD|CE))/g, '$1c$2'); | | // add back spaces or comma or remove other single artefact after date string |
| // regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?![ \-][A-Z]\w*|''|")/g, '$1c$2'); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Day\s{,2}@Month\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Day @Month @YYYY$2"); |
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:on |)@Month\s{,2}@Day,?\s{,2}@YYYY[^a-z{}]?(?=\s*[|}\n])/gi, "$1@Month @Day, @YYYY$2"); |
| | //long-hand palliative for observed failure to insert spaces |
| | ohc_regex(/(\|\s*(?:archive|access|air)-?date\s*=\s*)(?:on |)([0-2]?\d|30|31)\s*(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|সেপ্টেম্বর|অক্টোবর|নভেম্বর|ডিসেম্বর)\s*((?:19\d|20[0-1])\d\s?)[^|{}\s<>]*(?=\s*[|}])/gi, "$1$2 $3 $4"); |
| | // ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Day\s*@Month\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Day @Month @YYYY$2"); |
| | // ohc_regex(/(\|\s*(?:publication|)-?date\s*=\s*)(?:on |)@Month\s*@Day,\s*@YYYY([a-z]\s?|\s?)\w*[^|{}<>]*(?=[|}])/gi, "$1@Month @Day, @YYYY$2"); |
|
| |
|
| //spaces and commas - in date formats
| | //remove extraneous bracket //from Batty |
| ohc_regex(/(\D\W\[?\[?@dd)[ ]+(@month)(\]\])?[ ]*,[ ]*(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1 $2$3 $4"); | | ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:archive-?|access-?|publication-?)?date\s*=\s*)([\w\s-]+)\](?=\s*[\|}<])/gi, '{{$1$2$3$4'); |
| ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)(?:[ ]*,[ ]*)(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");
| |
| ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)[ ]+(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5");
| |
|
| |
|
| ohc_regex(/(@month)(?:, | of )(@yyyy\w)/gi, "$1 $2"); //repeat after delinking | | //fix bda template redirect |
| | // regex(/\{\{bda\|([^}]+)\}\}/gi, '{{birth date and age|$1}}'); |
| | // regex(/\{\{dda\|([^}]+)\}\}/gi, '{{death date and age|$1}}'); |
|
| |
|
| // spaces and commas - md-md and dm-dm date ranges | | //zap redundant {{date}}, {{accessdate}} {{retrieved}}, {{monthname}} and {{#dateformat}} |
| ohc_regex(/(\D\W)@Month\s@DD( |\s)(?:[-–—]|&[mn]dash;)(?: |\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1$2– @LMonth2 @Day2"); | | // regex(/({{(?:end|start)[-–]date)\|df=y(?:es|)/gi, "$1"); //rem deprecated parameter - disabled: doesn't work here, so ejected to the formatting script |
| ohc_regex(/(\D\W)@Month\s@DD(?:[-–—]|&[mn]dash;)(?: |\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1 – @LMonth2 @Day2"); | | ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:[^\}]*)}}/gi, "@Day @Month @YYYY"); |
| ohc_regex(/(\D\W)@DD\s@Month( |\s)(?:[-–—]|&[mn]dash;)(?: |\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1$2– @Day2 @LMonth2"); | | regex(/{{#formatdate:([^}]+)}}/gi, "$1"); |
| ohc_regex(/(\D\W)@DD\s@Month(?:[-–—]|&[mn]dash;)(?: |\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1 – @Day2 @LMonth2");
| | regex(/\{\{#dateformat:([^}\|]+)(?:\|dmy|\|mdy)?\}\}/gi, '$1'); |
| | // ohc_regex(/(date[ ]*=[ ]*)\{\{(?:Start|End) ?date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\|@DD(?:\|df=y(?:es|)|)\}\}/gi, '$1@Month @DD, @YYYY'); //stripping start/end template notes inside "|date=" parameter (line 72) |
| | ohc_regex(/{{#formatdate:@YYYY-@MM-@DD(?:\|(?:[dmy]{3}|iso)|)}}/gi, "@Day @Month @YYYY"); |
| | ohc_regex(/\{\{date\|@YYYY-@MM-@DD\}\}/gi, "@Day @Month @YYYY"); |
| | ohc_regex(/\{\{date\|(@DD[\-\s]@Mon|@Mon[\-\s]@DD)\}\}/gi, "@Day @Month"); |
| | regex(/\{\{date\|([^}\|]+)(?:\|l?(?:[dmy]{3}|iso|none|link))?\}\}/gi, '$1'); |
| | ohc_regex(/[ ]*\{\{accessdate\|@YYYY-@MM-@DD[ ]*\}\}/gi, " Retrieved @YYYY-@MM-@DD"); |
| | ohc_regex(/[ ]*\{\{retrieved[ ]*\|[ ]accessdate=([\-\w, ]*)\}\}/gi, " Retrieved $1"); |
| | // ohc_regex(/(date[ ]*=[ ]*|\w{2,}[ ]*)\{\{(?:start|end).date[^|}]*(?:\|df=y(?:es|)|)\|@YYYY(?:\|df=y(?:es|)|)\}\}/gi, '$1@YYYY'); //stripping start/end template (disabling to placate Pigsonthewing) |
| | // ohc_regex(/\{\{(?:Start|End) date(?:\|df=y(?:es|)|)\|@YYYY\|@MM\}\}/gi, '@Month @YYYY') //stripping start/end template notes |
| | // ohc_regex(/<!--(?:Use)? \{\{(?:Start|End) date\|@YYYY\|@MM\|@DD\}\} -->/gi, ''); //stripping start/end template notes |
| | ohc_regex(/(\{\{MONTHNAME\|@MM\}\})/gi, "@Month") |
|
| |
|
| // spaces and commas - d-dm and md-d date ranges
| | //expand one and two-digit years in ranges |
| ohc_regex(/(\D\W)@Month(\s| )@DD@th?(?:(?:\s*| |)[-–](?:\s*| |))@DD@th?(?=\W\D)/gi, "$1@LMonth1$2@Day1–@Day2"); | | regex(/(\()@Month @YYYY[-–]@Month @YYNN(\))/gi, '$1@Month1 @YYYY1 – @Month2 @YYYY2$2'); |
| ohc_regex(/(\D\W)@DD@th?(?:(?:\s*| |)[-–](?:\s*| |))@DD@th?(\s| )@Month(?=\W\D)/gi, "$1@Day1–@Day2$2@LMonth1"); | | regex(/(\(1[789])(\d)(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4'); |
| | | regex(/(\(1[789])(\d)(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4'); |
| // spaces and commas between month and year (again) | | regex(/(\(1[789])(\d)(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4'); |
| ohc_regex(/@Month(?:,\s+|\s+of\s+)@YYYY(\w)/gi, "@LMonth @YYYY$1"); | | regex(/(\(1[789])(\d)(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4'); |
| }
| | regex(/(\(1[789])(\d)(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(1[789])(\d)(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(1[789])(\d)(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(1[789])(\d)(8)[-–](9\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(1)[-–]([2-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(2)[-–]([3-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(3)[-–]([4-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(4)[-–]([5-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(5)[-–]([6-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(6)[-–]([7-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(7)[-–]([8-9]\))/gi, '$1$2$3–$2$4'); |
| | regex(/(\(20)([01])(8)[-–](9\))/gi, '$1$2$3–$2$4'); |
|
| |
|
| /** ------------------------------------------------------------------------- */ | | ohc_regex(/(\W)@DD@th?, @DD@th?((?:[ ]| )(?:and|&|to|or)(?:[ ]| ))@DD@th?(?:\sof\s?)?([ ]| )@Month(?=\W)/gi, '$1@Day1, @Day2$2@Day3$3@LMonth'); |
| /// ISO to long format | | ohc_regex(/(\W)@DD@th?((?:[ ]| )(?:and|&|to|or)(?:[ ]| ))@DD@th?(?:\sof\s?|)([ ]| )@Month(?=\W)/gi, '$1@Day1$2@Day2$3@LMonth'); |
| | ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month,? @YYYY(?=\W\D)/g, '$1@Day @LMonth @YYYY'); |
| | ohc_regex(/(\W)the @DD@th(?:\sof|)\s@Month(?=\W\D)/g, '$1@Day @LMonth'); |
| | ohc_regex(/(\W)@Day@th?(?:\sof|)([ _]| |{{(?:break|nbsp)}})@Month(?=[^|\]\w])/gi, '$1@Day$2@LMonth'); |
| | ohc_regex(/(\W)@Month\s(?:the\s)?@DD@th?,(?:\sthe\s)?(?: | )@DD@th?(\s(?:and|&|to|or)(?:[ _]| ))(?:the\s)?@DD@th?(?=[^|\]\w])/gi, '$1@LMonth @Day1, @Day2$2@Day3'); |
| | ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?:,?(?:[ _]| )|\sof\s)?(\d{3,4}\W\D)/gi, '$1$2 $3$4$5@Day, $6'); |
| | ohc_regex(/(\W)(@month)\s(@day)((?:,\s@day){0,6}),?(\/|\s?[-–]\s?|\s(?:and|&|to|or)\s+?)@Day@th?(?=\W\D)/gi, '$1$2 $3$4$5@Day'); |
| | ohc_regex(/(\W)@Month([ _]| |{{(?:break|nbsp)}})(?:the\s)?@DD@th?,? @Year/gi, '$1@LMonth$2@Day, @Year'); |
| | ohc_regex(/(\W)@Month @Day(?:\sof|,|)([ _]| |{{(?:break|nbsp)}})@Year(?=[^|\]\w])/gi, '$1@Month @Day,$2@Year'); |
|
| |
|
| function ohc_ISO_to_dmy_in_citations()
| | // consolidating/amalgamating date fields |
| {
| | ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day)\s*\|[ ]*month=[ ]*(@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2 $3"); |
| //ISO dates within single citation | | ohc_regex(/(\|[ ]*date[ ]*=[ ]*@day.?@month)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2"); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY"); | | ohc_regex(/(\|[ ]*date[ ]*=[ ]*@month.?@day)\s*\|[ ]*year=[ ]*(@yyyy[ ]*)(?=[|}\s])/gi, "$1 $2"); |
| }
| |
|
| |
|
| function ohc_ISO_to_mdy_in_citations()
| | // eliminating dates and time placed in author parameter |
| {
| | //removing artefacts from Indian news sites (TNN আগষ্ট 30, 2012, 05.46AM) |
| //ISO dates within single citation | | ohc_regex(/(\|\s*author\s*=\s*(?:[A-Z]{2,3}\b))(?:[^|}]*)\d{4}, [\d\.:]{4,5}( |)[AP]M IST(?=[ ]*\|)/g, '$1$2'); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY"); | | // ohc_regex(/(\|\s*author=(?:[^\[\]|{}]*))(TNN|PTI) @day @month @yyyy, [\d\.:]{4,5}( |)[AP]M IST(?=[ ]*\|)/g, '$1$2'); |
| }
| |
|
| |
|
| function ohc_ISO_to_dmy_in_references()
| | ohc_regex(/(\|\s*author\s*=\s*)@month @day,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1"); |
| { | | ohc_regex(/(\|\s*author\s*=\s*)@day @month,? @yyyy\s?(?:,? [0-2]?\d[\.:][0-5]\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)(?=\|)/g, "$1"); |
| //multiple calls for multiple dates within single citation
| | ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@month @day,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1"); |
| ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3"); | | ohc_regex(/(\|\s*author\s*=\s*\w[\w\s]+)@day @month,? @yyyy(?:[^\[\]|{}]*)(?=[|}])/g, "$1"); |
| ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Day @Month @YYYY$3"); | | ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@dd-@mm-@yyyy/gi, "$1"); |
| }
| | ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)@YYYY-@MM-@DD ?/gi, "$1"); |
| | regex(/(\|\s*(?:date|archive-?date|access-?date|author)\s*=\s*(?:\w[\w\s]+)?)[0-2]\d:[0-5]\d(?:[ ]| )?(?:[ap]m|[ap]\.m\.|)(?: ?(?:[A-Z]{1,2}T|UTC)[\.,]?|)/gi, "$1"); |
| | // ohc_regex(/(\|\s*author\s*=\s*(?:\w[\w\s]+)?)\s*[0-2]\d[\.:][0-5]\d(?:[\.:][0-5]\d|)/gi, "$1"); //let's see later if we need this |
|
| |
|
| function ohc_ISO_to_mdy_in_references()
| | // eliminating mm-dd-yyyy dates |
| {
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY"); |
| //multiple calls for multiple dates within single citation | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Mon[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY/gi, "$1@Month $2, @YYYY"); |
| ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3"); | | ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@MM[-–\/\.=\s](1[3-9]|2\d|3[01])[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Month $1, @YYYY"); |
| ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3"); | | // ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY"); |
| }
| |
|
| |
|
| // currently unused | | ohc_regex(/([ =|])@Mon[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
| function ohc_ISO_to_dmy_anywhere()
| | ohc_regex(/([ =|])@Mon\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
| {
| | ohc_regex(/([ =|])@Mon\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
| //multiple calls for multiple dates within single citation
| | ohc_regex(/([ =|])@Mon (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
| ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2'); | | ohc_regex(/([ =|])@MM[-–](1[3-9]|2\d|3[01])[-–]@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
| ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2'); | | ohc_regex(/([ =|])@MM\/(1[3-9]|2\d|3[01])\/@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
| ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2'); | | ohc_regex(/([ =|])@MM\.(1[3-9]|2\d|3[01])\.@YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
| }
| | ohc_regex(/([ =|])@MM (1[3-9]|2\d|3[01]) @YYYY(?=[^-–\d/])/gi, "$1@Mon $2, @YYYY"); |
|
| |
|
| // currently unused | | // eliminating dd-mm-yyyy dates (assumed default) |
| function ohc_ISO_to_mdy_anywhere()
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY"); |
| {
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Mon[-–\/\.=\s]@YYYY/gi, "$1@Day @Month @YYYY"); |
| //multiple calls for multiple dates within single citation | | ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@DD[-–\/\.=\s]@MM[-–\/\.=\s]@YYYY(?=\D)/gi, " Retrieved @Day @Month @YYYY"); |
| ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2'); | | ohc_regex(/[ ](?:Accessed|Retrieved)(?:(?: online|) on|:?)[ ]@YYYY,? @Month @DD(?=\D)/gi, " Retrieved @Day @Month @YYYY"); |
| ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2'); | | ohc_regex(/([ =|])@DD[-–]@Mon[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2'); | | ohc_regex(/([ =|])@DD\/@Mon\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| }
| | ohc_regex(/([ =|])@DD\.@Mon\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| | ohc_regex(/([ =|])@DD @Mon @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| | ohc_regex(/([ =|])@DD[-–]@MM[-–]@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| | ohc_regex(/([ =|])@DD\/@MM\/@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| | ohc_regex(/([ =|])@DD\.@MM\.@YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| | ohc_regex(/([ =|])@DD @MM @YYYY(?=[^-–\d/])/gi, "$1@Day @Month @YYYY"); |
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@DD[-–\/\.=\s]@Month[-–\/\.=\s]@YYNN(?=\s*[|}\n])/gi, '$1@Day @Month @YYYY'); |
|
| |
|
| function ohc_delink_ISO_to_dmy()
| | //convert yyyy-dd-mm to yyyy-mm-dd |
| { | | ohc_regex(/{{(\s*[Cc]it(?:e|ation))([^}]+)(\s*\|\s*(?:publication|archive|access|air|)-?date\s*=\s*(?:1[0-9]|20)\d{2})[-/\.=\s](1[3-9]|2\d|3[01])[-/\.=\s](0?\d|1[0-2])(\s*[\|}<])/gi, '{{$1$2$3-$5-$4$6'); //from Batty |
| ohc_ISO_to_dmy_in_citations();
| |
| ohc_ISO_to_dmy_in_references();
| |
| regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Day @Month @Year$2');
| |
| ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|format=dmy|@YYYY|@MM|@DD}}$2'); //dts template for sortable tables
| |
| ohc_regex(/(\{\{dts\|format=)mdy\|/gi, '$1dmy|'); //flip dts template formats
| |
| }
| |
|
| |
|
| function ohc_delink_ISO_to_mdy()
| | // eliminating other errant formats |
| {
| | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)([0-2]?\d|30|31) @Month \2,? @YYYY(?=\s*[|}])/gi, "$1$2 @Month @YYYY"); //repeated digits |
| ohc_ISO_to_mdy_in_citations(); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day ?@Month ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Day @Month 20$2"); |
| ohc_ISO_to_mdy_in_references();
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month ?@Day,? ?200([01]\d)[^\s|}]?(?=\s*[|}])/gi, "$1@Month @Day, 20$2"); |
| regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Month @Day, @Year$2');
| |
| ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|@YYYY|@MM|@DD}}$2'); //dts template for sortable tables (mdy is default) | |
| ohc_regex(/(\{\{dts\|)format=(?:mdy|dmy|) ?\|/gi, '$1'); //flip dts template formats | |
| }
| |
|
| |
|
| function ohc_delink_year_in_X()
| | ohc_regex(/([ ]\()@DD-@MM-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2'); |
| {
| | ohc_regex(/([ ]\()@DD-@Month-@YYYY(\)\W)/gi, '$1@Day @Month @YYYY$2'); |
| // ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|(@year)\}\}/gi, "$1"); //disabled 3/5/21 discussion at https://en.wikipedia.org/w/index.php?title=Wikipedia_talk:WikiProject_Baseball&oldid=1021203365#Links_to_baseball_year_articles_in_infobox? | | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@Month, @DD, @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); |
| // ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|@year\|(@year)\}\}/gi, "$1");
| | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@DD[\.,] @Month,? @YYYY(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); |
| ohc_regex(/\[\[@yyyy\sin\s[^|\]]+\|((?:(?:@day |)@month |)@yyyy)\]\]/gi, '$1'); | | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month @DD(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); |
| regex(/\[\[(?:\d{4}[-–]\d{2} in English football)\|((?:(?:@Day |)@Month |)@YYYY)\]\]/gi, '$1'); | | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @DD @Month(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); |
| | ohc_regex(/[ ]\(@YYYY,? @Month @DD\)/gi, " (@Day @Month @YYYY)"); |
| | ohc_regex(/[ ]\(@YYYY @MM @DD\)/gi, " (@Day @Month @YYYY)"); |
| | ohc_regex(/[ ]\(@YYYY, @DD @Month\)/gi, " (@Day @Month @YYYY)"); |
| | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY,? @Month(?=\s*[|}])/gi, "$1@Month @YYYY"); |
| | ohc_regex(/[ ]\(@YYYY, @Month\)/gi, " (@Month @YYYY)"); |
| | ohc_regex(/[ ]\(@Mon@YYYY\)/gi, " (@Mon @YYYY)"); |
|
| |
|
| regex(/\[\[\d{4} Major League Baseball season\|(\d{4})(\sseason)?\]\]/gi, '$1$2'); | | //CS1 errors ISO-like dates (too few or too many digits) |
| }
| | ohc_regex(/(date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][–—‐]\[\[|[–—‐])@MM[\-–—‐]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes |
| | ohc_regex(/(\|\s*access-?date\s*=)\s*@YYYY-0[–—]@DD(?=\s*[|}])/gi, ""); //rem nonsense access date |
| | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[-–—]@MM[-–—]@DD(?=\s*[|}])/gi, "$1@YYYY-@ZM-@ZD"); //ndashes and emdashes |
| | // ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)@YYYY[\-–—‐]@MM(?=\s*[|}])/gi, "$1@Month @YYYY"); //transform "yyyy-mm" to "month year" |
| | ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[–—]@MM[–—]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3"); |
| | ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-]@MM[-]([1-9])([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2$3 @Month @YYYY$4"); |
|
| |
|
| | // spaces and commas between month and year |
| | ohc_regex(/@Month(?:,?|\s+of|)(\s| )@YYYY(?=\D)/gi, "@LMonth$1@YYYY"); |
|
| |
|
| // format parameter must be 'dmy' or 'mdy' | | // fix month names (capitalize, remove dots) |
| function ohc_fix_dts_template(format)
| | ohc_regex(/(\W)@DD\s@FullMonth(\s+|\s*,)/gi, "$1@Day @FullMonth$2"); |
| {
| | ohc_regex(/(\W)@DD\s@Mon(\s+|\s*,)/gi, "$1@Day @Mon$2"); |
| // dts - format=dmy in this case (per D12000)
| | ohc_regex(/(\W)@FullMonth\s@DD(\s+|\s*,)/gi, "$1@FullMonth @Day$2"); |
| // per {{dts}} doc, remove the obsolete link=off param
| | ohc_regex(/(\W)@Mon\s@DD(\s+|\s*,)/gi, "$1@Mon @Day$2"); |
| regex(/(\{\{dts[^}]*)(?:\|link=off)/gi, '$1'); | | regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?=[ ]*(=|BC|AD|CE))/g, '$1c$2'); |
| ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\|\s*format=)(?:dmy|mdy)(\}\})/gi, '$1'+format+'$2'); | | // regex(/(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?![ \-][A-Z]\w*|''|")/g, '$1c$2'); |
| ohc_regex(/(\{\{dts\s*\|\s*format=)(?:dmy|mdy)(\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\}\})/gi, '$1'+format+'$2'); | |
| ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*)(\}\})/gi, '$1|format='+format+'$2');
| |
|
| |
|
| // stripping – {{dts}} serves no purpose inside date parameters
| | //spaces and commas - in date formats |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*([|}]*)\}\}(?=\s*[|}])/gi, "$1$2"); | | ohc_regex(/(\D\W\[?\[?@dd)[ ]+(@month)(\]\])?[ ]*,[ ]*(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1 $2$3 $4"); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*([|}]*)(?:\|\s*format=(?:dmy|mdy)\s*|)\}\}(?=\s*[|}])/gi, "$1$2"); | | ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)(?:[ ]*,[ ]*)(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5"); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD "); | | ohc_regex(/(\D\W\[?\[?)(@month)[ ]+(@dd)(\]?\]?)[ ]+(\[?\[?@yyyy(\sAD|\sBC|\sCE|\sBCE|)\]?\]?\W\D)/gi, "$1$2 $3$4, $5"); |
| ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\|\s*format=(?:dmy|mdy)\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD "); | | |
| | ohc_regex(/(@month)(?:, | of )(@yyyy\w)/gi, "$1 $2"); //repeat after delinking |
| | |
| | // spaces and commas - md-md and dm-dm date ranges |
| | ohc_regex(/(\D\W)@Month\s@DD( |\s)(?:[-–—]|&[mn]dash;)(?: |\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1$2– @LMonth2 @Day2"); |
| | ohc_regex(/(\D\W)@Month\s@DD(?:[-–—]|&[mn]dash;)(?: |\s)?@Month\s@DD(?=\W\D)/gi, "$1@LMonth1 @Day1 – @LMonth2 @Day2"); |
| | ohc_regex(/(\D\W)@DD\s@Month( |\s)(?:[-–—]|&[mn]dash;)(?: |\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1$2– @Day2 @LMonth2"); |
| | ohc_regex(/(\D\W)@DD\s@Month(?:[-–—]|&[mn]dash;)(?: |\s)?@DD\s@Month(?=\W\D)/gi, "$1@Day1 @LMonth1 – @Day2 @LMonth2"); |
| | |
| | // spaces and commas - d-dm and md-d date ranges |
| | ohc_regex(/(\D\W)@Month(\s| )@DD@th?(?:(?:\s*| |)[-–](?:\s*| |))@DD@th?(?=\W\D)/gi, "$1@LMonth1$2@Day1–@Day2"); |
| | ohc_regex(/(\D\W)@DD@th?(?:(?:\s*| |)[-–](?:\s*| |))@DD@th?(\s| )@Month(?=\W\D)/gi, "$1@Day1–@Day2$2@LMonth1"); |
| | |
| | // spaces and commas between month and year (again) |
| | ohc_regex(/@Month(?:,\s+|\s+of\s+)@YYYY(\w)/gi, "@LMonth @YYYY$1"); |
| } | | } |
|
| |
|
| // format parameter must be 'dmy' or 'mdy' | | /** ------------------------------------------------------------------------- */ |
| function ohc_fix_gr_template(format) | | /// ISO to long format |
| | |
| | function ohc_ISO_to_dmy_in_citations() |
| { | | { |
| // GR - date formatting parameter | | //ISO dates within single citation |
| // per {GR} doc, insert date formatting param | | ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY"); |
| regex(/(\{\{GR\|\d\d?)(?!\|date)/gi, '$1|dateform=' + format);
| |
| } | | } |
|
| |
|
| function ohc_dates_to_dmy() | | function ohc_ISO_to_mdy_in_citations() |
| { | | { |
| regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, ''); | | //ISO dates within single citation |
| regex(/\|format=mdy/gi, '|format=dmy'); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|designation\d?_|)-?date\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY"); |
| //change start and end templates; vgrelease new v=2 or mdy is default
| | } |
| regex(/(\{\{(?:start date|end date)[^|}]*\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2');
| |
| regex(/(\{\{vgrelease new[^|}]*\|)(?:v=1\||)([A-Z]{2,3}\|)/g, '$1v=2|$2');
| |
| ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY"); //spotted at [[Template:Infobox recurring event]]
| |
|
| |
| //change birth and death templates
| |
| regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start)[^}]*\|)m(f=ye?s?)/gi, '$1d$2'); // substitute df for mf
| |
| regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+)(\}\})/gi, '$1|df=y$2'); //insert df parameter
| |
| regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2'); //put date format parameter at the end
| |
| regex(/(\{\{(?:start date|end date)\|)df=ye?s?\|((?:1[789]|20)\d{2}\}\})/gi, '$1$2'); //date format parameter not needed – year only
| |
|
| |
|
| //convert date ranges (md,d,d-dy to d,d,d-dmy; md,d,d-d to d,d,d-dm; md,d,d to d,d,dm) | | function ohc_ISO_to_dmy_in_references() |
| ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|–)\s?|(?:[ _]| )(?:and|&|to|or)(?:[ _]| )+?)@Day,?\s(?:of\s)?(@yyyy\W\D)/gi, "$1$2$3@Day @LMonth $4"); | | { |
| ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|–)\s?|(?:[ _]| )(?:and|&|to|or)(?:[ _]| )+?)@Day(?=\W\D)/gi, "$1$2$3@Day @LMonth"); | | //multiple calls for multiple dates within single citation |
| | ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3"); |
| | ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Day @Month @YYYY$3"); |
| | } |
|
| |
|
| // ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1$2 @Day @LMonth"); //disabling as unlikely and ungrammatical constructions causing false positives | | function ohc_ISO_to_mdy_in_references() |
| | | { |
| //'md, md,' to 'dm, dm,'
| | //multiple calls for multiple dates within single citation |
| ohc_regex(/(\D\W)@Month @Day, @Month @Day(?=[,\.]\W\D)/gi, "$1@Day1 @LMonth1, @Day2 @LMonth2"); | | ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD([^-\w\/%,<][^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3"); |
| | ohc_regex(/(<ref[^>]*>[^<]+?)([\s\(])@YYYY[-–]@MM[-–]@DD(<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3"); |
| | } |
|
| |
|
| //convert simple mdy dates to dmy | | // currently unused |
| ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. $2 @Day @LMonth"); | | function ohc_ISO_to_dmy_anywhere() |
| ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(\s?(?:AD|BC|CE|BCE)\W\D)/gi, "$1@Day @LMonth @Year$2"); | | { |
| ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day,?\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year"); | | //multiple calls for multiple dates within single citation |
| ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day(?=\W\D)/gi, "$1@Day @LMonth");
| | ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2'); |
| | ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2'); |
| | ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Day @Month @YYYY$2'); |
| | } |
|
| |
|
| //Month+day_number " 7th মার্চ" -> "7 মার্চ" | | // currently unused |
| ohc_regex(/(\D\W)@Day\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year"); | | function ohc_ISO_to_mdy_anywhere() |
| ohc_regex(/(\D\W)@Day\s@Month(?=\W\D)/gi, "$1@Day @LMonth"); | | { |
| ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(?=\W\D)/gi, "$1@Day @LMonth @Year"); | | //multiple calls for multiple dates within single citation |
| | ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2'); |
| | ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2'); |
| | ohc_regex(/([^-\w/])@YYYY[-–]@MM[-–]@DD([^-\w/])/gi, '$1@Month @Day, @YYYY$2'); |
| | } |
|
| |
|
| //dates with embedded nbsp | | function ohc_delink_ISO_to_dmy() |
| ohc_regex(/(\D\W)@Month([ _]| )(\d{1,2},(?: | )\d{1,2}(?:\s(?:and|&|to|or)(?:[ _]| ))\d{1,2})(?=[^|\]\w])/gi, '$1$3$2@LMonth '); | | { |
| ohc_regex(/(\D\W)@Month([ _]| |{{(?:break|nbsp)}})@Day,([ _]| |{{(?:break|nbsp)}})@YYYY(?=[^|\]\w])/gi, '$1@Day$2@Month$3@Year'); | | ohc_ISO_to_dmy_in_citations(); |
| | ohc_ISO_to_dmy_in_references(); |
| | regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Day @Month @Year$2'); |
| | ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|format=dmy|@YYYY|@MM|@DD}}$2'); //dts template for sortable tables |
| | ohc_regex(/(\{\{dts\|format=)mdy\|/gi, '$1dmy|'); //flip dts template formats |
| | } |
|
| |
|
| //remove comma | | function ohc_delink_ISO_to_mdy() |
| ohc_regex(/(\D\W)@Day\s@Month,\s?@Year(?=\W\D)/gi, "$1@Day @LMonth @Year"); | | { |
| | | ohc_ISO_to_mdy_in_citations(); |
| // remove "the" from "on the dd month"
| | ohc_ISO_to_mdy_in_references(); |
| ohc_regex(/(on |by )the @Day\s@Month(?=[ ,\)\.])/gi, "$1@Day @LMonth"); | | regex(/([^\w\/\-%,])@YYYY-@MM-@DD(<\s?\/ref.*?>)/g, '$1@Month @Day, @Year$2'); |
| | | ohc_regex(/(\|\|[ ]*)@YYYY[-–]@MM[-–]@DD([ ]*\|\|)/gi, '$1{{dts|@YYYY|@MM|@DD}}$2'); //dts template for sortable tables (mdy is default) |
| //remove space from date range conversion
| | ohc_regex(/(\{\{dts\|)format=(?:mdy|dmy|) ?\|/gi, '$1'); //flip dts template formats |
| ohc_regex(/(\D ) @Day(\/|\s?(?:[-–]|–)\s?|(?:[ _]| )(?:and|&|to|or)(?:[ _]| )+?)/gi, "$1@Day$2"); | |
| } | | } |
|
| |
|
| function ohc_dates_to_mdy() | | function ohc_delink_year_in_X() |
| { | | { |
| //change birth and death templates – mf=y is the default; vgrelease new v=2 or mdy is default
| | // ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|(@year)\}\}/gi, "$1"); //disabled 3/5/21 discussion at https://en.wikipedia.org/w/index.php?title=Wikipedia_talk:WikiProject_Baseball&oldid=1021203365#Links_to_baseball_year_articles_in_infobox? |
| regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, '');
| | // ohc_regex(/\{\{(?:avyear|by|baseball\syear|fy|ly|mlby|mlb\syear|scy|sdy)\|@year\|(@year)\}\}/gi, "$1"); |
| regex(/\|df=y(?:es|)(?=[|}\s])/gi, '');
| | ohc_regex(/\[\[@yyyy\sin\s[^|\]]+\|((?:(?:@day |)@month |)@yyyy)\]\]/gi, '$1'); |
| regex(/(mf=y(?:es|)\|[^}]*\|)(?:mf=y(?:es|)\|)/gi, '$1'); | | regex(/\[\[(?:\d{4}[-–]\d{2} in English football)\|((?:(?:@Day |)@Month |)@YYYY)\]\]/gi, '$1'); |
| regex(/(\{\{vgrelease new[^|}]*\|)(?:v=2\||)([A-Z]{2,3}\|)/g, '$1$2'); | |
| ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY");
| |
|
| |
|
| //convert date ranges (d,d,d-dmy to md,d,d-dy; d,d,d-dm to md,d,d-d; dm,d,d to md,d,d) | | regex(/\[\[\d{4} Major League Baseball season\|(\d{4})(\sseason)?\]\]/gi, '$1$2'); |
| ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|–)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2, @YYYY");
| | } |
| ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|–)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2");
| |
| // ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2, @YYYY"); //disabling as unlikely and ungrammatical constructions causing false positives
| |
| // ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2"); //disabling as unlikely and ungrammatical constructions causing false positives
| |
|
| |
|
| //'dm, dm,' to 'md, md,'
| |
| ohc_regex(/(\D\W)@Day @Month, @Day @Month(?=[,\.]?\W\D)/gi, "$1@LMonth1 @Day1, @LMonth2 @Day2");
| |
|
| |
|
| //convert simple dmy dates to mdy
| | // format parameter must be 'dmy' or 'mdy' |
| ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. @LMonth $2 @Day"); | | function ohc_fix_dts_template(format) |
| ohc_regex(/(\D\W)@Day(\s| )@Month,?(\s| )@Year(?=\W\D)/gi, "$1@LMonth$2@Day,$3@Year"); | | { |
| ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @Year"); | | // dts - format=dmy in this case (per D12000) |
| ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month(?=\W\D)/gi, "$1@LMonth @Day"); | | // per {{dts}} doc, remove the obsolete link=off param |
| | regex(/(\{\{dts[^}]*)(?:\|link=off)/gi, '$1'); |
| | ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\|\s*format=)(?:dmy|mdy)(\}\})/gi, '$1'+format+'$2'); |
| | ohc_regex(/(\{\{dts\s*\|\s*format=)(?:dmy|mdy)(\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*\}\})/gi, '$1'+format+'$2'); |
| | ohc_regex(/(\{\{dts\s*\|\s*@year\s*\|\s*@month\s*\|\s*@day\s*)(\}\})/gi, '$1|format='+format+'$2'); |
|
| |
|
| //Month+day_number "মার্চ 7th" -> "মার্চ 7"
| | // stripping – {{dts}} serves no purpose inside date parameters |
| ohc_regex(/(\D\W)@Month\s@Day@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @YYYY"); | | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*([|}]*)\}\}(?=\s*[|}])/gi, "$1$2"); |
| ohc_regex(/(\D\W)@Day@th?(\s| )@Month(\s| )@YYYY(?=\W\D)/gi, "$1@LMonth$2@Day,$3@YYYY"); | | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*([|}]*)(?:\|\s*format=(?:dmy|mdy)\s*|)\}\}(?=\s*[|}])/gi, "$1$2"); |
| ohc_regex(/(\D\W)@Month(\s| )@Day(?=\W\D)/gi, "$1@LMonth$2@Day"); | | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*format=(?:dmy|mdy)\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD "); |
| ohc_regex(/(\D\W)@Day@th?(\s| )@Month([,\.])(?=\W\D)/gi, "$1@LMonth$2@Day$3");
| | ohc_regex(/(\|(?:[\w ]*)date\s*=\s*)\{\{dts\s*\|\s*@YYYY(\s*\|\s*|-)@MM(\s*\|\s*|-)@DD\s*\|\s*format=(?:dmy|mdy)\s*\}\}(?=\s*[|}])/gi, "$1@YYYY-@MM-@DD "); |
| | |
| //add comma where missing
| |
| ohc_regex(/(\D\W)@Month\s@Day,?\s@YYYY,?(?=\s\w)/gi, "$1@LMonth @Day, @YYYY,"); | |
| //rem superfluous comma where applicable
| |
| ohc_regex(/(\D[^\w\/])@Month\s@ZD,,(?=\W\D|\b)/gi, "$1@LMonth @Day,");
| |
| } | | } |
|
| |
|
| function ohc_fix_dmy_redundancies() | | // format parameter must be 'dmy' or 'mdy' |
| | function ohc_fix_gr_template(format) |
| { | | { |
| //month-range redundancies (repeating month names) | | // GR - date formatting parameter |
| ohc_regex(/([\D]@dd)@th? @Month[ ]{1,2}((?:to|and|-|–)[ ]{1,2}@dd)@th? @Month/, "$1 $2 @LMonth", function(d1, d2) { | | // per {GR} doc, insert date formatting param |
| if (d1.m == d2.m) return true;
| | regex(/(\{\{GR\|\d\d?)(?!\|date)/gi, '$1|dateform=' + format); |
| return false;
| |
| });
| |
| } | | } |
| //not currently used
| | |
| function ohc_fix_mdy_redundancies() | | function ohc_dates_to_dmy() |
| { | | { |
| //month-range redundancies (repeating month names) | | regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, ''); |
| ohc_regex(/(@Month[ ]{1,2}@dd)@th? (to|and|-|–)[ ]{1,2}@Month[ ]{1,2}@DD@th?/, "$1 $2 @LDay", function(d1, d2) { | | regex(/\|format=mdy/gi, '|format=dmy'); |
| if (d1.m == d2.m) return true;
| | //change start and end templates; vgrelease new v=2 or mdy is default |
| return false;
| | regex(/(\{\{(?:start date|end date)[^|}]*\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2'); |
| });
| | regex(/(\{\{vgrelease new[^|}]*\|)(?:v=1\||)([A-Z]{2,3}\|)/g, '$1v=2|$2'); |
| }
| | ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Day @Month @YYYY"); //spotted at [[Template:Infobox recurring event]] |
| | |
| | //change birth and death templates |
| | regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start)[^}]*\|)m(f=ye?s?)/gi, '$1d$2'); // substitute df for mf |
| | regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+)(\}\})/gi, '$1|df=y$2'); //insert df parameter |
| | regex(/(\{\{(?:(?:Birth|Death) date(?: and age|)|launch|release|start|film ?date|Wayback)[\|\d]+\|)df=ye?s?\|([^}]*df=ye?s?)/gi, '$1$2'); //put date format parameter at the end |
| | regex(/(\{\{(?:start date|end date)\|)df=ye?s?\|((?:1[789]|20)\d{2}\}\})/gi, '$1$2'); //date format parameter not needed – year only |
| | |
| | //convert date ranges (md,d,d-dy to d,d,d-dmy; md,d,d-d to d,d,d-dm; md,d,d to d,d,dm) |
| | ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|–)\s?|(?:[ _]| )(?:and|&|to|or)(?:[ _]| )+?)@Day,?\s(?:of\s)?(@yyyy\W\D)/gi, "$1$2$3@Day @LMonth $4"); |
| | ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}),?(\/|\s?(?:[-–]|–)\s?|(?:[ _]| )(?:and|&|to|or)(?:[ _]| )+?)@Day(?=\W\D)/gi, "$1$2$3@Day @LMonth"); |
|
| |
|
| function ohc_expand_ref_dates()
| | // ohc_regex(/(\D\W)@Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1$2 @Day @LMonth"); //disabling as unlikely and ungrammatical constructions causing false positives |
| {
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @YYYY(?=\s*[|}])/gi, "$1@FullMonth @YYYY");
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @FullMonth @YYYY");
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth @Day, @YYYY");
| |
|
| |
|
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|–) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=\s*[|}])/gi, "$1$2 @FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2"); | | //'md, md,' to 'dm, dm,' |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day(, (?:19|20)\d\d) ?(?:-|–|–) ?@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY"); | | ohc_regex(/(\D\W)@Month @Day, @Month @Day(?=[,\.]\W\D)/gi, "$1@Day1 @LMonth1, @Day2 @LMonth2"); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY");
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Month,? @YYYY(?=\s*[|}])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY");
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:19|20)\d\d) ?(?:-|–|–) ?@Month @YYYY(?=\s*[|}])/gi, "$1@$2 – @FullMonth @YYYY");
| |
|
| |
|
| ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|–) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2"); | | //convert simple mdy dates to dmy |
| ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month @Day(, (?:19|20)\d\d) ?(?:-|–|–) ?@Month @Day, @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
| | ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. $2 @Day @LMonth"); |
| ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Day @Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY"); | | ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(\s?(?:AD|BC|CE|BCE)\W\D)/gi, "$1@Day @LMonth @Year$2"); |
| ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Month,? @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY"); | | ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day,?\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year"); |
| ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:19|20)\d\d) ?(?:-|–|–) ?@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 – @FullMonth @YYYY"); | | ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Month\s@Day(?=\W\D)/gi, "$1@Day @LMonth"); |
| }
| |
|
| |
|
| function ohc_expand_all_dates()
| | //Month+day_number " 7th মার্চ" -> "7 মার্চ" |
| {
| | ohc_regex(/(\D\W)@Day\s@Month\s@YYYY(?=\W\D)/gi, "$1@Day @LMonth @Year"); |
| ohc_regex(/([^-\w/])@Month @YYYY(?=[^-\w/])/gi, '$1@FullMonth @YYYY'); | | ohc_regex(/(\D\W)@Day\s@Month(?=\W\D)/gi, "$1@Day @LMonth"); |
| ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @FullMonth @YYYY'); | | ohc_regex(/(\D\W)@Month\s@Day,?\s@Year(?=\W\D)/gi, "$1@Day @LMonth @Year"); |
| ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@FullMonth @Day, @YYYY'); | |
|
| |
|
| ohc_regex(/([^-\w/])((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|–) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=[^-\w/])/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2"); | | //dates with embedded nbsp |
| ohc_regex(/([^-\w/])@Month @Day(, (?:19|20)\d\d) ?(?:-|–|–) ?@Month @Day, @YYYY(?=[^-\w/])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY");
| | ohc_regex(/(\D\W)@Month([ _]| )(\d{1,2},(?: | )\d{1,2}(?:\s(?:and|&|to|or)(?:[ _]| ))\d{1,2})(?=[^|\]\w])/gi, '$1$3$2@LMonth '); |
| ohc_regex(/([^-\w/])@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Day @Month @YYYY(?=[^-\w/])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY"); | | ohc_regex(/(\D\W)@Month([ _]| |{{(?:break|nbsp)}})@Day,([ _]| |{{(?:break|nbsp)}})@YYYY(?=[^|\]\w])/gi, '$1@Day$2@Month$3@Year'); |
| ohc_regex(/([^-\w/])@Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Month,? @YYYY(?=[^-\w/])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY"); | | |
| ohc_regex(/([^-\w/])((?:19|20)\d\d) ?(?:-|–|–) ?@Month @YYYY(?=[^-\w/])/gi, "$1$2 – @FullMonth @YYYY"); | | //remove comma |
| | ohc_regex(/(\D\W)@Day\s@Month,\s?@Year(?=\W\D)/gi, "$1@Day @LMonth @Year"); |
| | |
| | // remove "the" from "on the dd month" |
| | ohc_regex(/(on |by )the @Day\s@Month(?=[ ,\)\.])/gi, "$1@Day @LMonth"); |
|
| |
|
| ohc_regex(/([ ]\(|\|\s*)@Day @Month @YYYY(?=\)\W|\s*[|\n])/gi, "$1@Day @FullMonth @YYYY"); | | //remove space from date range conversion |
| ohc_regex(/([ ]\(|\|\s*)@Month @Day,? @YYYY(?=\)\W|\s*[|\n])/gi, "$1@FullMonth @Day, @YYYY"); | | ohc_regex(/(\D ) @Day(\/|\s?(?:[-–]|–)\s?|(?:[ _]| )(?:and|&|to|or)(?:[ _]| )+?)/gi, "$1@Day$2"); |
| ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–| ) ?@Day @Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @Day @FullMonth2 @YYYY2");
| |
| ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–| ) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @FullMonth2 @YYYY2");
| |
| ohc_regex(/([ ]\((?:c\. |))@YYYY ?(?:-|–| ) ?@Month @YYYY(?=\)\W)/gi, "$1@YYYY1 – @FullMonth @YYYY2");
| |
| ohc_regex(/([ ]\((?:c\. |))@Month ?(?:-|–| ) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 – @FullMonth2 @YYYY");
| |
| ohc_regex(/([ ]\((?:c\. |))@Month @YYYY(?=\)\W)/gi, "$1@FullMonth @YYYY");
| |
| } | | } |
|
| |
|
| function ohc_abbrev_ref_dates() | | function ohc_dates_to_mdy() |
| { | | { |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @Mon @YYYY"); | | //change birth and death templates – mf=y is the default; vgrelease new v=2 or mdy is default |
| ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))([12]?\d|30|31) (জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber)( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3$4"); | | regex(/\|df=[mdy]{3}(?:-all|)(?=\s*[|}])/gi, ''); |
| ohc_regex(/([ ]\()@Day @Month @YYYY([^-\w\/])/gi, "$1@Day @Mon @YYYY$2"); | | regex(/\|df=y(?:es|)(?=[|}\s])/gi, ''); |
|
| | regex(/(mf=y(?:es|)\|[^}]*\|)(?:mf=y(?:es|)\|)/gi, '$1'); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@Mon @Day, @YYYY"); | | regex(/(\{\{vgrelease new[^|}]*\|)(?:v=2\||)([A-Z]{2,3}\|)/g, '$1$2'); |
| ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber) ([12]?\d|30|31),( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3,$4"); | | ohc_regex(/(\|\s*(?:begin|end|first|last)\s*=\s*)@YYYY[-–]@MM[-–]@DD(?=\W\D)/gi, "$1@Month @Day, @YYYY"); |
| ohc_regex(/([^-\w\/])@Month @Day, @YYYY([^-\w\/])/gi, '$1@Mon @Day, @YYYY$2'); | | |
| }
| | //convert date ranges (d,d,d-dmy to md,d,d-dy; d,d,d-dm to md,d,d-d; dm,d,d to md,d,d) |
|
| | ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|–)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2, @YYYY"); |
| //not currently used | | ohc_regex(/(\D\W)@Day((?:, @day){0,5})(\/|\s?(?:[-–]|–)\s?|\s(?:and|&|to|or)\s+?)@Day\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2$3@Day2"); |
| function ohc_abbrev_all_dates()
| | // ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month,? @YYYY(?=\W\D)/gi, "$1@LMonth @Day1$2, @YYYY"); //disabling as unlikely and ungrammatical constructions causing false positives |
| {
| | // ohc_regex(/(\D\W)@Day((?:, @day){0,5})\s@Month(?=\W\D)/gi, "$1@LMonth @Day1$2"); //disabling as unlikely and ungrammatical constructions causing false positives |
| ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @Mon @YYYY');
| |
| ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@Mon @Day, @YYYY');
| |
| }
| |
|
| |
|
| //not currently used | | //'dm, dm,' to 'md, md,' |
| function ohc_dmy_publication_dates()
| | ohc_regex(/(\D\W)@Day @Month, @Day @Month(?=[,\.]?\W\D)/gi, "$1@LMonth1 @Day1, @LMonth2 @Day2"); |
| {
| |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day,? @YYYY/gi, "$1@Day @Month @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.) | |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Day @Month @YYYY");
| |
| //replace ISO dates (within parentheses) only within refs
| |
| ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3$4");
| |
| }
| |
|
| |
|
| function ohc_mdy_publication_dates()
| | //convert simple dmy dates to mdy |
| {
| | ohc_regex(/(p(?:g?\.?|age) ?\d+|p(?:p\.?|ages) ?\d+[-–]\d+), @Month((?:\s@day?,?){1,6}) @Day(?=\W\D)/gi, "$1. @LMonth $2 @Day"); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY/gi, "$1@Month @Day, @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.) | | ohc_regex(/(\D\W)@Day(\s| )@Month,?(\s| )@Year(?=\W\D)/gi, "$1@LMonth$2@Day,$3@Year"); |
| ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Month @Day, @YYYY"); | | ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @Year"); |
| //replace ISO dates (within parentheses) only within refs | | ohc_regex(/(\|\s*term_(?:end|start)\d\s*=\s*|\D\W)@Day[ ]+@Month(?=\W\D)/gi, "$1@LMonth @Day"); |
| ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3$4"); | | |
| }
| | //Month+day_number "মার্চ 7th" -> "মার্চ 7" |
| | ohc_regex(/(\D\W)@Month\s@Day@th?,?\s@YYYY(?=\W\D)/gi, "$1@LMonth @Day, @YYYY"); |
| | ohc_regex(/(\D\W)@Day@th?(\s| )@Month(\s| )@YYYY(?=\W\D)/gi, "$1@LMonth$2@Day,$3@YYYY"); |
| | ohc_regex(/(\D\W)@Month(\s| )@Day(?=\W\D)/gi, "$1@LMonth$2@Day"); |
| | ohc_regex(/(\D\W)@Day@th?(\s| )@Month([,\.])(?=\W\D)/gi, "$1@LMonth$2@Day$3"); |
|
| |
|
| function ohc_Bigendian_ref_dates() {
| | //add comma where missing |
| // Add a tag to the summary box | | ohc_regex(/(\D\W)@Month\s@Day,?\s@YYYY,?(?=\s\w)/gi, "$1@LMonth @Day, @YYYY,"); |
| regex(/(\{\{use (?:mdy|dmy) dates)(?:\|cs1-dates=\w{1,2}|)(\|[^\}\|]+\}\})/gi, '$1|cs1-dates=y$2'); | | //rem superfluous comma where applicable |
| | ohc_regex(/(\D[^\w\/])@Month\s@ZD,,(?=\W\D|\b)/gi, "$1@LMonth @Day,"); |
| } | | } |
|
| |
|
| /** ------------------------------------------------------------------------ **/
| | function ohc_fix_dmy_redundancies() |
| /// EDIT SUMMARIES & USE DMY TEMPLATE
| |
| // this function modified 2019-03-27 from [[Special:Permalink/846525463]]
| |
| // format parameter must be 'dmy' or 'mdy'
| |
| function ohc_use_dates_template(format)
| |
| { | | { |
| var txt = document.editform.wpTextbox1;
| | //month-range redundancies (repeating month names) |
| // current month-year | | ohc_regex(/([\D]@dd)@th? @Month[ ]{1,2}((?:to|and|-|–)[ ]{1,2}@dd)@th? @Month/, "$1 $2 @LMonth", function(d1, d2) { |
| var currentDate = new Date(); | | if (d1.m == d2.m) return true; |
| var currmonth = currentDate.getMonth(); | | return false; |
| var curryear = currentDate.getFullYear(); | | }); |
| var myMonths = ["জানুয়ারি", "ফেব্রুয়ারি", "মার্চ", "এপ্রিল", "মে", "জুন", "জুলাই", "আগষ্ট", "সেপ্টেম্বর", "অক্টোবর", "নভেম্বর", "ডিসেম্বর"]; | | } |
| var curryyyymm = myMonths[currmonth] + ' ' + curryear; | | //not currently used |
| | function ohc_fix_mdy_redundancies() |
| | { |
| | //month-range redundancies (repeating month names) |
| | ohc_regex(/(@Month[ ]{1,2}@dd)@th? (to|and|-|–)[ ]{1,2}@Month[ ]{1,2}@DD@th?/, "$1 $2 @LDay", function(d1, d2) { |
| | if (d1.m == d2.m) return true; |
| | return false; |
| | }); |
| | } |
|
| |
|
| // step 1: normalize redirect template names to canonical template names 'Use dmy dates' or 'Use mdy dates' according to 'format' argument
| | function ohc_expand_ref_dates() |
| // rename redirects 'dmy', 'mdy', 'usedmydates', 'usemdydates' ('usedmydates' and 'usemdydates' are not currently listed as redirects but might be encountered?)
| | { |
| regex(/\{\{ *(?:use(?:dmy|mdy)dates|dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1'); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @YYYY(?=\s*[|}])/gi, "$1@FullMonth @YYYY"); |
| // rename redirects 'usedmy', 'usemdy', 'use dmy', 'use mdy' to canonical form
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @FullMonth @YYYY"); |
| regex(/\{\{ *use *(?:dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1'); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth @Day, @YYYY"); |
| // strip leading / trailing whitespace from 'use xxx dates'
| |
| regex(/\{\{ *use (?:dmy|mdy) dates *([\|\}])/gi, '{{Use ' + format + ' dates$1'); | |
|
| |
|
| // step 2: look for a canonical template name (the above might not have had anthing to work on) ; if found continue, write new template else | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|–) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=\s*[|}])/gi, "$1$2 @FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2"); |
| var rxpdd = new RegExp("{{Use " + format + " dates", "gi"); // here we search for canonical form {{use xxx dates}} that has current date | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day(, (?:19|20)\d\d) ?(?:-|–|–) ?@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY"); |
| var dflagfound = txt.value.search(rxpdd);
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY"); |
| if (dflagfound === -1) { | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Month,? @YYYY(?=\s*[|}])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY"); |
| txt.value = '{{Use ' + format + ' dates|date=' + curryyyymm + '}}\r\n' + txt.value; // not found so insert new template at top of wikitext
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)((?:19|20)\d\d) ?(?:-|–|–) ?@Month @YYYY(?=\s*[|}])/gi, "$1@$2 – @FullMonth @YYYY"); |
| return; // and done
| |
| }
| |
|
| |
|
| // step 3: rewrite existing canonical templates; add or refresh |date= to current month year; preserve |cs1-dates= as is
| | ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|–) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2"); |
| regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|]*\| *cs1\-dates *= *([^\|\}]*?) *\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |date= followed by |cs1-dates= | | ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month @Day(, (?:19|20)\d\d) ?(?:-|–|–) ?@Month @Day, @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY"); |
| regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) *\| *date *=[^\}]*\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates= followed by |date= | | ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Day @Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY"); |
| regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|\}]*\}\}/gi, '$1|date=' + curryyyymm + '}}'); // with |date= | | ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))@Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Month,? @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY"); |
| regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) \}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates
| | ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))((?:19|20)\d\d) ?(?:-|–|–) ?@Month @YYYY(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 – @FullMonth @YYYY"); |
| regex(/(\{\{use (?:dmy|mdy) dates)\}\}/gi, '$1|date=' + curryyyymm + '}}'); // no parameters so add |date=curryyyymm | |
| regex(/(\{\{[\t_ ]*use[\t_ ]+(?:dmy|mdy)[\t_ ]+dates[^{}]*\}\})([\r\n\t ]*)(\{\{[\t ]*short description[^{}]*\}\})/gi, '$3$2$1'); // repositioning "short description" template at the top | |
| } | | } |
|
| |
|
| | function ohc_expand_all_dates() |
| | { |
| | ohc_regex(/([^-\w/])@Month @YYYY(?=[^-\w/])/gi, '$1@FullMonth @YYYY'); |
| | ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @FullMonth @YYYY'); |
| | ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@FullMonth @Day, @YYYY'); |
| | |
| | ohc_regex(/([^-\w/])((?:[01-2]?\d|30|31) |)@Month @YYYY ?(?:-|–|–) ?((?:[01-3]?\d|30|31) |)@Month @YYYY(?=[^-\w/])/gi, "$1$2@FullMonth1 @YYYY1 – $3@FullMonth2 @YYYY2"); |
| | ohc_regex(/([^-\w/])@Month @Day(, (?:19|20)\d\d) ?(?:-|–|–) ?@Month @Day, @YYYY(?=[^-\w/])/gi, "$1@FullMonth1 @Day1$2 – @FullMonth2 @Day2, @YYYY"); |
| | ohc_regex(/([^-\w/])@Day @Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Day @Month @YYYY(?=[^-\w/])/gi, "$1@Day1 @FullMonth1$2 – @Day2 @FullMonth2 @YYYY"); |
| | ohc_regex(/([^-\w/])@Month,?( (?:19|20)\d\d) ?(?:-|–|–) ?@Month,? @YYYY(?=[^-\w/])/gi, "$1@FullMonth1$2 – @FullMonth2 @YYYY"); |
| | ohc_regex(/([^-\w/])((?:19|20)\d\d) ?(?:-|–|–) ?@Month @YYYY(?=[^-\w/])/gi, "$1$2 – @FullMonth @YYYY"); |
|
| |
|
| | ohc_regex(/([ ]\(|\|\s*)@Day @Month @YYYY(?=\)\W|\s*[|\n])/gi, "$1@Day @FullMonth @YYYY"); |
| | ohc_regex(/([ ]\(|\|\s*)@Month @Day,? @YYYY(?=\)\W|\s*[|\n])/gi, "$1@FullMonth @Day, @YYYY"); |
| | ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–| ) ?@Day @Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @Day @FullMonth2 @YYYY2"); |
| | ohc_regex(/([ ]\((?:c\. |))@Month @YYYY ?(?:-|–| ) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 @YYYY1 – @FullMonth2 @YYYY2"); |
| | ohc_regex(/([ ]\((?:c\. |))@YYYY ?(?:-|–| ) ?@Month @YYYY(?=\)\W)/gi, "$1@YYYY1 – @FullMonth @YYYY2"); |
| | ohc_regex(/([ ]\((?:c\. |))@Month ?(?:-|–| ) ?@Month @YYYY(?=\)\W)/gi, "$1@FullMonth1 – @FullMonth2 @YYYY"); |
| | ohc_regex(/([ ]\((?:c\. |))@Month @YYYY(?=\)\W)/gi, "$1@FullMonth @YYYY"); |
| | } |
|
| |
|
| /** ------------------------------------------------------------------------ **/
| | function ohc_abbrev_ref_dates() |
| /// DATE PROTECTION
| |
| | |
| var linkmap = [];
| |
| | |
| function ohc_protect_dates() | |
| { | | { |
| // protects dates within links, quotes, etc | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY(?=\s*[|}])/gi, "$1@Day @Mon @YYYY"); |
| // the sensitive part is stored and replaced with a unique identifier, | | ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))([12]?\d|30|31) (জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber)( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3$4"); |
| // which is later replaced with the stored part. | | ohc_regex(/([ ]\()@Day @Month @YYYY([^-\w\/])/gi, "$1@Day @Mon @YYYY$2"); |
| | | |
| var protect_function = function(s, begin, replace, end) { | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day, @YYYY(?=\s*[|}])/gi, "$1@Mon @Day, @YYYY"); |
| linkmap.push(replace);
| | ohc_regex(/(<ref[^>]*>(?:[^<]+?[\s\(]|))(জানুয়ারি|ফেব্রুয়ারি|মার্চ|এপ্রিল|মে|জুন|জুলাই|আগষ্ট|অক্টোবর|Oct|নভেম্বর|ডিসেম্বর)(?:r?uary|ch|il|[ey]|ust|(?:t?em|o)ber) ([12]?\d|30|31),( (?:19\d|20[01])\d)(?=(?:[^-\w\/%,<][^<]*?|)<\/ref>)/gi, "$1$2 $3,$4"); |
| return begin + "⍌"+(linkmap.length-1)+"⍍" + end;
| | ohc_regex(/([^-\w\/])@Month @Day, @YYYY([^-\w\/])/gi, '$1@Mon @Day, @YYYY$2'); |
| };
| | } |
| //\|x=
| | |
| regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function);
| | //not currently used |
| regex(/(<!--)([^<\{\}]*?)(-->)/gi, protect_function);
| | function ohc_abbrev_all_dates() |
| regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function);
| | { |
| regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);
| | ohc_regex(/([^-\w/])@Day @Month @YYYY(?=[^-\w/])/gi, '$1@Day @Mon @YYYY'); |
| regex(/(<ref)([^>]+)(>)/gi, protect_function); | | ohc_regex(/([^-\w/])@Month @Day, @YYYY(?=[^-\w/])/gi, '$1@Mon @Day, @YYYY'); |
| regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);
| | } |
| regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);
| | |
| regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);
| | //not currently used |
| regex(/(\{\{(?:harvnb|r|wikisource)\|)([^}]+)(\})/gi, protect_function);
| | function ohc_dmy_publication_dates() |
| regex(/(\{\{(?:Canadian federal by-election))([^}]+)(\}\})/gi, protect_function);
| | { |
|
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Month @Day,? @YYYY/gi, "$1@Day @Month @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.) |
| regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Day @Month @YYYY"); |
| regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);
| | //replace ISO dates (within parentheses) only within refs |
| // regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
| | ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Day @Month @YYYY$3$4"); |
| regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function);
| | } |
| regex(/(<noinclude>)([\s\S]*?)(<\/noinclude>)/gi, protect_function);
| |
| regex(/(<gallery)([\s\S]*?)(<\/gallery>)/gi, protect_function); | |
| regex(/(<poem>)([\s\S]*?)(<\/poem>)/gi, protect_function);
| |
| regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function); | |
| regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|map\d|pic)\s*=)([^|}]*)([|}])/gi, protect_function);
| |
| regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); | |
| regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); | |
| regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function);
| |
| regex(/([\|\{]\s*(?:[xy])\s*=)(\s*[^\|]+\s*)(\|)/gi, protect_function);
| |
| regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function); | |
| regex(/(\{\{(?:singlechart)\|)([^}]+)(\})/gi, protect_function); | |
| regex(/(\{\{(?:defaultsort|graph):)([^}]+)(\})/gi, protect_function);
| |
| regex(/(["“])([^"”\n]*)(["”])/gi, protect_function);
| |
| regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function);
| |
| regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function);
| |
| regex(/(\[\[)(4AD)(\]\]|\|)/gi, protect_function);
| |
|
| |
|
| //retraining redirects containing a date
| | function ohc_mdy_publication_dates() |
| regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2'); | | { |
| regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2'); | | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)@Day @Month @YYYY/gi, "$1@Month @Day, @YYYY"); // conversion of dates in references outside of the protection loop (eg for quotations etc.) |
| regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2');
| | ohc_regex(/(\|\s*(?:publication|archive|access|air|)-?date\s*=\s*)(?:\[\[)?@YYYY(?:\]\][-–]\[\[|[-–])@MM[-–]@DD(?:\]\])?(?=\s*[|}])/gi, "$1@Month @Day, @YYYY"); |
| regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2'); | | //replace ISO dates (within parentheses) only within refs |
| | ohc_regex(/(<ref[^>]*>[^<]+?)([ ]\()@YYYY-@MM-@DD(\))(\W[^<]*?<\/ref>)/gi, "$1$2@Month @Day, @YYYY$3$4"); |
| | } |
|
| |
|
| //protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive)
| | function ohc_Bigendian_ref_dates() { |
| // ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function); //disabled 26 মে – not case senstitve: false negatives in converting dates in মে | | // Add a tag to the summary box |
| ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function);
| | regex(/(\{\{use (?:mdy|dmy) dates)(?:\|cs1-dates=\w{1,2}|)(\|[^\}\|]+\}\})/gi, '$1|cs1-dates=y$2'); |
| | } |
|
| |
|
| //protect all links containing a date and some text
| | /** ------------------------------------------------------------------------ **/ |
| ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function);
| | /// EDIT SUMMARIES & USE DMY TEMPLATE |
| ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
| | // this function modified 2019-03-27 from [[Special:Permalink/846525463]] |
| ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function);
| | // format parameter must be 'dmy' or 'mdy' |
| ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function);
| | function ohc_use_dates_template(format) |
| | | { |
| //protects certain dates
| | var txt = document.editform.wpTextbox1; |
| regex(/(\[\[)(4AD)([\s\S])/gi, protect_function);
| | // current month-year |
| regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function);
| | var currentDate = new Date(); |
| regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function);
| | var currmonth = currentDate.getMonth(); |
| regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function);
| | var curryear = currentDate.getFullYear(); |
| regex(/([\s\S])(National সেপ্টেম্বর 11 Memorial & Museum)([\s\S])/gi, protect_function);
| | var myMonths = ["জানুয়ারি", "ফেব্রুয়ারি", "মার্চ", "এপ্রিল", "মে", "জুন", "জুলাই", "আগষ্ট", "সেপ্টেম্বর", "অক্টোবর", "নভেম্বর", "ডিসেম্বর"]; |
| regex(/([\s\S])(Queen Elizabeth II সেপ্টেম্বর 11th Garden)([\s\S])/gi, protect_function);
| | var curryyyymm = myMonths[currmonth] + ' ' + curryear; |
| regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function); | |
| regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function); | |
| regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function); | |
| regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function); | |
| regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function); | |
| regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function); | |
| regex(/([\s\S])(জুন 4th (?:incident|museum))([\s\S])/gi, protect_function);
| |
| regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function);
| |
| regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function);
| |
| regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function);
| |
| regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function);
| |
| regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function);
| |
| regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function);
| |
| regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function);
| |
|
| |
| regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function);
| |
| regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function);
| |
| regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function);
| |
| regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function);
| |
| regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function); | |
|
| |
|
| // works names
| | // step 1: normalize redirect template names to canonical template names 'Use dmy dates' or 'Use mdy dates' according to 'format' argument |
| // regex(/(.)(protect string)(.)/gi, protect_function); | | // rename redirects 'dmy', 'mdy', 'usedmydates', 'usemdydates' ('usedmydates' and 'usemdydates' are not currently listed as redirects but might be encountered?) |
| regex(/(.)(11\/22\/63)(.)/gi, protect_function);
| | regex(/\{\{ *(?:use(?:dmy|mdy)dates|dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1'); |
| regex(/(.)(1\.1\.1994)(.)/gi, protect_function); | | // rename redirects 'usedmy', 'usemdy', 'use dmy', 'use mdy' to canonical form |
| regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);
| | regex(/\{\{ *use *(?:dmy|mdy) *([\|\}])/gi, '{{Use ' + format + ' dates$1'); |
| // regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally | | // strip leading / trailing whitespace from 'use xxx dates' |
| regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function);
| | regex(/\{\{ *use (?:dmy|mdy) dates *([\|\}])/gi, '{{Use ' + format + ' dates$1'); |
| regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function);
| |
| regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function);
| |
| regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function);
| |
| ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function); | |
| ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function);
| |
| // regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function); | |
| regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function); | |
| regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function);
| |
| regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function);
| |
| ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function);
| |
| ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function);
| |
| ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function);
| |
|
| |
|
| // expressions and grammatical strings including modal "মে" | | // step 2: look for a canonical template name (the above might not have had anthing to work on) ; if found continue, write new template else |
| regex(/(\W)((?:\d{1,3}) মে)((?: have(?: \w+|)|) be)/g, protect_function); | | var rxpdd = new RegExp("{{Use " + format + " dates", "gi"); // here we search for canonical form {{use xxx dates}} that has current date |
| regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function); | | var dflagfound = txt.value.search(rxpdd); |
| regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function); | | if (dflagfound === -1) { |
| | txt.value = '{{Use ' + format + ' dates|date=' + curryyyymm + '}}\r\n' + txt.value; // not found so insert new template at top of wikitext |
| | return; // and done |
| | } |
| | |
| | // step 3: rewrite existing canonical templates; add or refresh |date= to current month year; preserve |cs1-dates= as is |
| | regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|]*\| *cs1\-dates *= *([^\|\}]*?) *\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |date= followed by |cs1-dates= |
| | regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) *\| *date *=[^\}]*\}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates= followed by |date= |
| | regex(/(\{\{use (?:dmy|mdy) dates)\| *date *=[^\|\}]*\}\}/gi, '$1|date=' + curryyyymm + '}}'); // with |date= |
| | regex(/(\{\{use (?:dmy|mdy) dates)\| *cs1\-dates *= *([^\|\}]*?) \}\}/gi, '$1|date=' + curryyyymm + '|cs1-dates=$2}}'); // with |cs1-dates |
| | regex(/(\{\{use (?:dmy|mdy) dates)\}\}/gi, '$1|date=' + curryyyymm + '}}'); // no parameters so add |date=curryyyymm |
| | regex(/(\{\{[\t_ ]*use[\t_ ]+(?:dmy|mdy)[\t_ ]+dates[^{}]*\}\})([\r\n\t ]*)(\{\{[\t ]*short description[^{}]*\}\})/gi, '$3$2$1'); // repositioning "short description" template at the top |
| } | | } |
| | |
| | |
|
| |
|
| /** ------------------------------------------------------------------------ **/ | | /** ------------------------------------------------------------------------ **/ |
| /// DATE PROTECTION FOR ALL REF SECTION | | /// DATE PROTECTION |
|
| |
|
| var linkmap = []; | | var linkmap = []; |
|
| |
|
| function ohc_protect_dates_ref() | | function ohc_protect_dates() |
| { | | { |
| // protects dates within links, quotes, etc | | // protects dates within links, quotes, etc |
| // the sensitive part is stored and replaced with a unique identifier, | | // the sensitive part is stored and replaced with a unique identifier, |
| // which is later replaced with the stored part. | | // which is later replaced with the stored part. |
| | | |
| var protect_function = function (s, begin, replace, end) { | | var protect_function = function(s, begin, replace, end) { |
| linkmap.push(replace); | | linkmap.push(replace); |
| return begin + "⍌" + (linkmap.length - 1) + "⍍" + end; | | return begin + "⍌"+(linkmap.length-1)+"⍍" + end; |
| }; | | }; |
| | | //\|x= |
| regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function);
| |
| regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function); | | regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function); |
| | regex(/(<!--)([^<\{\}]*?)(-->)/gi, protect_function); |
| regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function); | | regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function); |
| regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function); | | regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function); |
| | regex(/(<ref)([^>]+)(>)/gi, protect_function); |
| regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function); | | regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function); |
| regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function); | | regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function); |
| regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function); | | regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function); |
| regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function); | | regex(/(\{\{(?:harvnb|r|wikisource)\|)([^}]+)(\})/gi, protect_function); |
| | regex(/(\{\{(?:Canadian federal by-election))([^}]+)(\}\})/gi, protect_function); |
| | |
| regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function); | | regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function); |
| regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function); | | regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function); |
| //regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);
| | // regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function); |
| regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function); | | regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function); |
| | regex(/(<noinclude>)([\s\S]*?)(<\/noinclude>)/gi, protect_function); |
| | regex(/(<gallery)([\s\S]*?)(<\/gallery>)/gi, protect_function); |
| | regex(/(<poem>)([\s\S]*?)(<\/poem>)/gi, protect_function); |
| regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function); | | regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function); |
| regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function); | | regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|map\d|pic)\s*=)([^|}]*)([|}])/gi, protect_function); |
| regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); | | regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); |
| regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); | | regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|(?:trans-?|)title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); |
| regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function); | | regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function); |
| | regex(/([\|\{]\s*(?:[xy])\s*=)(\s*[^\|]+\s*)(\|)/gi, protect_function); |
| regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function); | | regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function); |
| regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function); | | regex(/(\{\{(?:singlechart)\|)([^}]+)(\})/gi, protect_function); |
| regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function); | | regex(/(\{\{(?:defaultsort|graph):)([^}]+)(\})/gi, protect_function); |
| regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function); | | regex(/(["“])([^"”\n]*)(["”])/gi, protect_function); |
| regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function);
| |
| regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function); | | regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function); |
| regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function); | | regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function); |
| | regex(/(\[\[)(4AD)(\]\]|\|)/gi, protect_function); |
|
| |
|
| //retraining redirects containing a date | | //retraining redirects containing a date |
| regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2'); | | regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2'); |
| regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2'); | | regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2'); |
| ohc_regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2'); | | regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2'); |
| ohc_regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2'); | | regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2'); |
|
| |
|
| //protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive) | | //protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive) |
| ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function);
| | // ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function); //disabled 26 মে – not case senstitve: false negatives in converting dates in মে |
| ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function); | | ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function); |
|
| |
|
| ৯৮৪ নং লাইন: |
১,৭১৬ নং লাইন: |
| regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function); | | regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function); |
| regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function); | | regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function); |
| | regex(/([\s\S])(National সেপ্টেম্বর 11 Memorial & Museum)([\s\S])/gi, protect_function); |
| | regex(/([\s\S])(Queen Elizabeth II সেপ্টেম্বর 11th Garden)([\s\S])/gi, protect_function); |
| regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function); | | regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function); |
| regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function); | | regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function); |
| ৯৯০ নং লাইন: |
১,৭২৪ নং লাইন: |
| regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function); | | regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function); |
| regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function); | | regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function); |
| regex(/([\s\S])(জুন 4th incident)([\s\S])/gi, protect_function); | | regex(/([\s\S])(জুন 4th (?:incident|museum))([\s\S])/gi, protect_function); |
| regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function); | | regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function); |
| regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function); | | regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function); |
| ১,০০৬ নং লাইন: |
১,৭৪০ নং লাইন: |
|
| |
|
| // works names | | // works names |
| //regex(/(.)(protect string)(.)/gi, protect_function);
| | // regex(/(.)(protect string)(.)/gi, protect_function); |
| regex(/(.)(11\/22\/63)(.)/gi, protect_function); | | regex(/(.)(11\/22\/63)(.)/gi, protect_function); |
| regex(/(.)(1\.1\.1994)(.)/gi, protect_function); | | regex(/(.)(1\.1\.1994)(.)/gi, protect_function); |
| regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function); | | regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function); |
| //regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally
| | // regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally |
| regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function); | | regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function); |
| regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function); | | regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function); |
| ১,০১৭ নং লাইন: |
১,৭৫১ নং লাইন: |
| ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function); | | ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function); |
| ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function); | | ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function); |
| //regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function);
| | // regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function); |
| regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function); | | regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function); |
| regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function); | | regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function); |
| ১,০২৫ নং লাইন: |
১,৭৫৯ নং লাইন: |
| ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function); | | ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function); |
|
| |
|
| | // expressions and grammatical strings including modal "মে" |
| | regex(/(\W)((?:\d{1,3}) মে)((?: have(?: \w+|)|) be)/g, protect_function); |
| regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function); | | regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function); |
| regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function); | | regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function); |
| } | | } |
|
| |
|
| |
|
| /** ------------------------------------------------------------------------ **/ | | /** ------------------------------------------------------------------------ **/ |
| /// DATE PROTECTION FOR SLASH modules | | /// DATE PROTECTION FOR ALL REF SECTION |
|
| |
|
| var linkmap = []; | | var linkmap = []; |
|
| |
|
| function ohc_protect_dates_slash() | | function ohc_protect_dates_ref() |
| { | | { |
| // protects dates within links, quotes, etc | | // protects dates within links, quotes, etc |
| ১,০৭১ নং লাইন: |
১,৮০৬ নং লাইন: |
| regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function); | | regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function); |
|
| |
|
| }
| | //retraining redirects containing a date |
| | regex(/(\[\[)(?:সেপ্টেম্বর 3 Society)(\]\]|\|)/gi, '$1Jiusan Society$2'); |
| | regex(/(\[\[)(?:জুন 4th incident)(\]\]|\|)/gi, '$1Tiananmen Square protests of 1989$2'); |
| | ohc_regex(/(\[\[)(?:5@th? অক্টোবর (?:\(Serbia\)|overthrow))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2'); |
| | ohc_regex(/(\[\[)(?:অক্টোবর 5@th?(?: \(Serbia\)| overthrow|, 2000))(\]\]|\|)/gi, '$1Overthrow of Slobodan Milošević$2'); |
|
| |
|
| function ohc_unprotect_dates()
| | //protect alternate meanings of 'মে' and 'মার্চ' (note: not case insensitive) |
| {
| | ohc_regex(/([^\w])(@day,?\s{0,3}মে)([^\w][^\d])/g, protect_function); |
| //unprotect all dates | | ohc_regex(/([^\w])(মার্চ\s@day)(\s(?:mile|kilomet|met))/g, protect_function); |
| regex(/[♫]/g, '');
| |
| regex(/⍌([0-9]+)⍍/g, function (x, n) { | |
| var res = linkmap[n];
| |
| res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
| |
| var res = linkmap[n];
| |
| res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
| |
| var res = linkmap[n];
| |
| res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) {
| |
| return linkmap[n];
| |
| });
| |
| return res;
| |
| });
| |
| return res;
| |
| });
| |
| return res;
| |
| });
| |
| }
| |
|
| |
|
| function ohc_MOSNUM_edit_summary()
| | //protect all links containing a date and some text |
| {
| | ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@day[^\]\|\n]+?@fullmonth[^\]\|\n]*)(\]\]|\|)/gi, protect_function); |
| //Add a tag to the summary box | | ohc_regex(/(\[\[)([^\]\|\n]*?@day[^\]\|\n]+?@fullmonth(?:,? @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function); |
| setoptions(minor = 'true'); | | ohc_regex(/(\[\[)(\s*\w[^\]\|\n]+?@fullmonth[^\]\|\n]+?@day[^\]\|\n]*)(\|)/gi, protect_function); |
| setreason('date formats per [[MOS:DATEFORMAT]] by [[WP:MOSNUMscript|script]]', 'append'); | | ohc_regex(/(\[\[)([^\]\|\n]*?@fullmonth[^\]\|\n]+?@day(?:, @year|) \D[^\]\|\n]+\w\s*)(\]\]|\|)/gi, protect_function); |
| doaction('diff'); | |
| }
| |
|
| |
|
| function ohc_bigendien_edit_summary()
| | //protects certain dates |
| {
| | regex(/(\[\[)(4AD)([\s\S])/gi, protect_function); |
| //Add a tag to the summary box | | regex(/([\s\S])(মার্চ (?:8|14) Alliance)([\s\S])/gi, protect_function); |
| setoptions(minor = 'true'); | | regex(/([\s\S])(23rd মার্চ 1931: Shaheed)([\s\S])/gi, protect_function); |
| setreason('ymd ref dates', 'append'); | | regex(/([\s\S])(Long মার্চ [1-7])([\s\S])/gi, protect_function); |
| doaction('diff'); | | regex(/([\s\S])(Bombay মার্চ 12)([\s\S])/gi, protect_function); |
| }
| | regex(/([\s\S])(movement 2 জুন)([\s\S])/gi, protect_function); |
| | | regex(/([\s\S])(6th\sof অক্টোবর City)([\s\S])/gi, protect_function); |
| function ohc_expand_edit_summary()
| | regex(/([\s\S])(Party Workers' Liberation Front 30th of মে)([\s\S])/gi, protect_function); |
| {
| | regex(/([\s\S])(4th\sof আগষ্ট regime)([\s\S])/gi, protect_function); |
| //Add a tag to the summary box | | regex(/([\s\S])(19th\sof এপ্রিল movement)([\s\S])/gi, protect_function); |
| setoptions(minor = 'true'); | | regex(/([\s\S])(জুন 4th incident)([\s\S])/gi, protect_function); |
| setreason('expand month names', 'append'); | | regex(/([\s\S])(The Battle Of Marston Moor \(জুলাই 2nd,? 1644\))([\s\S])/gi, protect_function); |
| doaction('diff'); | | regex(/([\s\S])(Night of জানুয়ারি 16th)([\s\S])/gi, protect_function); |
| }
| | regex(/([\s\S])(Observance of 5th নভেম্বর Act)([\s\S])/gi, protect_function); |
| | regex(/(\[\[)(13 মে incident)(\|)/gi, protect_function); |
| | regex(/(\'\'\')(22nd\sof মে)(\'\'\')/gi, protect_function); |
| | regex(/(\[\[)(22nd\sof মে \(film\))([|\]\'])/gi, protect_function); |
| | regex(/(\[\[)(জুলাই 12, 2007, Baghdad airstrike)(\|)/gi, protect_function); |
| | |
| | regex(/(\[\[)(নভেম্বর 1828)(\]\])/gi, protect_function); |
| | regex(/(.)(4th\sof জুলাই)(.)/gi, protect_function); |
| | regex(/(\[\[)((?:2300|2000)\s?AD)(\]\])/gi, protect_function); |
| | regex(/(\[\[)(29 ফেব্রুয়ারি)(\]\])/gi, protect_function); |
| | regex(/(\[\[)(ফেব্রুয়ারি 29)(\]\])/gi, protect_function); |
|
| |
|
| function ohc_slash_edit_summary()
| | // works names |
| {
| | //regex(/(.)(protect string)(.)/gi, protect_function); |
| //Add a tag to the summary box | | regex(/(.)(11\/22\/63)(.)/gi, protect_function); |
| setoptions(minor = 'true'); | | regex(/(.)(1\.1\.1994)(.)/gi, protect_function); |
| setreason('resolved slash dates', 'append'); | | regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function); |
| doaction('diff'); | | //regex(/(.)(4th of জুলাই, Asbury)(.)/gi, protect_function); //protected above globally |
| }
| | regex(/(.)(26 অক্টোবর 1993)(.)/gi, protect_function); |
| | | regex(/(\[\[|\'\')(জুন 1, 1974)(.)/gi, protect_function); |
| function ohc_abbrev_edit_summary()
| | regex(/(\[\[|\'\')(জুলাই 15, 1972)(.)/gi, protect_function); |
| {
| | regex(/(\[\[|\'\')(আগষ্ট 1914)(.)/gi, protect_function); |
| //Add a tag to the summary box | | ohc_regex(/(\[\[|\'\')(@fullmonth @dd@th? \((?:@yyyy |)film\)(?:\|@fullmonth @dd@th?|))([\s\S])/gi, protect_function); |
| setoptions(minor = 'true'); | | ohc_regex(/(\[\[|\'\')(@dd@th? @fullmonth \((?:@yyyy |)film\)(?:\|@dd@th? @fullmonth|))([\s\S])/gi, protect_function); |
| setreason('abbrev month names', 'append'); | | //regex(/(Les Bains Douches 18)( ডিসেম্বর 1979)(.)/gi, protect_function); |
| doaction('diff'); | | regex(/(আগষ্ট)( 7, 4:15)(.)/gi, protect_function); |
| }
| | regex(/(In Concert, Zürich, অক্টোবর)( 28, 1979)(.)/gi, protect_function); |
| | regex(/(CBGB OMFUG Masters: Live জুন)( 29, 2001)(.)/gi, protect_function); |
| | ohc_regex(/(Live at [\w ]*,? [1-3]\d)( @fullmonth)(.)/gi, protect_function); |
| | ohc_regex(/(Live at [\w ]*,? @fullmonth)( @dd)(.)/gi, protect_function); |
| | ohc_regex(/(Bootmoon Series: [\w ]*[-–] @fullmonth)( @day, @YYYY)(.)/gi, protect_function); |
|
| |
|
| /** ------------------------------------------------------------------------ **/ | | regex(/(\W)((?:\d{3}|3[2-9]|[4-9]\d)\/\d ডিসেম্বর(?:l\.?|))(\W)/gi, protect_function); |
| /// CUSTOMIZATION POINTS | | regex(/(\W)((?:\d{2,3})\/\d ডিসেম্বর(?:l\.?|))( \(\d\d? overs)/gi, protect_function); |
| function ohc_customize_all_to_dmy() {
| |
| } | | } |
|
| |
|
| function ohc_customize_all_to_mdy() {
| |
| }
| |
|
| |
|
| function ohc_customize_body_to_dmy() {
| | /** ------------------------------------------------------------------------ **/ |
| }
| | /// DATE PROTECTION FOR SLASH modules |
|
| |
|
| function ohc_customize_body_to_mdy() {
| | var linkmap = []; |
| }
| |
|
| |
|
| function ohc_customize_ISO_to_dmy() { | | function ohc_protect_dates_slash() |
| }
| | { |
| | // protects dates within links, quotes, etc |
| | // the sensitive part is stored and replaced with a unique identifier, |
| | // which is later replaced with the stored part. |
|
| |
|
| function ohc_customize_ISO_to_mdy() { | | var protect_function = function (s, begin, replace, end) { |
| } | | linkmap.push(replace); |
| | return begin + "⍌" + (linkmap.length - 1) + "⍍" + end; |
| | }; |
|
| |
|
| /** ------------------------------------------------------------------------ **/ | | regex(/(<ref\s?(?:>|name=[^>]+))([^<]+)(<\/ref>)/gi, protect_function); |
| function ohc_body_dates_to_dmy()
| | regex(/(<timeline>)([\s\S]*?)(<\/timeline>)/gi, protect_function); |
| { | | regex(/(<math>)([\s\S]*?)(<\/math>)/gi, protect_function); |
| ohc_use_dates_template('dmy'); | | regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function); |
| | | regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function); |
| ohc_fix_common_errors(); | | regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function); |
| ohc_fix_dts_template('dmy'); | | regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function); |
| ohc_fix_gr_template('dmy'); | | regex(/(\{\{(?:harvnb|wikisource)\|)([^}]+)(\})/gi, protect_function); |
| ohc_dates_to_dmy(); | | regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function); |
| ohc_remove_leading_zeroes(); | | regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function); |
| ohc_fix_dmy_redundancies(); | | //regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function); |
| } | | regex(/(<blockquote>)([\s\S]*?)(<\/blockquote>)/gi, protect_function); |
| | regex(/(\{[^\{]{0,6}(?:quot[^|]{1,7}\s?|sic)\|)([^}]+)(\})/gi, protect_function); |
| | regex(/((?:image\d?|image_skyline|image[ _]location\d?|image[ _]name|image[ _]file|img|pic)\s*=)([^|}]*)([|}])/gi, protect_function); |
| | regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); |
| | regex(/([\|\{]\s*(?:file(?:name\d?|)|image\d?|image location\d?|img|pic|Cover|title|quote|chapter|journal|url|archiveurl|work|doi|club|at|volume|reporter)\s*=)([^|\}⍍]*)([|}])/gi, protect_function); |
| | regex(/([\|\{]\s*(?:season)\s*=)(\s*\[\[[^\]]*\]\]\s*)([|}])/gi, protect_function); |
| | regex(/(\{\{navsource\|)([^}]+)(\})/gi, protect_function); |
| | regex(/(\{\{singlechart\|)([^}]+)(\})/gi, protect_function); |
| | regex(/(\{\{defaultsort:)([^}]+)(\})/gi, protect_function); |
| | regex(/([\s\(>]")([^"\n]*)(")/gi, protect_function); |
| | regex(/([\s\(>]“)([^”\n]*)(”)/gi, protect_function); |
| | regex(/(.)(\(\{\{by\|[12]\d{3}\}\}[-–]\{\{by\|)([12]\d{3}[ ]*\}\}\))/gi, protect_function); |
| | regex(/(.)(\(\{\{by\|[12]\d{3}\}\}(?:[-–]present|))(\))/gi, protect_function); |
|
| |
|
| function ohc_body_dates_to_mdy()
| |
| {
| |
| ohc_use_dates_template('mdy');
| |
| ohc_fix_common_errors();
| |
| ohc_fix_dts_template('mdy');
| |
| ohc_fix_gr_template('mdy');
| |
| ohc_dates_to_mdy();
| |
| ohc_remove_leading_zeroes();
| |
| ohc_fix_mdy_redundancies();
| |
| } | | } |
|
| |
|
| /** ------------------------------------------------------------------------ **/
| | function ohc_unprotect_dates() |
| function ohc_all_to_dmy_driver(e) | |
| { | | { |
| e.preventDefault(); | | //unprotect all dates |
| ohc_delink_dates(); | | regex(/[♫]/g, ''); |
| ohc_protect_dates();
| | regex(/⍌([0-9]+)⍍/g, function (x, n) { |
| ohc_fix_unambiguous_dates();
| | var res = linkmap[n]; |
| ohc_body_dates_to_dmy();
| | res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) { |
| ohc_delink_ISO_to_dmy();
| | var res = linkmap[n]; |
| ohc_delink_year_in_X();
| | res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) { |
| ohc_customize_all_to_dmy();
| | var res = linkmap[n]; |
| ohc_ISO_to_dmy_in_citations();
| | res = res.replace(/⍌([0-9]+)⍍/g, function (x, n) { |
| ohc_unprotect_dates();
| | return linkmap[n]; |
| | | }); |
| ohc_MOSNUM_edit_summary(); | | return res; |
| | }); |
| | return res; |
| | }); |
| | return res; |
| | }); |
| } | | } |
|
| |
|
| function ohc_all_to_mdy_driver(e) | | function ohc_MOSNUM_edit_summary() |
| { | | { |
| e.preventDefault(); | | //Add a tag to the summary box |
| ohc_delink_dates();
| | setoptions(minor = 'true'); |
| ohc_protect_dates();
| | setreason('date formats per [[MOS:DATEFORMAT]] by [[WP:MOSNUMscript|script]]', 'append'); |
| ohc_fix_unambiguous_dates();
| | doaction('diff'); |
| ohc_body_dates_to_mdy(); | |
| ohc_delink_ISO_to_mdy(); | |
| ohc_delink_year_in_X(); | |
| ohc_customize_all_to_mdy();
| |
| ohc_ISO_to_mdy_in_citations();
| |
| ohc_unprotect_dates();
| |
| | |
| ohc_MOSNUM_edit_summary();
| |
| } | | } |
|
| |
|
| function ohc_dmy_publication_dates_driver(e) | | function ohc_bigendien_edit_summary() |
| { | | { |
| e.preventDefault(); | | //Add a tag to the summary box |
| // ohc_delink_dates(); | | setoptions(minor = 'true'); |
| ohc_protect_dates();
| | setreason('ymd ref dates', 'append'); |
| ohc_body_dates_to_dmy(); | | doaction('diff'); |
| ohc_customize_body_to_dmy(); | |
| ohc_dmy_publication_dates(); | |
| ohc_unprotect_dates();
| |
| | |
| ohc_MOSNUM_edit_summary();
| |
| } | | } |
|
| |
|
| function ohc_mdy_publication_dates_driver(e) | | function ohc_expand_edit_summary() |
| { | | { |
| e.preventDefault(); | | //Add a tag to the summary box |
| // ohc_delink_dates(); | | setoptions(minor = 'true'); |
| ohc_protect_dates();
| | setreason('expand month names', 'append'); |
| ohc_body_dates_to_mdy();
| | doaction('diff'); |
| ohc_customize_body_to_mdy();
| |
| ohc_mdy_publication_dates(); | |
| ohc_unprotect_dates(); | |
| | |
| ohc_MOSNUM_edit_summary(); | |
| | |
| } | | } |
|
| |
|
| function ohc_body_to_dmy_driver(e) | | function ohc_slash_edit_summary() |
| { | | { |
| e.preventDefault(); | | //Add a tag to the summary box |
| // ohc_delink_dates(); | | setoptions(minor = 'true'); |
| ohc_protect_dates_ref();
| | setreason('resolved slash dates', 'append'); |
| ohc_body_dates_to_dmy(); | | doaction('diff'); |
| ohc_customize_body_to_dmy(); | |
| ohc_unprotect_dates(); | |
| | |
| ohc_MOSNUM_edit_summary();
| |
| } | | } |
|
| |
|
| function ohc_body_to_mdy_driver(e) | | function ohc_abbrev_edit_summary() |
| { | | { |
| e.preventDefault(); | | //Add a tag to the summary box |
| // ohc_delink_dates(); | | setoptions(minor = 'true'); |
| ohc_protect_dates_ref(); | | setreason('abbrev month names', 'append'); |
| ohc_body_dates_to_mdy(); | | doaction('diff'); |
| ohc_customize_body_to_mdy(); | | } |
| ohc_unprotect_dates();
| |
|
| |
|
| ohc_MOSNUM_edit_summary();
| | /** ------------------------------------------------------------------------ **/ |
| | /// CUSTOMIZATION POINTS |
| | function ohc_customize_all_to_dmy() { |
| } | | } |
|
| |
|
| function ohc_ISO_to_dmy_driver(e) | | function ohc_customize_all_to_mdy() { |
| { | | } |
| e.preventDefault();
| |
| ohc_protect_dates();
| |
| ohc_delink_ISO_to_dmy();
| |
| ohc_customize_ISO_to_dmy();
| |
| ohc_unprotect_dates();
| |
|
| |
|
| // ohc_MOSNUM_edit_summary();
| | function ohc_customize_body_to_dmy() { |
| } | | } |
|
| |
|
| function ohc_ISO_to_mdy_driver(e) { | | function ohc_customize_body_to_mdy() { |
| e.preventDefault();
| |
| ohc_protect_dates();
| |
| ohc_delink_ISO_to_mdy();
| |
| ohc_customize_ISO_to_mdy();
| |
| ohc_unprotect_dates();
| |
| | |
| // ohc_MOSNUM_edit_summary();
| |
| } | | } |
|
| |
|
| function ohc_delink_year_in_X_driver(e) | | function ohc_customize_ISO_to_dmy() { |
| { | |
| e.preventDefault();
| |
| ohc_delink_year_in_X();
| |
| } | | } |
|
| |
|
| function ohc_expand_ref_dates_driver(e) { | | function ohc_customize_ISO_to_mdy() { |
| e.preventDefault();
| |
| ohc_expand_ref_dates();
| |
| ohc_protect_dates();
| |
| ohc_unprotect_dates();
| |
| ohc_expand_edit_summary();
| |
| } | | } |
|
| |
|
| function ohc_expand_all_dates_driver(e) | | /** ------------------------------------------------------------------------ **/ |
| | function ohc_body_dates_to_dmy() |
| { | | { |
| e.preventDefault(); | | ohc_use_dates_template('dmy'); |
| ohc_expand_ref_dates();
| |
| ohc_protect_dates();
| |
| ohc_expand_all_dates();
| |
| ohc_unprotect_dates();
| |
| ohc_expand_edit_summary();
| |
| }
| |
|
| |
|
| function ohc_abbrev_ref_dates_driver(e) | | ohc_fix_common_errors(); |
| | ohc_fix_dts_template('dmy'); |
| | ohc_fix_gr_template('dmy'); |
| | ohc_dates_to_dmy(); |
| | ohc_remove_leading_zeroes(); |
| | ohc_fix_dmy_redundancies(); |
| | } |
| | |
| | function ohc_body_dates_to_mdy() |
| { | | { |
| e.preventDefault(); | | ohc_use_dates_template('mdy'); |
| ohc_protect_dates(); | | ohc_fix_common_errors(); |
| ohc_abbrev_ref_dates(); | | ohc_fix_dts_template('mdy'); |
| ohc_unprotect_dates(); | | ohc_fix_gr_template('mdy'); |
| ohc_slash_edit_summary(); | | ohc_dates_to_mdy(); |
| | ohc_remove_leading_zeroes(); |
| | ohc_fix_mdy_redundancies(); |
| } | | } |
|
| |
|
| function ohc_UK_slash_dates_driver(e) | | /** ------------------------------------------------------------------------ **/ |
| | function ohc_all_to_dmy_driver(e) |
| { | | { |
| e.preventDefault(); | | e.preventDefault(); |
| ohc_expand_ref_dates(); | | ohc_delink_dates(); |
| ohc_protect_dates_slash(); | | ohc_protect_dates(); |
| ohc_UK_slash_dates_to_dmy();
| | ohc_fix_unambiguous_dates(); |
| ohc_unprotect_dates(); | | ohc_body_dates_to_dmy(); |
| ohc_slash_edit_summary(); | | ohc_delink_ISO_to_dmy(); |
| | ohc_delink_year_in_X(); |
| | ohc_customize_all_to_dmy(); |
| | ohc_ISO_to_dmy_in_citations(); |
| | ohc_unprotect_dates(); |
| | |
| | ohc_MOSNUM_edit_summary(); |
| } | | } |
|
| |
|
| function ohc_US_slash_dates_driver(e) | | function ohc_all_to_mdy_driver(e) |
| { | | { |
| e.preventDefault(); | | e.preventDefault(); |
| ohc_expand_ref_dates(); | | ohc_delink_dates(); |
| ohc_protect_dates_slash(); | | ohc_protect_dates(); |
| ohc_US_slash_dates_to_mdy();
| | ohc_fix_unambiguous_dates(); |
| | ohc_body_dates_to_mdy(); |
| | ohc_delink_ISO_to_mdy(); |
| | ohc_delink_year_in_X(); |
| | ohc_customize_all_to_mdy(); |
| | ohc_ISO_to_mdy_in_citations(); |
| ohc_unprotect_dates(); | | ohc_unprotect_dates(); |
| ohc_expand_edit_summary(); | | |
| | ohc_MOSNUM_edit_summary(); |
| } | | } |
|
| |
|
| // </pre> | | function ohc_dmy_publication_dates_driver(e) |
| | { |
| | e.preventDefault(); |
| | // ohc_delink_dates(); |
| | ohc_protect_dates(); |
| | ohc_body_dates_to_dmy(); |
| | ohc_customize_body_to_dmy(); |
| | ohc_dmy_publication_dates(); |
| | ohc_unprotect_dates(); |
|
| |
|
| //সংশ্লিষ্ট পাতা ত্যাগ না করেই অন্য পাতা থেকে পুনর্নির্দেশ করা যাবে।
| | ohc_MOSNUM_edit_summary(); |
| //<nowiki>
| | } |
| ( function () {
| | |
| var redir = $(mw.util.addPortletLink('p-tb','#','পুনর্নির্দেশক','পুনর্নির্দেশ তৈরিকারী','পুনর্নির্দেশ তৈরিকারী','','#pt-mytalk')); | | function ohc_mdy_publication_dates_driver(e) |
| $( redir ).click( function() {
| | { |
| var redirec = prompt("যে পাতা থেকে এই পাতায় পুনর্নির্দেশ করতে চান তার নাম লিখুন:", "");
| | e.preventDefault(); |
| if (redirec === null || redirec === "") {
| | // ohc_delink_dates(); |
| alert( 'আপনি কোনও নাম প্রবেশ করান নি। দয়া করে আবার চেষ্টা করুন।' );
| | ohc_protect_dates(); |
| } else {
| | ohc_body_dates_to_mdy(); |
| var params = {
| | ohc_customize_body_to_mdy(); |
| action: 'edit',
| | ohc_mdy_publication_dates(); |
| title: redirec ,
| | ohc_unprotect_dates(); |
| createonly: 1,
| | |
| prependtext: '#পুনর্নির্দেশ [[' + mw.config.get("wgPageName") + ']]',
| | ohc_MOSNUM_edit_summary(); |
| appendtext: " \n" + '{{একটি পুনর্নির্দেশ}}',
| | |
| summary: '[[' + mw.config.get("wgPageName") + ']] পাতায় পুনর্নির্দেশ করা হল' ,
| | } |
| format: 'json'
| |
| };
| |
| api = new mw.Api();
| |
| api.postWithToken( 'csrf', params ).done( function ( data ) {
| |
| alert( 'সফলভাবে ' + redirec + ' পাতা থেকে একটি পুনর্নির্দেশ তৈরি করা হয়েছে!' );
| |
| });
| |
| }
| |
| }
| |
| );
| |
| }() );
| |
| //</nowiki>
| |
|
| |
|
| //<nowiki>
| | function ohc_body_to_dmy_driver(e) |
| ( function () {
| | { |
| var talkp = $(mw.util.addPortletLink('p-tb','#','স্বাগত জানান','স্বাগত জানান','স্বাগত জানান','','#pt-mytalk'));
| | e.preventDefault(); |
| $( talkp ).click( function() {
| | // ohc_delink_dates(); |
| var talk = prompt("কোন ধরনের স্বাগত বার্তা যুক্ত করতে চান এমন টেমপ্লেটটি লিখুন {{Subst:}} সাথে, অন্যথায় পূর্বনির্ধারিত {{Subst:স্বাগতম}} যুক্ত হবে:", "");
| | ohc_protect_dates_ref(); |
| if (talk === null || talk === "") {
| | ohc_body_dates_to_dmy(); |
| var params1 = {
| | ohc_customize_body_to_dmy(); |
| action: 'edit',
| | ohc_unprotect_dates(); |
| title: 'User talk:' + mw.config.get("wgRelevantUserName"),
| | |
| prependtext: '{{Subst:স্বাগতম}}'
| | ohc_MOSNUM_edit_summary(); |
| ,
| | } |
| summary: 'ভারতপিডিয়ায় স্বাগতম!',
| | |
| format: 'json'
| | function ohc_body_to_mdy_driver(e) |
| };
| | { |
| api = new mw.Api();
| | e.preventDefault(); |
|
| | // ohc_delink_dates(); |
| api.postWithToken( 'csrf', params1 ).done( function ( data ) {
| | ohc_protect_dates_ref(); |
| alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
| | ohc_body_dates_to_mdy(); |
| } );
| | ohc_customize_body_to_mdy(); |
|
| | ohc_unprotect_dates(); |
| } else {
| | |
| var params = {
| | ohc_MOSNUM_edit_summary(); |
| action: 'edit',
| | } |
| title: 'User talk:' + mw.config.get("wgRelevantUserName"),
| | |
| prependtext: talk
| | function ohc_ISO_to_dmy_driver(e) |
| ,
| | { |
| summary: 'ভারতপিডিয়ায় স্বাগত!',
| | e.preventDefault(); |
| format: 'json'
| | ohc_protect_dates(); |
| };
| | ohc_delink_ISO_to_dmy(); |
| api = new mw.Api();
| | ohc_customize_ISO_to_dmy(); |
|
| | ohc_unprotect_dates(); |
| api.postWithToken( 'csrf', params ).done( function ( data ) {
| | |
| alert( 'সফলভাবে স্বাগত জানানো হয়েছে!' );
| | // ohc_MOSNUM_edit_summary(); |
| } );
| | } |
| }
| | |
| }
| | function ohc_ISO_to_mdy_driver(e) { |
| );
| | e.preventDefault(); |
| }() );
| | ohc_protect_dates(); |
| //</nowiki>
| | ohc_delink_ISO_to_mdy(); |
| //<nowiki>
| | ohc_customize_ISO_to_mdy(); |
| console.time('mobileUndo');
| | ohc_unprotect_dates(); |
| $.when(mw.loader.using(['mediawiki.util', 'mediawiki.api', 'oojs-ui-windows', 'oojs-ui-core', 'oojs-ui.styles.icons-editing-core'])).then(function() {
| | |
| return new mw.Api().getMessages(['editundo', 'Undo-nochange']);
| | // ohc_MOSNUM_edit_summary(); |
| }).then(function(globalmessages) {
| | } |
| var mobileUndo, i18n_lang = mw.config.get('wgUserLanguage');
| | |
| var i18n = {
| | function ohc_delink_year_in_X_driver(e) |
| "en": {
| | { |
| "mu-success": "Successful",
| | e.preventDefault(); |
| "mu-fail": "Failed"
| | ohc_delink_year_in_X(); |
| | } |
| | |
| | function ohc_expand_ref_dates_driver(e) { |
| | e.preventDefault(); |
| | ohc_expand_ref_dates(); |
| | ohc_protect_dates(); |
| | ohc_unprotect_dates(); |
| | ohc_expand_edit_summary(); |
| | } |
| | |
| | function ohc_expand_all_dates_driver(e) |
| | { |
| | e.preventDefault(); |
| | ohc_expand_ref_dates(); |
| | ohc_protect_dates(); |
| | ohc_expand_all_dates(); |
| | ohc_unprotect_dates(); |
| | ohc_expand_edit_summary(); |
| | } |
| | |
| | function ohc_abbrev_ref_dates_driver(e) |
| | { |
| | e.preventDefault |
| } | | } |
| | | }); |
| // Shared API object
| | //End of code |
| var api;
| | //</nowiki> |
| | | window.wgRelevantUser = function() { |
| /*
| | var user; |
| * Regex *sources* for a "userspace" link. Basically the
| | if ($('.mw-mf-user-link').text() !== '') { |
| * localized equivalent of User( talk)?|Special:Contributions/
| | user = $('.mw-mf-user-link').text(); |
| * Initialized in buildUserspcLinkRgx, which is called near the top
| | } else { |
| * of the closure in handleWrapperClick.
| | user = $('#mw-mf-userinfo .post-content div:nth-child(2)').text(); |
| *
| | } |
| * Three subproperties: und for underscores instead of spaces (e.g.
| | return user; |
| * "User_talk"), spc for spaces (e.g. "User talk"), and both for
| |
| * a regex combining the two (used for matching on wikitext).
| |
| */
| |
| var userspcLinkRgx = null;
| |
| | |
| /**
| |
| * This dictionary is some global state that holds a dictionary
| |
| * for each "(reply)" link (keyed by their unique IDs):
| |
| *
| |
| * - indentation, the indentation string for the comment (e.g. ":*::")
| |
| * - sigIdx, the zero-based index of the signature from the top
| |
| * of the section
| |
| *
| |
| * This dictionary is populated in attachLinks, and unpacked in the
| |
| * click handler for the links (defined in attachLinkAfterNode); the
| |
| * values are then passed to doReply.
| |
| */
| |
| var metadata = {};
| |
| | |
| /**
| |
| * This global string flag is:
| |
| *
| |
| * - "AfD" if the current page is an AfD page
| |
| * - "MfD" if the current page is an MfD page
| |
| * - "TfD" if the current page is a TfD log page
| |
| * - "CfD" if the current page is a CfD log page
| |
| * - "FfD" if the current page is a FfD log page
| |
| * - "" otherwise
| |
| *
| |
| * This flag is initialized in onReady and used in attachLinkAfterNode
| |
| */
| |
| var xfdType;
| |
| | |
| /**
| |
| * The current page name, including namespace, because we may be reading it
| |
| * a lot (especially in findUsernameInElem if we're on someone's user
| |
| * talk page). Has underscores instead of spaces!
| |
| */
| |
| var currentPageName; | |
| | |
| /**
| |
| * A map for signatures that contain redirects, so that they can still
| |
| * pass the sanity check. This will be updated manually, because I
| |
| * don't want the overhead of a whole 'nother API call in the middle
| |
| * of the reply process. If this map grows too much, though, I'll
| |
| * consider switching to either a toolforge-hosted API or the
| |
| * Wikipedia API. Used in doReply, for the username sanity check.
| |
| */
| |
| var sigRedirectMapping = {
| |
| "Salvidrim": "Salvidrim!"
| |
| }; | | }; |
| | var href = ($('#mw-mf-diffarea > div.mw-mf-diff-info > h3 > a').attr('href')) || ''; |
| | window.wgRevId = href.split('&oldid=')[1]; |
| | if( $('#mw-mf-diffarea > ul > li.revision-history-next').length ) { |
| | $('#mw-mf-diffarea > div.mw-mf-diff-info > h3').append( |
| | $('<a>').attr('id','mobileRestore').attr('href','javascript:void(0)').append( |
| | $('<b>').text('(পুনরুদ্ধার)') |
| | ) |
| | ); |
| | } |
| | $('#mobileRestore').click(function(e){ |
| | e.preventDefault(); |
| | $('#mobileRestore b').text('(লোড হচ্ছে....)'); |
| | $('#mobileRestore').css('pointer-events','none'); |
| | var customEditSummary = prompt('পুনরুদ্ধারের কারণ (ঐচ্ছিক)'); |
| | if(customEditSummary === null) { |
| | $('#mobileRestore b').text('(পুনরুদ্ধার)'); |
| | $('#mobileRestore').css('pointer-events','auto'); |
| | return; |
| | } |
| | var username =wgRelevantUser(); |
| | var editSummary = '[[Special:Contributions/'+username+'|'+username+']] ([[User talk:'+username+'|আলাপ]])-এর করা ' +wgRevId+ 'নং সংস্করণ পুনরুদ্ধার করা হয়েছে'; |
| | editSummary = editSummary + customEditSummary + ' (পুনরুদ্ধারায়ন)'; |
| | $.when(mw.loader.load('mediawiki.api')).then(function(){ |
| | var api = new mw.Api(); |
| | api.get({ |
| | 'action':'query', |
| | 'prop':'revisions', |
| | 'titles':mw.config.get('wgRelevantPageName'), |
| | 'rvprop':'ids' |
| | }).done(function(result){ |
| | if(result.query.pages) { |
| | var StartRevId = result.query.pages[mw.config.get('wgRelevantArticleId')].revisions[0].revid; |
| | console.log(StartRevId); |
| | api.postWithToken('csrf', { |
| | action: "edit", |
| | title: mw.config.get('wgRelevantPageName'), |
| | summary: editSummary, |
| | undo:StartRevId, |
| | undoafter:wgRevId, |
| | }).done(function(result) { |
| | if (typeof result.edit.nochange !== 'undefined') { |
| | $('#mobileRestore b').text('(Failed)'); |
| | alert( 'No change occured'); |
| | return; |
| | } |
| | console.log(result); |
| | $('#mobileRestore b').text('(সফলভাবে হয়েছে)') |
| | mw.notify('সংস্করণ পুনরুদ্ধার সফল হয়েছে.... পুনঃলোড করা হচ্ছে'); |
| | setTimeout(function() { |
| | location.href = mw.util.getUrl('Special:MobileDiff/' + result.edit.newrevid); |
| | }, 1500); |
| | }).fail(function(code, jqxhr) { |
| | $('#mobileRestore b').text('(পুনরুদ্ধার কার্য বাতিল করা হয়েছে)'); |
| | var details; |
| | if (code === 'http' && jqxhr.textStatus === 'error') { |
| | details = 'HTTP error: ' + jqxhr.xhr.status; |
| | } else if (code === 'http') { |
| | details = 'HTTP error: ' + jqxhr.textStatus; |
| | } else if (code === 'ok-but-empty') { |
| | details = 'An empty response was given the server'; |
| | } else { |
| | details = jqxhr.error.info; |
| | } |
| | alert( details ); |
| | }); |
| | } else { |
| | alert('Failed to retrieve page details'); |
| | } |
| | }); |
| | }); |
| | }); |
|
| |
|
| /**
| | //history |
| * When the reply is saved via API, this flag is set to true to
| | mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/মোবাইল পার্থক্য ইতিহাস.js&action=raw&ctype=text/javascript'); |
| * disable the onbeforeunload handler.
| |
| */
| |
| var replyWasSaved = false;
| |
| | |
| /**
| |
| * Cache for getWikitext.
| |
| */
| |
| var getWikitextCache = {};
| |
| | |
| // Polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
| |
| if( !String.prototype.includes ) {
| |
| String.prototype.includes = function( search, start ) {
| |
| if( search instanceof RegExp ) {
| |
| throw TypeError('first argument must not be a RegExp');
| |
| }
| |
| if( start === undefined ) {
| |
| start = 0;
| |
| }
| |
| return this.indexOf( search, start ) !== -1;
| |
| };
| |
| }
| |
| | |
| /**
| |
| * Get the formatted namespace name for a namespace ID.
| |
| * Quick ref: user = 2, proj = 4
| |
| */
| |
| function fmtNs( nsId ) {
| |
| return mw.config.get( "wgFormattedNamespaces" )[ nsId ];
| |
| }
| |
| | |
| /**
| |
| * Escapes a string for inclusion in a regex.
| |
| */
| |
| function escapeForRegex( s ) {
| |
| return s.replace( /[-\/\\^$*+?.()|[\]{}]/g, '\\$&' );
| |
| }
| |
| | |
| /*
| |
| * MediaWiki turns spaces before certain punctuation marks
| |
| * into non-breaking spaces, so fix those. This is done by
| |
| * the armorFrenchSpaces function in Mediawiki, in the file
| |
| * /includes/parser/Sanitizer.php
| |
| */
| |
| function deArmorFrenchSpaces( text ) {
| |
| return text.replace( /\xA0([?:;!%»›])/g, " $1" )
| |
| .replace( /([«‹])\xA0/g, "$1 " );
| |
| }
| |
| | |
| /**
| |
| * Remove duplicates from an array.
| |
| * https://stackoverflow.com/a/9229821/1757964
| |
| */
| |
| function removeDuplicates( array ) {
| |
| var seen = {};
| |
| return array.filter( function( item ) {
| |
| return seen.hasOwnProperty( item ) ? false : ( seen[ item ] = true );
| |
| } );
| |
| }
| |
| | |
| /**
| |
| * Capitalize the first letter of a string.
| |
| */
| |
| function capFirstLetter( someString ) {
| |
| return someString.charAt( 0 ).toUpperCase() + someString.slice( 1 );
| |
| }
| |
| | |
| /**
| |
| * Namespace name to ID.
| |
| * For example, nsNameToId( "Template" ) === 10.
| |
| */
| |
| function nsNameToId( nsName ) {
| |
| return mw.config.get( "wgNamespaceIds" )[ nsName.toLowerCase().replace( / /g, "_" ) ];
| |
| }
| |
| | |
| /**
| |
| * Canonical-ize a namespace.
| |
| */
| |
| function canonicalizeNs( ns ) {
| |
| return fmtNs( nsNameToId( ns ) );
| |
| }
| |
| | |
| /**
| |
| * This function converts any (index-able) iterable into a list.
| |
| */
| |
| function iterableToList( nl ) {
| |
| var len = nl.length;
| |
| var arr = new Array( len );
| |
| for( var i = 0; i < len; i++ ) arr[i] = nl[i];
| |
| return arr;
| |
| }
| |
| | |
| /**
| |
| * Process HTML character entities.
| |
| * From https://stackoverflow.com/a/46851765
| |
| */
| |
| function processCharEntities( text ) {
| |
| var el = document.createElement('div');
| |
| return text.replace( /\&[#0-9a-z]+;/gi, function ( enc ) {
| |
| el.innerHTML = enc;
| |
| return el.innerText
| |
| } );
| |
| }
| |
| | |
| /**
| |
| * Process HTML character entities, MediaWiki style
| |
| * From https://stackoverflow.com/a/46851765
| |
| */
| |
| function processCharEntitiesWikitext( text ) {
| |
| var el = document.createElement('div');
| |
| return text.replace( /\&[#0-9a-z]+;/gi, function ( enc ) {
| |
| if( /#\d+/.test( enc ) ) {
| |
| if( parseInt( enc.slice( 1 ) ) > MAX_UNICODE_DECIMAL ) {
| |
| return enc;
| |
| }
| |
| }
| |
| el.innerHTML = enc;
| |
| return el.innerText
| |
| } );
| |
| }
| |
| | |
| /**
| |
| * When there's a panel being shown, this function sets the status
| |
| * in the panel to the first argument. The callback function is
| |
| * optional.
| |
| */
| |
| function setStatus ( status, callback ) {
| |
| var statusElement = $( "#reply-dialog-status" );
| |
| statusElement.fadeOut( function () {
| |
| statusElement.html( status ).fadeIn( callback );
| |
| } );
| |
| }
| |
| | |
| /**
| |
| * Sets the panel status when an error happened. Good for use in
| |
| * catch blocks.
| |
| */
| |
| function setStatusError( e ) {
| |
| console.error(e);
| |
| setStatus( mw.msg( "rl-error-status" ) );
| |
| if( e.message ) {
| |
| console.log( "Content request error: " + JSON.stringify( e.message ) );
| |
| }
| |
| console.log( "DEBUG INFORMATION: '"+currentPageName+"' @ " + mw.config.get( "wgCurRevisionId" ) );
| |
| throw e;
| |
| }
| |
| | |
| /**
| |
| * Given some wikitext, processes it to get just the text content.
| |
| * This function should be identical to the MediaWiki function
| |
| * that gets the wikitext between the equal signs and comes up
| |
| * with the id's that anchor the headers.
| |
| */
| |
| function wikitextToTextContent( wikitext ) {
| |
| return processCharEntities( wikitext )
| |
| .replace( /\[\[:?(?:[^\|\]]+?\|)?([^\]\|]+?)\]\]/g, "$1" )
| |
| .replace( /\{\{\s*tl\s*\|\s*(.+?)\s*\}\}/g, "{{$1}}" )
| |
| .replace( /\{\{\s*[Uu]\s*\|\s*(.+?)\s*\}\}/g, "$1" )
| |
| .replace( /('''?)(.+?)\1/g, "$2" )
| |
| .replace( /<s>(.+?)<\/s>/g, "$1" )
| |
| .replace( /<big>(.+?)<\/big>/g, "$1" )
| |
| .replace( /<span.*?>(.*?)<\/span>/g, "$1" );
| |
| }
| |
| | |
| function wikitextHeaderEqualsDomHeader( wikitextHeader, domHeader ) {
| |
| return wikitextToTextContent( wikitextHeader ) === deArmorFrenchSpaces( domHeader );
| |
| }
| |
| | |
| /**
| |
| * Finds and returns the div that is the immediate parent of the
| |
| * first talk page header on the page, so that we can read all the
| |
| * sections by iterating through its child nodes.
| |
| */
| |
| function findMainContentEl() {
| |
| | |
| // Which header are we looking for?
| |
| var targetHeader = "h2";
| |
| if( xfdType || currentPageName.startsWith( RFA_PG ) ) targetHeader = "h3";
| |
| if( currentPageName.startsWith( TTDYK ) ) targetHeader = "h4";
| |
| | |
| // The element itself will be the text span in the h2; its
| |
| // parent will be the h2; and the parent of the h2 is the
| |
| // content container that we want
| |
| var candidates = document.querySelectorAll( targetHeader + " > span.mw-headline" );
| |
| if( !candidates.length ) {
| |
| return document.getElementById( "mw-content-text" );
| |
| }
| |
| var candidate = candidates[ candidates.length - 1 ].parentElement.parentElement;
| |
| | |
| // Compatibility with User:Kephir/gadgets/unclutter.js
| |
| if( candidate.className.includes( "kephir-unclutter-discussion-wrapper" ) ) {
| |
| candidate = candidate.parentElement;
| |
| }
| |
| | |
| // Compatibility with User:Enterprisey/hover-edit-section
| |
| // That script puts each section in its own div, so we need to
| |
| // go out another level if it's running
| |
| if( candidate.className === "hover-edit-section" ) {
| |
| candidate = candidate.parentElement;
| |
| }
| |
| | |
| return candidate;
| |
| }
| |
| | |
| /**
| |
| * Gets the wikitext of a page with the given title (namespace required).
| |
| * Returns an object with keys "content" and "timestamp".
| |
| */
| |
| function getWikitext( title, useCaching ) {
| |
| if( useCaching === undefined ) useCaching = false;
| |
| if( useCaching && getWikitextCache[ title ] ) {
| |
| return $.when( getWikitextCache[ title ] );
| |
| }
| |
| return $.getJSON(
| |
| mw.util.wikiScript( "api" ),
| |
| {
| |
| format: "json",
| |
| action: "query",
| |
| prop: "revisions",
| |
| rvprop: "timestamp|content|ids",
| |
| rvslots: "main",
| |
| rvlimit: 1,
| |
| titles: title,
| |
| formatversion: 2,
| |
| }
| |
| ).then( function ( data ) {
| |
| if( data.query.pages[0].revisions ) {
| |
| var rev = data.query.pages[0].revisions[0];
| |
| var result = { revId: rev.revid, timestamp: rev.timestamp, content: rev.slots.main.content };
| |
| getWikitextCache[ title ] = result;
| |
| return result;
| |
| } else {
| |
| console.error( data );
| |
| throw new Error( "[getWikitext] bad response: " + data );
| |
| return {};
| |
| }
| |
| } );
| |
| }
| |
| | |
| function getLastRevId( title ) {
| |
| return $.getJSON(
| |
| mw.util.wikiScript( "api" ),
| |
| {
| |
| format: "json",
| |
| action: "query",
| |
| prop: "revisions",
| |
| rvprop: "ids",
| |
| rvslots: "main",
| |
| rvlimit: 1,
| |
| titles: title,
| |
| formatversion: 2,
| |
| }
| |
| ).then( function ( data ) {
| |
| return data.query.pages[0].revisions[0].revid;
| |
| } );
| |
| }
| |
|
| |
|
| function getPathToElement( givenEl ) {
| | //my common.js |
| var path = [];
| | $.when(mw.loader.using(['mediawiki.util'], $.ready)).done( function() { |
| var currEl = givenEl;
| | mw.util.addPortletLink("p-tb", mw.config.get('wgArticlePath').replace('$1', "ব্যবহারকারী:রবি/common.js"), "common.js", "tb-awbscript", "Personal common.js"); |
| while( ( currEl.id !== "mw-content-text" ) && ( currEl.tagName.toLowerCase() !== "body" ) ) {
| | }); |
| path.push( iterableToList( currEl.parentNode.children ).indexOf( currEl ) );
| |
| currEl = currEl.parentNode;
| |
| }
| |
| return path.join( "|" );
| |
| }
| |
|
| |
|
| function followPathToElement( path ) {
| | if (mw.config.get('wgCanonicalNamespace')+':'+mw.config.get('wgTitle') === 'ব্যবহারকারী:রবি/common.js' && mw.config.get('wgAction') == 'view'); |
| path = path.split( "|" );
| |
| var el = document.getElementById( "mw-content-text" );
| |
| for( var i = path.length - 1; i >= 0; i-- ) {
| |
| el = el.children[parseInt(path[i])];
| |
| }
| |
| return el;
| |
| }
| |
|
| |
|
| function highlightContainerOf( el ) {
| | //শীর্ষক |
| outer:
| | mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/উপর নীচ.js&action=raw&ctype=text/javascript'); |
| while( true ) {
| |
| switch( el.tagName.toLowerCase() ) {
| |
| case "ul":
| |
| case "ol":
| |
| case "li":
| |
| case "dd":
| |
| case "dl":
| |
| case "p":
| |
| case "div":
| |
| case "table":
| |
| case "td":
| |
| break outer;
| |
| }
| |
| el = el.parentNode;
| |
| }
| |
| el.className += "reply-link-jump-highlight";
| |
| }
| |
| | |
| function getTimestampGivenAuthorLink( authorLink ) {
| |
| var currNode = authorLink;
| |
| // The .localcomments element check is for compatibilty with the [[WP:Comments in Local Time]] gadget
| |
| while( !currNode.textContent.includes( "(UTC)" ) && ( currNode.className !== "localcomments" ) ) {
| |
| if( currNode.nextSibling ) {
| |
| currNode = currNode.nextSibling;
| |
| } else {
| |
| currNode = currNode.parentNode;
| |
| }
| |
| }
| |
| if( currNode.textContent.includes( "(UTC)" ) ) {
| |
| var matches = currNode.textContent.match( new RegExp( DATE_FMT_RGX[mw.config.get( "wgServer" )], "g" ) );
| |
| if( matches.length > 0 ) {
| |
| return matches[ matches.length - 1 ];
| |
| }
| |
| } else if( currNode.className === "localcomments" ) {
| |
| var matches = currNode.getAttribute( "title" ).match( new RegExp( DATE_FMT_RGX[mw.config.get( "wgServer" )], "g" ) );
| |
| if( matches.length > 0 ) {
| |
| return matches[ matches.length - 1 ];
| |
| }
| |
| }
| |
| return null;
| |
| }
| |
| | |
| /**
| |
| * Creates userspcLinkRgx. Called in handleWrapperClick and the test
| |
| * runner at the bottom.
| |
| */
| |
| function buildUserspcLinkRgx() {
| |
| if( userspcLinkRgx ) {
| |
| return;
| |
| }
| |
| | |
| var nsIdMap = mw.config.get( "wgNamespaceIds" );
| |
| var nsRgxFragments = [];
| |
| var contribsSecondFrag = ":" + escapeForRegex( mw.messages.get( "mycontris" ) ) + "\\/";
| |
| for( var nsName in nsIdMap ) {
| |
| if( !nsIdMap.hasOwnProperty( nsName ) ) continue;
| |
| switch( nsIdMap[nsName] ) {
| |
| case 2:
| |
| case 3:
| |
| nsRgxFragments.push( escapeForRegex( capFirstLetter( nsName ) ) + "\\s*:" );
| |
| break;
| |
| case -1:
| |
| nsRgxFragments.push( escapeForRegex( capFirstLetter( nsName ) ) + contribsSecondFrag );
| |
| break;
| |
| }
| |
| }
| |
| userspcLinkRgx = {};
| |
| userspcLinkRgx.spc = "(?:" + nsRgxFragments.join( "|" ).replace( /_/g, " " ) + ")";
| |
| userspcLinkRgx.und = userspcLinkRgx.spc.replace( / /g, "_" );
| |
| userspcLinkRgx.both = userspcLinkRgx.spc.replace( / /g, "(?: |_)" );
| |
| }
| |
| | |
| /**
| |
| * Is there a signature (four tildes) present in the given text,
| |
| * outside of a nowiki element?
| |
| */
| |
| function hasSig( text ) {
| |
| | |
| // no literal signature?
| |
| if( !text.includes( LITERAL_SIGNATURE ) ) return false;
| |
| | |
| // if there's a literal signature and no nowiki elements,
| |
| // there must be a real signature
| |
| if( !text.includes( "<nowiki>" ) ) return true;
| |
| | |
| // Save all nowiki spans
| |
| var nowikiSpanStarts = []; // list of ignored span beginnings
| |
| var nowikiSpanLengths = []; // list of ignored span lengths
| |
| var NOWIKI_RE = /<nowiki>.*?<\/nowiki>/g;
| |
| var spanMatch;
| |
| do {
| |
| spanMatch = NOWIKI_RE.exec( text );
| |
| if( spanMatch ) {
| |
| nowikiSpanStarts.push( spanMatch.index );
| |
| nowikiSpanLengths.push( spanMatch[0].length );
| |
| }
| |
| } while( spanMatch );
| |
| | |
| // So that we don't check every ignore span every time
| |
| var nowikiSpanStartIdx = 0;
| |
| | |
| var LIT_SIG_RE = new RegExp( LITERAL_SIGNATURE, "g" );
| |
| var sigMatch;
| |
| | |
| matchLoop:
| |
| do {
| |
| sigMatch = LIT_SIG_RE.exec( text );
| |
| if( sigMatch ) {
| |
| | |
| // Check that we're not inside a nowiki
| |
| for( var nwIdx = nowikiSpanStartIdx; nwIdx <
| |
| nowikiSpanStarts.length; nwIdx++ ) {
| |
| if( sigMatch.index > nowikiSpanStarts[nwIdx] ) {
| |
| if ( sigMatch.index + sigMatch[0].length <=
| |
| nowikiSpanStarts[nwIdx] + nowikiSpanLengths[nwIdx] ) {
| |
| | |
| // Invalid sig
| |
| continue matchLoop;
| |
| } else {
| |
| | |
| // We'll never encounter this span again, since
| |
| // headers only get later and later in the wikitext
| |
| nowikiSpanStartIdx = nwIdx;
| |
| }
| |
| }
| |
| }
| |
| | |
| // We aren't inside a nowiki
| |
| return true;
| |
| }
| |
| } while( sigMatch );
| |
| return false;
| |
| }
| |
| | |
| /**
| |
| * Given an Element object, attempt to recover a username from it.
| |
| * Also will check up to two elements prior to the passed element.
| |
| * Returns null if no username was found. Otherwise, returns an
| |
| * object with these properties:
| |
| *
| |
| * - username: The username that we found.
| |
| * - link: The DOM element for the link from which we got the
| |
| * username.
| |
| */
| |
| function findUsernameInElem( el ) {
| |
| if( !el ) return null;
| |
| var links;
| |
| for( let i = 0; i < 3; i++ ) {
| |
| if( el === null ) break;
| |
| links = el.tagName.toLowerCase() === "a" ? [ el ]
| |
| : el.querySelectorAll( "a" );
| |
| //console.log(i,"top of outer for in findUsernameInElem ",el, " links -> ",links);
| |
| | |
| // Compatibility with "Comments in Local Time"
| |
| if( el.className.includes( "localcomments" ) ) i--;
| |
| | |
| // If we couldn't get any links, try again with prev elem
| |
| if( !links ) continue;
| |
| | |
| var link; // his name isn't zelda
| |
| for( var j = 0; j < links.length; j++ ) {
| |
| link = links[j];
| |
| | |
| //console.log(link,decodeURIComponent(link.getAttribute("href")));
| |
| if( link.className.includes( "mw-selflink" ) ) {
| |
| return { username: currentPageName.replace( /.+:/, "" )
| |
| .replace( /_/g, " " ), link: link };
| |
| }
| |
| | |
| // Also matches redlinks. Why people have redlinks in their sigs on
| |
| // purpose, I may never know.
| |
| //console.log( "^\\/(?:wiki\\/" + userspcLinkRgx.und + /(.+?)(?:\/.+?)?(?:#.+)?|w\/index\.php\?title=User(?:_talk)?:(.+?)&action=edit&redlink=1/.source + ")$" )
| |
| var sigLinkRe = new RegExp( "\\/(?:wiki\\/" + userspcLinkRgx.und + /(.+?)(?:\/.+?)?(?:#.+)?|w\/index\.php\?title=/.source + userspcLinkRgx.und + /(.+?)&action=edit&redlink=1/.source + ")$" );
| |
| var liveDecodedHref = decodeURIComponent( link.getAttribute( "href" ) );
| |
| if( liveDecodedHref.startsWith( "/" ) ) {
| |
| liveDecodedHref = "https:" + mw.config.get( "wgServer" ) + liveDecodedHref;
| |
| }
| |
| var usernameMatch = sigLinkRe.exec( liveDecodedHref );
| |
| if( usernameMatch ) {
| |
| //console.log("usernameMatch",usernameMatch)
| |
| var rawUsername = usernameMatch[1] ? usernameMatch[1] : usernameMatch[2];
| |
| return {
| |
| username: decodeURIComponent( rawUsername ).replace( /_/g, " " ),
| |
| link: link
| |
| };
| |
| }
| |
| }
| |
| | |
| // Go backwards one element and try again
| |
| el = el.previousElementSibling;
| |
| }
| |
| return null;
| |
| }
| |
| | |
| /**
| |
| * Given a reply-link-wrapper span, attempts to find who wrote
| |
| * the comment that precedes it. For information about the return
| |
| * value, see the documentation for findUsernameInElem.
| |
| */
| |
| function getCommentAuthor( wrapper ) {
| |
| var sigNode = wrapper.previousSibling;
| |
| //console.log(sigNode,sigNode.style,sigNode.style ? sigNode.style.getPropertyValue("size"):"");
| |
| var smallOrFake = sigNode.nodeType === 1 &&
| |
| ( sigNode.tagName.toLowerCase() === "small" ||
| |
| ( sigNode.tagName.toLowerCase() === "span" &&
| |
| sigNode.style && ( sigNode.style.getPropertyValue( "font-size" ) === "85%" ||
| |
| sigNode.style.getPropertyValue( "font-size" ).indexOf( "small" ) === 0 ) ) );
| |
| | |
| var possUserLinkElem = ( smallOrFake && sigNode.children.length > 1 )
| |
| ? sigNode.children[sigNode.children.length-1]
| |
| : sigNode.previousElementSibling;
| |
| return findUsernameInElem( possUserLinkElem );
| |
| }
| |
| | |
| /**
| |
| * Given the wikitext of a section, attempt to find the first edit
| |
| * request template in it, and then mark that template as answered.
| |
| * Returns the modified section wikitext.
| |
| */
| |
| function markEditReqAnswered( sectionWikitext ) {
| |
| var editReqMatch = EDIT_REQ_TPL_REGEX.exec( sectionWikitext );
| |
| if( !editReqMatch ) {
| |
| console.error( "Couldn't find an edit request!" );
| |
| return sectionWikitext;
| |
| }
| |
| | |
| var ansParamMatch = /ans(wered)?=.*?(\||\}\})/.exec( editReqMatch[0] );
| |
| if( !ansParamMatch ) {
| |
| sectionWikitext = sectionWikitext.replace(
| |
| editReqMatch[0],
| |
| editReqMatch[0].replace( "}}", "answered=yes}}" )
| |
| );
| |
| } else {
| |
| var newEditReqTpl = editReqMatch[0].replace( ansParamMatch[0],
| |
| "answered=yes" + ansParamMatch[2] );
| |
| sectionWikitext = sectionWikitext.replace(
| |
| editReqMatch[0],
| |
| newEditReqTpl
| |
| );
| |
| }
| |
| return sectionWikitext;
| |
| }
| |
| | |
| function allContentHeaders() {
| |
| var allHeaders = document.querySelector( "#mw-content-text" )
| |
| .querySelectorAll( HEADER_SELECTOR );
| |
| return iterableToList( allHeaders )
| |
| .filter( function ( header ) {
| |
| // The word "Contents" at the top of the table of contents is a heading
| |
| return ( header.getAttribute( "id" ) !== "mw-toc-heading" );
| |
| } );
| |
| }
| |
| | |
| /**
| |
| * Given a header element, finds the title (full with namespace, spaces
| |
| * instead of underscores) of the page it's from.
| |
| */
| |
| function pageNameOfHeader( header ) {
| |
| var editLinks = iterableToList( header.querySelectorAll( ".mw-editsection a" ) )
| |
| .filter( function ( e ) { return e.textContent.indexOf( "edit" ) === 0; } );
| |
| if( editLinks.length ) {
| |
| var encoded = editLinks[0]
| |
| .getAttribute( "href" )
| |
| .match( /title=(.+?)(?:$|&)/ )
| |
| [1];
| |
| return decodeURIComponent( encoded ).replace( /_/g, " " );
| |
| } else {
| |
| return null;
| |
| }
| |
| }
| |
| | |
| /**
| |
| * Given a DOM object in the current page corresponding to a link in a
| |
| * signature, locate the section header (i.e. h1, h2, etc element) for the
| |
| * section containing that comment.
| |
| */
| |
| function findSectionHeaderElement( sigLinkElem ) {
| |
| var nearestHeader = null;
| |
| var currElem = sigLinkElem;
| |
| var sigLinkTopPos = sigLinkElem.getBoundingClientRect().top;
| |
| | |
| loop:
| |
| while( ( currElem.id !== "mw-content-text" ) && ( currElem.tagName.toLowerCase() !== "body" ) ) {
| |
| var familiarTagName = false;
| |
| switch( currElem.tagName.toLowerCase() ) {
| |
| case "ul":
| |
| case "ol":
| |
| case "li":
| |
| case "dd":
| |
| case "dl":
| |
| case "a":
| |
| case "i":
| |
| case "code":
| |
| // Headers aren't in these elements (and it would be a waste to check)
| |
| break;
| |
| case "h1":
| |
| case "h2":
| |
| case "h3":
| |
| case "h4":
| |
| case "h5":
| |
| case "h6":
| |
| // Well, that was convenient (found a header)
| |
| nearestHeader = currElem;
| |
| break loop;
| |
| case "p":
| |
| case "span": // unlikely, but we'll check anyway
| |
| case "div":
| |
| case "table": // yeah, sometimes people put their whole talk page in a template
| |
| case "td":
| |
| case "sub":
| |
| case "sup":
| |
| case "b":
| |
| familiarTagName = true;
| |
| default:
| |
| var tagName = currElem.tagName.toLowerCase();
| |
| if( !familiarTagName ) {
| |
| // just in case there's a tag not listed here that needs special handling
| |
| console.warn( "unknown tag name ", tagName, " ", currElem );
| |
| }
| |
| var childHeaders = currElem.querySelectorAll( HEADER_SELECTOR );
| |
| if( childHeaders ) {
| |
| childHeaders = iterableToList( childHeaders )
| |
| .filter( function ( header ) {
| |
| // We don't want to pick up headers below the comment
| |
| return header.getBoundingClientRect().top < sigLinkTopPos;
| |
| } );
| |
| if( childHeaders.length > 0 ) {
| |
| nearestHeader = childHeaders[childHeaders.length - 1];
| |
| break loop;
| |
| }
| |
| }
| |
| break;
| |
| } // end switch ( currElem.tagName )
| |
| | |
| if( currElem.previousElementSibling ) {
| |
| currElem = currElem.previousElementSibling;
| |
| } else {
| |
| currElem = currElem.parentNode;
| |
| }
| |
| } // end while
| |
| | |
| if( nearestHeader === null ) {
| |
| console.warn( "nearestHeader was null" );
| |
| }
| |
| return nearestHeader;
| |
| }
| |
| | |
| /**
| |
| * Finds a section in the given page's wikitext.
| |
| *
| |
| * If givenHeaderEl is null, that means it's the "zeroth" section, i.e.
| |
| * the section that ends at the first page header.
| |
| */
| |
| function findSectionInPageWikitext( givenHeaderEl, pageTitle, pageWikitext ) {
| |
| var allHeaders = document.querySelector( "#mw-content-text" )
| |
| .querySelectorAll( HEADER_SELECTOR );
| |
| var allHeadersFromTarget = iterableToList( allHeaders )
| |
| .filter( function ( header ) {
| |
| // The word "Contents" at the top of the table of contents is a heading
| |
| return ( header.getAttribute( "id" ) !== "mw-toc-heading" ) &&
| |
| pageNameOfHeader( header ) === pageTitle;
| |
| } );
| |
| | |
| // Find all the headers in the wikitext
| |
| | |
| // Save all ignored spans
| |
| var ignoredSpanStarts = []; // list of ignored span beginnings
| |
| var ignoredSpanLengths = []; // list of ignored span lengths
| |
| var IGNORED_RE = /(?:<(nowiki|pre|noinclude|source)>[\s\S]*?<\/\1>)|<!--[\s\S]+?-->/g;
| |
| var spanMatch;
| |
| do {
| |
| spanMatch = IGNORED_RE.exec( pageWikitext );
| |
| if( spanMatch ) {
| |
| ignoredSpanStarts.push( spanMatch.index );
| |
| ignoredSpanLengths.push( spanMatch[0].length );
| |
| }
| |
| } while( spanMatch );
| |
| | |
| // So that we don't check every ignore span every time
| |
| var ignoredSpanStartIdx = 0;
| |
| | |
| var headerMatches = [];
| |
| var headerMatch;
| |
| | |
| matchLoop:
| |
| do {
| |
| headerMatch = HEADER_REGEX.exec( pageWikitext );
| |
| if( headerMatch ) {
| |
| | |
| // Check that we're not inside a ignored span
| |
| for( var ignoredIdx = ignoredSpanStartIdx; ignoredIdx <
| |
| ignoredSpanStarts.length; ignoredIdx++ ) {
| |
| if( headerMatch.index > ignoredSpanStarts[ignoredIdx] ) {
| |
| if ( headerMatch.index + headerMatch[0].length <=
| |
| ignoredSpanStarts[ignoredIdx] + ignoredSpanLengths[ignoredIdx] ) {
| |
| | |
| // Not a header, since we're inside a ignored span
| |
| continue matchLoop;
| |
| } else {
| |
| | |
| // We'll never encounter this span again, since
| |
| // headers only get later and later in the wikitext
| |
| ignoredSpanStartIdx = ignoredIdx;
| |
| }
| |
| }
| |
| }
| |
| headerMatches.push( headerMatch );
| |
| }
| |
| } while( headerMatch );
| |
| | |
| // We'll use this dictionary to calculate the duplicate index
| |
| var headersByText = {};
| |
| for( var i = 0; i < headerMatches.length; i++ ) {
| |
| | |
| // Group 2 of HEADER_REGEX is the header text
| |
| var text = headerMatches[i][2];
| |
| headersByText[text] = ( headersByText[text] || [] ).concat( i );
| |
| }
| |
| | |
| // allHeadersFromTarget should contain every header we found in the wikitext
| |
| // (and more, if sourcePageName was transcluded multiple times)
| |
| if( allHeadersFromTarget.length % headerMatches.length !== 0 ) {
| |
| for( var i = 0; i < Math.max( allHeadersFromTarget.length, headerMatches.length ); i++ ) {
| |
| console.error( i, allHeadersFromTarget[i], allHeadersFromTarget[i] && allHeadersFromTarget[i].textContent, headerMatches[i] );
| |
| }
| |
| throw new Error( "non-divisble header list lengths" );
| |
| }
| |
| | |
| if( givenHeaderEl === null ) {
| |
| var sectionEndIdx = headerMatches[0] ? headerMatches[0].index : pageWikitext.length;
| |
| return {
| |
| title: "",
| |
| dupIdx: 0,
| |
| startIdx: 0,
| |
| endIdx: sectionEndIdx,
| |
| idxInDomHeaders: -1,
| |
| };
| |
| }
| |
| | |
| var headerIdx = allHeadersFromTarget.indexOf( givenHeaderEl );
| |
| if( headerIdx < 0 ) {
| |
| console.error( 'givenHeaderEl', givenHeaderEl );
| |
| console.error( 'allHeadersFromTarget', allHeadersFromTarget );
| |
| throw new Error( "givenHeaderEl not in allHeadersFromTarget" );
| |
| }
| |
| var trueHeaderIdx = headerIdx % headerMatches.length;
| |
| var headerText = headerMatches[trueHeaderIdx][2];
| |
| | |
| // NOTE! The duplicate index is calculated relative to the
| |
| // *wikitext* header matches (because that's how the backend
| |
| // does it)! That is, if we have a page that includes two
| |
| // headers, both called "a", and we transclude that page
| |
| // twice, the result will be four headers called "a". But we
| |
| // want to assign those four headers, respectively, the
| |
| // duplicate indices of 0, 1, 0, 1. That's why we use
| |
| // trueHeaderIdx here, not headerIdx.
| |
| var dupIdx = headersByText[headerText].indexOf( trueHeaderIdx );
| |
| | |
| var sectionStartIdx = headerMatches[trueHeaderIdx].index;
| |
| var sectionEndIdx = headerMatches[trueHeaderIdx + 1]
| |
| ? headerMatches[trueHeaderIdx + 1].index
| |
| : pageWikitext.length;
| |
| | |
| return {
| |
| title: headerText,
| |
| dupIdx: dupIdx,
| |
| startIdx: sectionStartIdx,
| |
| endIdx: sectionEndIdx,
| |
| idxInDomHeaders: headerIdx,
| |
| };
| |
| }
| |
| | |
| /**
| |
| * Given a DOM object in the current page corresponding to a link in a
| |
| * signature, locate the section containing that comment. That section may
| |
| * not be in the current page!
| |
| */
| |
| function findSectionMain( sigLinkElem ) {
| |
| var nearestHeader = findSectionHeaderElement( sigLinkElem );
| |
| var pageTitle = ( nearestHeader ? pageNameOfHeader( nearestHeader ) : currentPageName ).replace( /_/g, " " );
| |
| return getWikitext( pageTitle, /* useCaching */ true ).then( function ( revObj ) {
| |
| var pageText = revObj.content;
| |
| var sectionObj = findSectionInPageWikitext( nearestHeader, pageTitle, pageText );
| |
| sectionObj.pageTitle = pageTitle;
| |
| sectionObj.revObj = revObj;
| |
| sectionObj.headerEl = nearestHeader;
| |
| //sectionObj.level = parseInt( nearestHeader.tagName.substring( 1 ) ); // that is, cut off the "h" at the beginning
| |
| return sectionObj;
| |
| }, function ( err ) { throw new Error( err ); } );
| |
| }
| |
| | |
| /**
| |
| * Converts a (zero-based) signature index to a pair of string indices into
| |
| * the given section wikitext, indicating the start and the end of the
| |
| * requested signature. The return value is an object with two properties,
| |
| * "start" for the starting index and "end" for the ending index (i.e. the
| |
| * index of the first character after the signature).
| |
| *
| |
| * Returns null if we couldn't find anything.
| |
| */
| |
| function sigIdxToStrIdx( sectionWikitext, sigIdx ) {
| |
| //console.log( "In sigIdxToStrIdx, sigIdx = " + sigIdx );
| |
| | |
| // There are certain regions that we skip while attaching links:
| |
| //
| |
| // - Spans with the class delsort-notice
| |
| // - Divs with the class xfd-relist (and other divs)
| |
| //
| |
| // So, we grab the corresponding wikitext regions with regexes,
| |
| // and store each region's start index in spanStartIndices, and
| |
| // each region's length in spanLengths. Then, whenever we find a
| |
| // signature with the right index, if it's included in one of
| |
| // these regions, we skip it and move on.
| |
| var spanStartIndices = [];
| |
| var spanLengths = [];
| |
| var DELSORT_SPAN_RE_TXT = /<small class="delsort-notice">(?:<small>.+?<\/small>|.)+?<\/small>/.source;
| |
| var XFD_RELIST_RE_TXT = /<div class="xfd_relist"[\s\S]+?<\/div>(\s*|<!--.+?-->)*/.source;
| |
| var SKIP_REGION_RE = new RegExp("(" + DELSORT_SPAN_RE_TXT + ")|(" +
| |
| XFD_RELIST_RE_TXT + ")|(" +
| |
| /<s>.+?<\/s>/.source + ")", // struck regions (I don't care about nested ones)
| |
| "ig");
| |
| var skipRegionMatch;
| |
| while( ( skipRegionMatch = SKIP_REGION_RE.exec( sectionWikitext ) ) !== null ) {
| |
| spanStartIndices.push( skipRegionMatch.index );
| |
| spanLengths.push( skipRegionMatch[0].length );
| |
| }
| |
| | |
| // Also skip transclusions of {{tq}} and {{tq2}}. These transclusions
| |
| // have a high chance of containing other templates, so instead search
| |
| // for closing curly braces at the right nesting level with a counter.
| |
| var TQ_START_RE = /\{\{\s*tq2?/g;
| |
| var tqStartMatch;
| |
| while( ( tqStartMatch = TQ_START_RE.exec( sectionWikitext ) ) !== null ) {
| |
| var currentNestingLevel = 2; // two curly braces started the template
| |
| var wikitextIdx = tqStartMatch.index + tqStartMatch[0].length;
| |
| while( ( currentNestingLevel > 0 ) && ( wikitextIdx < sectionWikitext.length ) ) {
| |
| if( sectionWikitext.charAt( wikitextIdx ) === "{" ) {
| |
| currentNestingLevel += 1;
| |
| } else if( sectionWikitext.charAt( wikitextIdx ) === "}" ) {
| |
| currentNestingLevel -= 1;
| |
| }
| |
| wikitextIdx += 1;
| |
| }
| |
| | |
| spanStartIndices.push( tqStartMatch.index );
| |
| spanLengths.push( wikitextIdx - tqStartMatch.index );
| |
| }
| |
| //console.log(spanStartIndices,spanLengths);
| |
| | |
| var dateFmtRgx = DATE_FMT_RGX[mw.config.get( "wgServer" )];
| |
| if( !dateFmtRgx ) {
| |
| throw new Error( "Error! I don't know the native date format used by the server '" + mw.config.get( "wgServer" ) + "'!" );
| |
| }
| |
| /*
| |
| * I apologize for making you have to read this regex.
| |
| * I made a summary, though:
| |
| *
| |
| * - a wikilink, without a ]] inside it
| |
| * - some text, without a link to userspace or user talk space
| |
| * - a timestamp
| |
| * - as an alternative to all of the above, an autosigned script
| |
| * and a timestamp
| |
| * - some comments/whitespace or some non-whitespace
| |
| * - finally, the end of the line
| |
| *
| |
| * It's also localized.
| |
| */
| |
| var sigRgxSrc = "(?:" + /\[\[\s*(?:m:)?:?\s*/.source + "(" + userspcLinkRgx.both +
| |
| /([^\]\n]|\](?!\]))*?/.source + ")" + /\]\]\)?/.source + "(" +
| |
| /[^\[\n]|\[(?!\[)|\[\[/.source + "(?!" + userspcLinkRgx.both +
| |
| "))*?" + DATE_FMT_RGX[mw.config.get( "wgServer" )] +
| |
| /\s+\(UTC\)|class\s*=\s*"autosigned".+?\(UTC\)<\/small>/.source +
| |
| ")" + /(\S*([ \t\f]|<!--.*?-->)*(?:\{\{.+?\}\})?(?!\S)|\s?\S+([ \t\f]|<!--.*?-->)*)$/.source;
| |
| var sigRgx = new RegExp( sigRgxSrc, "igm" );
| |
| var matchIdx = 0;
| |
| var match;
| |
| var matchIdxEnd;
| |
| var dstSpnIdx;
| |
| | |
| sigMatchLoop:
| |
| for( ; true ; matchIdx++ ) {
| |
| match = sigRgx.exec( sectionWikitext );
| |
| if( !match ) {
| |
| console.error("[sigIdxToStrIdx] out of matches, matchIdx was",matchIdx,"sigIdx was",sigIdx);
| |
| return null;
| |
| }
| |
| //console.log( "sig match (matchIdx = " + matchIdx + ") is >" + match[0] + "< (index = " + match.index + ")" );
| |
| | |
| matchIdxEnd = match.index + match[0].length;
| |
| | |
| // Validate that we're not inside a delsort span
| |
| for( dstSpnIdx = 0; dstSpnIdx < spanStartIndices.length; dstSpnIdx++ ) {
| |
| //console.log(spanStartIndices[dstSpnIdx],match.index,
| |
| // matchIdxEnd, spanStartIndices[dstSpnIdx] +
| |
| // spanLengths[dstSpnIdx] );
| |
| if( match.index > spanStartIndices[dstSpnIdx] &&
| |
| ( matchIdxEnd <= spanStartIndices[dstSpnIdx] +
| |
| spanLengths[dstSpnIdx] ) ) {
| |
| | |
| // That wasn't really a match (as in, this match does not
| |
| // correspond to any sig idx in the DOM), so we can't
| |
| // increment matchIdx
| |
| matchIdx--;
| |
| | |
| continue sigMatchLoop;
| |
| }
| |
| }
| |
| | |
| if( matchIdx === sigIdx ) {
| |
| return {
| |
| start: match.index,
| |
| end: match.index + match[0].length,
| |
| };
| |
| }
| |
| }
| |
| }
| |
| | |
| /**
| |
| * Inserts fullReply on the next sensible line after strIdx in
| |
| * sectionWikitext. indentLvl is the indentation level of the
| |
| * comment we're replying to.
| |
| *
| |
| * This function essentially takes the indentation level and
| |
| * position of the current comment, and looks for the first comment
| |
| * that's indented strictly less than the current one. Then, it
| |
| * puts the reply on the line right before that comment, and returns
| |
| * the modified section wikitext.
| |
| */
| |
| function insertTextAfterIdx( sectionWikitext, strIdx, indentLvl, fullReply ) {
| |
| //console.log( "[insertTextAfterIdx] indentLvl = " + indentLvl );
| |
| | |
| // strIdx should point to the end of a line
| |
| var counter = 0;
| |
| while( ( sectionWikitext[ strIdx ] !== "\n" ) && ( counter++ <= 50 ) ) strIdx++;
| |
| | |
| var slicedSecWikitext = sectionWikitext.slice( strIdx );
| |
| //console.log("slicedSecWikitext = >>" + slicedSecWikitext.slice(0,50) + "<<");
| |
| slicedSecWikitext = slicedSecWikitext.replace( /^\n/, "" );
| |
| var candidateLines = slicedSecWikitext.split( "\n" );
| |
| //console.log( "candidateLines =", candidateLines );
| |
| | |
| // number of the line in sectionWikitext that'll be right after reply
| |
| var replyLine = 0;
| |
| | |
| var INDENT_RE = /^[:*#]+/;
| |
| if( slicedSecWikitext.trim().length > 0 ) {
| |
| var currIndentation, currIndentationLvl, i;
| |
| | |
| // Now, loop through all the comments replying to that
| |
| // one and place our reply after the last one
| |
| for( i = 0; i < candidateLines.length; i++ ) {
| |
| if( candidateLines[i].trim() === "" ) {
| |
| continue;
| |
| }
| |
| | |
| // Detect indentation level of current line
| |
| currIndentation = INDENT_RE.exec( candidateLines[i] );
| |
| currIndentationLvl = currIndentation ? currIndentation[0].length : 0;
| |
| //console.log(i + ">" + candidateLines[i] + "< => " + currIndentationLvl);
| |
| | |
| if( currIndentationLvl <= indentLvl ) {
| |
| | |
| // If it's an XfD, we might have found a relist
| |
| // comment instead, so check for that
| |
| if( xfdType && /<div class="xfd_relist"/.test( candidateLines[i] ) ) {
| |
| | |
| // Our reply might go on the line above the xfd_relist line
| |
| var potentialReplyLine = i;
| |
| | |
| // Walk through the relist notice, line by line
| |
| // After this loop, i will point to the line on which
| |
| // the notice ends
| |
| var NEW_COMMENTS_RE = /Please add new comments below this line/;
| |
| while( !NEW_COMMENTS_RE.test( candidateLines[i] ) ) {
| |
| i++;
| |
| }
| |
| | |
| // Relists are treated as if they're indented at level 1
| |
| if( 1 <= indentLvl ) {
| |
| replyLine = potentialReplyLine;
| |
| break;
| |
| }
| |
| } else {
| |
| //console.log( "cIL <= iL, breaking" );
| |
| break;
| |
| }
| |
| } else {
| |
| replyLine = i + 1;
| |
| }
| |
| }
| |
| if( i === candidateLines.length ) {
| |
| replyLine = i;
| |
| }
| |
| } else {
| |
| | |
| // In this case, we may be replying to the last comment in a section
| |
| replyLine = candidateLines.length;
| |
| }
| |
| | |
| // Walk backwards until non-empty line
| |
| while( replyLine >= 1 && candidateLines[replyLine - 1].trim() === "" ) replyLine--;
| |
| | |
| //console.log( "replyLine = " + replyLine );
| |
| | |
| // Splice into slicedSecWikitext
| |
| slicedSecWikitext = candidateLines
| |
| .slice( 0, replyLine )
| |
| .concat( [ fullReply ], candidateLines.slice( replyLine ) )
| |
| .join( "\n" );
| |
| | |
| // We may need an additional newline if the two slices don't have any
| |
| var optionalNewline = ( !sectionWikitext.slice( 0, strIdx ).endsWith( "\n" ) &&
| |
| !slicedSecWikitext.startsWith( "\n" ) ) ? "\n" : "";
| |
| | |
| // Splice into sectionWikitext
| |
| sectionWikitext = sectionWikitext.slice( 0, strIdx ) +
| |
| optionalNewline + slicedSecWikitext;
| |
| | |
| return sectionWikitext;
| |
| }
| |
| | |
| function performInPlaceReload( sigLinkElem, sectionObj ) {
| |
| return $.getJSON(
| |
| mw.util.wikiScript( "api" ),
| |
| {
| |
| format: "json",
| |
| action: "parse",
| |
| prop: "text",
| |
| section: sectionObj.idxInDomHeaders + 1,
| |
| page: sectionObj.pageTitle,
| |
| formatversion: 2,
| |
| }
| |
| ).then( function ( parseResult ) {
| |
| if( parseResult.parse.text ) {
| |
| var cmtLinkPath = getPathToElement( sigLinkElem );
| |
| | |
| // Delete all DOM elements in the current section
| |
| var nextHeaderEl = allContentHeaders()[sectionObj.idxInDomHeaders + 1];
| |
| var currEl = sectionObj.headerEl.nextElementSibling;
| |
| while( currEl && ( currEl !== nextHeaderEl ) ) {
| |
| var nextEl = currEl.nextElementSibling;
| |
| currEl.parentNode.removeChild( currEl );
| |
| currEl = nextEl;
| |
| }
| |
| | |
| // Now write in the new stuff
| |
| var newHtml = new DOMParser().parseFromString( parseResult.parse.text, "text/html" );
| |
| | |
| // Select inside of .mw-parser-output
| |
| newHtml = newHtml.querySelector( ".mw-parser-output" );
| |
| | |
| // Remove initial header
| |
| newHtml.removeChild( newHtml.children[0] );
| |
| | |
| $( sectionObj.headerEl ).after( newHtml.children );
| |
| mw.hook( "wikipage.content" ).fire( $( newHtml.children ) );
| |
| | |
| delete getWikitextCache[sectionObj.pageTitle];
| |
| | |
| var newCmtLink = followPathToElement( cmtLinkPath );
| |
| highlightContainerOf( newCmtLink );
| |
| } else {
| |
| console.error( parseResult );
| |
| setStatus( "Failed to load in new version." );
| |
| }
| |
| } );
| |
| }
| |
| | |
| /**
| |
| * Using the text in #reply-dialog-field, add a reply to the current page.
| |
| * rplyToXfdNom is true if we're replying to an XfD nom, in which case we
| |
| * should use an asterisk instead of a colon. revObj is the object returned
| |
| * by getWikitext for the page with the comment; sectionObj is the object
| |
| * returned by findSectionMain for the comment.
| |
| *
| |
| * Returns a Deferred that resolves/rejects when the reply succeeds/fails.
| |
| */
| |
| function doReply( parentCmtObj, cmtAuthorAndLink, rplyToXfdNom, sectionObj, canMakeSectionEdit ) {
| |
| var deferred = $.Deferred();
| |
| | |
| var revObj = sectionObj.revObj;
| |
| var wikitext = revObj.content;
| |
| | |
| try {
| |
| | |
| // Generate reply in wikitext form
| |
| var reply = document.getElementById( "reply-dialog-field" ).value.trim();
| |
| | |
| // Add a signature if one isn't already there
| |
| if( !hasSig( reply ) ) {
| |
| reply += " " + ( window.replyLinkSigPrefix ?
| |
| window.replyLinkSigPrefix : "" ) + LITERAL_SIGNATURE;
| |
| }
| |
| | |
| var isUsingAutoIndentation = window.replyLinkAutoIndentation === "checkbox"
| |
| ? ( !document.getElementById( "reply-link-option-auto-indent" ) ||
| |
| document.getElementById( "reply-link-option-auto-indent" ).checked )
| |
| : window.replyLinkAutoIndentation === "always";
| |
| if( isUsingAutoIndentation ) {
| |
| | |
| var replyLines = reply.split( "\n" );
| |
| | |
| // If we're outdenting, reset indentation and add the
| |
| // outdent template. This requires that there be at least
| |
| // one character of indentation.
| |
| var outdentCheckbox = document.getElementById( "reply-link-option-outdent" );
| |
| if( outdentCheckbox && outdentCheckbox.checked ) {
| |
| replyLines[0] = "{" + "{od|" + parentCmtObj.indentation.slice( 0, -1 ) +
| |
| "}}" + replyLines[0];
| |
| parentCmtObj.indentation = "";
| |
| }
| |
| | |
| // Compose reply by adding indentation at the beginning of
| |
| // each line (if not replying to an XfD nom) or {{pb}}'s
| |
| // between lines (if replying to an XfD nom)
| |
| var fullReply;
| |
| if( rplyToXfdNom ) {
| |
| | |
| // If there's a list in this reply, it's a bad idea to
| |
| // use pb's, even though the markup'll probably be broken
| |
| if( replyLines.some( function ( l ) { return l.substr( 0, 1 ) === "*"; } ) ) {
| |
| fullReply = replyLines.map( function ( line ) {
| |
| return parentCmtObj.indentation + "*" + line;
| |
| } ).join( "\n" );
| |
| } else {
| |
| fullReply = parentCmtObj.indentation + "* " + replyLines.join( "{{pb}}" );
| |
| }
| |
| } else {
| |
| fullReply = replyLines.map( function ( line ) {
| |
| return parentCmtObj.indentation + ":" + line;
| |
| } ).join( "\n" );
| |
| }
| |
| } else {
| |
| fullReply = reply;
| |
| }
| |
| | |
| var sectionWikitext = wikitext.slice( sectionObj.startIdx, sectionObj.endIdx )
| |
| .trim(); // extra whitespace just messes stuff up
| |
| var oldSectionWikitext = sectionWikitext; // We'll String.replace old w/ new
| |
| | |
| // Now, obtain the index of the end of the comment
| |
| var sigStartStrIdx = null;
| |
| var sigEndStrIdx = null;
| |
| if( !parentCmtObj.endStrIdx ) {
| |
| var strIndices = sigIdxToStrIdx( sectionWikitext, parentCmtObj.sigIdx );
| |
| sigStartStrIdx = strIndices && strIndices.start;
| |
| sigEndStrIdx = strIndices && strIndices.end;
| |
| } else {
| |
| sigEndStrIdx = parentCmtObj.endStrIdx;
| |
| }
| |
| | |
| // Check for a valid sigEndStrIdx
| |
| if( sigEndStrIdx === null ) {
| |
| throw( "Null sigEndStrIdx (signature not found in wikitext)" );
| |
| }
| |
| | |
| // Determine the user who wrote the comment, for
| |
| // edit-summary and sanity-check purposes
| |
| var userRgx = new RegExp( /\[\[\s*(?:m:)?:?\s*/.source + userspcLinkRgx.both + /\s*(.+?)(?:\/.+?)?(?:#.+?)?\s*(?:\|.+?)?\]\]/.source, "ig" );
| |
| var userMatches = processCharEntitiesWikitext( sectionWikitext.slice( sigStartStrIdx || 0, sigEndStrIdx ) ).match( userRgx );
| |
| var cmtAuthorWktxt = userRgx.exec( userMatches[userMatches.length - 1] )[1];
| |
| | |
| if( cmtAuthorWktxt === "DoNotArchiveUntil" ) {
| |
| userRgx.lastIndex = 0;
| |
| cmtAuthorWktxt = userRgx.exec( userMatches[userMatches.length - 2] )[1];
| |
| }
| |
| | |
| // Normalize case, because that's what happens during
| |
| // wikitext-to-HTML processing; also underscores to spaces
| |
| function sanitizeUsername( u ) {
| |
| u = u.charAt( 0 ).toUpperCase() + u.substr( 1 );
| |
| return u.replace( /_/g, " " );
| |
| }
| |
| cmtAuthorWktxt = sanitizeUsername( cmtAuthorWktxt );
| |
| var cmtAuthorDom = sanitizeUsername( cmtAuthorAndLink.username );
| |
| | |
| // Is the sig username the same as the DOM one? We attempt to check
| |
| // sigRedirectMapping in case the naive check fails
| |
| if( cmtAuthorWktxt !== cmtAuthorDom &&
| |
| processCharEntitiesWikitext( cmtAuthorWktxt ) !== cmtAuthorDom &&
| |
| sigRedirectMapping[ cmtAuthorWktxt ] !== cmtAuthorDom ) {
| |
| throw new Error( "Sig username assert failed! Found " +
| |
| cmtAuthorWktxt + " but expected " + cmtAuthorDom +
| |
| " (wikitext vs DOM)" );
| |
| }
| |
| | |
| // Another check: timestamp
| |
| var htmlTimestamp = getTimestampGivenAuthorLink( cmtAuthorAndLink.link );
| |
| var textTimestampMatches = sectionWikitext.slice( sigStartStrIdx || 0, sigEndStrIdx ).match( new RegExp( DATE_FMT_RGX[mw.config.get( "wgServer" )], "g" ) );
| |
| if( textTimestampMatches.length > 0 ) {
| |
| var textTimestamp = textTimestampMatches[ textTimestampMatches.length - 1 ];
| |
| if( htmlTimestamp !== textTimestamp ) {
| |
| throw new Error( "Timestamp assert failed! HTML had '" + htmlTimestamp + "' but wikitext had '" + textTimestamp + "'" );
| |
| }
| |
| } else {
| |
| console.warn( "textTimestampMatches was empty" );
| |
| }
| |
| | |
| // Actually insert our reply into the section wikitext
| |
| sectionWikitext = insertTextAfterIdx( sectionWikitext, sigEndStrIdx,
| |
| parentCmtObj.indentation.length, fullReply );
| |
| | |
| // Also, if the user wanted the edit request to be answered, do that
| |
| var editReqCheckbox = document.getElementById( "reply-link-option-edit-req" );
| |
| var markedEditReq = false;
| |
| if( editReqCheckbox && editReqCheckbox.checked ) {
| |
| sectionWikitext = markEditReqAnswered( sectionWikitext );
| |
| markedEditReq = true;
| |
| }
| |
| | |
| // If the user preferences indicate a dry run, print what the
| |
| // wikitext would have been post-edit and bail out
| |
| var dryRunCheckbox = document.getElementById( "reply-link-option-dry-run" );
| |
| if( window.replyLinkDryRun === "always" || ( dryRunCheckbox && dryRunCheckbox.checked ) ) {
| |
| console.log( "~~~~~~ DRY RUN CONCLUDED ~~~~~~" );
| |
| console.log( sectionWikitext );
| |
| setStatus( "Check the console for the dry-run results." );
| |
| document.querySelector( "#reply-link-buttons button" ).disabled = false;
| |
| deferred.resolve();
| |
| return deferred;
| |
| }
| |
| | |
| // Build summary
| |
| var defaultSummmary = mw.msg( "rl-replying-to" ) +
| |
| ( rplyToXfdNom ? xfdType + " nomination by " : "" ) +
| |
| cmtAuthorWktxt +
| |
| ( markedEditReq ? " and marking edit request as answered" : "" );
| |
| var customSummaryField = document.getElementById( "reply-link-summary" );
| |
| var summaryCore = defaultSummmary;
| |
| if( window.replyLinkCustomSummary && customSummaryField.value ) {
| |
| summaryCore = customSummaryField.value.trim();
| |
| }
| |
| var sectionId = sectionObj.headerEl ? sectionObj.headerEl.querySelector( "span.mw-headline" ).id : sectionObj.title;
| |
| var summary = "/* " + sectionId.replace( /_/g, " " ) + " */ " + summaryCore + mw.msg( "rl-advert" );
| |
| | |
| var editParams = {
| |
| action: "edit",
| |
| title: sectionObj.pageTitle,
| |
| summary: summary,
| |
| basetimestamp: revObj.timestamp,
| |
| };
| |
| | |
| if( canMakeSectionEdit && ( sectionObj.idxInDomHeaders !== null ) ) {
| |
| editParams.section = sectionObj.idxInDomHeaders + 1;
| |
| if( sectionWikitext.startsWith( oldSectionWikitext ) ) {
| |
| editParams.appendtext = "\n" + sectionWikitext.substring( oldSectionWikitext.length ).trim();
| |
| } else {
| |
| editParams.text = sectionWikitext;
| |
| }
| |
| } else {
| |
| var newWikitext = wikitext.replace( oldSectionWikitext, sectionWikitext );
| |
| editParams.text = newWikitext;
| |
| }
| |
| | |
| // Send another request, this time to actually edit the page
| |
| api.postWithEditToken( editParams ).done ( function ( data ) {
| |
| | |
| // We put this function on the window object because we
| |
| // give the user a "reload" link, and it'll trigger the function.
| |
| // TODO goodness knows why I made this a property on the window object
| |
| window.replyLinkReload = function () {
| |
| window.location.hash = sectionId;
| |
| var path = getPathToElement( cmtAuthorAndLink.link );
| |
| document.cookie = JUMP_COOKIE_KEY + "=" + path;
| |
| window.location.reload( true );
| |
| };
| |
| | |
| if ( data && data.edit && data.edit.result && data.edit.result == "Success" ) {
| |
| var needPurge = sectionObj.pageTitle !== currentPageName.replace( /_/g, " " );
| |
| | |
| function finishReply( _ ) {
| |
| if( canMakeSectionEdit && window.replyLinkAutoReload && window.replyLinkLoadNewInPlace ) {
| |
| performInPlaceReload( cmtAuthorAndLink.link, sectionObj );
| |
| } else {
| |
| var reloadHtml = window.replyLinkAutoReload ? mw.msg( "rl-reloading" )
| |
| : "<a href='javascript:window.replyLinkReload()' class='reply-link-reload'>" + mw.msg( "rl-reload" ) + "</a>";
| |
| setStatus( mw.msg( "rl-saved" ) + " (" + reloadHtml + ")" );
| |
| | |
| // Required to permit reload to happen, checked in onbeforeunload
| |
| replyWasSaved = true;
| |
| | |
| if( window.replyLinkAutoReload ) {
| |
| window.replyLinkReload();
| |
| }
| |
| | |
| deferred.resolve();
| |
| }
| |
| }
| |
| | |
| if( needPurge ) {
| |
| setStatus( "Reply saved! Purging..." );
| |
| api.post( { action: "purge", titles: currentPageName } ).done( finishReply );
| |
| } else {
| |
| finishReply();
| |
| }
| |
| } else {
| |
| if( data && data.edit && data.edit.spamblacklist ) {
| |
| setStatus( "Error! Your post contained a link on the <a href=" +
| |
| "\"https://en.wikipedia.org/wiki/Wikipedia:Spam_blacklist\"" +
| |
| ">spam blacklist</a>. Remove the link(s) to: " +
| |
| data.edit.spamblacklist.split( "|" ).join( ", " ) + " to allow saving." );
| |
| document.querySelector( "#reply-link-buttons button" ).disabled = false;
| |
| } else {
| |
| setStatus( "While saving, the edit query returned an error." +
| |
| " Check the browser console for more information." );
| |
| }
| |
| | |
| deferred.reject();
| |
| }
| |
| //console.log(data);
| |
| document.getElementById( "reply-dialog-field" ).style["background-image"] = "";
| |
| } ).fail ( function( code, result ) {
| |
| setStatus( mw.msg( "rl-edit-fail" ) );
| |
| console.log(code);
| |
| console.log(result);
| |
| deferred.reject();
| |
| } );
| |
| } catch ( e ) {
| |
| setStatusError( e );
| |
| deferred.reject();
| |
| }
| |
| | |
| return deferred;
| |
| }
| |
| | |
| function checkCanMakeSectionEdit( sectionObj ) {
| |
| var fullWikitext = sectionObj.revObj.content;
| |
| | |
| if( sectionObj.idxInDomHeaders === null ) {
| |
| return $.when( false );
| |
| }
| |
| | |
| // First, check if includeonly and noinclude are gonna ruin our day, by
| |
| // seeing if there are any section headers inside includeonly and
| |
| // noinclude elements.
| |
| var disruptiveSectionRegex = /<(includeonly|noinclude)>[\s\S]+?==[\s\S]+?<\/(\1)>/;
| |
| if( disruptiveSectionRegex.test( fullWikitext ) ) {
| |
| return $.when( false );
| |
| }
| |
| | |
| return $.getJSON(
| |
| mw.util.wikiScript( "api" ),
| |
| {
| |
| format: "json",
| |
| action: "parse",
| |
| prop: "wikitext",
| |
| section: sectionObj.idxInDomHeaders + 1,
| |
| page: sectionObj.pageTitle,
| |
| formatversion: 2,
| |
| }
| |
| ).then( function ( parseResult ) {
| |
| var parseSectionWikitext = parseResult.parse.wikitext;
| |
| var officialSectionWikitext = fullWikitext.slice( sectionObj.startIdx, sectionObj.endIdx )
| |
| .trim();
| |
| // Trim because parseSectionWikitext also gets trimmed by the API
| |
| if( officialSectionWikitext !== parseSectionWikitext ) {
| |
| // Bit of debug info
| |
| /*
| |
| console.log( "oswlen",officialSectionWikitext.length,"pswlen",parseSectionWikitext.length );
| |
| for ( var i = 0; i < Math.max( officialSectionWikitext.length, parseSectionWikitext.length ); i++ ) {
| |
| if( officialSectionWikitext[i] !== parseSectionWikitext[i] ) {
| |
| console.log( 'osw substr',
| |
| JSON.stringify( officialSectionWikitext.substring( i ) ),
| |
| 'psw substr',
| |
| JSON.stringify( parseSectionWikitext.substring( i ) ) );
| |
| break;
| |
| }
| |
| }
| |
| */
| |
| }
| |
| return officialSectionWikitext === parseSectionWikitext;
| |
| } );
| |
| }
| |
| | |
| function handleWrapperClick( linkLabel, parent, rplyToXfdNom, parentCmtObj, sectionObj ) {
| |
| return function ( evt ) {
| |
| $.when( mw.messages.exists( INT_MSG_KEYS[0] ) ? 1 :
| |
| api.loadMessages( INT_MSG_KEYS ) ).then( function () {
| |
| var newLink = this;
| |
| var newLinkWrapper = this.parentNode;
| |
| | |
| buildUserspcLinkRgx();
| |
| | |
| // Remove previous panel
| |
| var prevPanel = document.getElementById( "reply-link-panel" );
| |
| if( prevPanel ) {
| |
| prevPanel.remove();
| |
| }
| |
| | |
| // Reset previous cancel links
| |
| var cancelLinks = iterableToList( document.querySelectorAll(
| |
| ".reply-link-wrapper a" ) );
| |
| cancelLinks.forEach( function ( el ) {
| |
| if( el != newLink ) el.textContent = el.dataset.originalLabel;
| |
| } );
| |
| | |
| // Handle disable action
| |
| if( newLink.textContent === linkLabel ) {
| |
| | |
| // Disable this link
| |
| newLink.textContent = mw.msg( "rl-cancel" ) + linkLabel;
| |
| } else {
| |
| | |
| // We've already cancelled the reply
| |
| newLink.textContent = linkLabel;
| |
| evt.preventDefault();
| |
| return false;
| |
| }
| |
| | |
| // Figure out the username of the author
| |
| // of the comment we're replying to
| |
| var cmtAuthorAndLink = getCommentAuthor( newLinkWrapper );
| |
| | |
| try {
| |
| var cmtAuthor = cmtAuthorAndLink.username,
| |
| cmtLink = cmtAuthorAndLink.link;
| |
| } catch ( e ) {
| |
| setStatusError( e );
| |
| }
| |
| | |
| // Create panel
| |
| var panelEl = document.createElement( "div" );
| |
| panelEl.id = "reply-link-panel";
| |
| panelEl.innerHTML = "<textarea id='reply-dialog-field' class='mw-ui-input'" +
| |
| " placeholder='" + mw.msg( "rl-placeholder" ) + "'></textarea>" +
| |
| ( window.replyLinkCustomSummary ? "<label for='reply-link-summary'>Summary: </label>" +
| |
| "<input id='reply-link-summary' class='mw-ui-input' placeholder='Edit summary' " +
| |
| "value='Replying to " + cmtAuthor.replace( /'/g, "'" ) + "'/><br />" : "" ) +
| |
| "<table style='border-collapse:collapse'><tr><td id='reply-link-buttons' style='width: " +
| |
| ( window.replyLinkPreloadPing === "button" ? "325" : "255" ) + "px'>" +
| |
| "<button id='reply-dialog-button' class='mw-ui-button mw-ui-progressive'>" + mw.msg( "rl-reply" ) + "</button> " +
| |
| "<button id='reply-link-preview-button' class='mw-ui-button'>" + mw.msg( "rl-preview" ) + "</button>" +
| |
| ( window.replyLinkPreloadPing === "button" ?
| |
| " <button id='reply-link-ping-button' class='mw-ui-button'>Ping</button>" : "" ) +
| |
| "<button id='reply-link-cancel-button' class='mw-ui-button mw-ui-quiet mw-ui-destructive'>" + mw.msg( "rl-cancel-button" ) + "</button></td>" +
| |
| "<td id='reply-dialog-status'></span><div style='clear:left'></td></tr></table>" +
| |
| "<div id='reply-link-options' class='gone-on-empty' style='margin-top: 0.5em'></div>" +
| |
| "<div id='reply-link-preview' class='gone-on-empty' style='border: thin dashed gray; padding: 0.5em; margin-top: 0.5em'></div>";
| |
| parent.insertBefore( panelEl, newLinkWrapper.nextSibling );
| |
| var replyDialogField = document.getElementById( "reply-dialog-field" );
| |
| replyDialogField.style = "padding: 0.625em; min-height: 10em; margin-bottom: 0.75em; line-height: 1.3";
| |
| if( window.replyLinkPreloadPing === "always" &&
| |
| cmtAuthor &&
| |
| cmtAuthor !== mw.config.get( "wgUserName" ) &&
| |
| cmtAuthor !== mw.config.get( "wgRelevantUserName" ) &&
| |
| !/(\d+.){3}\d+/.test( cmtAuthor ) ) {
| |
| replyDialogField.value = window.replyLinkPreloadPingTpl.replace( "##", cmtAuthor );
| |
| }
| |
| | |
| // Fill up #reply-link-options
| |
| function newOption( id, text, defaultOn ) {
| |
| var newCheckbox = document.createElement( "input" );
| |
| newCheckbox.type = "checkbox";
| |
| newCheckbox.id = id;
| |
| if( defaultOn ) {
| |
| newCheckbox.checked = true;
| |
| }
| |
| var newLabel = document.createElement( "label" );
| |
| newLabel.htmlFor = id;
| |
| newLabel.appendChild( document.createTextNode( text ) );
| |
| document.getElementById( "reply-link-options" ).appendChild( newCheckbox );
| |
| document.getElementById( "reply-link-options" ).appendChild( newLabel );
| |
| }
| |
| | |
| if( parentCmtObj.sigIdx === null && parentCmtObj.endStrIdx === null ) {
| |
| parentCmtObj.sigIdx = metadata[this.id].sigIdx;
| |
| }
| |
| | |
| // If the dry-run option is "checkbox", add an option to make it
| |
| // a dry run
| |
| if( window.replyLinkDryRun === "checkbox" ) {
| |
| newOption( "reply-link-option-dry-run", "Don't actually edit?", true );
| |
| }
| |
| | |
| // If the current section header text indicates an edit request,
| |
| // offer to mark it as answered
| |
| //if( ourMetadata[1] && EDIT_REQ_REGEX.test( ourMetadata[1][1] ) ) {
| |
| // newOption( "reply-link-option-edit-req", "Mark edit request as answered?", false );
| |
| //}
| |
| | |
| // If the previous comment was indented by OUTDENT_THRESH,
| |
| // offer to outdent
| |
| if( parentCmtObj.indentation.length >= OUTDENT_THRESH ) {
| |
| newOption( "reply-link-option-outdent", "Outdent?", false );
| |
| }
| |
| | |
| if( window.replyLinkAutoIndentation === "checkbox" ) {
| |
| newOption( "reply-link-option-auto-indent", mw.msg( "rl-auto-indent" ), true );
| |
| }
| |
| | |
| /* Commented out because I could never get it to work
| |
| // Autofill with a recommendation if we're replying to a nom
| |
| if( rplyToXfdNom ) {
| |
| replyDialogField.value = "'''Comment'''";
| |
| | |
| // Highlight the "Comment" part so the user can change it
| |
| var range = document.createRange();
| |
| range.selectNodeContents( replyDialogField );
| |
| //range.setStart( replyDialogField, 3 ); // start of "Comment"
| |
| //range.setEnd( replyDialogField, 10 ); // end of "Comment"
| |
| var sel = window.getSelection();
| |
| sel.removeAllRanges();
| |
| sel.addRange( range );
| |
| }*/
| |
| | |
| // Close handler
| |
| window.onbeforeunload = function ( e ) {
| |
| if( !replyWasSaved &&
| |
| document.getElementById( "reply-dialog-field" ) &&
| |
| document.getElementById( "reply-dialog-field" ).value ) {
| |
| var txt = mw.msg( "rl-started-reply" );
| |
| e.returnValue = txt;
| |
| return txt;
| |
| }
| |
| };
| |
| | |
| // Start loading in the section object, so we don't have to do it in startReply
| |
| try {
| |
| var sectionObjPromise = ( sectionObj === null ) ? findSectionMain( cmtLink ) : $.when( sectionObj );
| |
| } catch ( e ) {
| |
| console.error( e );
| |
| setStatus( "Error locating the section: " + e );
| |
| document.querySelector( "#reply-link-buttons button" ).disabled = true;
| |
| }
| |
| | |
| // Also, check if we can get away with sending just a section edit
| |
| var canMakeSectionEditPromise = sectionObjPromise.then( checkCanMakeSectionEdit );
| |
| | |
| // Called by the "Reply" button, Ctrl-Enter in the text area, and
| |
| // Enter/Ctrl-Enter in the summary field
| |
| function startReply() {
| |
| | |
| // Change UI to make it clear we're performing an operation
| |
| document.getElementById( "reply-dialog-field" ).style["background-image"] =
| |
| "url(" + window.replyLinkPendingImageUrl + ")";
| |
| document.querySelector( "#reply-link-buttons button" ).disabled = true;
| |
| setStatus( mw.msg( "rl-loading" ) );
| |
| | |
| var revidCheckPromise = sectionObjPromise.then( function ( sectionObj ) {
| |
| return getLastRevId( sectionObj.pageTitle );
| |
| } );
| |
| | |
| $.when(
| |
| sectionObjPromise,
| |
| revidCheckPromise,
| |
| canMakeSectionEditPromise,
| |
| ).then( function ( sectionObj, currentRevId, canMakeSectionEdit ) {
| |
| if( currentRevId > sectionObj.pageRevId ) {
| |
| // Someone's edited this page since we parsed it
| |
| setStatus( mw.msg( "rl-out-of-date" ) );
| |
| } else {
| |
| doReply(
| |
| parentCmtObj,
| |
| cmtAuthorAndLink,
| |
| rplyToXfdNom,
| |
| sectionObj,
| |
| canMakeSectionEdit
| |
| );
| |
| }
| |
| }, function ( err ) {
| |
| console.error( err );
| |
| setStatus( "Error (async), probably while locating the section: " + err );
| |
| } );
| |
| }
| |
| | |
| // Event listener for the "Reply" button
| |
| document.getElementById( "reply-dialog-button" )
| |
| .addEventListener( "click", startReply );
| |
| | |
| // Event listener for the text area
| |
| document.getElementById( "reply-dialog-field" )
| |
| .addEventListener( "keydown", function ( e ) {
| |
| if( e.ctrlKey && ( e.keyCode == 10 || e.keyCode == 13 ) ) {
| |
| startReply();
| |
| }
| |
| } );
| |
| | |
| // Event listener for the "Preview" button
| |
| document.getElementById( "reply-link-preview-button" )
| |
| .addEventListener( "click", function () {
| |
| var reply = document.getElementById( "reply-dialog-field" ).value.trim();
| |
| | |
| // Add a signature if one isn't already there
| |
| if( !hasSig( reply ) ) {
| |
| reply += " " + ( window.replyLinkSigPrefix ?
| |
| window.replyLinkSigPrefix : "" ) + LITERAL_SIGNATURE;
| |
| }
| |
| | |
| var sanitizedCode = encodeURIComponent( reply );
| |
| sectionObjPromise.then( function ( sectionObj ) {
| |
| $.post( "https:" + mw.config.get( "wgServer" ) +
| |
| "/w/api.php?action=parse&format=json&title=" +
| |
| encodeURIComponent( sectionObj.pageTitle ) + "&text=" + sanitizedCode +
| |
| "&pst=1&prop=text&formatversion=2",
| |
| function ( res ) {
| |
| if ( !res || !res.parse || !res.parse.text ) return console.error( "Preview failed" );
| |
| document.getElementById( "reply-link-preview" ).innerHTML = res.parse.text;
| |
| // Add target="_blank" to links to make them open in a new tab by default
| |
| var links = document.querySelectorAll( "#reply-link-preview a" );
| |
| for( var i = 0, n = links.length; i < n; i++ ) {
| |
| links[i].setAttribute( "target", "_blank" );
| |
| }
| |
| } );
| |
| } );
| |
| } );
| |
| | |
| if( window.replyLinkPreloadPing === "button" ) {
| |
| document.getElementById( "reply-link-ping-button" )
| |
| .addEventListener( "click", function () {
| |
| var cmtAuthorEscaped = cmtAuthor.replace( /=/g, "{{=}}" );
| |
| replyDialogField.value = window.replyLinkPreloadPingTpl
| |
| .replace( "##", cmtAuthorEscaped ) + replyDialogField.value;
| |
| } );
| |
| }
| |
| | |
| // Event listener for the "Cancel" button
| |
| document.getElementById( "reply-link-cancel-button" )
| |
| .addEventListener( "click", function () {
| |
| newLink.textContent = linkLabel;
| |
| panelEl.remove();
| |
| } );
| |
| | |
| // Event listeners for the custom edit summary field
| |
| if( window.replyLinkCustomSummary ) {
| |
| document.getElementById( "reply-link-summary" )
| |
| .addEventListener( "keydown", function ( e ) {
| |
| if( e.keyCode == 10 || e.keyCode == 13 ) {
| |
| startReply();
| |
| }
| |
| } );
| |
| }
| |
| | |
| if( newLinkWrapper.dataset.replyLinkInstant === true ) {
| |
| startReply();
| |
| newLinkWrapper.dataset.replyLinkInstant = false;
| |
| }
| |
| | |
| if( window.replyLinkTestInstantReply ) {
| |
| startReply();
| |
| }
| |
| }.bind( this ) );
| |
| | |
| // Cancel default event handler
| |
| evt.preventDefault();
| |
| return false;
| |
| }
| |
| }
| |
| | |
| /**
| |
| * Adds a "(reply)" link after the provided text node, giving it
| |
| * the provided element id. anyIndentation is true if there's any
| |
| * indentation (i.e. indentation string is not the empty string)
| |
| */
| |
| function attachLinkAfterNode( node, preferredId, parentCmtObj, sectionObj ) {
| |
| | |
| // Choose a parent node - walk up tree until we're under a dd, li,
| |
| // p, or div. This walk is a bit unsafe, but this function should
| |
| // only get called in a place where the walk will succeed.
| |
| var parent = node;
| |
| do {
| |
| parent = parent.parentNode;
| |
| } while( !( /^(p|dd|li|div|td)$/.test( parent.tagName.toLowerCase() ) ) );
| |
| | |
| // Determine whether we're replying to an XfD nom
| |
| var rplyToXfdNom = false;
| |
| if( xfdType === "AfD" || xfdType === "MfD" ) {
| |
| | |
| // If the parent comment is non-indented, we are replying to a nom
| |
| rplyToXfdNom = !parentCmtObj.sigIdx;
| |
| } else if( xfdType === "TfD" || xfdType === "FfD" ) {
| |
| | |
| // If the sibling before the previous sibling of this node
| |
| // is a h4, then this is a nom
| |
| rplyToXfdNom = parent.previousElementSibling &&
| |
| parent.previousElementSibling.previousElementSibling &&
| |
| parent.previousElementSibling.previousElementSibling.nodeType === 1 &&
| |
| parent.previousElementSibling.previousElementSibling.tagName.toLowerCase() === "h4";
| |
| } else if( xfdType === "CfD" ) {
| |
| | |
| // If our grandparent is a dl and our grandparent's previous
| |
| // sibling is a h4, then this is a nom
| |
| rplyToXfdNom = parent.parentNode.tagName.toLowerCase() === "dl" &&
| |
| parent.parentNode.previousElementSibling.nodeType === 1 &&
| |
| parent.parentNode.previousElementSibling.tagName.toLowerCase() === "h4";
| |
| }
| |
| | |
| // Choose link label: if we're replying to an XfD, customize it
| |
| var linkLabel = mw.msg( "rl-reply-label" ) + ( rplyToXfdNom ? mw.msg( "rl-to-label" ) + xfdType : "" );
| |
| | |
| // Construct new link
| |
| var newLinkWrapper = document.createElement( "span" );
| |
| newLinkWrapper.className = "reply-link-wrapper";
| |
| var newLink = document.createElement( "a" );
| |
| newLink.href = "#";
| |
| newLink.id = preferredId;
| |
| newLink.dataset.originalLabel = linkLabel;
| |
| newLink.appendChild( document.createTextNode( linkLabel ) );
| |
| newLink.addEventListener( "click", handleWrapperClick( linkLabel, parent, rplyToXfdNom, parentCmtObj, sectionObj ) );
| |
| newLinkWrapper.appendChild( document.createTextNode( " (" ) );
| |
| newLinkWrapper.appendChild( newLink );
| |
| newLinkWrapper.appendChild( document.createTextNode( ")" ) );
| |
| | |
| // Insert new link into DOM
| |
| parent.insertBefore( newLinkWrapper, node.nextSibling );
| |
| }
| |
| | |
| /**
| |
| * Uses attachLinkAfterTextNode to add a reply link after every
| |
| * timestamp on the page.
| |
| */
| |
| function attachLinks () {
| |
| var mainContent = findMainContentEl();
| |
| if( !mainContent ) {
| |
| console.error( "No main content element found; exiting." );
| |
| return;
| |
| }
| |
| | |
| var contentEls = mainContent.children;
| |
| | |
| // Find the index of the first header in contentEls
| |
| var headerIndex = 0;
| |
| for( headerIndex = 0; headerIndex < contentEls.length; headerIndex++ ) {
| |
| if( contentEls[ headerIndex ].matches( HEADER_SELECTOR ) ) break;
| |
| }
| |
| | |
| // If we didn't find any headers at all, that's a problem and we
| |
| // should bail
| |
| if( mainContent.querySelector( "div.hover-edit-section" ) ) {
| |
| headerIndex = 0;
| |
| } else if( headerIndex === contentEls.length ) {
| |
| console.error( "Didn't find any headers - hit end of loop!" );
| |
| return;
| |
| }
| |
| | |
| // We also should include the first header
| |
| if( headerIndex > 0 ) {
| |
| headerIndex--;
| |
| }
| |
| | |
| // Each element is a 2-element list of [level, node]
| |
| var parseStack = iterableToList( contentEls ).slice( headerIndex );
| |
| parseStack.reverse();
| |
| parseStack = parseStack.map( function ( el ) { return [ "", el ]; } );
| |
| | |
| // Main parse loop
| |
| var node;
| |
| var currIndentation; // A string of symbols, like ":*::"
| |
| var newIndentSymbol;
| |
| var stackEl; // current element from the parse stack
| |
| var idNum = 0; // used to make id's for the links
| |
| var linkId = ""; // will be the element id for this link
| |
| while( parseStack.length ) {
| |
| stackEl = parseStack.pop();
| |
| node = stackEl[1];
| |
| currIndentation = stackEl[0];
| |
| | |
| // Compatibility with "Comments in Local Time"
| |
| var isLocalCommentsSpan = node.nodeType === 1 &&
| |
| "span" === node.tagName.toLowerCase() &&
| |
| node.className.includes( "localcomments" );
| |
| | |
| var isSmall = node.nodeType === 1 && (
| |
| node.tagName.toLowerCase() === "small" ||
| |
| ( node.tagName.toLowerCase() === "span" &&
| |
| node.style && node.style.getPropertyValue( "font-size" ) === "85%" ) );
| |
| | |
| // Small nodes are okay, unless they're delsort notices
| |
| var isOkSmallNode = isSmall &&
| |
| !node.className.includes( "delsort-notice" );
| |
| | |
| if( ( node.nodeType === 3 ) ||
| |
| isOkSmallNode ||
| |
| isLocalCommentsSpan ) {
| |
| | |
| // If the current node has a timestamp, attach a link to it
| |
| // Also, no links after timestamps, because it's just like
| |
| // having normal text afterwards, which is rejected (because
| |
| // that means someone put a timestamp in the middle of a
| |
| // paragraph)
| |
| var hasLinkAfterwardsNotInBlockEl = node.nextElementSibling &&
| |
| ( node.nextElementSibling.tagName.toLowerCase() === "a" ||
| |
| ( node.nextElementSibling.tagName.match( /^(span|small)$/i ) &&
| |
| node.nextElementSibling.querySelector( "a" ) ) );
| |
| if( TIMESTAMP_REGEX.test( node.textContent ) &&
| |
| ( node.previousSibling || isSmall ) &&
| |
| !hasLinkAfterwardsNotInBlockEl ) {
| |
| linkId = "reply-link-" + idNum;
| |
| var parentCmtObj = {
| |
| indentation: currIndentation,
| |
| sigIdx: null,
| |
| endStrIdx: null
| |
| };
| |
| attachLinkAfterNode( node, linkId, parentCmtObj, /* sectionObj */ null );
| |
| idNum++;
| |
| | |
| // Update global metadata dictionary
| |
| metadata[linkId] = {};
| |
| //metadata[linkId].indentation = currIndentation; // It's already being passed into attachLinkAfterNode
| |
| }
| |
| } else if( node.nodeType === 1 &&
| |
| /^(div|p|dl|dd|ul|li|span|ol|table|tbody|tr|td)$/.test( node.tagName.toLowerCase() ) ) {
| |
| switch( node.tagName.toLowerCase() ) {
| |
| case "dl": newIndentSymbol = ":"; break;
| |
| case "ul": newIndentSymbol = "*"; break;
| |
| case "ol": newIndentSymbol = "#"; break;
| |
| case "div":
| |
| if( node.className.includes( "xfd_relist" ) || node.className.includes( "thumbcaption" ) ) {
| |
| continue;
| |
| }
| |
| break;
| |
| default: newIndentSymbol = ""; break;
| |
| }
| |
| | |
| var childNodes = node.childNodes;
| |
| for( let i = 0, numNodes = childNodes.length; i < numNodes; i++ ) {
| |
| parseStack.push( [ currIndentation + newIndentSymbol,
| |
| childNodes[i] ] );
| |
| }
| |
| }
| |
| }
| |
| | |
| // This loop adds sigIdx entries in the metadata dictionary
| |
| var sigIdxEls = iterableToList( mainContent.querySelectorAll(
| |
| HEADER_SELECTOR + ",span.reply-link-wrapper a" ) );
| |
| var currSigIdx = 0, j, numSigIdxEls, currHeaderEl, currHeaderData;
| |
| var headerIdx = 0; // index of the current header
| |
| var headerLvl = 0; // level of the current header
| |
| for( j = 0, numSigIdxEls = sigIdxEls.length; j < numSigIdxEls; j++ ) {
| |
| var headerTagNameMatch = /^h(\d+)$/.exec(
| |
| sigIdxEls[j].tagName.toLowerCase() );
| |
| if( headerTagNameMatch ) {
| |
| currHeaderEl = sigIdxEls[j];
| |
| | |
| // Test to make sure we're not in the table of contents
| |
| if( currHeaderEl.parentNode.className === "toctitle" ) {
| |
| continue;
| |
| }
| |
| | |
| // Reset signature counter
| |
| currSigIdx = 0;
| |
| } else {
| |
| metadata[ sigIdxEls[j].id ].sigIdx = currSigIdx;
| |
| currSigIdx++;
| |
| }
| |
| }
| |
| | |
| // Disable links inside hatnotes, archived discussions
| |
| var badRegionsSelector = "div.archived,div.resolved,table";
| |
| var badRegions = mainContent.querySelectorAll( badRegionsSelector );
| |
| for( var i = 0; i < badRegions.length; i++ ) {
| |
| var badRegion = badRegions[i];
| |
| var insideArchived = badRegion.querySelectorAll( ".reply-link-wrapper" );
| |
| for( var j = 0; j < insideArchived.length; j++ ) {
| |
| insideArchived[j].parentNode.removeChild( insideArchived[j] );
| |
| }
| |
| }
| |
| }
| |
| | |
| function runTestMode() {
| |
| | |
| // We never want to make actual edits
| |
| window.replyLinkDryRun = "always";
| |
| | |
| // Simulate having a panel open
| |
| $( "#mw-content-text" )
| |
| .append( $( "<div>" )
| |
| .append( $( "<textarea>" ).attr( "id", "reply-dialog-field" ).val( "hi" ) )
| |
| .append( $( "<div>" ).attr( "id", "reply-link-buttons" )
| |
| .append( $( "<button> " ) ) ) );
| |
| | |
| mw.util.addCSS( ".reply-link-wrapper { background-color: orange; }" );
| |
| | |
| api.loadMessages( INT_MSG_KEYS ).then( function () {
| |
| buildUserspcLinkRgx();
| |
| | |
| // Statistics variables
| |
| var successes = 0, failures = 0;
| |
| | |
| // Run one test on a wrapper link
| |
| function runOneTestOn( wrapper ) {
| |
| try {
| |
| var cmtAuthorAndLink = getCommentAuthor( wrapper );
| |
| var ourMetadata = metadata[ wrapper.children[0].id ];
| |
| findSectionMain( cmtAuthorAndLink.link ).then( function ( sectionObj ) {
| |
| doReply(
| |
| ourMetadata.indentation,
| |
| ourMetadata.sigIdx,
| |
| cmtAuthorAndLink,
| |
| /* rplyToXfdNom */ false,
| |
| sectionObj
| |
| ).done( function () {
| |
| wrapper.style.background = "green";
| |
| successes++;
| |
| } ).fail( function () {
| |
| wrapper.style.background = "red";
| |
| failures++;
| |
| } );
| |
| } );
| |
| } catch ( e ) {
| |
| console.error( e );
| |
| wrapper.style.background = "red";
| |
| failures++;
| |
| }
| |
| }
| |
| | |
| var wrappers = Array.from( document.querySelectorAll( ".reply-link-wrapper" ) );
| |
| function runOneTest() {
| |
| var wrapper = wrappers.shift();
| |
| if( wrapper ) {
| |
| runOneTestOn( wrapper );
| |
| setTimeout( runOneTest, 250 );
| |
| } else {
| |
| var results = successes + " successes, " + failures + " failures";
| |
| $( "#mw-content-text" ).prepend( results ).append( results );
| |
| }
| |
| }
| |
| //console.log = function() {};
| |
| setTimeout( runOneTest, 0 );
| |
| } );
| |
| }
| |
| | |
| function onReady() {
| |
| var lang_code = mw.config.get( "wgUserLanguage" )
| |
| // Replace default English interface by translation if available
| |
| var interface_messages = $.extend( {}, i18n.en, i18n[ lang_code.split('-')[0] ], i18n[ lang_code ] );
| |
| // Define interface messages
| |
| mw.messages.set( interface_messages );
| |
| | |
| // Exit if history page or edit page or oldid
| |
| if( mw.config.get( "wgAction" ) === "history" ) return;
| |
| if( document.getElementById( "editform" ) ) return;
| |
| if( window.location.search.includes( "oldid=" ) ) return;
| |
| | |
| api = new mw.Api();
| |
| | |
| mw.util.addCSS(
| |
| "#reply-link-panel { padding: 1em; margin-left: 1.6em; "+
| |
| "max-width: 1200px; width: 66%; margin-top: 0.5em; }"+
| |
| ".gone-on-empty:empty { display: none; }"
| |
| );
| |
| mw.loader.load( "https://en.wikipedia.org/w/index.php?title=User:Enterprisey/mw-ui-button.css&action=raw&ctype=text/css", "text/css" );
| |
| | |
| // Pre-load interface messages; we will check again when a (reply)
| |
| // link is clicked
| |
| api.loadMessages( INT_MSG_KEYS );
| |
| | |
| // Initialize the xfdType global variable, which must happen
| |
| // before the call to attachLinks
| |
| currentPageName = mw.config.get( "wgPageName" );
| |
| xfdType = "";
| |
| if( mw.config.get( "wgNamespaceNumber" ) === 4) {
| |
| if( currentPageName.startsWith( "Wikipedia:Articles_for_deletion/" ) ) {
| |
| xfdType = "AfD";
| |
| } else if( currentPageName.startsWith( "Wikipedia:Miscellany_for_deletion/" ) ) {
| |
| xfdType = "MfD";
| |
| } else if( currentPageName.startsWith( "Wikipedia:Templates_for_discussion/Log/" ) ) {
| |
| xfdType = "TfD";
| |
| } else if( currentPageName.startsWith( "Wikipedia:Categories_for_discussion/Log/" ) ) {
| |
| xfdType = "CfD";
| |
| } else if( currentPageName.startsWith( "Wikipedia:Files_for_discussion/" ) ) {
| |
| xfdType = "FfD";
| |
| }
| |
| }
| |
| | |
| // Default values for some preferences
| |
| function defaultValue( prefName, defaultValue ) { if( window[prefName] === undefined ) window[prefName] = defaultValue; }
| |
| defaultValue( "replyLinkAutoReload", !isOnSectionWatchlistPage );
| |
| defaultValue( "replyLinkDryRun", "never" );
| |
| defaultValue( "replyLinkPreloadPing", "always" );
| |
| defaultValue( "replyLinkPreloadPingTpl", "{{u|##}}, " );
| |
| defaultValue( "replyLinkCustomSummary", false );
| |
| defaultValue( "replyLinkTestMode", false );
| |
| defaultValue( "replyLinkTestInstantReply", false );
| |
| defaultValue( "replyLinkAutoIndentation", "checkbox" );
| |
| defaultValue( "replyLinkLoadNewInPlace", true );
| |
| | |
| // Insert "reply" links into DOM
| |
| if( !isOnSectionWatchlistPage ) {
| |
| attachLinks();
| |
| }
| |
| | |
| // If test mode is enabled, create a link for that
| |
| if( window.replyLinkTestMode &&
| |
| document.getElementsByClassName( "reply-link-sig-check-container" ).length === 0 ) {
| |
| mw.util.addPortletLink( "p-cactions", "#", "reply-link test mode", "pt-reply-link-test" )
| |
| .addEventListener( "click", runTestMode );
| |
| | |
| var dryRunToCheckboxLink = mw.util.addPortletLink( "p-cactions", "#",
| |
| "reply-link: dry-run = checkbox", "pt-reply-link-dry-run-checkbox",
| |
| "Set window.replyLinkDryRun to 'checkbox'" )
| |
| .addEventListener( "click", function () { window.replyLinkDryRun = "checkbox" } );
| |
| | |
| // Also add "sig check" links to each section header
| |
| $( "#mw-content-text" ).find( HEADER_SELECTOR ).each( function ( idx, header ) {
| |
| $( header ).find( ".mw-editsection *" ).last().before(
| |
| "<span style='color: #54595d'> | </span>",
| |
| $( "<span>", { "class": "reply-link-sig-check-container" } ).append(
| |
| $( "<a>" )
| |
| .attr( "href", "#" )
| |
| .text( "sig check" )
| |
| .click( function () {
| |
| buildUserspcLinkRgx();
| |
| var sigEls = $( header ).nextUntil( HEADER_SELECTOR ).find( '.reply-link-wrapper' ).toArray();
| |
| findSectionMain( sigEls[0] ).then( function ( sectionObj ) {
| |
| var sectionWikitext = sectionObj.revObj.content.substring( sectionObj.startIdx, sectionObj.endIdx );
| |
| for( var sigIdx = 0; sigIdx < sigEls.length; sigIdx++ ) {
| |
| var strIndices = sigIdxToStrIdx( sectionWikitext, sigIdx );
| |
| var sigText = sectionWikitext.substring( strIndices.start, strIndices.end );
| |
| $( sigEls[sigIdx] ).last().before( " ", $( "<abbr>", { title: sigText } ).text( sigText.substring( sigText.length - 50 ) ) );
| |
| }
| |
| } );
| |
| return false;
| |
| } ) ) );
| |
| } );
| |
| }
| |
| | |
| // This large string creats the "pending" texture
| |
| window.replyLinkPendingImageUrl = "data:image/gif;base64,R0lGODlhGAAYAKIGAP7+/vv7+/Ly8u/v7+7u7v///////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFAAAGACwAAAAAGAAYAAADU0hKAvUwvjCWbTIXahfWEdcxDgiJ3Wdu1UiUK5quUzuqoHzBuZ3yGp0HmBEqcEHfjmYkMZXDp8sZgx6JkiayaKWatFhJd1uckrPWcygdXrvUJ1sCACH5BAUAAAYALAAAAAAYABgAAANTSLokUDBKGAZbbupSr8qb1HlgSFnkY55eo67jVZoxM4c189IoubKtmyaH2W2IH+OwJ1NOkK4fVPhk2pwia1GqTXJbUVg3zANTs2asZHwWpX+cQQIAIfkEBQAABgAsAAAAABgAGAAAA1E4tLwCJcoZQ2uP6hLUJdk2dR8IiRL5hSjnXSyqwmc7Y7X84m21MzHRrZET/oA9V8nUGwKLGqcDSpEybcdpM3vVLYNRLrgqpo7K2685hcaqkwkAIfkEBQAABgAsAAAAABgAGAAAA1RYFUP+TgBFq2IQSstxjhNnNR+xiVVQmiF6kdnpLrDWul58o7k9vyUZrvYQ8oigHy24E/UgzQ4yonwWo6kp62dNzrrbr9YoXZEt4HPWjKWk20CmKwEAIfkEBQAABgAsAAAAABgAGAAAA1NYWjH08Amwam0xTstxlhR3OR+xiYv3nahCrmHLlGbcqpqN4hB7vzmZggcSMoA9nYhYMzJ9O2RRyCQoO1KJM9uUVaFYGtjyvY7E5hR3fC6x1WhRAgAh+QQFAAAGACwAAAAAGAAYAAADVFi6FUMwQgGYVU5Kem3WU9UtH8iN2AMSJ1pq7fhuoquaNXrDubyyvc4shCLtIjHZkVhsLIFN5yopfFIvQ2gze/U8CUHsVxDNam2/rjEdZpjVKTYjAQAh+QQFAAAGACwAAAAAGAAYAAADU1i6G0MwQgGYVU5Kem3WU9U1D0hwI1aCaPqxortq7fjSsT1veXfzqcUuUrOZTj3fEBlUmYrKZ/LyCzULVWYzC6Uuu57vNHwcM7KnKxpMOrKdUkUCACH5BAUAAAYALAAAAAAYABgAAANTWLqsMSTKKEC7b856W9aU1S0fyI0OBBInWmrt+G6iq5q1fMN5N0sx346GSq1YPcwQmLwsQ0XHMShcUZXWpud53WajhR8SLO4yytozN016EthGawIAIfkEBQAABgAsAAAAABgAGAAAA1MoUNzOYZBJ53o41ipwltukeI4WEiMJgWGqmu31sptLwrV805zu4T3V6oTyfYi2H4+SPJ6aDyDTiFmKqFEktmSFRrvbhrQoHMbKhbGX+wybc+hxAgAh+QQFAAAGACwAAAAAGAAYAAADVEgqUP7QhaHqajFPW1nWFEd4H7SJBFZKoSisz+mqpcyRq23hdXvTH10HCEKNiBHhBVZQHplOXtC3Q5qoQyh2CYtaIdsn1CidosrFGbO5RSfb35gvAQAh+QQFAAAGACwAAAAAGAAYAAADU0iqAvUwvjCWbTIXahfWEdcRHzhVY2mKnQqynWOeIzPTtZvBl7yiKd8L2BJqeB7jjti7IRlKyZMUDTGTzis0W6Nyc1XIVJfRep1dslSrtoJvG1QCACH5BAUAAAYALAAAAAAYABgAAANSSLoqUDBKGAZbbupSb3ub1HlZGI1XaXIWCa4oo5ox9tJteof1sm+9xoqS0w2DhBmwKPtNkEoN1Cli2o7WD9ajhWWT1NM3+hyHiVzwlkuemIecBAAh+QQFAAAGACwAAAAAGAAYAAADUxhD3CygyEnlcg3WXQLOEUcpH6GJE/mdaHdhLKrCYTs7sXiDrbQ/NdkLF9QNHUXO79FzlUzJyhLam+Y21ujoyLNxgdUv1fu8SsXmbVmbQrN97l4CACH5BAUAAAYALAAAAAAYABgAAANSWBpD/k4ARetq8EnLWdYTV3kfsYkV9p3oUpphW5AZ29KQjeKgfJU6ES8Su6lyxd2x5xvCfLPlIymURqDOpywbtHCpXqvW+OqOxGbKt4kGn8vuBAAh+QQFAAAGACwAAAAAGAAYAAADU1iqMfTwCbBqbTFOy3GWFHc5H7GJi/edaKFmbEuuYeuWZt2+UIzyIBtjptH9iD2jCJgTupBBIdO3hDalVoKykxU4mddddzvCUS3gc7mkTo2xZmUCACH5BAUAAAYALAAAAAAYABgAAANTWLoaQzBCAZhtT0Z6rdNb1S0fSHAjZp5iWoKom8Ht+GqxPeP1uEs52yrYuYVSpN+kV1SykCoatGBcTqtPKJZ42TK7TsLXExZcy+PkMB2VIrHZQgIAIfkEBQAABgAsAAAAABgAGAAAA1RYuhxDMEIBmFVOSnpt1lPVLR/IjdgDEidaau34bqKrmrV8w3k3RzHfjoZaDIE934qVvPyYxdQqKJw2PUdo9El1ZrtYa7TAvTayBDMJLRg/tbYlJwEAIfkEBQAABgAsAAAAABgAGAAAA1IItdwbg8gphbsFUioUZtpWeV8WiURXPqeorqFLfvH2ljU3Y/l00y3b7tIbrUyo1NBRVB6bv09Qd8wko7yp8al1clFYYjfMHC/L4HOjSF6bq80EACH5BAUAAAYALAAAAAAYABgAAANTSALV/i0MQqtiMEtrcX4bRwkfFIpL6Zxcqhas5apxNZf16OGTeL2wHmr3yf1exltR2CJqmDKnCWqTgqg6YAF7RPq6NKxy6Rs/y9YrWpszT9fAWgIAOw==";
| |
| | |
| | |
| // Respond to any [[User:Enterprisey/reply-link auto instant reply]] transclusions
| |
| var autoReplies = document.querySelectorAll( ".reply-link-auto-instant-reply" );
| |
| if( autoReplies.length > 0 ) {
| |
| window.replyLinkTestInstantReply = true;
| |
| }
| |
| for( var i = 0; i < autoReplies.length; i++ ) {
| |
| var el = autoReplies[i];
| |
| while( el && el.className !== "reply-link-wrapper" ) {
| |
| el = el.nextElementSibling;
| |
| }
| |
| if( el ) {
| |
| el.dataset.replyLinkInstant = true;
| |
| el.querySelector( "a" ).click();
| |
| }
| |
| }
| |
| | |
| // Jump CSS
| |
| mw.loader.addStyleTag( "@keyframes reply-link-jump-highlight-keyframes { from { background-color: #ffb; } to { background-color: transparent; } } .reply-link-jump-highlight { animation: reply-link-jump-highlight-keyframes 2s; }" );
| |
| | |
| // Timeout to give other scripts time to load
| |
| setTimeout( function () {
| |
| | |
| // If there's an element to jump to, jump to it
| |
| var jumpCookieIdx = document.cookie.indexOf( JUMP_COOKIE_KEY );
| |
| if( jumpCookieIdx >= 0 ) {
| |
| try {
| |
| var path = new RegExp( JUMP_COOKIE_KEY + "=([^;]+)" ).exec( document.cookie )[1];
| |
| var el = followPathToElement( path );
| |
| el.scrollIntoView();
| |
| highlightContainerOf( el );
| |
| } catch( e ) { console.error(e); }
| |
| document.cookie = JUMP_COOKIE_KEY + "=; expires=Thu, 01 Jan 1970 00:00:01 GMT";
| |
| }
| |
| }, 500 );
| |
| } // end function onReady
| |
|
| |
|
| mw.loader.load( "mediawiki.ui.input", "text/css" );
| | //Purge |
| mw.loader.using( [ "mediawiki.util", "mediawiki.api" ] ).then( function () {
| | mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পুনঃসতেজ.js&action=raw&ctype=text/javascript'); |
| mw.hook( "wikipage.content" ).add( onReady );
| |
| if( isOnSectionWatchlistPage ) {
| |
| mw.hook( "replylink.attachlinkafter" ).add( attachLinkAfterNode );
| |
| }
| |
| } );
| |
|
| |
|
| // Return functions for testing
| | /** Quick Edit **/ |
| return {
| | mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/দ্রুত সম্পাদনা.js&action=raw&ctype=text/javascript'); |
| "iterableToList": iterableToList,
| |
| "sigIdxToStrIdx": sigIdxToStrIdx,
| |
| "insertTextAfterIdx": insertTextAfterIdx,
| |
| "wikitextToTextContent": wikitextToTextContent
| |
| };
| |
| }
| |
|
| |
|
| // Export functions for testing | | //page creation |
| if( typeof module === typeof {} ) {
| | mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পাতা সৃষ্টিকারক.js&action=raw&ctype=text/javascript'); |
| module.exports = { "loadReplyLink": loadReplyLink };
| |
| }
| |
|
| |
|
| // If we're in the right environment, load the script | | //redirect fix |
| if( jQuery !== undefined && mediaWiki !== undefined ) {
| | $(function() { $('#mw-content-text .mw-redirect').after(function() { return this.href.indexOf('action=edit') !== -1 || this.href.indexOf('action=') !== -1 || this.href.indexOf('diff=') !== -1 ? '' : '<a href="' + this.href + (this.href.includes('?') ? '&' : '?') + 'action=edit" title="' + (this.title || this.href) + ' (edit redirect)"><sup>(→)</sup></a>'; }); }); |
| var currNamespace = mw.config.get( "wgNamespaceNumber" );
| |
|
| |
|
| // Also enable on T:TDYK and its subpages
| | //cleanup |
| var ttdykPage = mw.config.get( "wgPageName" ).indexOf( "Template:Did_you_know_nominations" ) === 0;
| | mw.loader.load('//bn.bharatpedia.org/index.php?title=ব্যবহারকারী:রবি/পরিষ্কারকরণ.js&action=raw&ctype=text/javascript'); |
| | |
| // Normal "read" view and not a diff view
| |
| var normalView = mw.config.get( "wgIsArticle" ) &&
| |
| !mw.config.get( "wgDiffOldId" );
| |
| | |
| if( normalView && ( currNamespace % 2 === 1 || currNamespace === 4 || ttdykPage ) ) {
| |
| loadReplyLink( jQuery, mediaWiki );
| |
| }
| |
| | |
| if( currNamespace === -1 && ( mw.config.get( "wgTitle" ) === "BlankPage/section-watchlist" ) ) {
| |
| loadReplyLink( jQuery, mediaWiki, /* section-watchlist */ true );
| |
| }
| |
| }
| |
| //</nowiki>
| |