User:Amillar/persondata.js

// //This function adds a tab which, when clicked, extracts data from an infobox and //populates the fields of the Persondata template. See the talk page for more details. // //To use this function add User:Dr pda/persondata.js to your monobook.js // // Modified 2007-05-04 by Alan Millar - grab nationality and occupation; misc edits

function format_name(x){ NAME = x.substr(x.indexOf('=')+1); NAME = NAME.replace(/'?/g,); NAME = NAME.replace(/^\s*/g,''); NAME = NAME.replace(/\s*$/g,''); var comma = NAME.indexOf(','); var start = (comma == -1) ? NAME.length : comma; var lastSpace = NAME.lastIndexOf(' ',start); if(lastSpace != -1){ NAME = NAME.substring(lastSpace,start)+', '+NAME.substring(0,lastSpace)+NAME.substring(start); }  return NAME; }

function suggestPersonData{ var text = document.getElementById('wpTextbox1').value;

//do nothing if article already contains persondata if(text.match(/persondata/i)) return;

var template = ''; var NAME = ''; var ALTERNATIVE_NAMES = ''; var SHORT_DESCRIPTION = ''; var PLACE_OF_BIRTH = ''; var DATE_OF_BIRTH = ''; var PLACE_OF_DEATH = ''; var DATE_OF_DEATH = '';

//handle cases where the template name doesn't contain infobox text = text.replace(/{{NFL player/i,'{{NFL player infobox'); if(text.match(/Infobox/i)){ start = text.lastIndexOf('{{',text.indexOf('nfobox')); stop = text.indexOf('}}',start); next = text.indexOf('{{',start+1) //Correctly handle other templates used within the infobox while (next < stop && text.indexOf('{{',start+1)!= -1){ next = text.indexOf('{{',stop+1); stop = text.indexOf('}}',stop+1); }   template = text.substring(start,stop);

//Remove references, birth/death date and age templates template = template.replace(/|$)/gm,''); template = template.replace(/{{(?:birth|death) date (?:and age)?\|(\d{4})\|(\d{1,2})\|(\d{1,2})[\|\d]*}}/g,"$1-$2-$3"); template = template.replace(/\/ig,''); template = template.replace(/{{flagicon.*}}/ig,''); template = template.replace(/<\/?small>/ig,'');

var firstpar = template.indexOf('|'); template = template.substr(firstpar+1);

var birthplace_in_born = false; var array = template.split(/(\n\s*\||\|\s*\n)/); for (x=0;x<array.length;x++){ if(array[x].match(/subject_name/i)||array[x].match(/^\s*\bname\b/i)||array[x].match(/fullname/i)){ NAME = format_name(array[x]); }   if(array[x].match(/playername/i)||array[x].match(/birth_?name/i)){ ALTERNATIVE_NAMES = (ALTERNATIVE_NAMES == '') ? format_name(array[x]):ALTERNATIVE_NAMES + ';' + format_name(array[x]); }   else if(array[x].match(/date_of_birth/i)||array[x].match(/dateofbirth/i)||array[x].match(/birthdate/i)||array[x].match(/birth_date/i)||array[x].match(/date of birth/i)){ DATE_OF_BIRTH = array[x].substr(array[x].indexOf('=')+1); }   else if(array[x].match(/place_of_birth/i)||(array[x].match(/origin/i)&&birthplace_in_born==false)||array[x].match(/birthplace/i)||array[x].match(/location/i)||array[x].match(/placeofbirth/i)||array[x].match(/birth_place/i)||array[x].match(/place of birth/i)){ PLACE_OF_BIRTH = array[x].substr(array[x].indexOf('=')+1); }   else if(array[x].match(/born/i)){ var temp = array[x].indexOf('',temp)+1); birthplace_in_born = true; }	 else{ DATE_OF_BIRTH = array[x].substring(array[x].indexOf('=')+1); }   }    else if(array[x].match(/lived/i)){ var temp = array[x].substr(array[x].indexOf('=')+1); temp = temp.replace(/born\s*/i,''); var dash = temp.search(/–\s*|-\s*/); if(dash >=0){ DATE_OF_BIRTH = temp.substring(0,dash); DATE_OF_DEATH = temp.substring(temp.indexOf(' ',dash)+1); }     else{ DATE_OF_BIRTH = temp; }   }    else if(array[x].match(/cityofbirth/i)){ var temp = array[x].substr(array[x].indexOf('=')+1); temp = temp.match(/.*/); PLACE_OF_BIRTH = (PLACE_OF_BIRTH == '') ? temp : temp + ' ,' + PLACE_OF_BIRTH; }   else if(array[x].match(/countryofbirth/i)){ PLACE_OF_BIRTH = (PLACE_OF_BIRTH == '') ? array[x].substr(array[x].indexOf('=')+1) : PLACE_OF_BIRTH + ',' + array[x].substr(array[x].indexOf('=')+1); }   else if(array[x].match(/date_of_death/i)||array[x].match(/dateofdeath/i)||array[x].match(/deathdate/i)||array[x].match(/death_date/i)||array[x].match(/date of death/i)){ DATE_OF_DEATH = array[x].substr(array[x].indexOf('=')+1); }   else if(array[x].match(/place_of_death/i)||array[x].match(/deathplace/i)||array[x].match(/placeofdeath/i)||array[x].match(/death_place/i)||array[x].match(/place of death/i)){ PLACE_OF_DEATH = array[x].substr(array[x].indexOf('=')+1); }   else if(array[x].match(/died/i)){ var temp = array[x].indexOf('',temp)+1); }	 else{ DATE_OF_DEATH = array[x].substring(array[x].indexOf('=')+1); }   }    else if(array[x].match(/cityofdeath/i)){ var temp = array[x].substr(array[x].indexOf('=')+1); temp = temp.match(/.*/); PLACE_OF_DEATH = (PLACE_OF_DEATH == '') ? temp : temp + ' ,' + PLACE_OF_DEATH; }   else if(array[x].match(/countryofdeath/i)){ PLACE_OF_DEATH = (PLACE_OF_DEATH == '') ? array[x].substr(array[x].indexOf('=')+1) : PLACE_OF_DEATH + ',' + array[x].substr(array[x].indexOf('=')+1); }   else if(array[x].match(/nationality/i)||array[x].match(/citizenship\s*=/i)){ SHORT_DESCRIPTION = array[x].substr(array[x].indexOf('=')+1); SHORT_DESCRIPTION = SHORT_DESCRIPTION.replace(/\s*\s*/g,', '); SHORT_DESCRIPTION = SHORT_DESCRIPTION.replace(/\+\]+/gi,''); if ( SHORT_DESCRIPTION.match(/^ *\[*USA*\]* *$/) ) { SHORT_DESCRIPTION='American'; }   }    else if(array[x].match(/occupation/i)||array[x].match(/\bfield\b\s*=/i)||array[x].match(/office/i)){ var occupation = array[x].substr(array[x].indexOf('=')+1); occupation=occupation.replace(/\s*\s*/g,', '); if ( occupation.match(/ology/i) ||occupation.match(/science/i)              ||occupation.match(/ics\]/i) ||occupation.match(/istry\]/i) ) { occupation=occupation.replace(/ology/ig,'ologist'); occupation=occupation.replace(/science/ig,'scientist'); occupation=occupation.replace(/istry/ig,'ist'); occupation=occupation.replace(/ics\]/ig,'icist'); occupation=occupation.replace(/[ \[\]]+/g,' '); occupation=occupation.replace(/economicist/ig,'economist'); occupation=occupation.replace(/mathematicist/ig,'mathematician'); }     if ( SHORT_DESCRIPTION > '' ) { occupation=occupation.toLowerCase; }     SHORT_DESCRIPTION += ' ' + occupation; SHORT_DESCRIPTION = SHORT_DESCRIPTION.replace(/ +/g,' '); SHORT_DESCRIPTION = SHORT_DESCRIPTION.replace(/ +,/g,','); } }

