User:Bradv/Scripts/Powerbar.js

// 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');

});

} );

}

});

});