// User:Bradv/Scripts/Powerbar.js
$(function() {
'use strict';
// Private functions
var pb = {
styleSheet: mw.util.addCSS(
'body {margin-right: 11em} ' +
'#p-personal {margin-right: 11em} ' +
'#right-navigation {margin-right: 11em} ' +
'#powerbar {position: fixed; right: 0; top: 0; bottom: 0; width: 10em; border-left: 1px solid #a7d7f9; padding: 0.5em;} ' +
'#powerbar > div {font-size: 0.75em;} ' +
'#powerbar-title {color: #444444; margin: 0 0 0.5em; font-size: 1em;} ' +
'#powerbar-contents ul {list-style: none; margin:0; } ' +
'#powerbar-contents ul li {line-height: 1.125em;} ' +
'#powerbar-contents ul li div {color: #444444; margin: 0.5em 0 0.5em 0.7em} ' +
'#powerbar-contents ul li a {display:block; padding: 0.2em 0 0.2em 1em; text-indent: -1em;} ' +
'#powerbar-fade {bottom: 0; left: 0; right: 0; height: 4em; position:absolute; background-image: linear-gradient(rgba(246, 246, 246, 0), rgba(246,246,246,1), rgba(246,246,246,1));} ' +
'#powerbar-logo {position: absolute; right: 0.5em; bottom: 0.5em; font-size: 1.1em; } ' +
'#powerbar-logo a {color: rgba(0,0,0,0.4) } ' +
'#powerbar-logo1 {font-weight: 100} ' +
'#powerbar-logo2 {font-weight: 700} '
),
show: function() {
pb.styleSheet.disabled=false;
var a = $("#pb-hide a");
$("#powerbar").removeAttr("style");
a.removeAttr("style");
},
hide: function() {
pb.styleSheet.disabled=true;
var a = $("#pb-hide a");
a.css('display', 'none');
$("#powerbar").css("display","none");
if (window.Powerbar) Powerbar.save('plugin', '');
},
init: function() {
$("#p-powerbar").remove();
$("#powerbar").remove();
var div = document.createElement("div");
div.className = "vectorMenu emptyPortlet";
div.id = "p-powerbar";
$("#p-search").before(div);
var h3 = document.createElement("h3");
div.append(h3);
var span = document.createElement("span");
h3.append(span);
span.append(document.createTextNode("Powerbar"));
var a = document.createElement("a");
a.href = "#";
$(a).click(function (e) {e.preventDefault();});
h3.append(a);
var menu=document.createElement("div");
menu.className="menu";
div.append(menu);
var ul = menu.append(document.createElement("ul"));
mw.util.addPortletLink('p-powerbar', '', 'Hide', 'pb-hide');
$("#pb-hide").click(function(e) {
e.preventDefault();
pb.hide();
});
var bar = document.createElement("div");
bar.id = "powerbar";
$("body").append(bar);
var title = document.createElement("div");
title.id = "powerbar-title";
bar.append(title);
var contents = document.createElement("div");
contents.id = "powerbar-contents";
bar.append(contents);
var fade = document.createElement("div");
fade.id = "powerbar-fade";
bar.append(fade);
var logo = document.createElement("div");
logo.id = "powerbar-logo";
fade.append(logo);
var lnk = document.createElement("a");
lnk.id = "powerbar-logo-a";
lnk.href = mw.util.getUrl("User:Bradv/Scripts/Powerbar");
logo.append(lnk);
var s1 = document.createElement("span");
s1.id = "powerbar-logo1";
s1.append(document.createTextNode("power"));
lnk.append(s1);
var s2 = document.createElement("span");
s2.id = "powerbar-logo2";
s2.append(document.createTextNode("bar"));
lnk.append(s2);
pb.hide();
},
plugin: {
setTitle: function(title) {
var t = $("#powerbar-title");
t.empty();
t.append(document.createTextNode(title));
},
contents: {
clear: function() {
$("#powerbar-contents").empty();
var ul = document.createElement("ul");
$("#powerbar-contents").append(ul);
},
addElement: function(element) {
var li = document.createElement("li");
li.append(element);
$("#powerbar-contents ul").append(li);
},
addLabel: function(text) {
var lbl = document.createElement("div");
lbl.append(document.createTextNode(text));
this.addElement(lbl);
},
addLink: function(text, url, onclick) {
var a = document.createElement("a");
a.append(document.createTextNode(text));
a.href=url;
if (onclick) { $(a).click(onclick); }
this.addElement(a);
}
}
}
};
pb.init();
//Public functions
window.Powerbar = {
save: function(key, value) {
window.localStorage.setItem("powerbar." + key, value);
},
retrieve: function(key, value) {
return window.localStorage.getItem("powerbar." + key);
},
createPlugin: function(params) {
var pid = "pb-" + params.id;
mw.util.addPortletLink('p-powerbar', '', params.title, pid, params.tooltip, '', '#pb-hide');
var link = $("#" + pid);
link.click(function(e) {
e.preventDefault();
clearTimeout(Powerbar.timer);
Powerbar.save("plugin", pid);
pb.plugin.setTitle(params.title);
pb.plugin.contents.clear();
pb.plugin.contents.addLabel("Loading...");
pb.show();
pb.callback = function() {
clearTimeout(Powerbar.timer);
params.callback(pb.plugin.contents);
Powerbar.timer = setTimeout(pb.callback, params.refresh*1000);
};
pb.callback();
});
if (this.retrieve("plugin") == pid) {
link.click();
}
},
};
// AFC Plugin
Powerbar.createPlugin({
id: 'afc-old',
title: 'Articles for Creation - Backlog',
tooltip: 'Browse oldest Articles for Creation submissions',
refresh: 10,
callback: function(contents) {
var api = new mw.Api();
api.get( {
action: 'query',
format: 'json',
list: 'categorymembers',
cmtitle: 'Category:Pending AfC submissions',
cmprop: 'title',
cmnamespace: '118|2',
cmlimit: 50,
cmsort: 'timestamp',
cmdir: 'ascending',
} ).done( function(data) {
contents.clear();
data.query.categorymembers.forEach(function (item) {
contents.addLink(item.title, mw.util.getUrl(item.title));
});
} );
}
});
Powerbar.createPlugin({
id: 'afc-new',
title: 'Articles for Creation - New',
tooltip: 'Browse newest Articles for Creation submissions',
refresh: 10,
callback: function(contents) {
var api = new mw.Api();
api.get( {
action: 'query',
format: 'json',
list: 'categorymembers',
cmtitle: 'Category:Pending AfC submissions',
cmprop: 'title',
cmnamespace: '118|2',
cmlimit: 50,
cmsort: 'timestamp',
cmdir: 'descending',
} ).done( function(data) {
contents.clear();
data.query.categorymembers.forEach(function (item) {
contents.addLink(item.title, mw.util.getUrl(item.title));
});
} );
}
});
//NPP Plugin
Powerbar.createPlugin({
id: 'npp-old',
title: 'New Page Patrol - Backlog',
tooltip: 'Browse oldest unreviewed new pages',
refresh: 10,
callback: function(contents) {
var api = new mw.Api();
api.get( {
action: 'pagetriagelist',
format: 'json',
showunreviewed: true,
dir: 'oldestfirst',
namespace: 1,
limit: 50,
} ).done( function(data) {
contents.clear();
data.pagetriagelist.pages.forEach(function (item) {
contents.addLink(item.title, mw.util.getUrl(item.title)+'?showcurationtoolbar=1');
});
} );
}
});
Powerbar.createPlugin({
id: 'npp-new',
title: 'New Page Patrol - New',
tooltip: 'Browse unreviewed new pages',
refresh: 10,
callback: function(contents) {
var api = new mw.Api();
api.get( {
action: 'pagetriagelist',
format: 'json',
showunreviewed: true,
dir: 'newestfirst',
namespace: 1,
limit: 50,
} ).done( function(data) {
contents.clear();
data.pagetriagelist.pages.forEach(function (item) {
contents.addLink(item.title, mw.util.getUrl(item.title)+'?showcurationtoolbar=1');
});
} );
}
});
});