Jump to content

User:Salix alba/TDSkell.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Salix alba (talk | contribs) at 15:21, 28 July 2013 (17). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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.
function TDSkel($) {

 var pagename;
 messages = {
  "en": {
	"toolbox-label": 'TD Skeleton',
	"toolbox-tooltip": 'Generates a skeleton of the TemplateData for a given template'
	}};
	
 function openSkel() {
  var fullpagename = mw.config.get('wgPageName');
  pagename = fullpagename.replace(/\/doc/,"");

  var URL = "http://en.wikipedia.org/w/index.php";
  $.ajax({
   url: URL,
   data: { title: pagename, action: "raw" },
   dataType: "text"
  }).done(doneAjax);
 }


 function doneAjax(data) {
  var params = findParams(data);
  var code = generateSkel(params);

  var w = window.open("","TDSKell"+pagename,"resizable,status,width=625,height=400");
  var d = w.document; 
  d.write('<textarea width="100%" height="100%">');
  d.write(code);
  d.write('</textarea>');
  d.close();
 }

 function findParams(data) {
  console.log("findParams");
  var pat = /\{\{\{([^\{\|\}]+)/g;  
  var matches;
  var obj = new Object();
  while((matches=pat.exec(data)) != null) {
     obj[matches[1]]=1;
  }
  var params = new Array();
  var i=0;
  for(var x in obj) {
   params[i++] = x;
  }
  console.log("findParams done");
  return params;
 }

 function generateSkel(params) {
  console.log("generateSkel");

  var res="";
  res += '<' +'templatedata>\n';
  res += '{\n';
  res += '  "description": "insert description here",\n';
  res += '  "params": {\n';
  for(var i = 0; i < params.length; ++i)
  {
   res += '    "' + params[i] + '": {\n';
   res += '      "label": "' + params[i] + '",\n';
   res += '      "description": "",\n';
   res += '      "type": "string",\n';
   res += '      "required": false\n';
   res += '    }';
   if(i < params.length+1 ) res += ',';
   res += '\n';
  }
  res += '  }\n';
  res += '}\n';
  res += '<'+'/templatedata>\n';
  return res;
 } 

 function addPortletLink() {
	$(
		mw.util.addPortletLink('p-tb', '#', messages['en']['toolbox-label'], 'td-skel', messages['en']['toolbox-tooltip'] )
	).click(function(){
		openSkel();
		return false;
	})
 }

 function start() {
  alert("TDSkel 0.17" + mw.config.get( 'wgPageName' ));
  addPortletLink();
 }
 
 ////////// START //////////
 start(); 
}

if( $.inArray( mw.config.get('wgNamespaceNumber'), [ 10 ] ) !== -1 && $.inArray( mw.config.get('wgAction'), [ 'edit', 'submit' ] ) !== -1 ) {
	$(document).ready(TDSkel);
}