From Wikipedia, the free encyclopedia
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 citation template from a url using the citoid server



Author User:Salix alba

Date: 15 July 2021

Version: 0.05



Heavily borrowed from 

User:Mvolz/veCiteFromURL.js



Interface element taken from

TemplateDataEditor

http://fr.wikipedia.org/?title=Utilisateur:Ltrlg/scripts/TemplateDataEditor.js



https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true



Slightly customized.





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







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(messageslang==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);



        var re3 = /(\d\d\d\d)-(\d\d)/;

        var test3 = isodate.match(re3);



        if(test1 !== null) {

    	// Input format 2014-08-31T09:28EDT

    	    day =  parseInt(test13],10);

    	    daynum= test13];

    	    month = parseInt(test12],10)-1;

    	    monthnum = test12];

    	    year = test11];

        }

        else if(test2 !== null) {

        	// September 29, 2014

        	day =  parseInt(test22],10);

    	    var monthtxt = test21];

    	    year = test23];

    	    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;

        }

        else if(test3 !== null) {

     	    month = parseInt(test32],10)-1;

    	    monthnum = test32];

    	    year = test31];

    	    

    	    if(style == "MDY")

    			return ""+messageslang].monthnamesmonth+", "+year;

    		else if(style == "YMD")

    			return ""+year+"-"+monthnum;

    		else

    			return ""+messageslang].monthnamesmonth+" "+year;



        }

    	//console.log(day,month,year,daynum,monthnum); 

    	//console.log(messages[lang].monthnames);

    	//console.log(messages[lang].monthnames[month]);

    	if(style == "MDY")

    		return ""+messageslang].monthnamesmonth+" "+day+", "+year;

    	else if(style == "YMD")

    		return ""+year+"-"+monthnum+"-"+daynum;

    	else

    		return ""+day+" "+messageslang].monthnamesmonth+" "+year;

    }

    

