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 17:50, 28 July 2013 (20). 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.
/*************

Generates a skeleton template data for a given template

Author User:Salix alba
Date: 28 July 2013
Version: 0.20

Heavily borrowed from TemplateDataEditor
http://fr.wikipedia.org/w/index.php?title=Utilisateur:Ltrlg/scripts/TemplateDataEditor.js

***************/



function TDSkel($) {

 ////// Customization for local wikis

 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 for ',
        'section-description': 'TemplateData',
        "close": 'Close'
	}};

 // gets the basetemplate name, on en strips the /doc off the end
	
 function baseTemplateName(name) {
   return name.replace(/\/doc$/,"");
 }

 ////// Global variables

 var $title, $body, $cont;
 var pagename;

 ////// Called when toolbox link clicked

 function openSkel() {
  var fullpagename = mw.config.get('wgPageName');
  pagename = baseTemplateName(fullpagename);

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

 /////// Called when raw template code read in

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

  $cont.fadeIn('slow');

  $title.text( messages[lang]['title'] + pagename );
  $body.html( $('<textarea>')
		.attr('id', 'td-sk-code')
		.text(code)
            );
 }

 ////// Find all the possible parameters given the raw template data

 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;
 }

 ///// Generate the skeleton code for the template data
 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;
 } 

 ///// Close the dialog
 function close() {
     $cont.fadeOut('slow', function(){
	});
 }

 ////////// Building called after page loads 
 function buildHTML() {
		$body = $('<div>')
			.attr('id', 'td-sk-body');
                $title = $('<h2>').text( messages[lang]['title'] );
		$cont = $('<div>')
			.attr('id', 'td-sk-cont')
			.append($('<div>')
			.attr('id', 'td-sk-dialog')
			.append( $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);
	}

 ////// Adds a link in the toolbox
 function addPortletLink() {

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

 /////// Actions to do once page loads, 
 function start() {
  //alert("TDSkel 0.20" + mw.config.get( 'wgPageName' ));
  addPortletLink();
  buildHTML();
 }
 
 ////////// START //////////
 start(); 
}

/////// Wrapper code, only run if in user or template namespaces
if( $.inArray( mw.config.get('wgNamespaceNumber'), [ 2, 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);
}