MediaWiki:UpravyMenu.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.
/**
* Úpravy menu a rozhraní WikiSkript
*
* @file Skripty upravující menu, nabídky a rozhraní WikiSkript
* @license https://www.gnu.org/licenses/gpl.html GNU General Public License 3.0
*/
var upravyMenu = {
/**
* Vytvoří pískoviště pro přihlášeného uživatele.
*/
piskoviste: function() {
mw.util.addPortletLink('p-personal', mw.config.get("wgServer") + mw.config.get("wgScriptPath") + '/index.php?title=Uživatel:' + mw.config.get("wgUserName") + '/Pískoviště', 'Moje pískoviště', 'pt-piskoviste', 'Prostor, kde mohu experimentovat', 'a', document.getElementById('pt-preferences'));
},
/**
* Přidá odkaz na pomoc uživatelům.
*/
pomoc: function() {
mw.util.addPortletLink('p-personal', mw.config.get("wgServer") + mw.config.get("wgScriptPath") + '/index.php?title=WikiSkripta:Pomoc', 'Potřebujete pomoc?', 'pt-pomoc', 'Nápověda, jak a koho kontaktovat', null, document.getElementById('pt-logout'));
},
/**
* Správcovské nástroje k uživatelům do levého menu.
*/
spravcovskeNastroje: function() {
wgTitleAa = new Array();
wgTitleAa = mw.config.get("wgTitle").split('/');
urCesta = mw.config.get("wgServer") + mw.config.get("wgScript") + '/';
if(mwGetUserRight("bureaucrat")) {
mw.util.addPortletLink('p-tb', urCesta + "Speciální:CheckUser?user=" + mw.config.get("wgTitle"), 'Kontrola IP uživatele', 't-ipcheckuser', 'Kontrola IP adresy uživatele a jeho editací');
}
},
/**
* Uživatelské nástroje do levého menu.
*/
uzivatelskeNastroje: function() {
// Historie kategorie
if (mw.config.get("wgUserName") !== null && mw.config.get("wgCanonicalNamespace") === "Category" && mw.config.get("wgTitle")) {
mw.util.addPortletLink('p-tb', mw.config.get("wgServer") + mw.config.get("wgScriptPath") + '/index.php/Speciální:CategoryHistory/'+mw.config.get("wgTitle"), 'Historie kategorie', 't-cathistory', 'Historie článků v kategorii');
}
// Hledání průniku kategorií
if (mw.config.get("wgNamespaceNumber") === 14 ) { // jmenný prostor „Kategorie:“
mw.loader.load(mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/index.php?title=MediaWiki:CategoryIntersection.js&action=raw&ctype=text/javascript");
}
if (mw.config.get("wgNamespaceNumber") === 0 ) { // hlavní jmenný prostor
mw.util.addPortletLink('p-tb', mw.config.get("wgServer") + mw.config.get("wgScriptPath") + '/index.php?action=edit&preload=N%C3%A1pov%C4%9Bda%3AProcvi%C4%8Dov%C3%A1n%C3%AD%2Fpreload&summary=Zalo%C5%BEena+str%C3%A1nka+pro+procvi%C4%8Dov%C3%A1n%C3%AD&title=Procvi%C4%8Dov%C3%A1n%C3%AD%3A'+mw.config.get("wgTitle"), 'Vytvořit procvičování', 't-practicecreate', 'Vytvořit nebo upravit procvičování k tomuto článku');
}
// chybějící portály
if(mwGetUserRight("editor")) mw.loader.load(mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/index.php?title=MediaWiki:MissingPortalLinks.js&action=raw&ctype=text/javascript");
// průnik portálů a kategorií
if(mwGetUserRight("editor")) mw.loader.load(mw.config.get("wgServer") + mw.config.get("wgScriptPath") + "/index.php?title=MediaWiki:PrunikPortalu.js&action=raw&ctype=text/javascript");
},
/**
* Zobrazení souvisejících portálů a vypracovaných otázek
*/
portaly: function() {
// URL pro API
jsonapi = mw.config.get("wgServer") + "/api.php?action=query&list=backlinks&bltitle=" + mw.config.get("wgPageName") + "&blnamespace=100&format=json";
// ajax
$.getJSON(jsonapi).done(function(data){
// zpracování odpovědi
var pocetOtazek = 0; // vypracované otázky
var pocetSkutPortalu = 0; // skutečný počet portálů (bez otázek)
pocetPortalu = data.query.backlinks.length;
if(pocetPortalu == 0) return; // bez portálů nemá smysl pokračovat
for(i=0;i<pocetPortalu;i++) {
// název portálu
aktPortal = data.query.backlinks[i].title;
aktPortalNazev = aktPortal.replace("Portál:", "");
if(aktPortalNazev.length > 25) aktPortalNazev = aktPortalNazev.substring(0,24) + "…";
// test, zda portál neobsahuje vypracované otázky
var zjisteniOtazek = new RegExp("(zápočet|Zápočet|otázky|Otázky|praktika|Praktika)");
// rozdělení mezi portály a vypracované otázky
if(zjisteniOtazek.test(aktPortalNazev)) {
idPortalu = "p-rel-exam";
pocetOtazek++;
} else {
idPortalu = "p-rel-portals";
pocetSkutPortalu++;
}
// vložení portálu do menu
mw.util.addPortletLink(idPortalu, mw.config.get("wgServer") + mw.config.get("wgScript") + '/' + aktPortal, aktPortalNazev , '', aktPortal, '');
}
// sekce s portály
if(pocetSkutPortalu > 0) {
$("#p-rel-portals").slideDown();
}
// sekci s portály pokud možno rozbalit
if(document.getElementById("p-rel-portals") && document.getElementById("p-rel-portals").className.indexOf("collapsed") !== -1) {
$("#mw-panel > div#p-rel-portals").toggleClass("collapsed").toggleClass("expanded").find("div.body").slideToggle("fast");
}
// sekce s otázkami
if(pocetOtazek>0) {
$("#p-rel-exam").slideDown();
}
});
},
start: function() {
// pískoviště
if(mw.config.get("wgUserName") !== null) {
upravyMenu.piskoviste();
}
// správcovské nástroje
if($.inArray(mw.config.get("wgNamespaceNumber"), [2,3]) !== -1) upravyMenu.spravcovskeNastroje();
// Přidat funkci CopyvioChecker
if(mwGetUserRight("editor") && mw.config.get('wgNamespaceNumber') == 0) {
$("li#t-info").after('<li id="t-copyviocheck" class="mw-list-item"><a href="#" class="dropdown-item" title="UPOZORNĚNÍ: Bude otevřeno velké množství záložek ve Vašem prohlížeči.">Prověřit copyvio</a></li>');
$("li#t-copyviocheck a").click(function() {
/* get all paragraphs in the wiki article */
var p = document.querySelectorAll("#bodyContent .mw-parser-output > p");
/* If the paragraph has more than 30 characters, then
* we'll pick random sentences from it with length between 30-100 characters
* Open new window with tabs containing google search request
*/
for (i = 0; i < p.length; i++) {
var t = p[i].innerText;
if (t.length < 30) continue;
t_arr = t.split(/\.[\s\n]{1}/);
for (j = 0; j < t_arr.length; j++) {
var t_snt = t_arr[Math.floor(Math.random() * t_arr.length)];
if (t_snt.length > 30 && t_snt.length < 100) {
t_snt = t_snt.replace(/\[.*\]/g, ""); //remove references from the text (like this [1])
window.open('https://www.google.com/search?q=' + encodeURIComponent(t_snt) + '+-wikiskripta+-site%3Awikiskripta.eu', '_blank');
}
}
}
});
}
else if(mwGetUserRight("editor") && mw.config.get('wgNamespaceNumber') == 6) {
var imageLink = getDirectImageUrl();
console.log(imageLink);
if(imageLink) {
$("li#t-info").after('<li id="t-copyviocheck" class="mw-list-item"><a href="#" class="dropdown-item" title="Hledání podobných souborů na internetu">Prověřit copyvio</a></li>');
$("li#t-copyviocheck a").click(function() {
window.open('https://lens.google.com/uploadbyurl?url=' + encodeURI(imageLink), '_blank');
});
}
}
// uživatelské nástroje
upravyMenu.uzivatelskeNastroje();
// pomoc uživatelům
upravyMenu.pomoc();
// vyměnit odkazy na přihlášení a založení účtu
$("#pt-createaccount").before($("#pt-login"));
// související portály
if (mw.config.get("wgNamespaceNumber") === 0 && mw.config.get("wgTitle") !== mw.config.get("wgMainPageTitle") && mw.config.get("wgAction") !== "markpatrolled") upravyMenu.portaly();
// redakční nástroje
if (mw.config.get("wgUserName") && document.getElementById("p-editorial-links")) document.getElementById("p-editorial-links").style.display = "block";
}
}
function getDirectImageUrl() {
// 1. Try the most common and specific selector first (for image files):
let imageLink = $('#file a.internal[href*="/images/"], #file a.internal[href*="/uploads/"], #file a.internal[href*="/File:"]'); //added File: possibility
if (imageLink.length) {
return imageLink.attr('href');
}
// 2. Fallback: Search within the 'file' element for an image tag.
let imageElement = $('#file img');
if (imageElement.length) {
return imageElement.attr('src');
}
// 3. Fallback: Search for any 'fullImageLink' class. Some skins use this.
imageLink = $('.fullImageLink');
if (imageLink.length) {
return imageLink.attr('href');
}
// 4. Fallback: Search for any image link in the 'bodyContent'
imageLink = $('#bodyContent a[href*="/images/"], #bodyContent a[href*="/uploads/"], #bodyContent a[href*="/File:"]');
if (imageLink.length) {
return imageLink.attr('href');
}
return false; // No direct link found
}
/**
* Start funkcí.
*/
$(upravyMenu.start());