/* Returns a javascript object given search results */

	function getPlainObject( url, searchResults ) {

		console.log(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',

				'via': 'libraryCatalog',

				'pmid': 'PMID',

				'pmc': 'PMCID',

				'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',

				'access-date': 'accessDate',

				'title': 'title',

				'url': 'url',

				'date': 'date',

				'publisher': 'publisher',

				'via': 'libraryCatalog',

				'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',

				'access-date': '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',

				'via': 'libraryCatalog',

				'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',

				'via': 'libraryCatalog',

				'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',

				'pmid': 'PMID',

				'pmc': 'PMCID',

				'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 = templateTypeMapcitation.itemType];

 

		templateHref = 'Template:' + templateName;



		//hack for now- set citation url to supplied url if not given

		if (!citation.url) {citation.url =  url;}

		//hack for PMC

		if (citation.PMCID) {citation.url = null;}

		//hack for websiteTitle

		if (citation.websiteTitle) {citation.publicationTitle =  citation.websiteTitle;}

 

		$.each( templateParamMaptemplateName], function ( key, value ) {

			//console.log("loop",key,value);

			var objString = citationvalue !== undefined ? citationvalue : '';

			//console.log(objString);

			if(typeof objString == 'string') {

				var replaced = objString.replaceAll('|', '-');		

				paramObjkey = { 'wt': replaced };

			} else {

				paramObjkey = { 'wt': objString };

			}

		} );

 

 		// Fix for author array

 		

 		var authors = citation'author'];

 		if(authors) {

 			for(i=0;i<authors.length;++i) {

 				var j = i+1;

 				paramObj'first' + j = { 'wt': authorsi][0].replaceAll('|', '-') };

	 			paramObj'last' + j = { 'wt': authorsi][1].replaceAll('|', '-') };

 			}

		}

		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();

		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 = "<ref>{{" + obj.templateName;

    	

    	$.each( obj.params, function ( key, value ) {

			var wt = value.wt;

			if(wt) {

				//console.log(key,wt);

				res = res + "|" + key + "=" + wt;

			}

		} );

		res = res + "}}</ref>";

    	return res;

    }

    

	////// Called when toolbox button clicked



	function callCitoid() {

		url = $('#citoid-url').val();

        //alert("Call citoid url [" + url +"]");

//curl 'http://citoid.wikimedia.org/api?action=query&format=mediawiki&search=https%3A%2F%2Fdeveloper%2Emozilla%2Eorg%2Fen-US%2Fdocs%2FWeb%2FAPI%2FXMLHttpRequest' -H 'Pragma: no-cache' -H 'Origin: http://en.wikipedia.org' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'accept-language: en' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Cache-Control: no-cache' -H 'Referer: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing?veaction=edit' -H 'Connection: keep-alive' --compressed

/*

GET /api?action=query&format=mediawiki&search=https%3A%2F%2Fdeveloper%2Emozilla%2Eorg%2Fen-US%2Fdocs%2FWeb%2FAPI%2FXMLHttpRequest HTTP/1.1



https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true

Host: citoid.wikimedia.org

Connection: keep-alive

Pragma: no-cache

Cache-Control: no-cache

*/

//Accept: application/json, text/javascript, */*; q=0.01

/*Origin: http://en.wikipedia.org

accept-language: en

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36

Referer: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing?veaction=edit

Accept-Encoding: gzip, deflate, sdch







curl 'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true' 

-H 'pragma: no-cache' -H 'origin: https://en.wikipedia.org' -H 'accept-encoding: gzip, deflate, sdch' 

-H 'accept-language: en' 

-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36' 

-H 'accept: application/json, text/javascript, /*; q=0.01' 

-H 'cache-control: no-cache' -H 'referer: https://en.wikipedia.org/' --compressed





[{"itemType":"newspaperArticle","notes":[],"tags":[{"tag":"Grammar schools","type":1},{"tag":"Secondary schools","type":1},{"tag":"Schools","type":1},{"tag":"Education","type":1},{"tag":"Nicky Morgan","type":1},{"tag":"Education policy","type":1},{"tag":"Politics","type":1}],"url":"http://www.theguardian.com/education/2016/apr/12/grammar-schools-nicky-morgan-kent-parent-11-plus","abstractNote":"With selective schools now able to apply to open ‘annexes’, a Kent parent has written an open letter to the education secretary","date":"2016-04-12","ISSN":["0261-3077"],"language":"en-GB","publicationTitle":"The Guardian","section":"Education","title":"Grammar schools and the opportunity gap: 10 questions for Nicky Morgan","libraryCatalog":"The Guardian","accessDate":"2016-04-12","shortTitle":"Grammar schools and the opportunity gap","author":[["Joanne","Bartley"]]}]



https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true



Post June 2017

https://en.wikipedia.org/api/rest_v1/data/citation/mediawiki/

  https%3A%2F%2Fwww.theguardian.com%2Fmusic%2F2016%2Foct%2F20%2Fewan-mclennan-and-george-monbiot-breaking-the-spell-of-loneliness-review-fellside

  ?action=query&format=json

*/



 		var citoidService = "https://en.wikipedia.org/api";

 		var prefix = 'https://en.wikipedia.org/api/rest_v1/data/citation/mediawiki/';

		var mid  = encodeURIComponent(url);

		//var suffix = '&basefields=true';

		var suffix = '?action=query&format=json';

		var send = prefix+mid+suffix;

		console.log(prefix+mid+suffix);

		

		

		    //gen  'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww.  theguardian.  com%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plusbasefields=true

			//url: 'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true',



		$.ajax( {

			beforeSend: function (request) {

				request.setRequestHeader('Content-Type', 'application/json');

			},

			url: send,

			//url: 'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true',

			type: 'GET',

			//data:  { action:"query", format:"mediawiki", search: url, basefields: "true" } ,

			success: doneAjax,

			error: function ( XMLHttpRequest, textStatus, errorThrown) {

				console.log( 'Status: '  + textStatus +  ' Error: ' + errorThrown );

				console.log("Req");

				console.log(XMLHttpRequest);

				console.log("getAllResponseHeaders");

				console.log(XMLHttpRequest.getAllResponseHeaders());

				mw.notify( 'Status:'  + textStatus +  'Error: ' + errorThrown );

			},

		} );

	}

				

	function doneAjax(result) {

		//console.log(JSON.stringify(result, null, 4));

        var plain = getPlainObject( url, result );	

        //console.log(result[0]);

        //console.log(plain);

        var res = buildTemplateCode(plain);

        //console.log(res);

        $('#citoid-code').text(res);

        $('#citoid-full').text(JSON.stringify(result, null, 4));

        //alert("doneAjax");

	}



	function openCitoidWindow() {

		$cont.fadeIn('slow');

	}



	///// Close the dialog

	function close() {

		$cont.fadeOut('slow', function(){

		});

	}



	////////// Building called after page loads 

	function buildHTML() {

		

		$button = $('<button>')

		.attr({ id: 'citoid-button', type:'button' })

		.text("Generate Citation")

		.click(callCitoid);

		

		$body = $('<div>')

		.attr('id', 'citoid-body')

		.append("<p>URL: "+

		    "<input type='text' id='citoid-url' size='200' /></p>")

		.append("<p>Date format: "+

		    "<input type='radio' name='datestyle' value='DMY' checked >1 September 2014</input>&nbsp;&nbsp;"+

		    "<input type='radio' name='datestyle' value='MDY'>September 1, 2014</input>&nbsp;&nbsp;"+

		    "<input type='radio' name='datestyle' value='YMD'>2014-09-01</input></p>")

		.append($button)

		.append("<p>Template code</p>")

		.append("<textarea id='citoid-code'>")

		.append("<p>Full citoid data</p>")

		.append("<textarea id='citoid-full'>");

		

		$title = $('<h2>').text( messageslang]['title' );

		

		$cont = $('<div>')

		.attr('id', 'citoid-cont')

		.append($('<div>')

				.attr('id', 'citoid-dialog')

				.append( $title )

				.append($('<a>')

						.attr({

							id: 'citoid-close',

							href: '#',

							title: messageslang]['close'

						})

						.click(function(){

							close();

							return false;

						})

						.append($('<img>')

								.attr({

									alt: messageslang]['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.02");

		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/?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);

        });
From Wikipedia, the free encyclopedia
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 citation template from a url using the citoid server



Author User:Salix alba

Date: 15 July 2021

Version: 0.05



Heavily borrowed from 

User:Mvolz/veCiteFromURL.js



Interface element taken from

TemplateDataEditor

http://fr.wikipedia.org/?title=Utilisateur:Ltrlg/scripts/TemplateDataEditor.js



https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true



Slightly customized.





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







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(messageslang==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);



        var re3 = /(\d\d\d\d)-(\d\d)/;

        var test3 = isodate.match(re3);



        if(test1 !== null) {

    	// Input format 2014-08-31T09:28EDT

    	    day =  parseInt(test13],10);

    	    daynum= test13];

    	    month = parseInt(test12],10)-1;

    	    monthnum = test12];

    	    year = test11];

        }

        else if(test2 !== null) {

        	// September 29, 2014

        	day =  parseInt(test22],10);

    	    var monthtxt = test21];

    	    year = test23];

    	    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;

        }

        else if(test3 !== null) {

     	    month = parseInt(test32],10)-1;

    	    monthnum = test32];

    	    year = test31];

    	    

    	    if(style == "MDY")

    			return ""+messageslang].monthnamesmonth+", "+year;

    		else if(style == "YMD")

    			return ""+year+"-"+monthnum;

    		else

    			return ""+messageslang].monthnamesmonth+" "+year;



        }

    	//console.log(day,month,year,daynum,monthnum); 

    	//console.log(messages[lang].monthnames);

    	//console.log(messages[lang].monthnames[month]);

    	if(style == "MDY")

    		return ""+messageslang].monthnamesmonth+" "+day+", "+year;

    	else if(style == "YMD")

    		return ""+year+"-"+monthnum+"-"+daynum;

    	else

    		return ""+day+" "+messageslang].monthnamesmonth+" "+year;

    }

    

