MediaWiki:Gadget-CustomMenu.js
Z WikiSkript
Poznámka: Po zveřejnění musíte vyprázdnit cache vašeho prohlížeče, jinak změny neuvidíte.
- Firefox / Safari: Při kliknutí na Aktualizovat držte Shift nebo stiskněte Ctrl-F5 nebo Ctrl-R (na Macu ⌘-R)
- Google Chrome: Stiskněte Ctrl-Shift-R (na Macu ⌘-Shift-R)
- Internet Explorer / Edge: Při kliknutí na Aktualizovat držte Ctrl nebo stiskněte Ctrl-F5
- Opera: Stiskněte Ctrl-F5.
/**
* DOKUMENTACE
* Přidává do hlavního menu sekci s uživatelsky definovanými položkami
* Toto menu musí být definováno na stránce Uživatel:Username/usermenu (nebo Usermenu)
* Každá položka na samostatném řádku. Pro přehlednost může začínat hvězdičkou.
* Syntax: URL nebo název stránky na wiki|název odkazu
* Nepovinné parametry: |blank ... odkaz se otevře v novém okně
*
* INSTALACE
* V Mediawiki:Common.css je potřeba nastavit "li[id^='n-hidden'] { display: none; }"
* a "#p-custom-menu {display:none;}"
* MediaWiki:Custom-menu = Osobní menu
* MediaWiki:Sidebar ... na konec přidat "* custom-menu \n** hidden-custom|hidden-custom"
* User:Josmart/CustomMenuIntro ... nápověda při zakládání menu
* User:Josmart/DefaultUserMenu ... toto menu se nabídne při jeho zakládání
* @author Josef Martiňák (https://www.wikiskripta.eu/w/User:Josmart)
* @author Slepi (https://www.wikiskripta.eu/w/User:Slepi)
* @license https://www.gnu.org/copyleft/gpl.html GNU GPL 3.0
*/
var customMenu = {
/* styl tlačítka */
buttonStyle : {
fontStyle: "italic",
padding: "0.3rem 1rem",
},
/**
* Načíst obsah menu ze stránky Uživatel:Username/usermenu
*/
getContent : function() {
$.ajax({
dataType: "text",
url: '/api.php',
data: 'action=query&titles=User:' + mw.config.get("wgUserName") + '/usermenu' + '&format=json'
})
.done(function( data ) {
if(data.indexOf('"missing":""') !== -1) {
// Seznam odkazů je prázdný. Nabídneme jeho vytvoření s předdefinovaným seznamem
mw.util.addPortletLink('p-custom-menu', '/index.php?title=User:' + mw.config.get("wgUserName") + '/usermenu&action=edit&editintro=User:Josmart/CustomMenuIntro&preload=User:Josmart/DefaultUserMenu&summary=moje%20nov%C3%A9%20osobn%C3%AD%20menu', 'Vytvořte si menu', 'pmMng');
/* zobrazit menu */
$("#p-custom-menu").css("display", "block");
$("#pmMng a").css(customMenu.buttonStyle);
}
else {
// načíst obsah menu
var menu = [];
$.ajax({
dataType: "text",
url: '/index.php?title=User:' + mw.config.get("wgUserName") + '/usermenu',
data: 'action=raw'
})
.done(function( data ) {
$.each(data.split(/\n/), function(i, line){
line = line.trim();
if(line.length>0 && line.substr(0,2) != '//') {
menu.push(customMenu.prepareMenuItem(line));
}
});
if(data === '') customMenu.getContent('usermenu');
customMenu.append(menu);
});
}
});
},
/**
* Převést řádek definice menu do pole o čtyřech položkách
* @param {line} Řádek definice menu ze zdrojového článku
* @return {array} položka menu (odkaz,název odkazu,is_blank,is_external)
*/
prepareMenuItem : function(line) {
/* odstranit * a prázdné znaky */
if(line.indexOf("*")==0) {
line = line.substring(1);
}
line = line.trim();
/* rozdělit podle "|" */
var arr = line.split("|");
/* chybí-li název, použít jako název URL */
if(arr.length==1) arr[1] = arr[0];
/* je-li na 2.místě "blank", použít jako název URL a otevřít v nové okně */
if(arr[1]=="blank") {
arr[1] = arr[0];
arr[2] = "blank";
}
/* ošetřit chybějící informaci, zda otevírat v novém okně */
if(arr.length==2 || arr[2]!="blank") arr[2] = 0;
else arr[2] = 1;
if(arr[0].match(/^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/) !== null) {
/* externí odkaz */
// přidat do odkazu https, pokud chybí.
if(arr[0].indexOf("http") == -1) {
arr[0] = "https://" + arr[0];
}
arr[3] = 1;
}
else {
/* odkaz na wiki článek */
arr[3] = 0;
}
/* vrátit položku menu */
return arr;
},
/**
* Připojit user menu
*/
append : function(menu) {
/* Přidat odkazy do menu */
var i;
for (i = 0; i < menu.length; i++) {
if(menu[i][3] == 1) {
// externí odkaz
mw.util.addPortletLink('p-custom-menu', menu[i][0], menu[i][1], 'pm' + i);
}
else {
// interní odkaz
mw.util.addPortletLink('p-custom-menu', '/w/' + menu[i][0], menu[i][1], 'pm' + i);
}
// odkaz v novém okně?
if(menu[i][2] == 1) {
$("#pm" + i + ">a").prop("target","_blank");
}
}
// Přidej link na seznam odkazů
mw.util.addPortletLink('p-custom-menu', '/w/User:' + mw.config.get("wgUserName") + '/usermenu', 'Upravit menu', 'pmMng');
/* zobrazit menu */
$("#p-custom-menu").css("display", "block");
$("#pmMng a").css(customMenu.buttonStyle);
},
/**
* Zahájit skript
*/
start : function() {
customMenu.getContent();
}
}
/* Zahájit po načtení stránky */
if (document.readyState != "loading"){
customMenu.start();
} else {
document.addEventListener('DOMContentLoaded', customMenu.start);
}