//more tidy up DATE_OF_BIRTH = DATE_OF_BIRTH.replace(/\(age? \d*\)/i,''); DATE_OF_DEATH = DATE_OF_DEATH.replace(/\(age? \d*\)/i,''); if(NAME == ''){ var pagename = wgPageName.replace(/_/g,' '); pagename = pagename.replace(/\(.*\)/g,' '); NAME = format_name(pagename); } var persondata = "\n\n\n{{Persondata\n|NAME="+NAME+"\n|ALTERNATIVE NAMES="+ALTERNATIVE_NAMES+"\n|SHORT DESCRIPTION="+SHORT_DESCRIPTION+"\n|DATE OF BIRTH="+DATE_OF_BIRTH+"\n|PLACE OF BIRTH="+PLACE_OF_BIRTH+"\n|DATE OF DEATH="+DATE_OF_DEATH+"\n|PLACE OF DEATH="+PLACE_OF_DEATH+"\n}}\n\n";

var insertPosition = text.indexOf('[[Category:')-1; if(text.match('{{DEFAULTSORT')) {    insertPosition = text.indexOf('{{DEFAULTSORT')-1;  } else {    persondata=persondata+"\n{{DEFAULTSORT:"+NAME+"}}\n\n";  }

// eliminate too many blank lines persondata=persondata.replace(/\n\n\n*/g,"\n");

if(insertPosition != -2){ document.getElementById('wpTextbox1').value = text.substr(0,insertPosition)+persondata+text.substr(insertPosition+1); } else{ alert('This article does not belong to any categories! Consider adding some.'); document.getElementById('wpTextbox1').value = text+persondata; } document.getElementById('wpSummary').value += ' adding persondata using User:Amillar/persondata.js';

// don't watch articles by default //var WatchFlag =document.getElementById('wpWatchThis').value; //WatchFlag=WatchFlag.replace(/"checked"/,'"unchecked"'); //document.getElementById('wpWatchThis').value=WatchFlag; //document.getElementById('wpWatchthis').setAttribute('checked','unchecked'); document.getElementById('wpWatchthis').checked=false;

document.getElementById('wpDiff').click;

}

}

function togglePersondata { var element = document.getElementById('persondata');

if (element.style.display != 'block'){ element.style.display = 'block'; } else{ element.style.display = 'none'; } }

addOnloadHook(function {  if(!document.forms.editform){    if (document.getElementById('persondata') != null){      mw.util.addPortletLink('p-cactions', 'javascript:togglePersondata', 'show/hide persondata', 'ca-pdata', 'Show/hide persondata metadata', , );    }  }  else{    if (wgNamespaceNumber == 0 && document.getElementById('wpTextbox1').value.match(/persondata/i) == null){      mw.util.addPortletLink('p-cactions', 'javascript:suggestPersonData', 'add persondata', 'ca-pdata', 'add persondata metadata', , );    }  } }); //