MediaWiki:Common.js
From CruisersWiki
(Difference between revisions)
m (a comment added) |
|||
Line 62: | Line 62: | ||
// Force Preview JavaScript code - End | // Force Preview JavaScript code - End | ||
// --------------------------------------------- | // --------------------------------------------- | ||
+ | |||
+ | /* */ | ||
+ | |||
+ | (function () { | ||
+ | |||
+ | /* fix for toolbar element is sometimes not available in edit mode */ | ||
+ | |||
+ | var addLoadEventRev = function (func) { | ||
+ | var oldonload = window.onload; | ||
+ | if (typeof oldonload == 'function') { | ||
+ | window.onload = function() { | ||
+ | func(); | ||
+ | oldonload(); | ||
+ | }; | ||
+ | } else { | ||
+ | window.onload = func; | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | var fixToolbar = function () { | ||
+ | if ((wgAction == 'edit' || wgAction == 'submit') && !document.getElementById('toolbar') && document.getElementById('editform')) { | ||
+ | var toolbar = document.createElement('div'); | ||
+ | toolbar.id = 'toolbar'; | ||
+ | |||
+ | var editform=document.getElementById('editform'); | ||
+ | |||
+ | editform.parentNode.insertBefore(toolbar, editform); | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | // see wikibits.js | ||
+ | onloadFuncts.splice(0, 0, fixToolbar); // execute first | ||
+ | |||
+ | // workaround for license badge src set to invalid host (www.cruiserswiki.com); skin agnostic version | ||
+ | |||
+ | var licenseBadgeWorkaround = function () { | ||
+ | var images = document.getElementsByTagName('img'); | ||
+ | |||
+ | for (var i = 0; i < images.length; i++) { | ||
+ | var img = images[i]; | ||
+ | if (img.src == "http://www.cruiserswiki.com/images/f/fe/Creativecommons.png") { | ||
+ | |||
+ | // as per CruisersWiki:Copyrights | ||
+ | img.src = 'https://licensebuttons.net/l/by-nc-sa/3.0/88x31.png'; | ||
+ | return; | ||
+ | } | ||
+ | } | ||
+ | // not found yet | ||
+ | if (doneOnloadHook) | ||
+ | return; | ||
+ | setTimeout(licenseBadgeWorkaround, 500); | ||
+ | }; | ||
+ | licenseBadgeWorkaround(); | ||
+ | }) (); | ||
+ | |||
+ | // utility functions | ||
+ | |||
+ | function wikiUri(page, ctype) { | ||
+ | return wgServer + wgScript + '?title=' + | ||
+ | encodeURIComponent(page.replace(/ /g,'_')).replace('%2F','/').replace('%3A',':') + | ||
+ | (ctype ? '&action=raw&ctype=' + ctype : ''); | ||
+ | } | ||
+ | |||
+ | function wikiScript(page) { | ||
+ | return wikiUri(page, 'text/javascript'); | ||
+ | } | ||
+ | |||
+ | function wikiCss(page) { | ||
+ | return wikiUri(page, 'text/css'); | ||
+ | } | ||
+ | |||
+ | function loadScript(url, callback) { | ||
+ | addOnloadHook( function () { | ||
+ | var elem = importScriptURI(url); | ||
+ | if (callback) { | ||
+ | if (elem) { | ||
+ | elem.onload = callback; | ||
+ | } else { | ||
+ | callback(); | ||
+ | } | ||
+ | } | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | function loadWikiScript(page, callback) { | ||
+ | loadScript(wikiScript(page), callback); | ||
+ | } | ||
+ | |||
+ | var loadedCss = {}; // included-scripts tracker | ||
+ | function loadCss(url, callback) { | ||
+ | if (loadedCss[url]) { | ||
+ | callback && callback(); | ||
+ | return null; | ||
+ | } | ||
+ | loadedCss[url] = true; | ||
+ | var elem = document.createElement('link'); | ||
+ | document.getElementsByTagName('head')[0].appendChild(elem); | ||
+ | elem.setAttribute('type','text/css'); | ||
+ | elem.setAttribute('rel','stylesheet'); | ||
+ | elem.setAttribute('href',url); | ||
+ | |||
+ | if (callback) { | ||
+ | elem.onload = callback; | ||
+ | } | ||
+ | return elem; | ||
+ | } | ||
+ | |||
+ | function loadWikiCss(page, callback) { | ||
+ | loadCss(wikiCss(page), callback); | ||
+ | } | ||
+ | |||
+ | // load jQuery | ||
+ | |||
+ | (function () { | ||
+ | |||
+ | // modify addOnloadHook from wikibits.js | ||
+ | |||
+ | var onloadFunctsNew = onloadFuncts; // see wikibits.js | ||
+ | onloadFuncts = []; | ||
+ | var doneOnloadHookNew = false; | ||
+ | |||
+ | var addOnloadHookOld = addOnloadHook; | ||
+ | addOnloadHook = function (hookFunct) { | ||
+ | // Allows add-on scripts to add onload functions | ||
+ | if(!doneOnloadHookNew) { | ||
+ | onloadFunctsNew[onloadFunctsNew.length] = hookFunct; | ||
+ | } else { | ||
+ | hookFunct(); // bug in MSIE script loading | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | // don't use loadScript here as it uses addOnloadHook | ||
+ | var elem = importScriptURI("https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"); | ||
+ | if (elem) { | ||
+ | elem.onload = function() { | ||
+ | //console.log('onload jQuery ' + typeof jQuery + ' ' + typeof $); | ||
+ | if (typeof jQuery === 'undefined') { | ||
+ | return; | ||
+ | } | ||
+ | $.ajaxSetup({ | ||
+ | cache: true | ||
+ | }); | ||
+ | $(document).ready(function(){ | ||
+ | console.log('document ready'); | ||
+ | if (!doneOnloadHookNew) { | ||
+ | doneOnloadHookNew = true; | ||
+ | doneOnloadHook = false; | ||
+ | onloadFuncts = onloadFunctsNew; | ||
+ | onloadFunctsNew = []; | ||
+ | runOnloadHook(); | ||
+ | } | ||
+ | }); | ||
+ | }; | ||
+ | } | ||
+ | })(); | ||
+ | |||
+ | // remove broken fckeditor | ||
+ | |||
+ | addOnloadHook(function () { | ||
+ | $('script[src*="fckeditor"]').remove(); | ||
+ | $('#fckTools').remove(); | ||
+ | }); | ||
+ | |||
+ | // rewrite image links' titles | ||
+ | |||
+ | addOnloadHook(function () { | ||
+ | $('a.image>img[alt]').each(function(i) { | ||
+ | var $this = $(this); | ||
+ | var alt = $this.attr('alt'); | ||
+ | $this.attr('title', alt); | ||
+ | // console.log(''+i+' '+alt); | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | // after [[w:User:Rezonansowy/SimpleLightbox]] | ||
+ | |||
+ | addOnloadHook(function () { | ||
+ | $('body').append( | ||
+ | '<div id="lightbox" style="display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);text-align:center;z-index:9999">' + | ||
+ | '<span style="display: inline-block; height: 100%; vertical-align: middle;" ></span>' + // http://stackoverflow.com/a/7310398 | ||
+ | '<img style="display:none;background:#fff;box-shadow: 0 0 25px #111;max-height:100%;max-width:100%;vertical-align:middle;cursor:pointer;" />' + | ||
+ | '</div>' | ||
+ | ); | ||
+ | $('#lightbox').on('click', function() { | ||
+ | $(this).fadeOut('fast', function () { | ||
+ | $('#lightbox img').hide(); | ||
+ | }); | ||
+ | }); | ||
+ | $('a.image').click(function(e) { | ||
+ | e.preventDefault(); | ||
+ | var src = $(this).find('img').attr('src'); | ||
+ | var thumb = src.match(/^(.*)(\/thumb)(.*)(\/[^\/]*)$/,''); | ||
+ | if (thumb) { | ||
+ | src = thumb[1] + thumb[3]; | ||
+ | } else if (src.match("/Special:Redirect/") ) { | ||
+ | src = src.replace(/(\?width=.*)$/,''); | ||
+ | } | ||
+ | |||
+ | $('#lightbox').show(); | ||
+ | |||
+ | $('#lightbox img') | ||
+ | .attr('src', src) | ||
+ | .load(function () { | ||
+ | $(this).fadeIn('fast'); | ||
+ | }); | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | // chartlets | ||
+ | |||
+ | addOnloadHook(function () { | ||
+ | if ($('.cw-chartlet, .cw-chartlet-standalone').length > 0) { | ||
+ | loadWikiScript('MediaWiki:Chartlet.js'); | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | // add kml download link | ||
+ | |||
+ | addOnloadHook(function () { | ||
+ | if ($('.h-geo').length > 0) { | ||
+ | loadWikiScript('MediaWiki:GetKml.js'); | ||
+ | } | ||
+ | }); | ||
+ | |||
+ | // custom edit toolbar buttons | ||
+ | |||
+ | function addCustomEditButton (imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) { | ||
+ | mwCustomEditButtons[mwEditButtons.length] = | ||
+ | {"imageId": imageId, | ||
+ | "imageFile": imageFile, | ||
+ | "speedTip": speedTip, | ||
+ | "tagOpen": tagOpen, | ||
+ | "tagClose": tagClose, | ||
+ | "sampleText": sampleText}; | ||
+ | } | ||
+ | |||
+ | addCustomEditButton("/images/7/70/Button_POI.png","Add POI","{{poi | lat= | lon=\n| type=\n| name=","\n| text=\n}}\n","","mw-editbutton-poi"); | ||
+ | |||
+ | if (wgUserName == 'Vadim') { | ||
+ | importScript('User:Vadim/common.js'); | ||
+ | } |
Revision as of 08:15, 4 February 2016
// ------------------------------------------------------------------------------- // Force Preview JavaScript code - Start // // To allow any group to bypass being forced to preview, // enter the group name in the permittedGroups array. // E.g. // var permittedGroups = []; // force everyone // var permittedGroups = [ "user"]; // permit logged-in users // var permittedGroups = [ "sysop", "bureaucrat"]; // permit sysop, bureaucrat // ------------------------------------------------------------------------------- var permittedGroups = []; /* Array.prototype.intersects = function() { */ // avoid an assignment to Array.prototype due to a bug in Navionics webapi var array_intersects = function() { // -------------------------------------------------------- // Returns true if any element in the argument array // is the same as an element in this array // -------------------------------------------------------- if( !arguments.length ){ return false; } var array2 = arguments[0]; var len1 = this.length; var len2 = array2.length; if( len2 == 0 ){ return false; } for(var i=0; i<len1; i++){ for(var j=0; j<len2; j++) { if( this[i] === array2[j] ) { return true; } } } return false; }; function forcePreview() { if( wgAction != "edit") return; if( wgUserGroups === null) { wgUserGroups = []; } /* if( wgUserGroups.intersects(permittedGroups) ) { */ if( array_intersects.call(wgUserGroups, permittedGroups) ) { return; } var saveButton = document.getElementById("wpSave"); if( !saveButton ) return; saveButton.disabled = true; saveButton.value = "Save page (use preview first)"; saveButton.style.fontWeight = "normal"; document.getElementById("wpPreview").style.fontWeight = "bold"; } addOnloadHook(forcePreview); // ----------------------------------------------------- // Force Preview JavaScript code - End // --------------------------------------------- /* */ (function () { /* fix for toolbar element is sometimes not available in edit mode */ var addLoadEventRev = function (func) { var oldonload = window.onload; if (typeof oldonload == 'function') { window.onload = function() { func(); oldonload(); }; } else { window.onload = func; } }; var fixToolbar = function () { if ((wgAction == 'edit' || wgAction == 'submit') && !document.getElementById('toolbar') && document.getElementById('editform')) { var toolbar = document.createElement('div'); toolbar.id = 'toolbar'; var editform=document.getElementById('editform'); editform.parentNode.insertBefore(toolbar, editform); } }; // see wikibits.js onloadFuncts.splice(0, 0, fixToolbar); // execute first // workaround for license badge src set to invalid host (www.cruiserswiki.com); skin agnostic version var licenseBadgeWorkaround = function () { var images = document.getElementsByTagName('img'); for (var i = 0; i < images.length; i++) { var img = images[i]; if (img.src == "http://www.cruiserswiki.com/images/f/fe/Creativecommons.png") { // as per CruisersWiki:Copyrights img.src = 'https://licensebuttons.net/l/by-nc-sa/3.0/88x31.png'; return; } } // not found yet if (doneOnloadHook) return; setTimeout(licenseBadgeWorkaround, 500); }; licenseBadgeWorkaround(); }) (); // utility functions function wikiUri(page, ctype) { return wgServer + wgScript + '?title=' + encodeURIComponent(page.replace(/ /g,'_')).replace('%2F','/').replace('%3A',':') + (ctype ? '&action=raw&ctype=' + ctype : ''); } function wikiScript(page) { return wikiUri(page, 'text/javascript'); } function wikiCss(page) { return wikiUri(page, 'text/css'); } function loadScript(url, callback) { addOnloadHook( function () { var elem = importScriptURI(url); if (callback) { if (elem) { elem.onload = callback; } else { callback(); } } }); } function loadWikiScript(page, callback) { loadScript(wikiScript(page), callback); } var loadedCss = {}; // included-scripts tracker function loadCss(url, callback) { if (loadedCss[url]) { callback && callback(); return null; } loadedCss[url] = true; var elem = document.createElement('link'); document.getElementsByTagName('head')[0].appendChild(elem); elem.setAttribute('type','text/css'); elem.setAttribute('rel','stylesheet'); elem.setAttribute('href',url); if (callback) { elem.onload = callback; } return elem; } function loadWikiCss(page, callback) { loadCss(wikiCss(page), callback); } // load jQuery (function () { // modify addOnloadHook from wikibits.js var onloadFunctsNew = onloadFuncts; // see wikibits.js onloadFuncts = []; var doneOnloadHookNew = false; var addOnloadHookOld = addOnloadHook; addOnloadHook = function (hookFunct) { // Allows add-on scripts to add onload functions if(!doneOnloadHookNew) { onloadFunctsNew[onloadFunctsNew.length] = hookFunct; } else { hookFunct(); // bug in MSIE script loading } }; // don't use loadScript here as it uses addOnloadHook var elem = importScriptURI("https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"); if (elem) { elem.onload = function() { //console.log('onload jQuery ' + typeof jQuery + ' ' + typeof $); if (typeof jQuery === 'undefined') { return; } $.ajaxSetup({ cache: true }); $(document).ready(function(){ console.log('document ready'); if (!doneOnloadHookNew) { doneOnloadHookNew = true; doneOnloadHook = false; onloadFuncts = onloadFunctsNew; onloadFunctsNew = []; runOnloadHook(); } }); }; } })(); // remove broken fckeditor addOnloadHook(function () { $('script[src*="fckeditor"]').remove(); $('#fckTools').remove(); }); // rewrite image links' titles addOnloadHook(function () { $('a.image>img[alt]').each(function(i) { var $this = $(this); var alt = $this.attr('alt'); $this.attr('title', alt); // console.log(''+i+' '+alt); }); }); // after [[w:User:Rezonansowy/SimpleLightbox]] addOnloadHook(function () { $('body').append( '<div id="lightbox" style="display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);text-align:center;z-index:9999">' + '<span style="display: inline-block; height: 100%; vertical-align: middle;" ></span>' + // http://stackoverflow.com/a/7310398 '<img style="display:none;background:#fff;box-shadow: 0 0 25px #111;max-height:100%;max-width:100%;vertical-align:middle;cursor:pointer;" />' + '</div>' ); $('#lightbox').on('click', function() { $(this).fadeOut('fast', function () { $('#lightbox img').hide(); }); }); $('a.image').click(function(e) { e.preventDefault(); var src = $(this).find('img').attr('src'); var thumb = src.match(/^(.*)(\/thumb)(.*)(\/[^\/]*)$/,''); if (thumb) { src = thumb[1] + thumb[3]; } else if (src.match("/Special:Redirect/") ) { src = src.replace(/(\?width=.*)$/,''); } $('#lightbox').show(); $('#lightbox img') .attr('src', src) .load(function () { $(this).fadeIn('fast'); }); }); }); // chartlets addOnloadHook(function () { if ($('.cw-chartlet, .cw-chartlet-standalone').length > 0) { loadWikiScript('MediaWiki:Chartlet.js'); } }); // add kml download link addOnloadHook(function () { if ($('.h-geo').length > 0) { loadWikiScript('MediaWiki:GetKml.js'); } }); // custom edit toolbar buttons function addCustomEditButton (imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) { mwCustomEditButtons[mwEditButtons.length] = {"imageId": imageId, "imageFile": imageFile, "speedTip": speedTip, "tagOpen": tagOpen, "tagClose": tagClose, "sampleText": sampleText}; } addCustomEditButton("/images/7/70/Button_POI.png","Add POI","{{poi | lat= | lon=\n| type=\n| name=","\n| text=\n}}\n","","mw-editbutton-poi"); if (wgUserName == 'Vadim') { importScript('User:Vadim/common.js'); }