Użytkownik:SH3VEK/nplus-linki.js: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
(JS)
 
M (Więcej opcji i konfiguracji, bugfix z kontenerem)
 
Linia 1: Linia 1:
/* <nowiki>
// Linki do edycji i historii strony na OZ
* Linki do akcji na OZ
// Wystarczy przetrzymać kliknięcie myszką na 1/4 sekundy, aby linki się pojawiły.
* Wystarczy przetrzymać kliknięcie myszką na 1/4 sekundy (konfigurowalne), aby linki się pojawiły.
mw.loader.using(["jquery", "oojs-ui"], function() {
* Można skonfigurować te przyciski następującym sposobem
var to = 250,
mw.config.set("npPrzyciskiOZ", [
{
title: "Nazwa przycisku, widoczna po wskazaniu myszą",
icon: "Nazwa ikony (trudno znaleźć konkretną, trzeba pokombinować)",
url: function(p) {return "Adres"}
rights: "Uprawnienia, nazwy muszą być zgodne z zapisanymi w 'Specjalna:Uprawnienia grup użytkowników'"
}
]);
* Konfiguracja musi się znaleźć PRZED importem skryptu.
* Autor: SH3VEK
*/
if (mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges") mw.loader.using(["jquery", "oojs-ui"], function() {
var to = mw.config.get("npLongClick", 250),
uTimer = 0,
uTimer = 0,
linkTarget = "a.mw-changeslist-title";
linkTarget = mw.config.get("npLinkOZ", "a.mw-changeslist-title");
var przyciski = [
var btnEdit = new OO.ui.ButtonWidget({icon: "edit", title: "Edytuj"}),
// Tutaj mogą pojawić się dowolne akcje, których przyciski będą widoczne, jeśli użytkownik posiada dane uprawnienia
btnHistory = new OO.ui.ButtonWidget({icon: "menu", title: "Historia strony"});
{title: "Edytuj", icon: "edit", url: function(p) {return mw.util.getUrl(p, {action: "edit"})}, rights: "edit"},
var btnGroup = new OO.ui.ButtonGroupWidget({items: [btnEdit, btnHistory]});
{title: "Przenieś", icon: "move", url: function(p) {return mw.util.getUrl("Special:MovePage/" + p)}, rights: "move"},
{title: "Usuń", icon: "trash", url: function(p) {return mw.util.getUrl(p, {action: "delete"})}, rights: "delete"}
];
var pp = mw.config.get("npPrzyciskiOZ");
if (pp !== null && $.isArray(pp)) przyciski = przyciski.concat(pp);
przyciski.forEach(function(v) {v.ui = new OO.ui.ButtonWidget({icon: v.icon, title: v.title})});
var btnGroup = new OO.ui.ButtonGroupWidget();
var pu = new OO.ui.PopupWidget({
var pu = new OO.ui.PopupWidget({
$content: btnGroup.$element,
$content: btnGroup.$element,
$container: mw.util.$content,
padded: false,
padded: false,
align: "forwards",
align: "forwards",
position: "before",
position: "before",
autoClose: true,
autoClose: true,
width: 100
width: null,
}),
}),
updatePopup = function(e) {
updatePopup = function(e) {
Linia 20: Linia 41:
pu.toggle(false);
pu.toggle(false);
pu.$floatableContainer = $(e.target);
pu.$floatableContainer = $(e.target);
btnEdit.setHref(mw.util.getUrl(e.target.title, {action: "edit"}));
przyciski.forEach(function(v) {v.ui.setHref(v.url(e.target.title))});
pu.position();
btnHistory.setHref(mw.util.getUrl(e.target.title, {action: "history"}));
pu.computePosition();
//pu.computePosition();
pu.toggle(true);
pu.toggle(true);
};
};
btnGroup.$element.css("font-size", "14px");
$(document.body).append(pu.$element);
$(document.body).append(pu.$element);
mw.user.getRights().then(function(r) {
przyciski = przyciski.filter(function(v) {return r.indexOf(v.rights) != -1});
btnGroup.addItems(przyciski.map(function(v) {return v.ui}));
});
mw.util.$content
mw.util.$content
.on("mousedown", linkTarget, function(e) {uTimer = setTimeout(function() {updatePopup(e)}, to)})
.on("mousedown", linkTarget, function(e) {uTimer = setTimeout(function() {updatePopup(e)}, to)})

Aktualna wersja na dzień 22:53, 14 kwi 2019

/* <nowiki>
 * Linki do akcji na OZ
 * Wystarczy przetrzymać kliknięcie myszką na 1/4 sekundy (konfigurowalne), aby linki się pojawiły.
 * Można skonfigurować te przyciski następującym sposobem
	mw.config.set("npPrzyciskiOZ", [
		{
			title: "Nazwa przycisku, widoczna po wskazaniu myszą",
			icon: "Nazwa ikony (trudno znaleźć konkretną, trzeba pokombinować)",
			url: function(p) {return "Adres"}
			rights: "Uprawnienia, nazwy muszą być zgodne z zapisanymi w 'Specjalna:Uprawnienia grup użytkowników'"
		}
	]);
 * Konfiguracja musi się znaleźć PRZED importem skryptu.
 * Autor: SH3VEK
 */
if (mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges") mw.loader.using(["jquery", "oojs-ui"], function() {
	var to = mw.config.get("npLongClick", 250),
		uTimer = 0,
		linkTarget = mw.config.get("npLinkOZ", "a.mw-changeslist-title");
	var przyciski = [
		// Tutaj mogą pojawić się dowolne akcje, których przyciski będą widoczne, jeśli użytkownik posiada dane uprawnienia
		{title: "Edytuj", icon: "edit", url: function(p) {return mw.util.getUrl(p, {action: "edit"})}, rights: "edit"},
		{title: "Przenieś", icon: "move", url: function(p) {return mw.util.getUrl("Special:MovePage/" + p)}, rights: "move"},
		{title: "Usuń", icon: "trash", url: function(p) {return mw.util.getUrl(p, {action: "delete"})}, rights: "delete"}
	];
	var pp = mw.config.get("npPrzyciskiOZ");
	if (pp !== null && $.isArray(pp)) przyciski = przyciski.concat(pp);
	przyciski.forEach(function(v) {v.ui = new OO.ui.ButtonWidget({icon: v.icon, title: v.title})});
	var btnGroup = new OO.ui.ButtonGroupWidget();
	var pu = new OO.ui.PopupWidget({
			$content: btnGroup.$element,
			$container: mw.util.$content,
			padded: false,
			align: "forwards",
			position: "before",
			autoClose: true,
			width: null,
		}),
		updatePopup = function(e) {
			uTimer = 0;
			pu.toggle(false);
			pu.$floatableContainer = $(e.target);
			przyciski.forEach(function(v) {v.ui.setHref(v.url(e.target.title))});
			pu.position();
			//pu.computePosition();
			pu.toggle(true);
		};
	
	btnGroup.$element.css("font-size", "14px");
	$(document.body).append(pu.$element);
	mw.user.getRights().then(function(r) {
		przyciski = przyciski.filter(function(v) {return r.indexOf(v.rights) != -1});
		btnGroup.addItems(przyciski.map(function(v) {return v.ui}));
	});
	mw.util.$content
		.on("mousedown", linkTarget, function(e) {uTimer = setTimeout(function() {updatePopup(e)}, to)})
		.on("click", linkTarget, function(e) {
			if (uTimer === 0) {
				e.preventDefault();
				pu.toggle(true);
				return;
			}
			clearTimeout(uTimer);
			uTimer = 0;
		});
});