/* Returns a javascript object given search results */

	function getPlainObject( url, searchResults ) {

		console.log(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',

				'via': 'libraryCatalog',

				'pmid': 'PMID',

				'pmc': 'PMCID',

				'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',

				'access-date': 'accessDate',

				'title': 'title',

				'url': 'url',

				'date': 'date',

				'publisher': 'publisher',

				'via': 'libraryCatalog',

				'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',

				'access-date': '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',

				'via': 'libraryCatalog',

				'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',

				'via': 'libraryCatalog',

				'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',

				'pmid': 'PMID',

				'pmc': 'PMCID',

				'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 = templateTypeMapcitation.itemType];

 

		templateHref = 'Template:' + templateName;



		//hack for now- set citation url to supplied url if not given

		if (!citation.url) {citation.url =  url;}

		//hack for PMC

		if (citation.PMCID) {citation.url = null;}

		//hack for websiteTitle

		if (citation.websiteTitle) {citation.publicationTitle =  citation.websiteTitle;}

 

		$.each( templateParamMaptemplateName], function ( key, value ) {

			//console.log("loop",key,value);

			var objString = citationvalue !== undefined ? citationvalue : '';

			//console.log(objString);

			if(typeof objString == 'string') {

				var replaced = objString.replaceAll('|', '-');		

				paramObjkey = { 'wt': replaced };

			} else {

				paramObjkey = { 'wt': objString };

			}

		} );

 

 		// Fix for author array

 		

 		var authors = citation'author'];

 		if(authors) {

 			for(i=0;i<authors.length;++i) {

 				var j = i+1;

 				paramObj'first' + j = { 'wt': authorsi][0].replaceAll('|', '-') };

	 			paramObj'last' + j = { 'wt': authorsi][1].replaceAll('|', '-') };

 			}

		}

		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();

		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 = "<ref>{{" + obj.templateName;

    	

    	$.each( obj.params, function ( key, value ) {

			var wt = value.wt;

			if(wt) {

				//console.log(key,wt);

				res = res + "|" + key + "=" + wt;

			}

		} );

		res = res + "}}</ref>";

    	return res;

    }

    

	////// Called when toolbox button clicked



	function callCitoid() {

		url = $('#citoid-url').val();

        //alert("Call citoid url [" + url +"]");

//curl 'http://citoid.wikimedia.org/api?action=query&format=mediawiki&search=https%3A%2F%2Fdeveloper%2Emozilla%2Eorg%2Fen-US%2Fdocs%2FWeb%2FAPI%2FXMLHttpRequest' -H 'Pragma: no-cache' -H 'Origin: http://en.wikipedia.org' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'accept-language: en' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Cache-Control: no-cache' -H 'Referer: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing?veaction=edit' -H 'Connection: keep-alive' --compressed

/*

GET /api?action=query&format=mediawiki&search=https%3A%2F%2Fdeveloper%2Emozilla%2Eorg%2Fen-US%2Fdocs%2FWeb%2FAPI%2FXMLHttpRequest HTTP/1.1



https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true

Host: citoid.wikimedia.org

Connection: keep-alive

Pragma: no-cache

Cache-Control: no-cache

*/

//Accept: application/json, text/javascript, */*; q=0.01

/*Origin: http://en.wikipedia.org

accept-language: en

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36

Referer: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing?veaction=edit

Accept-Encoding: gzip, deflate, sdch







curl 'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true' 

-H 'pragma: no-cache' -H 'origin: https://en.wikipedia.org' -H 'accept-encoding: gzip, deflate, sdch' 

-H 'accept-language: en' 

-H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36' 

-H 'accept: application/json, text/javascript, /*; q=0.01' 

-H 'cache-control: no-cache' -H 'referer: https://en.wikipedia.org/' --compressed





[{"itemType":"newspaperArticle","notes":[],"tags":[{"tag":"Grammar schools","type":1},{"tag":"Secondary schools","type":1},{"tag":"Schools","type":1},{"tag":"Education","type":1},{"tag":"Nicky Morgan","type":1},{"tag":"Education policy","type":1},{"tag":"Politics","type":1}],"url":"http://www.theguardian.com/education/2016/apr/12/grammar-schools-nicky-morgan-kent-parent-11-plus","abstractNote":"With selective schools now able to apply to open ‘annexes’, a Kent parent has written an open letter to the education secretary","date":"2016-04-12","ISSN":["0261-3077"],"language":"en-GB","publicationTitle":"The Guardian","section":"Education","title":"Grammar schools and the opportunity gap: 10 questions for Nicky Morgan","libraryCatalog":"The Guardian","accessDate":"2016-04-12","shortTitle":"Grammar schools and the opportunity gap","author":[["Joanne","Bartley"]]}]



https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true



Post June 2017

https://en.wikipedia.org/api/rest_v1/data/citation/mediawiki/

  https%3A%2F%2Fwww.theguardian.com%2Fmusic%2F2016%2Foct%2F20%2Fewan-mclennan-and-george-monbiot-breaking-the-spell-of-loneliness-review-fellside

  ?action=query&format=json

*/



 		var citoidService = "https://en.wikipedia.org/api";

 		var prefix = 'https://en.wikipedia.org/api/rest_v1/data/citation/mediawiki/';

		var mid  = encodeURIComponent(url);

		//var suffix = '&basefields=true';

		var suffix = '?action=query&format=json';

		var send = prefix+mid+suffix;

		console.log(prefix+mid+suffix);

		

		

		    //gen  'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww.  theguardian.  com%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plusbasefields=true

			//url: 'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true',



		$.ajax( {

			beforeSend: function (request) {

				request.setRequestHeader('Content-Type', 'application/json');

			},

			url: send,

			//url: 'https://citoid.wikimedia.org/api?action=query&format=mediawiki&search=http%3A%2F%2Fwww%2Etheguardian%2Ecom%2Feducation%2F2016%2Fapr%2F12%2Fgrammar-schools-nicky-morgan-kent-parent-11-plus&basefields=true',

			type: 'GET',

			//data:  { action:"query", format:"mediawiki", search: url, basefields: "true" } ,

			success: doneAjax,

			error: function ( XMLHttpRequest, textStatus, errorThrown) {

				console.log( 'Status: '  + textStatus +  ' Error: ' + errorThrown );

				console.log("Req");

				console.log(XMLHttpRequest);

				console.log("getAllResponseHeaders");

				console.log(XMLHttpRequest.getAllResponseHeaders());

				mw.notify( 'Status:'  + textStatus +  'Error: ' + errorThrown );

			},

		} );

	}

				

	function doneAjax(result) {

		//console.log(JSON.stringify(result, null, 4));

        var plain = getPlainObject( url, result );	

        //console.log(result[0]);

        //console.log(plain);

        var res = buildTemplateCode(plain);

        //console.log(res);

        $('#citoid-code').text(res);

        $('#citoid-full').text(JSON.stringify(result, null, 4));

        //alert("doneAjax");

	}



	function openCitoidWindow() {

		$cont.fadeIn('slow');

	}



	///// Close the dialog

	function close() {

		$cont.fadeOut('slow', function(){

		});

	}



	////////// Building called after page loads 

	function buildHTML() {

		

		$button = $('<button>')

		.attr({ id: 'citoid-button', type:'button' })

		.text("Generate Citation")

		.click(callCitoid);

		

		$body = $('<div>')

		.attr('id', 'citoid-body')

		.append("<p>URL: "+

		    "<input type='text' id='citoid-url' size='200' /></p>")

		.append("<p>Date format: "+

		    "<input type='radio' name='datestyle' value='DMY' checked >1 September 2014</input>&nbsp;&nbsp;"+

		    "<input type='radio' name='datestyle' value='MDY'>September 1, 2014</input>&nbsp;&nbsp;"+

		    "<input type='radio' name='datestyle' value='YMD'>2014-09-01</input></p>")

		.append($button)

		.append("<p>Template code</p>")

		.append("<textarea id='citoid-code'>")

		.append("<p>Full citoid data</p>")

		.append("<textarea id='citoid-full'>");

		

		$title = $('<h2>').text( messageslang]['title' );

		

		$cont = $('<div>')

		.attr('id', 'citoid-cont')

		.append($('<div>')

				.attr('id', 'citoid-dialog')

				.append( $title )

				.append($('<a>')

						.attr({

							id: 'citoid-close',

							href: '#',

							title: messageslang]['close'

						})

						.click(function(){

							close();

							return false;

						})

						.append($('<img>')

								.attr({

									alt: messageslang]['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.02");

		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/?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);

        });

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook