User:Dagger/Widget drafts/API preferences.js
From Guild Wars 2 Wiki
Jump to navigationJump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
// This should be in the HTML part of a widget, but since I don't have widget edit permissions...
$(function() {
if (!$('#api-preferences').length) return;
var fieldset = $('<fieldset/>');
fieldset.append($('<legend>API settings</legend>'));
fieldset.append($('<label for="api-key">Key: </label>'));
var keyInput = $('<input/>', {
id: "api-key",
value: localStorage.getItem("api-key"),
style: "width: 40em;",
});
fieldset.append(keyInput);
fieldset.append($('<button id="api-setkey">Save</button>'));
fieldset.append($('<br/>'));
fieldset.append("The key must have the following permissions: account, inventories, characters, wallet, unlocks, progression.");
$('#api-preferences').append(fieldset);
});
// And this shouldn't be in any of the widgets.
$(function() {
// Add link to preferences.
mw.util.addPortletLink("p-navigation",
mw.util.wikiGetlink("User:Dagger/API settings"),
"Set an API key", "t-apisettings", null, null, null);
});
// Aha. Code that should be in the widget.
$(function() {
$("button#api-setkey").on("click", function(evt) {
var key = $("#api-key").val()
if (!key) {
localStorage.removeItem("api-key");
localStorage.removeItem("api-key-permissions");
for (var key in localStorage)
if (key.match(/^api-cache-/)) localStorage.removeItem(key);
alert("API key and local cache cleared.");
} else {
evt.target.setAttribute("disabled", "true");
$.getJSON("https://api.guildwars2.com/v2/tokeninfo?access_token="+key).then(function(info) {
var perms = info.permissions;
localStorage.setItem("api-key", $("#api-key").val());
localStorage.setItem("api-key-permissions", JSON.stringify(perms));
var required = ["account", "inventories", "characters", "wallet", "unlocks", "progression"];
if (!required.every(function(p) { return perms.indexOf(p) != -1 })) {
alert("Some of the required permissions are missing from this key. Some features will fail to work.");
} else {
alert("Key saved.");
}
evt.target.removeAttribute("disabled");
}, function onFail(f) {
alert("Couldn't verify that the API key was valid.");
evt.target.removeAttribute("disabled");
if (console && console.log) console.log("Error", f);
});
}
});
});