Jump to content

User:Matthew hk on public computer/vector.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//<pre>
//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 {{subst:js|User:Dr pda/persondata.js}} to your monobook.js
//
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(/<ref.*(\/ref>|$)/gm,'');
    template = template.replace(/{{(?:[Bb]irth|[Dd]eath) date(?: and age)?\s?(\|\s?[md]f\s?=\s?ye?s?)?\|\s?(\d{1,4})\|\s?(\d{1,2})\|\s?(\d{1,2}).*}}/g,"$2-$3-$4");
    template = template.replace(/\[\[Image:Flag.*px\]\]/ig,'');
    template = template.replace(/{{flagicon.*}}/ig,'');
    template = template.replace(/<\/?small>/ig,'');
    template = template.replace(/<br\s*\/?>/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)||array[x].match(/datebirth/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(/placebirth/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('<br');
	  if(temp != -1){
	    DATE_OF_BIRTH = array[x].substring(array[x].indexOf('=')+1,temp);
            PLACE_OF_BIRTH = array[x].substr(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(/&ndash;\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)||array[x].match(/datedeath/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)||array[x].match(/placedeath/i)){
      PLACE_OF_DEATH = array[x].substr(array[x].indexOf('=')+1);
    }
    else if(array[x].match(/died/i)){
      var temp =  array[x].indexOf('<br');
	  if(temp != -1){
	    DATE_OF_DEATH = array[x].substring(array[x].indexOf('=')+1,temp);
            PLACE_OF_DEATH = array[x].substr(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(/occupation/i)||array[x].match(/\bfield\b\s*=/i)||array[x].match(/office/i)){
      SHORT_DESCRIPTION = array[x].substr(array[x].indexOf('=')+1);
      SHORT_DESCRIPTION = SHORT_DESCRIPTION.replace(/\s*<br\s*\/?>\s*/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);
  }
  if(DATE_OF_BIRTH=='' && text.match(/Category:\d* births/)){
    var catbirth = text.search(/Category:\d* births/);
    DATE_OF_BIRTH = text.substring(catbirth+9,text.indexOf('births')-1);
  } 
  if(DATE_OF_DEATH=='' && text.match(/Category:\d* deaths/)){
    var catdeath = text.search(/Category:\d* deaths/);
    DATE_OF_DEATH = text.substring(catdeath+9,text.indexOf('deaths')-1);
  } 
 
  //restore original text, in case this special case was found
  text = text.replace(/{{NFL player infobox/i,'{{NFL player');
 
  var persondata = "\n\n<!-- Metadata: see [[Wikipedia:Persondata]] -->\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;
  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 [[WP:PDATA|persondata]] using [[User talk:Dr pda/persondata.js|User:Dr pda/persondata.js]]';
  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', '', '');
    }
  }
});
//</pre>