summaryrefslogtreecommitdiff
path: root/src/ui/Prompts.js
diff options
context:
space:
mode:
authorhackademix2018-07-01 01:01:23 +0200
committerhackademix2018-07-01 01:01:23 +0200
commiteceae7187a6f0e9510bc1165f6977256b87f490f (patch)
treed943f1ec73c09efa70954dcedb55eac82a726148 /src/ui/Prompts.js
downloadnoscript-eceae7187a6f0e9510bc1165f6977256b87f490f.tar.gz
noscript-eceae7187a6f0e9510bc1165f6977256b87f490f.tar.xz
noscript-eceae7187a6f0e9510bc1165f6977256b87f490f.zip
Initial commit starting at version 10.1.8.3rc4.
Diffstat (limited to 'src/ui/Prompts.js')
-rw-r--r--src/ui/Prompts.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/ui/Prompts.js b/src/ui/Prompts.js
new file mode 100644
index 0000000..03ea9ee
--- /dev/null
+++ b/src/ui/Prompts.js
@@ -0,0 +1,101 @@
+var Prompts = (() => {
+
+
+ var promptData;
+ var backlog = [];
+ class WindowManager {
+ async open(data) {
+ promptData = data;
+ this.close();
+ this.currentWindow = await browser.windows.create({
+ url: browser.extension.getURL("ui/prompt.html"),
+ type: "panel",
+ allowScriptsToClose: true,
+ // titlePreface: "NoScript ",
+ width: data.features.width,
+ height: data.features.height,
+ });
+ }
+ async close() {
+ if (this.currentWindow) {
+ try {
+ await browser.windows.remove(this.currentWindow.id);
+ } catch (e) {
+ debug(e);
+ }
+ this.currentWindow = null;
+ }
+ }
+
+ async focus() {
+ if (this.currentWindow) {
+ try {
+ await browser.windows.update(this.currentWindow.id,
+ {
+ focused: true,
+ }
+ );
+ } catch (e) {
+ error(e, "Focusing popup window");
+ }
+ }
+ }
+ }
+
+ var winMan = new WindowManager();
+ var Prompts = {
+ DEFAULTS: {
+ title: "",
+ message: "Proceed?",
+ options: [],
+ checks: [],
+ buttons: [_("Ok"), _("Cancel")],
+ multiple: "close", // or "queue", or "focus"
+ width: 400,
+ height: 300,
+ },
+ async prompt(features) {
+ features = Object.assign({}, this.DEFAULTS, features || {});
+ return new Promise((resolve, reject) => {
+ let data = {
+ features,
+ result: {
+ button: -1,
+ checks: [],
+ option: null,
+ },
+ done() {
+ this.done = () => {};
+ winMan.close();
+ resolve(this.result);
+ if (backlog.length) {
+ winMan.open(backlog.shift());
+ } else {
+ promptData = null;
+ }
+ }
+ };
+ if (promptData) {
+ backlog.push(data);
+ switch(promptData.features.multiple) {
+ case "focus":
+ winMan.focus();
+ case "queue":
+ break;
+ default:
+ promptData.done();
+ }
+ } else {
+ winMan.open(data);
+ }
+ });
+ },
+
+ get promptData() {
+ return promptData;
+ }
+ }
+
+ return Prompts;
+
+})();