User:Ohconfucius/test/YMD dot dates.js

// *********************************************************************************************

//This is a test (non-production) script, and may have untested errors. Please exercise due care should you decide to use it.

// *********************************************************************************************

// This script aligns dates in the format YYYY.MM.DD or YYYY/MM/DD into abbreviated dmy format allowed by WP:MOSNUM.

// Feedback and constructive criticism are welcome

/**

* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.

* @see https://meta.wikimedia.org/wiki/TemplateScript

* @update-token File:pathoschild/templatescript.js

*/

mw.loader.load('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js');

importScript("User:Ohconfucius/script/MOSNUM_utils.js");

//

function ohc_dot_dates_to_dmy()

{

//ranges

ohc_regex(/([^-\d/:\.])@YYYY\/@MM\/@DD( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@YYYY\/@MM\/@DD(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");

ohc_regex(/([^-\d/:\.])@YYYY\.@MM\.@DD( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@YYYY\.@MM\.@DD(?=[^-–/\w&])/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");

ohc_regex(/(\| ?)@YYYY\/@MM\/@DD( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@YYYY\/@MM\/@DD(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");

ohc_regex(/(\| ?)@YYYY\.@MM\.@DD( |\s)?(?:(?:[-–—]|&[mn]dash;)(?: |\s)?)@YYYY\.@MM\.@DD(?=\s*\|)/gi, "$1@Day1 @Mon1 @Year1$2 – @Day2 @Mon2 @Year2");

// resolvable ambiguous date formats

ohc_regex(/([^-\d/:\.])@YYYY\/@MM\/@DD(?=[^-–/\w&])/gi, '$1@Day @Mon @YYYY');

ohc_regex(/([^-\d/:\.])@YYYY\.@MM\.@DD(?=[^-–/\w&])/gi, '$1@Day @Mon @YYYY');

ohc_regex(/([^-\d/:\.])@DD[-–]@MM[-–]@YYNN(?=[^-–/\w&])/gi, '$1@Day @Mon @YYYY');

ohc_regex(/(\| ?)@YYYY\/@MM\/@DD(?=\s*\|)/gi, '$1@Day @Mon @YYYY');

ohc_regex(/(\| ?)@YYYY\.@MM\.@DD(?=\s*\|)/gi, '$1@Day @Mon @YYYY');

// ohc_regex(/(\| ?)@DD[-–]@MM[-–]@YYNN(?=\s*\|)/gi, '$1@Day @Mon @YYYY');

}

/** ------------------------------------------------------------------------ **/

/// DATE PROTECTION

var linkmap=[];

function ohc_protect_dates()

{

// 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.

var protect_function = function(s, begin, replace, end) {

linkmap.push(replace);

return begin + "⍌"+(linkmap.length-1)+"⍍" + end;

};

//\|x=

regex(/()([\s\S]*?)(<\/timeline>)/gi, protect_function);

regex(/()([\s\S]*?)(<\/math>)/gi, protect_function);

regex(/((?:{(?:Wikimedia |)Commons ?|C ?))(Cat(?:egory|))\|[^{}*](})/gi, protect_function);

regex(/(]+)(>)/gi, protect_function);

regex(/((?:Category|Image|File):)([^|\]]*)([|\]])/gi, protect_function);

regex(/(\{(?:See ?also|Main))(\|[^}]*)(\})/gi, protect_function);

regex(/(\{\{(?:double ?|external ?|wide ?)image\s?\|)([^}]+)(\})/gi, protect_function);

regex(/(\{\{(?:harvnb|r|wikisource)\|)([^}]+)(\})/gi, protect_function);

regex(/(\[(?:https?:|ftp:))([^\]]*)(\])/gi, protect_function);

regex(/(>[ ]*(?:https?:|ftp:))([^< >\]]*)([ ]*<)/gi, protect_function);

// regex(/(https?:|ftp:)([^\s\]]*)([\s\]])/gi, protect_function);

regex(/(

)([\s\S]*?)(<\/blockquote>)/gi, protect_function);

regex(/()([\s\S]*?)(<\/noinclude>)/gi, protect_function);

regex(/()/gi, protect_function);

regex(/()([\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|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);

// works names

// regex(/(.)(protect string)(.)/gi, protect_function);

regex(/(.)(11\/22\/63)(.)/gi, protect_function);

regex(/(.)(1\.1\.1994)(.)/gi, protect_function);

regex(/([\s\S])(2\.13\.61)([\s\S])/gi, protect_function);

// regex(/(.)(4th of July, Asbury)(.)/gi, protect_function); //protected above globally

}

function ohc_unprotect_dates()

{

//unprotect all dates

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_dot_edit_summary()

{

//Add a tag to the summary box

setoptions(minor='true');

setreason('resolved non-compliant date formats', 'append');

doaction('diff');

}

function ohc_dot_dates(){

// Add a tag to the summary box

var txt=document.editform.wpTextbox1;

ohc_protect_dates();

ohc_dot_dates_to_dmy();

ohc_unprotect_dates();

ohc_dot_edit_summary();

}

$(function () {

if(document.forms.editform) {

mw.util.addPortletLink('p-tb', 'javascript:ohc_dot_dates()', 'DOT to dmy dates', 't-UK', 'UK-dot', , );

}

});

//