From c42a263968d06d1722692bd77cf09e738006977a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=A1vio=20da=20Silva=20Rodrigues=20Almeida?= Date: Mon, 31 Oct 2016 19:16:39 -0200 Subject: [PATCH] WebExtension example of some windows API functions. (#123) --- window-manipulator/README.md | 11 +++++ window-manipulator/icons/window.png | Bin 0 -> 1274 bytes window-manipulator/icons/window19.png | Bin 0 -> 683 bytes window-manipulator/icons/window38.png | Bin 0 -> 1460 bytes window-manipulator/icons/window@2x.png | Bin 0 -> 1719 bytes window-manipulator/manifest.json | 20 +++++++++ window-manipulator/window.css | 12 +++++ window-manipulator/window.html | 31 +++++++++++++ window-manipulator/window.js | 58 +++++++++++++++++++++++++ 9 files changed, 132 insertions(+) create mode 100644 window-manipulator/README.md create mode 100644 window-manipulator/icons/window.png create mode 100644 window-manipulator/icons/window19.png create mode 100644 window-manipulator/icons/window38.png create mode 100644 window-manipulator/icons/window@2x.png create mode 100644 window-manipulator/manifest.json create mode 100644 window-manipulator/window.css create mode 100644 window-manipulator/window.html create mode 100644 window-manipulator/window.js diff --git a/window-manipulator/README.md b/window-manipulator/README.md new file mode 100644 index 0000000..46d37cf --- /dev/null +++ b/window-manipulator/README.md @@ -0,0 +1,11 @@ +# Window manipulator + +## What it does + +This extension includes a browser action with a popup specified as "window.html". + +The popup lets the user perform various simple operations using the windows API. + +# What it shows + +Demonstration of various windows API functions. diff --git a/window-manipulator/icons/window.png b/window-manipulator/icons/window.png new file mode 100644 index 0000000000000000000000000000000000000000..e707a1124a0eefb7b5186a0a23646b5b7edc65fa GIT binary patch literal 1274 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 L5l;V;#ufh$-b4iZ literal 0 HcmV?d00001 diff --git a/window-manipulator/manifest.json b/window-manipulator/manifest.json new file mode 100644 index 0000000..5963b9b --- /dev/null +++ b/window-manipulator/manifest.json @@ -0,0 +1,20 @@ +{ + "browser_action": { + "browser_style": true, + "default_title": "Window manipulator", + "default_popup": "window.html", + "default_icon": { + "19": "icons/window19.png", + "38": "icons/window38.png" + } + }, + "icons": { + "48": "icons/window.png", + "96": "icons/window@2x.png" + }, + "description": "A list of methods you can perform on a window.", + "homepage_url": "https://github.com/mdn/webextensions-examples/tree/master/window-manipulator", + "manifest_version": 2, + "name": "Window manipulator", + "version": "1.0" +} diff --git a/window-manipulator/window.css b/window-manipulator/window.css new file mode 100644 index 0000000..959491f --- /dev/null +++ b/window-manipulator/window.css @@ -0,0 +1,12 @@ +html, body { + width: 350px; +} + +a { + margin: 10px; + display: inline-block; +} + +.panel { + margin: 5px; +} diff --git a/window-manipulator/window.html b/window-manipulator/window.html new file mode 100644 index 0000000..8faa3ad --- /dev/null +++ b/window-manipulator/window.html @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/window-manipulator/window.js b/window-manipulator/window.js new file mode 100644 index 0000000..07437b2 --- /dev/null +++ b/window-manipulator/window.js @@ -0,0 +1,58 @@ +document.addEventListener("click", (e) => { + + function callOnCurrentWindow(callback){ + chrome.windows.getCurrent((currentWindow) => { + callback(currentWindow); + }); + } + + if (e.target.id === "window-update-size_768") { + callOnCurrentWindow((currentWindow) => { + var updateInfo = { + width: 768, + height: 1024 + }; + + chrome.windows.update(currentWindow.id, updateInfo); + }); + } + + if (e.target.id === "window-update-minimize") { + callOnCurrentWindow((currentWindow) => { + var updateInfo = { + state: "minimized" + }; + + chrome.windows.update(currentWindow.id, updateInfo); + }); + } + + else if (e.target.id === "window-create-incognito") { + var createData = { + incognito: true, + }; + chrome.windows.create(createData, () => { + console.log("The incognito window has been created"); + }); + } + + else if (e.target.id === "window-remove") { + callOnCurrentWindow((currentWindow) => { + chrome.windows.remove(currentWindow.id); + }); + } + + else if (e.target.id === "window-resize-all") { + chrome.windows.getAll((windows) => { + var updateInfo = { + width: 1024, + height: 768 + }; + for (var item of windows) { + chrome.windows.update(item.id, updateInfo); + } + }); + } + + e.preventDefault(); +});