From 1830409b204b22225b54da02e43a4dc6c52377f2 Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Sat, 11 Mar 2023 03:48:01 +0800
Subject: [PATCH 01/12] chore: fix dev compatibility
---
src/page/main.js | 3 +--
src/popup/main.js | 5 ++---
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/src/page/main.js b/src/page/main.js
index 0c38b58f..66ad9d11 100644
--- a/src/page/main.js
+++ b/src/page/main.js
@@ -6,8 +6,7 @@ import "./cm.css";
if (import.meta.env.DEV) { // vite feat that only import in dev mode
const modules = import.meta.glob("../shared/dev.js", {eager: true});
- // eslint-disable-next-line no-global-assign
- browser = modules["../shared/dev.js"].browser;
+ window.browser = modules["../shared/dev.js"].browser;
console.info("DEV-ENV", import.meta.env, modules, browser);
}
diff --git a/src/popup/main.js b/src/popup/main.js
index 23e0ab93..03752163 100644
--- a/src/popup/main.js
+++ b/src/popup/main.js
@@ -5,10 +5,9 @@ import App from "./App.svelte";
if (import.meta.env.DEV) { // vite feat that only import in dev mode
const modules = import.meta.glob("../shared/dev.js", {eager: true});
- // eslint-disable-next-line no-global-assign
- browser = modules["../shared/dev.js"].browser;
+ window.browser = modules["../shared/dev.js"].browser;
console.info("DEV-ENV", import.meta.env, modules, browser);
- // macos popup style
+ // macos popup simulation
const style = document.createElement("style");
style.textContent = `
body {
From 2d37a89f51a9915d2dde84b600579b0a6344e927 Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Sat, 11 Mar 2023 03:05:32 +0800
Subject: [PATCH 02/12] feat: add detail button for items in popup
---
src/popup/App.svelte | 7 +++++-
src/popup/Components/PopupItem.svelte | 35 ++++++++++++++++++++++-----
2 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/src/popup/App.svelte b/src/popup/App.svelte
index ca30f696..1e2fedb2 100644
--- a/src/popup/App.svelte
+++ b/src/popup/App.svelte
@@ -123,6 +123,10 @@
});
}
+ function detailItem(item) {
+
+ }
+
function checkForUpdates() {
disabled = true;
initError = false;
@@ -562,7 +566,8 @@
subframe={item.subframe}
type={item.type}
request={!!item.request}
- on:click={() => toggleItem(item)}
+ toggleItem={() => toggleItem(item)}
+ detailItem={() => detailItem(item)}
/>
{/each}
diff --git a/src/popup/Components/PopupItem.svelte b/src/popup/Components/PopupItem.svelte
index 2a3e64a3..5f3584a3 100644
--- a/src/popup/Components/PopupItem.svelte
+++ b/src/popup/Components/PopupItem.svelte
@@ -7,16 +7,21 @@
export let type;
export let subframe;
export let request = false;
+ export let toggleItem;
+ export let detailItem;
-
-
{name}
- {#if subframe}
SUB
{/if}
-
+
+
+
+
{name}
+ {#if subframe}
SUB
{/if}
+
+
ⓘ
\ No newline at end of file
From 9bdbc2c99580f918d2e1129915bf571d39a1dbca Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Sat, 11 Mar 2023 10:51:38 +0800
Subject: [PATCH 06/12] refactor: migrating `InstallView` to `DetailView`
---
src/popup/App.svelte | 60 +++---
src/popup/Components/Views/InstallView.svelte | 180 ------------------
2 files changed, 22 insertions(+), 218 deletions(-)
delete mode 100644 src/popup/Components/Views/InstallView.svelte
diff --git a/src/popup/App.svelte b/src/popup/App.svelte
index 133688d9..4a7ea9c2 100644
--- a/src/popup/App.svelte
+++ b/src/popup/App.svelte
@@ -6,7 +6,6 @@
import PopupItem from "./Components/PopupItem.svelte";
import View from "./Components/View.svelte";
import UpdateView from "./Components/Views/UpdateView.svelte";
- import InstallView from "./Components/Views/InstallView.svelte";
import DetailView from "./Components/Views/DetailView.svelte";
import AllItemsView from "./Components/Views/AllItemsView.svelte";
import iconOpen from "../shared/img/icon-open.svg?raw";
@@ -32,15 +31,12 @@
let header;
let warn;
let err;
+ let currentTabItem;
let scriptChecking;
let scriptInstalled;
let showInstallPrompt;
- let showInstall;
- let installUserscript; // url, content
- let installViewUserscript; // metadata
- let installViewUserscriptError;
- let showDetail;
- let showDetailTitle;
+ let showDetailView;
+ let detailViewTitle;
let detailViewItem;
let showAll;
let allItems = [];
@@ -129,8 +125,8 @@
function detailItem(item) {
detailViewItem = item;
- showDetailTitle = "Userscript Detail";
- showDetail = true;
+ detailViewTitle = "Userscript Detail";
+ showDetailView = true;
}
function checkForUpdates() {
@@ -413,18 +409,18 @@
}
const content = await res.text();
// caching script data
- installUserscript = {url: currentTab.url, content};
+ currentTabItem = {url: currentTab.url, content};
// send native swift a message, parse metadata and check if installed
const response = await browser.runtime.sendNativeMessage({name: "POPUP_INSTALL_CHECK", content});
console.info("POPUP_INSTALL_CHECK:", response);
if (response.error) {
console.error(`Error checking .user.js url: ${response.error}`);
// errorNotification = response.error;
- installViewUserscriptError = response.error;
+ currentTabItem.error = response.error;
} else {
scriptInstalled = response.installed;
- // caching script metadata
- installViewUserscript = response.metadata;
+ currentTabItem.installed = response.installed;
+ currentTabItem.metadata = response.metadata;
// the response will contain the string to display
// ex: {success: "Click to install"}
showInstallPrompt = response.success;
@@ -432,9 +428,11 @@
scriptChecking = false;
}
- async function showInstallView() {
+ async function installItem() {
+ detailViewItem = currentTabItem;
+ detailViewTitle = "Install Userscript";
// show the install view
- showInstall = true;
+ showDetailView = true;
}
async function installConfirm() {
@@ -446,13 +444,13 @@
// show loading element
loading = true;
// go back to main view
- showInstall = false;
+ showDetailView = false;
// double check before send install message
- if (!installUserscript || !installUserscript.content) {
+ if (!currentTabItem) {
errorNotification = "Install failed: userscript missing";
}
const currentTab = await browser.tabs.getCurrent();
- if (currentTab.url !== installUserscript.url) {
+ if (currentTab.url !== currentTabItem.url) {
errorNotification = "Install failed: tab changed unexpectedly";
}
if (errorNotification) {
@@ -463,7 +461,7 @@
// send native swift a message, which will start the install process
const response = await browser.runtime.sendNativeMessage({
name: "POPUP_INSTALL_SCRIPT",
- content: installUserscript.content
+ content: currentTabItem.content
});
if (response.error) {
errorNotification = response.error;
@@ -538,7 +536,7 @@
{showInstallPrompt}
{:else}
{scriptInstalled ? "Installed" : "Detected"}:
- {showInstallPrompt}
+ {showInstallPrompt}
{/if}
{/if}
@@ -611,30 +609,16 @@
{updates}
/>
-{:else if showInstall}
+{:else if showDetailView}
showInstall = false}
- showLoaderOnDisabled={true}
- >
- showInstall = false}
- installConfirmClick={installConfirm}
- />
-
-{:else if showDetail}
- showDetail = false}
+ closeClick={() => showDetailView = false}
showLoaderOnDisabled={true}
>
showDetail = false}
+ cancelClick={() => showDetailView = false}
installConfirmClick={installConfirm}
updateConfirmClick={updateConfirm}
deleteConfirmClick={deleteConfirm}
diff --git a/src/popup/Components/Views/InstallView.svelte b/src/popup/Components/Views/InstallView.svelte
deleted file mode 100644
index e1dca2cb..00000000
--- a/src/popup/Components/Views/InstallView.svelte
+++ /dev/null
@@ -1,180 +0,0 @@
-
-
-
- {#if installError}
-
- {@html iconError}
-
Couldn't install userscript
-
{installError}
-
- {:else if userscript}
-
- - {userscript.name}
- {#if userscript.description}
- - {userscript.description}
- {/if}
- {#if userscript.match}
- -
-
@match
- {#each userscript.match as match}
- {match}
- {/each}
-
- {/if}
- {#if userscript.include}
- -
-
@include
- {#each userscript.include as include}
- {include}
- {/each}
-
- {/if}
- {#if userscript.require}
- -
-
@require
- {#each userscript.require as require}
- {require}
- {/each}
-
- {/if}
- {#if userscript.grant}
- -
-
@grant
- {#each userscript.grant as grant}
- {grant}
- {/each}
-
- {/if}
-
-
-
{@html iconWarn}
-
Be sure you trust the author before installing. Nefarious code can exploit your security and privacy.
-
-
-
-
-
- {/if}
-
-
-
From fc9c7e63d856e413718a454c14d64bcc769d4866 Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Sat, 11 Mar 2023 12:16:06 +0800
Subject: [PATCH 07/12] style: adjust buttons
---
src/popup/Components/Views/DetailView.svelte | 41 ++++++++++----------
1 file changed, 20 insertions(+), 21 deletions(-)
diff --git a/src/popup/Components/Views/DetailView.svelte b/src/popup/Components/Views/DetailView.svelte
index e61fbfe4..1c24bb46 100644
--- a/src/popup/Components/Views/DetailView.svelte
+++ b/src/popup/Components/Views/DetailView.svelte
@@ -18,8 +18,6 @@
];
let errormsg = itemdata.error;
let metadata = itemdata.metadata;
- let variableButton;
- let variableButtonClick;
function metadataInit() {
if (metadata) return;
@@ -39,18 +37,6 @@
if (!metadata) {
metadataInit();
}
- if (itemdata.update) {
- variableButton = "Update";
- variableButtonClick = updateConfirmClick;
- }
- if (itemdata.filename) {
- variableButton = "Delete";
- variableButtonClick = deleteConfirmClick;
- }
- if (itemdata.url) {
- variableButton = "Install";
- variableButtonClick = installConfirmClick;
- }
}
@@ -81,7 +67,7 @@
{/if}
{/each}
- {#if !itemdata.filename}
+ {#if itemdata.url}
{@html iconWarn}
Be sure you trust the author before installing. Nefarious code can exploit your security and privacy.
@@ -91,9 +77,21 @@
-
+ {#if itemdata.url}
+
+ {/if}
+ {#if itemdata.filename}
+
+ {/if}
+ {#if itemdata.update}
+
+ {/if}
{/if}
@@ -201,19 +199,20 @@
background-color: #ffffffa6; /* -text-color-secondary */
border-radius: var(--border-radius);
color: var(--color-bg-primary);
+ font-weight: 600;
flex-grow: 1;
height: 2rem;
}
- button.Install {
+ button.install {
background-color: var(--color-blue);
}
- button.Update {
+ button.update {
background-color: var(--color-yellow);
}
- button.Delete {
+ button.delete {
background-color: var(--color-red);
}
\ No newline at end of file
From 1167f5d272a49beb054ef0b3ef40f990922e8f75 Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Sat, 11 Mar 2023 13:07:08 +0800
Subject: [PATCH 08/12] style: adjust media query
---
src/popup/Components/PopupItem.svelte | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/popup/Components/PopupItem.svelte b/src/popup/Components/PopupItem.svelte
index dc942f0c..df2b1175 100644
--- a/src/popup/Components/PopupItem.svelte
+++ b/src/popup/Components/PopupItem.svelte
@@ -50,7 +50,7 @@
}
}
- @media not (hover: hover) {
+ @media (hover: none) {
.item .more {
border-left: .1rem solid rgb(255 255 255 / 0.075);
}
From aceee2812fbf55617bff2170bf5c315345ef57db Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Sat, 11 Mar 2023 22:31:49 +0800
Subject: [PATCH 09/12] feat: add `DetailView` for `AllItemsView`
---
src/popup/App.svelte | 3 ++-
src/popup/Components/Views/AllItemsView.svelte | 6 ++++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/popup/App.svelte b/src/popup/App.svelte
index 4a7ea9c2..c1903c00 100644
--- a/src/popup/App.svelte
+++ b/src/popup/App.svelte
@@ -636,7 +636,8 @@
>
{/if}
diff --git a/src/popup/Components/Views/AllItemsView.svelte b/src/popup/Components/Views/AllItemsView.svelte
index 6906c6d0..ca784fce 100644
--- a/src/popup/Components/Views/AllItemsView.svelte
+++ b/src/popup/Components/Views/AllItemsView.svelte
@@ -2,7 +2,8 @@
import PopupItem from "../PopupItem.svelte";
export let allItems = [];
- export let allItemsToggleItem;
+ export let toggleItem;
+ export let detailItem;
let disabled;
let rowColorsAll;
@@ -27,7 +28,8 @@
subframe={item.subframe}
type={item.type}
request={!!item.request}
- on:click={() => allItemsToggleItem(item)}
+ toggleItem={() => toggleItem(item)}
+ detailItem={() => detailItem(item)}
/>
{/each}
From 357dc87cc1fc61338ca45609f9d8cfc6f2f0d72c Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Sat, 11 Mar 2023 22:42:05 +0800
Subject: [PATCH 10/12] chore(dev.js): reuse metadata
---
src/shared/dev.js | 30 +++++++++++++++++++++---------
1 file changed, 21 insertions(+), 9 deletions(-)
diff --git a/src/shared/dev.js b/src/shared/dev.js
index 5bf75d5d..4a052791 100644
--- a/src/shared/dev.js
+++ b/src/shared/dev.js
@@ -55,6 +55,25 @@ function generateFile(type, updates = false, longName = false, request = false)
};
}
+function generateMetadata(type, updates = false, longName = false) {
+ const metadata = {
+ description: "This userscript re-implements the \"View Image\" and \"Search by image\" buttons into google images.",
+ grant: ["GM.getValue", "GM.setValue", "GM.xmlHttpRequest"],
+ match: ["https://www.example.com/*", "https://www.example.com/somethingReallylong/goesRightHere"],
+ name: "Test Install Userscript",
+ require: ["https://code.jquery.com/jquery-3.5.1.min.js", "https://code.jquery.com/jquery-1.7.1.min.js"],
+ source: "https://greasyforx.org/scripts/00000-something-something-long-name/code/Something%20something%20long20name.user.js"
+ };
+ if (updates) {
+ metadata.updateURL = ["https://www.k21p.com/example.user.js"];
+ metadata.downloadURL = ["https://www.k21p.com/example.user.js"];
+ }
+ if (longName) {
+ metadata.name = "Test Install Userscript with loooooooooooooooooooooooooooooooooooooooooong name";
+ }
+ return metadata;
+}
+
const files = [
generateFile("js", true, true),
generateFile("css"),
@@ -341,7 +360,7 @@ const _browser = {
filename: "Google Images Restored.js",
disabled: false,
type: "js",
- metadata: []
+ metadata: generateMetadata()
},
{
name: "Subframe Script Managerial Staffing Company",
@@ -365,14 +384,7 @@ const _browser = {
{success: "Click to install", installed: false},
{success: "Click to re-install", installed: true}
]);
- response.metadata = {
- description: "This userscript re-implements the \"View Image\" and \"Search by image\" buttons into google images.",
- grant: ["GM.getValue", "GM.setValue", "GM.xmlHttpRequest"],
- match: ["https://www.example.com/*", "https://www.example.com/somethingReallylong/goesRightHere"],
- name: "Test Install Userscript",
- require: ["https://code.jquery.com/jquery-3.5.1.min.js", "https://code.jquery.com/jquery-1.7.1.min.js"],
- source: "https://greasyforx.org/scripts/00000-something-something-long-name/code/Something%20something%20long20name.user.js"
- };
+ response.metadata = generateMetadata();
// response.error = "something went wrong (dev)";
}
if (!responseCallback) {
From f82ce6bba3f04de0f26adbc591eeebde675d12af Mon Sep 17 00:00:00 2001
From: ACTCD <101378590+ACTCD@users.noreply.github.com>
Date: Tue, 14 Mar 2023 05:07:27 +0800
Subject: [PATCH 11/12] feat: trash file and confirmation
---
src/popup/App.svelte | 23 +++++--
src/popup/Components/Views/DetailView.svelte | 67 +++++++++++++------
.../SafariWebExtensionHandler.swift | 18 +++--
3 files changed, 74 insertions(+), 34 deletions(-)
diff --git a/src/popup/App.svelte b/src/popup/App.svelte
index c1903c00..eca6127a 100644
--- a/src/popup/App.svelte
+++ b/src/popup/App.svelte
@@ -476,10 +476,25 @@
async function updateConfirm() {
console.log("updateConfirm");
+ // TODO
+ // will be implement after the new async update check is implemented
}
- async function deleteConfirm() {
- console.log("deleteConfirm");
+ async function trashConfirm() {
+ disabled = true;
+ const message = {name: "POPUP_TRASH", item: detailViewItem};
+ const response = await browser.runtime.sendNativeMessage(message);
+ if (response.error) {
+ errorNotification = response.error;
+ } else {
+ // delete the item in the cache array after success
+ allItems = allItems.filter(obj => obj.filename !== detailViewItem.filename);
+ // refresh main view
+ refreshView();
+ }
+ disabled = false;
+ // exit detail view
+ showDetailView = undefined;
}
onMount(async () => {
@@ -618,10 +633,10 @@
>
showDetailView = false}
+ goBackClick={() => showDetailView = false}
installConfirmClick={installConfirm}
updateConfirmClick={updateConfirm}
- deleteConfirmClick={deleteConfirm}
+ trashConfirmClick={trashConfirm}
/>
{:else if showAll}
diff --git a/src/popup/Components/Views/DetailView.svelte b/src/popup/Components/Views/DetailView.svelte
index 1c24bb46..292229b4 100644
--- a/src/popup/Components/Views/DetailView.svelte
+++ b/src/popup/Components/Views/DetailView.svelte
@@ -4,10 +4,10 @@
import {parse} from "../../../shared/utils";
export let itemdata;
- export let cancelClick;
+ export let goBackClick;
export let installConfirmClick;
export let updateConfirmClick;
- export let deleteConfirmClick;
+ export let trashConfirmClick;
const showItems = [
"version",
@@ -18,6 +18,18 @@
];
let errormsg = itemdata.error;
let metadata = itemdata.metadata;
+ let checking;
+ let trashing;
+ let updating; // TODO
+
+ $: checking = trashing || updating;
+
+ function cancelClick() {
+ if (trashing) {
+ return trashing = undefined;
+ }
+ goBackClick();
+ }
function metadataInit() {
if (metadata) return;
@@ -53,19 +65,21 @@
{#if itemdata.filename}
{itemdata.filename}
{/if}
- {#if metadata.description}
- {metadata.description}
- {/if}
- {#each showItems as key}
- {#if metadata[key]}
-
- @{key}
- {#each metadata[key] as val}
- {val}
- {/each}
-
+ {#if !checking}
+ {#if metadata.description}
+ {metadata.description}
{/if}
- {/each}
+ {#each showItems as key}
+ {#if metadata[key]}
+
+ @{key}
+ {#each metadata[key] as val}
+ {val}
+ {/each}
+
+ {/if}
+ {/each}
+ {/if}
{#if itemdata.url}
@@ -73,7 +87,18 @@
Be sure you trust the author before installing. Nefarious code can exploit your security and privacy.
{/if}
+ {#if trashing}
+
+
{@html iconWarn}
+
Are you sure you want to trash this file?
+
+ {/if}
+ {#if trashing}
+
+ {/if}
@@ -82,12 +107,12 @@
{itemdata.installed ? "Reinstall" : "Install"}
{/if}
- {#if itemdata.filename}
-