Skip to content

Commit 35bb21a

Browse files
committed
.
1 parent 4876597 commit 35bb21a

File tree

10 files changed

+250
-133
lines changed

10 files changed

+250
-133
lines changed

pages/viewScriptSource/main.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ window.onload = async () => {
44
let source = await getScriptSource(scriptId);
55

66
if (source) {
7+
let fileName = scriptId + ".js";
8+
let comment = "// " + fileName;
9+
710
document.querySelector("#copy-btn").onclick = () => copy(source);
8-
document.querySelector("code").innerHTML = escapeHTML(source);
9-
document.title = scriptId + ".js";
11+
document.querySelector("code").innerHTML =
12+
comment + "\n\n" + escapeHTML(source);
13+
document.title = fileName;
1014

1115
hljs.highlightAll();
1216
hljs.initLineNumbersOnLoad();

scripts/content-scripts/document_start.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
s.remove();
1111
}
1212

13+
injectScript(
14+
chrome.runtime.getURL(
15+
"/scripts/content-scripts/scripts/ufs_global_webpage_context.js"
16+
)
17+
);
18+
1319
let key = "activeScripts";
1420
let ids = (await chrome.storage.sync.get([key]))?.[key];
1521
let search = new URLSearchParams({
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Tất cả các hàm/biến toàn cục được nhúng vào trang web at document_start
2+
// Có thể truy cập từ các script chạy trong webpage context (có hàm onClick)
3+
4+
const UsefulScriptGlobalWebpageContext = {
5+
deleteElements(selector, willReRun) {
6+
UsefulScriptGlobalWebpageContext.onElementsVisible(
7+
selector,
8+
(nodes) => {
9+
[].forEach.call(nodes, function (node) {
10+
node.remove();
11+
console.log("Useful-scripts: element removed ", node);
12+
});
13+
},
14+
willReRun
15+
);
16+
},
17+
18+
waitForElements(selector) {
19+
return new Promise((resolve, reject) => {
20+
UsefulScriptGlobalWebpageContext.onElementsVisible(
21+
selector,
22+
resolve,
23+
false
24+
);
25+
});
26+
},
27+
28+
// Idea from https://github.com/gys-dev/Unlimited-Stdphim
29+
// https://stackoverflow.com/a/61511955/11898496
30+
onElementsVisible: async (selector, callback, willReRun) => {
31+
let nodes = document.querySelectorAll(selector);
32+
if (nodes?.length) {
33+
callback(nodes);
34+
if (!willReRun) return;
35+
}
36+
37+
const observer = new MutationObserver((mutations) => {
38+
mutations.forEach((mutation) => {
39+
if (!mutation.addedNodes) return;
40+
41+
for (let node of mutation.addedNodes) {
42+
if (node.nodeType != 1) continue; // only process Node.ELEMENT_NODE
43+
44+
let n = node.matches(selector)
45+
? [node]
46+
: Array.from(node.querySelectorAll(selector));
47+
48+
if (n?.length) {
49+
callback(n);
50+
if (!willReRun) observer.disconnect();
51+
}
52+
}
53+
});
54+
});
55+
56+
observer.observe(document, {
57+
childList: true,
58+
subtree: true,
59+
attributes: false,
60+
characterData: false,
61+
});
62+
63+
// return disconnect function
64+
return () => observer.disconnect();
65+
},
66+
};
67+
window.UsefulScriptGlobalWebpageContext = UsefulScriptGlobalWebpageContext;
68+
69+
// ================================= Polyfill =================================
70+
// Chrome pre-34
71+
if (!Element.prototype.matches)
72+
Element.prototype.matches = Element.prototype.webkitMatchesSelector;

scripts/fb_toggleLight.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ export default {
1010
},
1111
whiteList: ["https://www.facebook.com/*"],
1212

13-
onDocumentIdle: () => {
13+
onDocumentStart: () => {
14+
15+
},
16+
17+
onDocumentEnd: () => {
1418
[
1519
document.querySelectorAll('[role="navigation"]')?.[2],
1620
document.querySelectorAll('[role="complementary"]')?.[0],
@@ -21,7 +25,7 @@ export default {
2125
});
2226
},
2327

24-
onClickContentScript: function () {
28+
onClick: function () {
2529
[
2630
document.querySelectorAll('[role="navigation"]')?.[2],
2731
document.querySelectorAll('[role="complementary"]')?.[0],

scripts/fb_toggleNewFeed.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,34 @@ export default {
1010
},
1111
whiteList: ["https://www.facebook.com/*"],
1212

13-
onDocumentIdle: function () {
14-
[
15-
...Array.from(document.querySelectorAll("[role='feed'], [role='main']")),
16-
document.querySelector("#watch_feed"),
17-
document.querySelector("#ssrb_stories_start")?.parentElement,
18-
document.querySelector("#ssrb_feed_start")?.parentElement,
19-
].forEach((el) => {
20-
if (el) {
21-
el.style.display = "none";
22-
} else console.log("ERROR: Cannot find element");
23-
});
13+
onDocumentStart: function () {
14+
UsefulScriptGlobalWebpageContext.onElementsVisible(
15+
"[role='feed'], [role='main']",
16+
(nodes) =>
17+
Array.from(nodes).forEach((node) => (node.style.display = "none")),
18+
true
19+
);
2420
},
2521

26-
onClickContentScript: async function () {
22+
// onDocumentEnd: function () {
23+
// [
24+
// ...Array.from(document.querySelectorAll("[role='feed'], [role='main']")),
25+
// document.querySelector("#watch_feed"),
26+
// document.querySelector("#ssrb_stories_start")?.parentElement,
27+
// document.querySelector("#ssrb_feed_start")?.parentElement,
28+
// ].forEach((el) => {
29+
// if (el) {
30+
// el.style.display = "none";
31+
// } else console.log("ERROR: Cannot find element");
32+
// });
33+
// },
34+
35+
onClick: async function () {
2736
[
2837
...Array.from(document.querySelectorAll("[role='feed'], [role='main']")),
29-
document.querySelector("#watch_feed"),
30-
document.querySelector("#ssrb_stories_start")?.parentElement,
31-
document.querySelector("#ssrb_feed_start")?.parentElement,
38+
// document.querySelector("#watch_feed"),
39+
// document.querySelector("#ssrb_stories_start")?.parentElement,
40+
// document.querySelector("#ssrb_feed_start")?.parentElement,
3241
].forEach((el) => {
3342
if (el) {
3443
el.style.display = el.style.display === "none" ? "" : "none";

scripts/helpers/utils.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,10 @@ export const runScriptFileInCurrentTab = async (scriptFile, args) => {
153153
export function checkBlackWhiteList(script, url) {
154154
if (!url) return false;
155155

156-
let w = script.whiteList,
157-
b = script.blackList,
158-
hasWhiteList = w?.length > 0,
159-
hasBlackList = b?.length > 0,
156+
let w = script.whiteList || [],
157+
b = script.blackList || [],
158+
hasWhiteList = w.length > 0,
159+
hasBlackList = b.length > 0,
160160
inWhiteList = matchPatterns(url, w) ?? true,
161161
inBlackList = matchPatterns(url, b) ?? false;
162162

@@ -289,6 +289,18 @@ export const isEmptyFunction = (func) => {
289289

290290
// #region String Utils
291291

292+
export function moneyFormat(number, fixed = 0) {
293+
if (isNaN(number)) return 0;
294+
number = number.toFixed(fixed);
295+
let delimeter = ",";
296+
number += "";
297+
let rgx = /(\d+)(\d{3})/;
298+
while (rgx.test(number)) {
299+
number = number.replace(rgx, "$1" + delimeter + "$2");
300+
}
301+
return number;
302+
}
303+
292304
// https://stackoverflow.com/a/9310752
293305
export function escapeRegExp(text) {
294306
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");

scripts/shopee_totalSpendMoney.js

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { showLoading } from "./helpers/utils.js";
1+
import { moneyFormat, showLoading } from "./helpers/utils.js";
22

33
export default {
44
icon: "https://shopee.vn/favicon.ico",
@@ -20,7 +20,7 @@ export default {
2020
// Image: https://cf.shopee.vn/file/ecd20c9d39e0c865d53e3f47e6e2e3a7
2121
// FB POST: https://www.facebook.com/groups/j2team.community/permalink/1169967376668714/
2222

23-
let OrderType = {
23+
const OrderType = {
2424
completed: 3,
2525
canceled: 4,
2626
ship: 7,
@@ -29,7 +29,7 @@ export default {
2929
// refunded: 12,
3030
};
3131

32-
let OrderTypeName = {
32+
const OrderTypeName = {
3333
[OrderType.completed]: "Hoàn thành",
3434
[OrderType.canceled]: "Đã hủy",
3535
[OrderType.ship]: "Vận chuyển",
@@ -109,18 +109,6 @@ export default {
109109
return shippingSpent;
110110
}
111111

112-
function moneyFormat(number, fixed = 0) {
113-
if (isNaN(number)) return 0;
114-
number = number.toFixed(fixed);
115-
let delimeter = ",";
116-
number += "";
117-
let rgx = /(\d+)(\d{3})/;
118-
while (rgx.test(number)) {
119-
number = number.replace(rgx, "$1" + delimeter + "$2");
120-
}
121-
return number;
122-
}
123-
124112
let { closeLoading, setLoadingText } = showLoading("Đang chuẩn bị...");
125113
try {
126114
let options = Object.entries(OrderTypeName);

scripts/showTheVideos.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export default {
99
vi: "Tải video dễ dàng hơn",
1010
},
1111

12-
onClickExtension: function () {
12+
onClick: function () {
1313
let videos = Array.from(document.querySelectorAll("video"));
1414

1515
if (!videos.length) {

scripts/studyphim_unlimited.js

Lines changed: 6 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,46 +8,13 @@ export default {
88
en: "Watch movies on Studyphim for free without login",
99
vi: "Xem phim miễn phí trên Studyphim không cần đăng nhập",
1010
},
11-
onDocumentStart: () => {
12-
// Source: https://github.com/gys-dev/Unlimited-Stdphim
11+
whiteList: ["https://www.studyphim.vn/*"],
1312

14-
deleteElements(
15-
".overlay.playable.hide, .overlay.playable, #topchapter, #wrapper_header"
13+
onDocumentStart: () => {
14+
// Source: https://github.com/gys-dev/Unlimited-Stdphim
15+
UsefulScriptGlobalWebpageContext.deleteElements(
16+
".overlay.playable.hide, .overlay.playable, #topchapter, #wrapper_header",
17+
true
1618
);
17-
18-
function deleteElements(selector) {
19-
// in case the content script was injected after the page is partially loaded
20-
doDelete(document.querySelectorAll(selector));
21-
22-
var mo = new MutationObserver(process);
23-
mo.observe(document, { subtree: true, childList: true });
24-
document.addEventListener("DOMContentLoaded", function () {
25-
mo.disconnect();
26-
});
27-
28-
function process(mutations) {
29-
for (var i = 0; i < mutations.length; i++) {
30-
var nodes = mutations[i].addedNodes;
31-
for (var j = 0; j < nodes.length; j++) {
32-
var n = nodes[j];
33-
if (n.nodeType != 1)
34-
// only process Node.ELEMENT_NODE
35-
continue;
36-
doDelete(n.matches(selector) ? [n] : n.querySelectorAll(selector));
37-
}
38-
}
39-
}
40-
function doDelete(nodes) {
41-
[].forEach.call(nodes, function (node) {
42-
node.remove();
43-
console.log("Useful-scripts: studyphim - removed ", node);
44-
});
45-
}
46-
}
47-
48-
// Chrome pre-34
49-
if (!Element.prototype.matches)
50-
Element.prototype.matches = Element.prototype.webkitMatchesSelector;
5119
},
5220
};
53-

0 commit comments

Comments
 (0)