From cd9711b19c707fa8ccb74e47f9e6f83ecddd93fa Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Thu, 13 Oct 2022 11:09:24 -0700 Subject: [PATCH] Squash --- LICENSE | 201 ++++++++++++++++++ background.js | 48 +++++ icons/asana.png | Bin 0 -> 423 bytes manifest.json | 29 +++ .../90c59ad4583546eea82d-1.1.xpi | Bin 0 -> 9077 bytes 5 files changed, 278 insertions(+) create mode 100644 LICENSE create mode 100644 background.js create mode 100644 icons/asana.png create mode 100644 manifest.json create mode 100644 web-ext-artifacts/90c59ad4583546eea82d-1.1.xpi diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/background.js b/background.js new file mode 100644 index 0000000..120a13a --- /dev/null +++ b/background.js @@ -0,0 +1,48 @@ +function handleClick() { + browser.tabs.query({currentWindow: true, active: true}).then(handleTabs); +} + +function handleTabs(tabs) { + if (tabs.length != 1) { + return; + } + + handleTab(tabs[0]); +} + +function handleTab(tab) { + console.log(tab.title, tab.url); + const req = { + data: { + workspace: browser.storage.sync.get('workspace'), + assignee: browser.storage.sync.get('assignee'), + name: tab.title, + notes: tab.url, + }, + }; + + console.log('-->', req); + + console.log(browser.tabs); + browser.tabs.captureTab(tab.id).then(img => console.log(img)); + + fetch( + 'https://app.asana.com/api/1.0/tasks', + { + method: 'POST', + headers: { + 'Authorization': `Bearer ${browser.storage.sync.get('token')}`, + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + body: JSON.stringify(req), + }, + ).then(resp => { + console.log('<--', resp); + resp.json().then(js => console.log('<--', js)); + + browser.tabs.remove([tab.id]); + }); +} + +browser.browserAction.onClicked.addListener(handleClick); diff --git a/icons/asana.png b/icons/asana.png new file mode 100644 index 0000000000000000000000000000000000000000..e47a612b4f667fc69838215576e036414b1116b0 GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-segQrqu0Z;IM#lTBtPfdP?+Xgv zXJ&rL%mj*j1d0IJ5OJUgP!^~xH5DihLYbMLva>;A|34chJOx?n>Eakt5%+fT?YzSZ0xpS)5(YO4 ztLFaye{q#im(kTzZ=AKiDn1vLUz3`C=l|1_mxKj2ZRg6DxRc{_U~ZD&IthvY4;_!J zyx?#mL_;BtS6O&<=!X55SzYGkOCIT-J*lF_(pt{oXy$5(E9L2j`VV%Ohy79856$u$Jgm6EP1gpqtHkA+h(aX<%iXI3jS)!Fi8Kgz2Nb{SVT2!>S`5*J(p}P zxl4n0iF+_ip1L5s`M`t;4qx&YHb" + ], + + "browser_action": { + "default_icon": "icons/asana.png", + "default_title": "Quick Asana" + }, + + "background": { + "scripts": ["background.js"] + }, + + "browser_specific_settings": { + "gecko": { + "id": "{073d8528-4b24-11ed-9b73-c71d3da4ab37}" + } + } +} diff --git a/web-ext-artifacts/90c59ad4583546eea82d-1.1.xpi b/web-ext-artifacts/90c59ad4583546eea82d-1.1.xpi new file mode 100644 index 0000000000000000000000000000000000000000..9c3da68009a9452e9587a5ce720806f399cf403b GIT binary patch literal 9077 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