Usuaria:Prof. Squirrel/common.js

De Wikipedia, la enciclopedia libre

Nota: Después de guardar, debes refrescar la caché de tu navegador para ver los cambios. Internet Explorer: mantén presionada Ctrl mientras pulsas Actualizar. Firefox: mientras presionas Mayús pulsas el botón Actualizar, (o presiona Ctrl-Shift-R). Los usuarios de Google Chrome y Safari pueden simplemente pulsar el botón Recargar. Para más detalles e instrucciones acerca de otros exploradores, véase Ayuda:Cómo limpiar la caché.

$('#pt-preferences').after('<li id="pt-vector"><a href="https://es.wikipedia.org/wiki/Usuario:Prof._Squirrel/common.js">common.js</a></li>' );
importScript('Usuario:TwinkleUser/twinkle.js'); 
   
$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', { dataType:'script', cache:true }).then(function() {
	pathoschild.TemplateScript.add([
		{
			name: 'Edit my regexes ↗',
			script: function(editor) {
				window.open(mw.confieg.get('wgServer') + mw.config.get('wgScript') + '?title=User:' + mw.config.get('wgUserName') + '/common.js&action=edit');
			}
		},
		{
			name: '• All line breaks',
			script: function(editor) {
				editor
					.replace(/\n/g, " ")
					.clickDiff();
			}
		},
		{
			name: '• Double spaces',
			script: function(editor) {
				editor
					.replace(/  /g, " ")
					.clickDiff();
			}
		},
		{
			name: '• Extra line breaks',
			script: function(editor) {
				editor
					.replace( /\n{2,}(?=\n)/gi, " ")
					.clickDiff();
			}
		},
		{
			name: '• Ref spacing',
			script: function(editor) {
				editor
					.replace(/ <ref/gi, '<ref')
					.clickDiff();
			}
		},
		{
			name: '• Spanish refs',
			script: function(editor) {
				
				var myRefs = editor.get().match(/<ref\sname.+>/g);
				// For doi-access=free, turn into a url
				for (var i = 0; i < myRefs.length; i++) {
					
					if (myRefs[i].indexOf(/doi-access\s*=\s*free/) != -1 ) {
					
						myNewRef = myRefs[i].replace(/doi\s?=\s?(.+?)\s?([\|}])/gi, 'doi=$1 | url=http://doi.org/$1 $2')
											.replace(/doi-access\s?=\s?free\s?([\|}])/gi, '')
											.replace(/\|\s*\|/, '|');
					
						editor.replace(myRefs[i], myNewRef);
					}
	 			}
				
				editor
					.replace(/{{cite arXiv/gi, '{{cita arXiv}')
					.replace(/{{cite AV media/gi, '{{cita vídeo')
					.replace(/{{cite AV media notes/gi, '{{cita notas audiovisual')
					.replace(/{{cite book/gi, '{{cita libro')
					.replace(/{{cite conference/gi, '{{cita conferencia')
					.replace(/{{cite encyclopedia/gi, '{{cita enciclopedia')
					.replace(/{{cite episode/gi, '{{cita episodio')
					.replace(/{{cite interview/gi, '{{cita entrevista')
					.replace(/{{cite journal/gi, '{{cita publicación')
					.replace(/{{cite paper/gi, '{{cita publicación')
					.replace(/{{cite magazine/gi, '{{cita publicación')
					.replace(/{{cite mailing list/gi, '{{cita lista de correo')
					.replace(/{{cite map/gi, '{{cita mapa')
					.replace(/{{cite news/gi, '{{cita noticia')
					.replace(/{{cite newsgroup/gi, '{{cita grupo de noticias')
					.replace(/{{cite podcast/gi, '{{cita podcast')
					.replace(/{{cite report/gi, '{{cita web')
					.replace(/{{cite thesis/gi, '{{cita tesis')
					.replace(/{{cite web/gi, '{{cita web')

					.replace(/\|\s*title\s*=(.+?)([\|}])/gi, '| idioma=inglés | título=$1| título-trad= $2')
					.replace(/\|\s*chapter\s*=(.+?)([\|}])/gi, '| capítulo=$1| capítulo-trad= $2')
					.replace(/\|\s*author(\d*)\s*=(.+?)([\|}])/gi, '| autor$1=$2 $3')
					.replace(/\|\s*last(\d*)\s*=(.+?)([\|}])/gi, '| apellido$1=$2 $3')
					.replace(/\|\s*first(\d*)\s*=(.+?)([\|}])/gi, '| nombre$1=$2 $3')
					.replace(/\|\s*author_link(\d*)\s*=(.+?)([\|}])/gi, '| enlaceautor$1=$2 $3')
					.replace(/\|\s*editor-last(\d)*=(.+?)([\|}])/gi, '| apellido-editor$1=$2 $3')
					.replace(/\|\s*editor-first(\d)*=(.+?)([\|}])/gi, '| nombre-editor$1=$2 $3')
					.replace(/\|\s*editor(\d*)-link\s*=(.+?)([\|}])/gi, '| enlace-editor$1=$2 $3')
					
					.replace(/\|\s*access-*date\s*=(.+?)([\|}])/gi, '| fechaacceso=$1 $2')
					.replace(/\|\s*archive-*date\s*=(.+?)([\|}])/gi, '| fechaarchivo=$1 $2')
					.replace(/\|\s*date\s*=(.+?)([\|}])/gi, '| fecha=$1 $2')
					.replace(/\|\s*year\s*=(.+?)([\|}])/gi, '| fecha=$1 $2')
					.replace(/\|\s*archive-*url\s*=(.+?)([\|}])/gi, '| urlarchivo=$1 $2')
					.replace(/\|\s*website\s*=(.+?)([\|}])/gi, '| sitioweb=$1 $2')
					.replace(/\|\s*work\s*=(.+?)([\|}])/gi, '| obra=$1 $2')
					.replace(/\|\s*format\s*=(.+?)([\|}])/gi, '| formato=$1 $2')
					.replace(/\|\s*publisher\s*=(.+?)([\|}])/gi, '| editorial=$1 $2')
					.replace(/\|\s*place\s*=(.+?)([\|}])/gi, '| ubicación=$1 $2')
					.replace(/\|\s*location\s*=(.+?)([\|}])/gi, '| ubicación=$1 $2')
					.replace(/\|\s*page\s*=(.+?)([\|}])/gi, '| página=$1 $2')
					.replace(/\|\s*pages\s*=(\d+–?-?\d+)/gi, '| páginas=$1')
					.replace(/\|\s*subscription\s*=(.+?)([\|}])/gi, '| suscripción=$1 $2')
					.replace(/\|\s*quote\s*=(.+?)([\|}])/gi, '| cita=$1 $2')
					.replace(/\|\s*series\s*=(.+?)([\|}])/gi, '| serie=$1 $2')
					.replace(/\|\s*edition\s*=\s*(\d+)\w+\s*([\|}])/gi, '| edición=$1º $2')
					.replace(/\|\s*volume\s*=(.+?)([\|}])/gi, '| volumen=$1 $2')
					.replace(/\|\s*issue\s*=(.+?)([\|}])/gi, '| número=$1 $2')
					.replace(/\|\s*number\s*=(.+?)([\|}])/gi, '| número=$1 $2')
					.replace(/\|\s*journal\s*=(.+?)([\|}])/gi, '| publicación=$1 $2')
					.replace(/\|\s*journal\s*=(.+?)([\|}])/gi, '| publicación=$1 $2')
					
					//.replace(/doi-access\s*=\s*free/gi, 'url=http://doi.org/ DOIHERE')
					
					.replace(/(\d)–(\d)/gi, '$1-$2')

					//29 January 2016 -> 29 de enero de 2016
					.replace(/(\d+)\sJanuary (\d+)/gi, '$1 de enero de $2')
					.replace(/(\d+)\sFebruary (\d+)/gi, '$1 de febrero de $2')
					.replace(/(\d+)\sMarch (\d+)/gi, '$1 de marzo de $2')
					.replace(/(\d+)\sApril (\d+)/gi, '$1 de abril de $2')
					.replace(/(\d+)\sMay (\d+)/gi, '$1 de mayo de $2')
					.replace(/(\d+)\sJune (\d+)/gi, '$1 de junio de $2')
					.replace(/(\d+)\sJuly (\d+)/gi, '$1 de julio de $2')
					.replace(/(\d+)\sAugust (\d+)/gi, '$1 de agosto de $2')
					.replace(/(\d+)\sSeptember (\d+)/gi, '$1 de septiembre de $2')
					.replace(/(\d+)\sOctober (\d+)/gi, '$1 de octubre de $2')
					.replace(/(\d+)\sNovember (\d+)/gi, '$1 de noviembre de $2')
					.replace(/(\d+)\sDecember (\d+)/gi, '$1 de diciembre de $2')
					
					//January 29, 2016 -> 29 de enero de 2016
					.replace(/January (\d+),\s*(\d+)/gi, '$1 de enero de $2')
					.replace(/February (\d+),\s*(\d+)/gi, '$1 de febrero de $2')
					.replace(/March (\d+),\s*(\d+)/gi, '$1 de marzo de $2')
					.replace(/April (\d+),\s*(\d+)/gi, '$1 de abril de $2')
					.replace(/May (\d+),\s*(\d+)/gi, '$1 de mayo de $2')
					.replace(/June (\d+),\s*(\d+)/gi, '$1 de junio de $2')
					.replace(/July (\d+),\s*(\d+)/gi, '$1 de julio de $2')
					.replace(/August (\d+),\s*(\d+)/gi, '$1 de agosto de $2')
					.replace(/September (\d+),\s*(\d+)/gi, '$1 de septiembre de $2')
					.replace(/October (\d+),\s*(\d+)/gi, '$1 de octubre de $2')
					.replace(/November (\d+),\s*(\d+)/gi, '$1 de noviembre de $2')
					.replace(/December (\d+),\s*(\d+)/gi, '$1 de diciembre de $2')

					//January 2016 -> enero de 2016
					.replace(/\s*January (\d+)/gi, 'enero de $1')
					.replace(/\s*February (\d+)/gi, 'febrero de $1')
					.replace(/\s*March (\d+)/gi, 'marzo de $1')
					.replace(/\s*April (\d+)/gi, 'abril de $1|')
					.replace(/\s*May (\d+)/gi, 'mayo de $1')
					.replace(/\s*June (\d+)/gi, 'junio de $1')
					.replace(/\s*July (\d+)/gi, 'julio de $1')
					.replace(/\s*August (\d+)/gi, 'agosto de $1')
					.replace(/\s*September (\d+)/gi, 'septiembre de $1')
					.replace(/\s*October (\d+)/gi, 'octubre de $1')
					.replace(/\s*November (\d+)/gi, 'noviembre de $1')
					.replace(/\s*December (\d+)/gi, 'diciembre de $1')
                                         
                     //2017-04-02 -> 02-04-2017
                     .replace(/fecha(acceso|archivo)?\s?=\s?(\d{4})-(\d{2})-(\d{2})/gi, 'fecha$1=$4-$3-$2')

                    .replace(/ubicación\s*=\s*London/gi, 'ubicación = Londres')
                    .replace(/ubicación\s*=\s*New York/gi, 'ubicación = Nueva York')
                    .replace(/ubicación\s*=\s*Philadelphia/gi, 'ubicación = Filadelfia')

                    .replace(/U(?:\.)?S(?:\.)? National Library of Medicine/gi, 'Biblioteca Nacional de Medicina de los Estados Unidos')


					.clickDiff();
			}
		}
	]);
});
/*************

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'
			},
			"fr": {
				"toolbox-label": 'Ébauche de TD',
				"toolbox-tooltip": "Génère une ébauche pour le TemplateData d'un modèle",
				"title": 'Ébauche de TemplateData pour ',
				"section-description": 'TemplateData',
				"close": 'Fermer'
			},
                        "pt": {
                                "toolbox-label": 'Esqueleto de TD',
                                "toolbox-tooltip": 'Gera um esqueleto de TemplateData para uma predefinição dada',
                                "title": 'Esqueleto de TemplateData para ',
                                'section-description': 'TemplateData',
                                "close": 'Fechar'
                        },
                        "pt-br": {
                                "toolbox-label": 'Esqueleto de TD',
                                "toolbox-tooltip": 'Gera um esqueleto de TemplateData para uma predefinição dada',
                                "title": 'Esqueleto de TemplateData para ',
                                'section-description': 'TemplateData',
                                "close": 'Fechar'
                        }
	};
        if(messages[lang]==null) lang='en';

	// 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 = mw.util.wikiScript();
		$.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 defaults = findDefaults(data,params);
		var code = generateSkel(params);
		//var aliases = findAliases(params);
                var aliases = genAliases(defaults);
		$cont.fadeIn('slow');

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

	////// Find all the possible parameters given the raw template data
        ////// return a 2D array with names and whether its probably required [ [1,true], [2,false], [link,false] ]

	function findParams(data) {
		//console.log("findParams");
		var pat = /\{\{\{([^\{\|\}\n<]+)(.)/g;  // '{{{' then any char other than {|}\n< 
		var matches;
		var obj = new Object();
		while((matches=pat.exec(data)) != null) {
                    var newReq = ( matches[2]== '}' );
                    var oldReq = ( obj[matches[1]] == null || obj[matches[1]] ); 
  	            //.log("V2 " + matches[1] + ' m2 ' + matches[2] + ' old ' + oldReq + ' new ' + newReq );
 
  	            obj[matches[1]] = newReq && oldReq;
                    pat.lastIndex--; // need to backtrack one character
                        
		}
		var params = new Array();
		var i=0;
                // put required first
		for(var x in obj) {
                    if(obj[x]) {
  		        //console.log("Var " + x + ' req ' + obj[x]);
			params[i++] = [x, obj[x]];
                    }
		}
                // then the rest
		for(var x in obj) {
                    if(!obj[x]) {
  		        //console.log("Var " + x + ' req ' + obj[x]);
			params[i++] = [x, obj[x]];
                    }
		}
		//console.log("findParams done");
		return params;
	}

        function findDefaults(data,params) {
            var res=new Object();
            for(var i=0;i<params.length;++i) {
                var pat = new RegExp("\\{\\{\\{"+params[i][0]+"\\|([^\\|\\}\\n<]*)","g");
		var matches;
		var obj = new Object();
                obj.aliases=new Object();
                obj.defaults=new Object();
                obj.count=0;
                obj.nalias=0;
                obj.ndefault=0;
		while((matches=pat.exec(data)) != null) {
                    ++obj.count;
                    if(matches[1]=="") {
                         obj.blank=1;
                    } else if(matches[1].slice(0,3)=="{{{") {
                         ++obj.nalias;
                         obj.aliases[matches[1].slice(3)]=1;
                    } else {
                         ++obj.ndefault;
                         obj.defaults[matches[1]]=1;
                    }
                }
                res[params[i][0]]=obj;
            }
            return res;
        }

// "name": { "default": 123, "aliases": [ "foo", "bar" ], "required": true }
        function genAliases(defaults) {
            var res="\nPossible defaults and aliases\n\n";
            for(var p in defaults) {
                var obj=defaults[p];
                res += '"' + p + '": { ';
                if(obj.ndefault==1) {
                      res += '"default": ';
                      for(var d in obj.defaults) {
                          res += '"'+d+'", ';
                      }
                }
                if(obj.nalias>0) {
                      res += '"aliases": [';
                      var c=0;
                      for(var a in obj.aliases) {
                          if(c>0) res += ',';
                          res += '"'+a+'"';
                      }
                      res += '], ';
                }
                if(obj.count==0) res += '"required": true ';
                else  res += '"required": false ';
                res += '}\n';
            }
            return res;
        }

	///// 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][0] + '": {\n';
			res += '            "label": "' + params[i][0] + '",\n';
			res += '            "description": "",\n';
			res += '            "type": "string",\n';
			res += '            "required": '+ params[i][1] +'\n';
			res += '        }';
			if(i < params.length-1 ) res += ',';
			res += '\n';
		}
		res += '    }\n';
		res += '}\n';
		res += '<'+'/templatedata>\n';
		return res;
	} 

        function findAliases(data) {
 		//console.log("findParams");
		var pat = /\{\{\{([^\{\|\}<]+)\|\{\{\{([^\{\|\}<]+)/g;  
		var matches;
		var obj = new Object();
		while((matches=pat.exec(data)) != null) {
  	            //console.log("Alias " + matches[1] + ' and ' + matches[2] );
 
  	            obj[matches[1]] = newReq && oldReq;
                    pat.lastIndex -= matches[2].length + 3 ; // need to start of second param
		}
        }

	///// 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: '//upload.wikimedia.org/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.21" + 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' );
        mw.loader.using('mediawiki.util', function(){
	  $(document).ready(TDSkel);
        });
}