User:Alexis Jazz/MVattrib.js

// //User:Alexis Jazz/MVattrib, addon that makes MediaViewer (https://www.mediawiki.org/wiki/Reading/Multimedia/Media_Viewer) license compliant in certain cases where it otherwise isn't (https://phabricator.wikimedia.org/T68606) if ( mw.config.get('wgMediaViewerOnClick') ) { MVattrib = {}; MVattrib.msgs = { 'author': 'Author', 'license': 'License', 'scroll': ' Scroll down for more complete information. '	};	MVattrib.debugmode = true; MVattrib.debug = function(text) { if ( MVattrib.debugmode == true ) { if ( typeof text == 'string' ) { console.log('MVattrib: ' + text); } else { console.log('MVattrib:'); console.log(text); }		}	};	MVattrib.debug('MVattrib loaded'); MVattrib.getWikitextFromExport = function(text) { if ( text.match(/[^]*]*>([^]*)<\/text>[^]*/) ) { return text.replace(/[^]*]*>([^]*)<\/text>[^]*/, '$1').replace(/\&lt\;/g, '<').replace(/\&gt\;/g, '>').replace(/\&amp\;/g, '&'); } else { return ''; }	};	detectKey = function(pressedkey) { if ( ( pressedkey.key == 'ArrowLeft' || pressedkey.key == 'ArrowRight' ) && $('.mw-mmv-prev-image')[0] && $('.mw-mmv-next-image')[0] ) { MVattrib.addAttribution; }	};	document.addEventListener('keydown', detectKey); MVattrib.addAttribution = function { MVattrib.debug('run MVattrib.addAttribution'); var waitToAddAttrib = setInterval(function {			clearInterval(waitToAddAttrib);			if ( $('.mw-mmv-prev-image')[0] && $('.mw-mmv-next-image')[0] ) {				$('.mw-mmv-prev-image')[0].addEventListener('click', MVattrib.addAttribution);				$('.mw-mmv-next-image')[0].addEventListener('click', MVattrib.addAttribution);			}			if ( $('.mw-mmv-image-metadata')[0] ) {				MVattrib.title = decodeURIComponent(document.location.hash.replace(/\#\/media\//, '').replace('_', ' '));				var apiCommons = new mw.ForeignApi('https://commons.wikimedia.org/w/api.php');				apiCommons.get( { format: 'json', action: 'query', export: 'true', titles: MVattrib.title, } ).done( function ( data ) { MVattrib.debug(data); MVattrib.wikiText = MVattrib.getWikitextFromExport(data.query.export["*"]); MVattrib.licenseSection = MVattrib.wikiText.match(/\=\=.*\{\{int\:license\-header\}\}.*\=\=[^]*/); MVattrib.permissionParam = MVattrib.wikiText.match(/\|\s*[Pp]ermission\s*\=\s*(\{\{[^\{\}]*\}\}|\[\^\[\*\]\]|[^\|])*/); //conditions to append attribution, detect if MV is likely to have screwed up and if we're likely to be able to do better if ( (MVattrib.licenseSection || MVattrib.permissionParam) && ( MVattrib.wikiText.match(/\|\s*[Aa]uthor\s*\=\s*\{\{[Cc]reator\:[^\}\n]*\}\}[ \n]*[^ \n]/) || MVattrib.wikiText.match(/\{\{fop/i) ) ) { MVattrib.debug('okay let\'s add to the attribution and license info'); MVattrib.attribution = MVattrib.wikiText.match(/\|\s*[Aa]uthor\s*\=\s*(\{\{[^\{\}]*\}\}|\[\^\[\*\]\]|[^\|])*/)[0].replace(/\|\s*[Aa]uthor\s*\=\s*/, ).replace(/\s*$/, ).replace(/\n\n/g, '\n').replace(/\{\{\!\}\}/g, '&#124;'); if ( MVattrib.licenseSection && MVattrib.licenseSection[0] ) { MVattrib.debug('extract license section from wikitext'); MVattrib.licenseSectionWikitext = MVattrib.licenseSection[0].replace(/\=\=.*\{\{int\:license\-header\}\}.*\=\=\s*/, ).replace(/\n\s*\=\=[^]*/, ).replace(/\s*$/, '').replace(/\n\n/g, '\n'); } else { MVattrib.licenseSectionWikitext = ''; }						if ( MVattrib.permissionParam && MVattrib.permissionParam[0] ) { MVattrib.debug('extract permission section from wikitext'); MVattrib.licensePermissionWikitext = MVattrib.permissionParam[0].replace(/\|\s*[Pp]ermission\s*\=\s*/, ).replace(/\s*$/, ).replace(/\n\n/g, '\n'); } else { MVattrib.licensePermissionWikitext; }						if ( MVattrib.licensePermissionWikitext ) { MVattrib.licensePermissionWikitext = MVattrib.licensePermissionWikitext + ' '; }						MVattrib.license = MVattrib.licensePermissionWikitext + MVattrib.licenseSectionWikitext; MVattrib.tableClass = ''; if ( MVattrib.attribution ) { MVattrib.authorCol = MVattrib.msgs.author; } else { MVattrib.authorCol = ''; }						if ( MVattrib.license ) { MVattrib.licenseCol = MVattrib.msgs.license; } else { MVattrib.licenseCol = ''; }						MVattrib.compliantAttrib = '{| class="' + MVattrib.tableClass + '" style="width:98%;margin-left:1%;margin-right:1%" \n! style="text-align:left"|\'\'\'' + MVattrib.authorCol + '\'\'\'\n! style="width:2em" |\n! style="text-align:left"|\'\'\'' + MVattrib.licenseCol + '\'\'\'\n|-\n| style="vertical-align:top" |' + MVattrib.attribution + '\n|\n| style="vertical-align:top" |' + MVattrib.license + '\n|-\n| colspan="3" |About this interface add-on\n|}'; MVattrib.scrollNotice = document.createElement('span'); MVattrib.scrollNotice.id = 'MVattribScrollNotice'; MVattrib.scrollNotice.innerHTML = MVattrib.msgs.scroll; apiCommons.get( {						format: 'json', action: 'parse', title: MVattrib.title, pst: '1', prop: 'text', formatversion: '2', text: MVattrib.compliantAttrib						} ).done( function ( data ) {							MVattrib.debug(data);							if ( $('#MVattrib')[0] ) {								MVattrib.debug('updating license info');								$('#MVattrib')[0].innerHTML = data.parse.text;							} else {								MVattrib.debug('adding license info');								$('.mw-mmv-image-metadata').append(' ' + data.parse.text + ' ');								$('.mw-mmv-credit')[0].prepend(MVattrib.scrollNotice);							}						}); } else if ( $('#MVattrib')[0] && $('#MVattribScrollNotice')[0] ) { MVattrib.debug('new image loaded, removing author+license of previous image'); $('#MVattrib')[0].outerHTML = ''; $('#MVattribScrollNotice')[0].outerHTML = ''; } else { MVattrib.debug('nothing to do'); }				});			}		}, 1000);	};	if ( document.location.hash.match(/\#\/media\//) ) { MVattrib.addAttribution; }	var waitToAddAttrib = setInterval(function {		clearInterval(waitToAddAttrib);		for (int = 0; int < document.getElementsByClassName('image').length; int++) {			document.getElementsByClassName('image')[int].addEventListener('click', MVattrib.addAttribution);		}	}, 1000); } //