Skip to content

Commit c3ff4ce

Browse files
committed
view script source + modal + folder structure
1 parent d3706a0 commit c3ff4ce

File tree

11 files changed

+259
-100
lines changed

11 files changed

+259
-100
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,23 @@
22

33
Donate? Muốn hỗ trợ mình 1 ly cafe <3 [Donate here](https://github.com/HoangTran0410/HoangTran0410/blob/main/DONATE.md)
44

5-
### Overview
5+
## Overview
66

77
1 extension chứa 1 đống extensions nhỏ :)
88

99
chức năng mới được cập nhật mỗi ngày :\*
1010

11-
### How to install
11+
## How to install
1212

13-
[Watch on youtube](https://www.youtube.com/watch?v=2wFTbDK80g0)
13+
[Watch on youtube](https://www.youtube.com/watch?v=2wFTbDK80g0)
1414

15-
[![How to install](https://img.youtube.com/vi/2wFTbDK80g0/0.jpg)](https://www.youtube.com/watch?v=2wFTbDK80g0)
15+
[![How to install](https://img.youtube.com/vi/2wFTbDK80g0/0.jpg)](https://www.youtube.com/watch?v=2wFTbDK80g0)
1616

17-
### Screenshots
17+
## Screenshots
1818

1919
![](./assets/screenshots/Screen%20Shot%202022-11-02%20at%2012.22.18.png)
2020

21-
### Extension Tips
21+
## Extension Tips
2222

2323
<https://github.com/muaz-khan/Chrome-Extensions>
2424
<https://developer.chrome.com/docs/extensions/reference/scripting/>

popup/helpers/checkForUpdate.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import config from "../../config.js";
2+
import { t } from "./lang.js";
3+
4+
const versionSpan = document.querySelector("#version");
5+
const updateBtn = document.querySelector("#update-btn");
6+
7+
export async function checkForUpdate() {
8+
try {
9+
const currentVer = (await chrome.runtime.getManifest()).version;
10+
versionSpan.innerHTML = "v" + currentVer;
11+
12+
const { version_check, source_code } = config;
13+
const lastestVer = (await (await fetch(version_check)).json()).version;
14+
if (lastestVer > currentVer) {
15+
updateBtn.style.display = "inline-block";
16+
updateBtn.innerHTML = t({
17+
vi: "cập nhật v" + lastestVer,
18+
en: "update v" + lastestVer,
19+
});
20+
updateBtn.onclick = () => {
21+
window.open(source_code);
22+
};
23+
} else {
24+
updateBtn.style.display = "none";
25+
versionSpan.innerHTML += t({ vi: " (mới nhất)", en: " (lastest)" });
26+
}
27+
} catch (e) {
28+
console.warn("Check for update failed", e);
29+
}
30+
}

popup/helpers/modal.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const modal = document.querySelector("#myModal");
2+
const closeModalBtn = modal.querySelector(".modal-close");
3+
const modalTitle = modal.querySelector(".modal-title");
4+
const modalBody = modal.querySelector(".modal-body");
5+
6+
function initModal() {
7+
// When the user clicks on <span> (x), close the modal
8+
closeModalBtn.onclick = function () {
9+
modal.style.display = "none";
10+
};
11+
12+
// When the user clicks anywhere outside of the modal, close it
13+
window.addEventListener("click", function (event) {
14+
if (event.target == modal) {
15+
modal.style.display = "none";
16+
}
17+
});
18+
}
19+
20+
export function openModal(title, body) {
21+
modalTitle.innerHTML = title;
22+
modalBody.innerHTML = body;
23+
modal.style.display = "block";
24+
}
25+
26+
(() => {
27+
initModal();
28+
})();

popup/helpers/scriptHelpers.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { allScripts } from "../../scripts/index.js";
2+
import { getCurrentURL } from "./utils.js";
3+
4+
export async function getAvailableScripts() {
5+
let hostname = (await getCurrentURL()).hostname;
6+
let avai = [];
7+
for (let script of Object.values(allScripts)) {
8+
if (await checkBlackWhiteList(script, hostname)) {
9+
avai.push(script);
10+
}
11+
}
12+
13+
return avai;
14+
}
15+
16+
export async function checkBlackWhiteList(script, hostname = null) {
17+
if (!hostname) {
18+
hostname = (await getCurrentURL()).hostname;
19+
}
20+
21+
let hasWhiteList = script.whiteList?.length > 0;
22+
let hasBlackList = script.blackList?.length > 0;
23+
let inWhiteList = script.whiteList?.findIndex((_) => _ === hostname) >= 0;
24+
let inBlackList = script.blackList?.findIndex((_) => _ === hostname) >= 0;
25+
26+
let willRun =
27+
(!hasWhiteList && !hasBlackList) ||
28+
(hasWhiteList && inWhiteList) ||
29+
(hasBlackList && !inBlackList);
30+
31+
return willRun;
32+
}

popup/helpers/utils.js

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import { allScripts } from "../../scripts/index.js";
2-
import { t } from "./lang.js";
3-
41
export const getTabId = async () => {
52
let tabArray = await chrome.tabs.query({ currentWindow: true, active: true });
63
return tabArray[0].id;
@@ -47,52 +44,4 @@ export async function getCurrentURL() {
4744
return new URL(url);
4845
}
4946

50-
export async function getAvailableScripts() {
51-
let hostname = (await getCurrentURL()).hostname;
52-
let avai = [];
53-
for (let script of Object.values(allScripts)) {
54-
if (await checkBlackWhiteList(script, false, hostname)) {
55-
avai.push(script);
56-
}
57-
}
58-
59-
return avai;
60-
}
61-
62-
export async function checkBlackWhiteList(
63-
script,
64-
willAlert = true,
65-
hostname = null
66-
) {
67-
if (!hostname) {
68-
hostname = (await getCurrentURL()).hostname;
69-
}
7047

71-
let hasWhiteList = script.whiteList?.length > 0;
72-
let hasBlackList = script.blackList?.length > 0;
73-
let inWhiteList = script.whiteList?.findIndex((_) => _ === hostname) >= 0;
74-
let inBlackList = script.blackList?.findIndex((_) => _ === hostname) >= 0;
75-
76-
let willRun =
77-
(!hasWhiteList && !hasBlackList) ||
78-
(hasWhiteList && inWhiteList) ||
79-
(hasBlackList && !inBlackList);
80-
81-
if (!willRun && willAlert) {
82-
const { whiteList: w, blackList: b } = script;
83-
alert(
84-
t({
85-
en:
86-
`Script not supported in current website: \n\n` +
87-
`${w?.length ? `+ Only run at: ${w?.join(", ")}` : ""}\n` +
88-
`${b?.length ? `+ Not run at: ${b?.join(", ")}` : ""}`,
89-
vi:
90-
`Script không hỗ trợ website hiện tại: \n\n` +
91-
`${w?.length ? `+ Chỉ chạy tại: ${w?.join(", ")}` : ""}\n` +
92-
`${b?.length ? `+ Không chạy tại: ${b?.join(", ")}` : ""}`,
93-
})
94-
);
95-
}
96-
97-
return willRun;
98-
}

popup/index.js

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1-
import config from "../config.js";
21
import { allScripts } from "../scripts/index.js";
2+
import { checkForUpdate } from "./helpers/checkForUpdate.js";
3+
import { getFlag, t, toggleLang } from "./helpers/lang.js";
4+
import { runScriptInCurrentTab } from "./helpers/utils.js";
5+
import { checkBlackWhiteList } from "./helpers/scriptHelpers.js";
6+
import { openModal } from "./helpers/modal.js";
7+
import {
8+
activeTabIdSaver,
9+
favoriteScriptsSaver,
10+
recentScriptsSaver,
11+
} from "./helpers/storage.js";
312
import {
413
isFunc,
514
isLink,
@@ -8,19 +17,10 @@ import {
817
specialTabs,
918
tabs,
1019
} from "./tabs.js";
11-
import { getFlag, t, toggleLang } from "./helpers/lang.js";
12-
import { checkBlackWhiteList, runScriptInCurrentTab } from "./helpers/utils.js";
13-
import {
14-
activeTabIdSaver,
15-
favoriteScriptsSaver,
16-
recentScriptsSaver,
17-
} from "./helpers/storage.js";
1820

1921
const tabDiv = document.querySelector("div.tab");
2022
const contentDiv = document.querySelector("div.content");
2123
const flagImg = document.querySelector("img#flag");
22-
const versionSpan = document.querySelector("#version");
23-
const updateBtn = document.querySelector("#update-btn");
2424

2525
async function initLanguage() {
2626
flagImg.setAttribute("src", getFlag());
@@ -187,19 +187,36 @@ function createScriptButton(script, isFavorite = false) {
187187
title.innerHTML = t(script.name);
188188
button.appendChild(title);
189189

190-
// add to favorite button
191190
if (isFunc(script)) {
191+
// add to favorite button
192192
const addFavoriteBtn = document.createElement("i");
193+
addFavoriteBtn.title = t({
194+
en: "Add to farovite",
195+
vi: "Thêm vào yêu thích",
196+
});
193197
addFavoriteBtn.className = isFavorite
194198
? "fa-solid fa-star star active"
195199
: "fa-regular fa-star star";
196200
addFavoriteBtn.onclick = (e) => {
197201
e.stopPropagation();
198202
e.preventDefault();
199-
200203
favoriteScriptsSaver.toggle(script).then(createTabs);
201204
};
202205
button.appendChild(addFavoriteBtn);
206+
207+
// view source button
208+
const viewSourceBtn = document.createElement("i");
209+
viewSourceBtn.title = t({
210+
en: "View script source",
211+
vi: "Xem mã nguồn",
212+
});
213+
viewSourceBtn.className = "fa-solid fa-code view-source";
214+
viewSourceBtn.onclick = (e) => {
215+
e.stopPropagation();
216+
e.preventDefault();
217+
openModal(t(script.name), `<pre>${script.func?.toString()}</pre>`);
218+
};
219+
button.appendChild(viewSourceBtn);
203220
}
204221

205222
// tooltip
@@ -216,31 +233,22 @@ async function runScript(script) {
216233
if (willRun) {
217234
recentScriptsSaver.add(script);
218235
runScriptInCurrentTab(script.func);
219-
}
220-
}
221-
222-
async function checkForUpdate() {
223-
try {
224-
const currentVer = (await chrome.runtime.getManifest()).version;
225-
versionSpan.innerHTML = "v" + currentVer;
226-
227-
const { version_check, source_code } = config;
228-
const lastestVer = (await (await fetch(version_check)).json()).version;
229-
if (lastestVer > currentVer) {
230-
updateBtn.style.display = "inline-block";
231-
updateBtn.innerHTML = t({
232-
vi: "cập nhật v" + lastestVer,
233-
en: "update v" + lastestVer,
234-
});
235-
updateBtn.onclick = () => {
236-
window.open(source_code);
237-
};
238-
} else {
239-
updateBtn.style.display = "none";
240-
versionSpan.innerHTML += t({ vi: " (mới nhất)", en: " (lastest)" });
241-
}
242-
} catch (e) {
243-
console.warn("Check for update failed", e);
236+
} else {
237+
const { whiteList: w, blackList: b } = script;
238+
openModal(
239+
t({
240+
en: `Script not supported in current website`,
241+
vi: `Script không hỗ trợ website hiện tại`,
242+
}),
243+
t({
244+
en:
245+
`${w?.length ? `+ Only run at: ${w?.join(", ")}` : ""}\n` +
246+
`${b?.length ? `+ Not run at: ${b?.join(", ")}` : ""}`,
247+
vi:
248+
`${w?.length ? `+ Chỉ chạy tại: ${w?.join(", ")}` : ""}\n` +
249+
`${b?.length ? `+ Không chạy tại: ${b?.join(", ")}` : ""}`,
250+
})
251+
);
244252
}
245253
}
246254

popup/popup.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,19 @@ <h3>
3030
<div class="content">
3131
</div>
3232

33+
<!-- language flag -->
3334
<img id="flag" src="" alt="">
3435

36+
<!-- modal -->
37+
<div id="myModal" class="modal">
38+
<!-- Modal content -->
39+
<div class="modal-content">
40+
<span class="modal-close">&times;</span>
41+
<h3 class="modal-title">Modal Title</h3>
42+
<div class="modal-body">Some text in the Modal..</div>
43+
</div>
44+
</div>
45+
3546
<script type="module" src="./index.js"></script>
3647
</body>
3748

0 commit comments

Comments
 (0)