/* Add a tab called "de-iso8601" to convert yyyy-mm-dd dates to mmm dd, yyyy */
/* NOTE: This script is agressive. It doesn't try to avoid any changes - if it finds
a string in "nnnn-nn-nn" format, it will attempt to convert it. You are
well-advised to examine the diffs closely, and to especially look for
partially-successful conversions (i.e., "_FiXmE_..._fIxMe") and dates buried
in URLs (e.g., ".../2007-11-05_article.html" -> ".../November 5, 2007_article.html"
and correct them by hand!
Inspired by [[User:MJCdetroitMJCdetroit's]] Units of measure formatting and conversion tool and date formatting tool ([[User:MJCdetroit/monobook.js]])
Simply add ''importScript("User:RossPatterson/ISO8601_to_mmm_dd_yyyy.js");'' to your own monobook.js and clear the cache before it will work.
*/
function ISO8601_to_mmm_dd_yyyy() {
var txt = document.editform.wpTextbox1;
// Find and mark yyyy-mm-dd dates to be changed:
txt.value = txt.value.replace(/(\d\d\d\d-\d\d-\d\d)/g, '_FiXmE_$1_fIxMe_');
// [[yyyy-mm-dd]] -> yyyy-mm-dd:
txt.value = txt.value.replace(/\[\[_FiXmE_(\d\d\d\d-\d\d-\d\d)_fIxMe_\]\]/g, '_FiXmE_$1_fIxMe_');
// yyyy-mm-dd -> mm dd, yyyy:
txt.value = txt.value.replace(/_FiXmE_(\d\d\d\d)-(\d\d)-(\d\d)_fIxMe_/g, '_FiXmE_$2 $3, $1_fIxMe_');
// 01, ... -> January, ... etc.:
txt.value = txt.value.replace(/_FiXmE_01 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_January $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_02 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_February $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_03 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_March $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_04 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_April $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_05 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_May $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_06 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_June $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_07 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_July $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_08 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_August $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_09 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_September $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_10 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_October $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_11 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_November $1_fIxMe_');
txt.value = txt.value.replace(/_FiXmE_12 (\d\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_December $1_fIxMe_');
// mmm 0d, yyyy -> mmm d, yyyy:
txt.value = txt.value.replace(/_FiXmE_(\w*) 0(\d, \d\d\d\d)_fIxMe_/g, '_FiXmE_$1 $2_fIxMe_');
// Unmark changed dates:
txt.value = txt.value.replace(/_FiXmE_(\w* \d{1,2}, \d\d\d\d)_fIxMe_/g, '$1');
}
function run_ISO8601_to_mmm_dd_yyyy() {
var txt = document.editform.wpTextbox1;
ISO8601_to_mmm_dd_yyyy();
// Add a tag to the summary box
var txt = document.editform.wpSummary;
var summary = "Change ISO8601-style dates to mmm dd, yyyy and unlink them";
if (txt.value.indexOf(summary) == -1) {
if (txt.value.match(/[^\*\/\s][^\/\s]?\s*$/)) {
txt.value += " | ";
}
txt.value += summary;
}
// Press the diff button to check it
document.editform.wpDiff.click()
}
addOnloadHook(function () {
if(document.forms.editform) {
mw.util.addPortletLink('p-cactions', 'javascript:run_ISO8601_to_mmm_dd_yyyy()', 'De-ISO8601', 'ca-de-iso8601', 'Change ISO8601-style dates to mmm dd, yyyy"', '', '');
}
});