User:CorporateM/vector.js

/************* Generates a citation template from a url using the citoid server Author User:Salix alba Date: 31 Aug 2014 Version: 0.01 Heavily borrowed from User:Mvolz/veCiteFromURL.js Interface element taken from TemplateDataEditor http://fr.wikipedia.org/w/index.php?title=Utilisateur:Ltrlg/scripts/TemplateDataEditor.js ***************/ function Citoid($) { ////// Customization for local wikis var lang = mw.config.get('wgUserLanguage'); var messages = { "en": { "toolbox-label": 'Citoid', "toolbox-tooltip": 'Generate reference from a URL', "title": 'Citoid reference ', "close": 'Close', "monthnames": ['January','February','March','April','May','June','July','August','September','October','November','December'] },	};   if(messages[lang]==null) lang='en'; var url; function formatCS1Date(isodate) { //console.log(isodate); var style = $( "input:radio[name=datestyle]:checked" ).val; var day="",month="",year="",daynum="",monthnum=""; // Input format 2014-08-31T09:28EDT var re1 = /(\d\d\d\d)-(\d\d)-(\d\d).*/; var test1 = isodate.match(re1); // Or sometimes September 29, 2014 var re2 = /([A-Z][a-z]+) (\d+), (\d\d\d\d).*/; var test2 = isodate.match(re2); if(test1) { // Input format 2014-08-31T09:28EDT day = parseInt(test1[3],10); daynum= test1[3]; month = parseInt(test1[2],10)-1; monthnum = test1[2]; year = test1[1]; }       else if(test2) { // September 29, 2014 day = parseInt(test2[2],10); var monthtxt = test2[1]; year = test2[3]; if(day<10) daynum = "0" + day; else daynum = day; var index = messages['en'].monthnames.indexOf(monthtxt)+1; if(index<10) monthnum = "0" + index; else monthnum = index; month = index-1; }   	//console.log(day,month,year,daynum,monthnum); //console.log(messages[lang].monthnames); //console.log(messages[lang].monthnames[month]); if(style == "MDY") return ""+messages[lang].monthnames[month]+" "+day+", "+year; else if(style == "YMD") return ""+year+"-"+monthnum+"-"+daynum; else return ""+day+" "+messages[lang].monthnames[month]+" "+year; } /* Returns a javascript object given search results */ function getPlainObject( url, searchResults ) { var content, plainObject, d, templateHref, templateName, citation = JSON.parse( JSON.stringify( searchResults ) )[0], //uses the first citation result for the time being templateTypeMap = { book: 'Cite book', bookSection: 'Cite book', journalArticle: 'Cite journal', magazineArticle: 'Cite news', newspaperArticle: 'Cite news', thesis: 'Cite journal', letter: 'Citation', manuscript: 'Cite book', interview: 'Citation', film: 'Citation', artwork: 'Citation', webpage: 'Cite web', report: 'Cite journal', bill: 'Citation', hearing: 'Citation', patent: 'Citation', statute: 'Citation', email: 'Cite web', map: 'Citation', blogPost: 'Cite web', instantMessage: 'Citation', forumPost: 'Cite web', audioRecording: 'Citation', presentation: 'Cite journal', videoRecording: 'Citation', tvBroadcast: 'Citation', radioBroadcast: 'Citation', podcast: 'Citation', computerProgram: 'Citation', conferencePaper: 'Cite journal', 'document': 'Citation', encyclopediaArticle: 'Cite journal', dictionaryEntry: 'Cite journal' },			//Parameter map for Template:Citation on en-wiki //In the format citation-template-field:citoid-field citationParams = { 'first1': 'author1-first', 'last1': 'author1-last', 'first2': 'author2-first', 'last2': 'author2-last', 'first3': 'author3-first', 'last3': 'author3-last', 'first4': 'author4-first', 'last4': 'author4-last', //	'accessdate': 'accessDate', 'title': 'title', 'url': 'url', 'publisher': 'publisher', //a large number of Zotero types have the field publicationTitle //however, in setting journal to publicationTitle, the citation //will be formatted as a journal article, which may not always be //desirable. 'journal': 'publicationTitle', //	'newspaper': 'publicationTitle', 'date': 'date', 'location': 'place', 'issn': 'ISSN', 'isbn': 'ISBN', 'pages': 'pages', 'volume': 'volume', 'series': 'series', 'issue': 'issue', 'doi': 'DOI' },			webParams = { 'first1': 'author1-first', 'last1': 'author1-last', 'first2': 'author2-first', 'last2': 'author2-last', 'first3': 'author3-first', 'last3': 'author3-last', 'first4': 'author4-first', 'last4': 'author4-last', //	'accessdate': 'accessDate', 'title': 'title', 'url': 'url', 'date': 'date', 'publisher': 'publisher', 'website': 'publicationTitle' },			newsParams = { 'first1': 'author1-first', 'last1': 'author1-last', 'first2': 'author2-first', 'last2': 'author2-last', 'first3': 'author3-first', 'last3': 'author3-last', 'first4': 'author4-first', 'last4': 'author4-last', //	'accessdate': 'accessDate', 'title': 'title', 'url': 'url', 'publisher': 'publisher', 'newspaper': 'publicationTitle', 'date': 'date', 'location': 'place', 'issn': 'ISSN', 'isbn': 'ISBN', 'pages': 'pages', 'volume': 'volume', 'series': 'series', 'issue': 'issue', 'doi': 'DOI' },			bookParams = { 'first1': 'author1-first', 'last1': 'author1-last', 'first2': 'author2-first', 'last2': 'author2-last', 'first3': 'author3-first', 'last3': 'author3-last', 'first4': 'author4-first', 'last4': 'author4-last', //	'accessdate': 'accessDate', 'title': 'title', 'url': 'url', 'publisher': 'publisher', 'journal': 'publicationTitle', 'date': 'date', 'location': 'place', 'issn': 'ISSN', 'isbn': 'ISBN', 'pages': 'pages', 'volume': 'volume', 'series': 'series', 'issue': 'issue', 'doi': 'DOI' },			journalParams = { 'first1': 'author1-first', 'last1': 'author1-last', 'first2': 'author2-first', 'last2': 'author2-last', 'first3': 'author3-first', 'last3': 'author3-last', 'first4': 'author4-first', 'last4': 'author4-last', //	'accessdate': 'accessDate', 'title': 'title', 'url': 'url', 'publisher': 'publisher', 'journal': 'publicationTitle', 'date': 'date', 'location': 'place', 'issn': 'ISSN', 'isbn': 'ISBN', 'pages': 'pages', 'volume': 'volume', 'series': 'series', 'issue': 'issue', 'doi': 'DOI' },			//format 'template name':parameter obj name templateParamMap = { 'Citation': citationParams, 'Cite web': webParams, 'Cite news': newsParams, 'Cite journal': journalParams, 'Cite book': bookParams },			//This will contain the correct template with the fields filled out paramObj = {}; templateName = templateTypeMap[citation.itemType]; templateHref = 'Template:' + templateName; //hack for now- set citation url to supplied url if not given if (!citation.url) {citation.url = url;} //hack for websiteTitle if (citation.websiteTitle) {citation.publicationTitle = citation.websiteTitle;} $.each( templateParamMap[templateName], function ( key, value ) {			var objString = citation[value] !== undefined ? citation[value] : '';			paramObj[key] = { 'wt': objString };		} ); d = new Date; //var months = ['January','February','March','April','May','June','July','August','September','October','November','December']; //ds = d.getDate + " " + months[d.getMonth] + " " + d.getGetFullYear; paramObj.accessdate = { 'wt': formatCS1Date(d.toISOString) }; var d2 = paramObj.date.wt; if(d2) { paramObj.date.wt = formatCS1Date(d2); } 		// Greatly simplified return result plainObject = { //before paren put get plain object 'templateName': templateName.toLowerCase, 'href': templateHref, 'params': paramObj };		return plainObject; }   //// build the code for the template function buildTemplateCode(obj) { var res = ""; return res; }	////// Called when toolbox button clicked function callCitoid { url = $('#citoid-url').val; //alert("Call citoid url [" + url +"]"); var citoidService = "https://citoid.wmflabs.org/url"; $.ajax( {			beforeSend: function (request) {				request.setRequestHeader('Content-Type', 'application/json');			},			url: citoidService,			type: 'POST',			data: JSON.stringify( { url: url } ),			dataType: 'json',			success: doneAjax,			error: function ( XMLHttpRequest, textStatus, errorThrown) {				mw.notify( 'Status:' + textStatus +  'Error: ' + errorThrown );			},		} ); }	function doneAjax(result) { var plain = getPlainObject( url, result ); console.log(result[0]); console.log(plain); var res = buildTemplateCode(plain); console.log(res); $('#citoid-code').text(res); //alert("doneAjax"); }	function openCitoidWindow { $cont.fadeIn('slow'); }	///// Close the dialog function close { $cont.fadeOut('slow', function{		}); }	////////// Building called after page loads function buildHTML { $button = $(' ') .attr({ id: 'citoid-button', type:'button' }) .text("Generate Citation") .click(callCitoid); $body = $(' ') .attr('id', 'citoid-body') .append(" URL: "+		   " ") .append(" Date format: "+		   "1 September 2014  "+		    "September 1, 2014  "+		    "2014-09-01 ") .append($button) .append(" Template code ") .append(""); $title = $(' ').text( messages[lang]['title'] ); $cont = $(' ') .attr('id', 'citoid-cont') .append($(' ')				.attr('id', 'citoid-dialog')				.append( $title )				.append($('') .attr({							id: 'citoid-close',							href: '#',							title: messages[lang]['close']						}) .click(function{							close;							return false;						}) .append($(' ')								.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'], 'citoid', messages['en']['toolbox-tooltip'] )		).click(function{			openCitoidWindow;			return false;		}); }	/////// Actions to do once page loads, function start { //alert("Citoid 0.01"); addPortletLink; buildHTML; //console.log(formatCS1Date("2014-09-29T07:08:59.468Z")); //console.log(formatCS1Date("2014-10-01T07:08:59.468Z")); //console.log(formatCS1Date("September 29, 2014")); //console.log(formatCS1Date("October 1, 2014")); }	////////// START ////////// start; } /////// Wrapper code //if( true // $.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/Citoid.css&action=raw&ctype=text/css&smaxage=21600&maxage=86400',	'text/css' ); mw.loader.using('mediawiki.util', function{	 $(document).ready(Citoid);        });