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 16:52, 28 July 2013 (19). 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 $body, $cont;
 var pagename;
 lang = mw.config.get('wgUserLanguage');
 messages = {
  "en": {
	"toolbox-label": 'TD Skeleton',
	"toolbox-tooltip": 'Generates a skeleton of the TemplateData for a given template',
        "title": 'Skeleton TemplateData',
        'section-description': 'TemplateData',
        "close": 'Close'
	}};
	
 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);

  // Old code using a dialog box
//  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();

  $cont.fadeIn('slow');
  $body.html($('<h3>')
					.text( messages[lang]['section-description'] )
    )
    .append($('<textarea>')
		.attr('id', 'td-sk-code')
		.text(code)
     );
		
 }

 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 close() {
		$cont.fadeOut('slow', function(){
  //			$params.children().remove();
  //			$sets.children().remove();
		});
	}

 ////////// Building called after page loads 
 function buildHTML() {
		$body = $('<div>')
			.attr('id', 'td-sk-body');
  
		$cont = $('<div>')
			.attr('id', 'td-sk-cont')
			.append($('<div>')
			.attr('id', 'td-sk-dialog')
			.append($('<h2>').text( messages[lang]['title'] ) )
			.append($('<a>')
				.attr({
					id: 'td-sk-close',
					href: '#',
					title: messages[lang]['close']
				})
				.click(function(){
					close();
					return false;
				})
				.append($('<img>')
				.attr({
					alt: messages[lang]['close'],
					src: '/media/wikipedia/commons/thumb/8/8d/VisualEditor_-_Icon_-_Close.svg/24px-VisualEditor_-_Icon_-_Close.svg.png'
					})
				)
			)
			.append($body)
			)
			.hide();
 
		$(document.body).append($cont);
	}

 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.19" + mw.config.get( 'wgPageName' ));
  addPortletLink();
  buildHTML();
 }
 
 ////////// START //////////
 start(); 
}

if( $.inArray( mw.config.get('wgNamespaceNumber'), [ 10 ] ) !== -1 && $.inArray( mw.config.get('wgAction'), [ 'edit', 'submit' ] ) !== -1 ) {
   mw.loader.load( 
        '//en.wikipedia.org/w/index.php?title=User:Salix alba/TDSkell.css&action=raw&ctype=text/css&smaxage=21600&maxage=86400',
        'text/css' );
   $(document).ready(TDSkel);
}