mirror of
https://github.com/SoPat712/videospeed.git
synced 2026-04-21 04:42:35 -04:00
88 lines
2.4 KiB
JavaScript
88 lines
2.4 KiB
JavaScript
(function(root, factory) {
|
|
var exports = factory();
|
|
|
|
if (typeof module === "object" && module.exports) {
|
|
module.exports = exports;
|
|
}
|
|
|
|
root.SpeederShared = root.SpeederShared || {};
|
|
root.SpeederShared.siteRules = exports;
|
|
})(typeof globalThis !== "undefined" ? globalThis : this, function() {
|
|
var regStrip = /^[\r\t\f\v ]+|[\r\t\f\v ]+$/gm;
|
|
|
|
function escapeStringRegExp(str) {
|
|
return String(str).replace(/[|\\{}()[\]^$+*?.]/g, "\\$&");
|
|
}
|
|
|
|
function compileSiteRulePattern(pattern) {
|
|
if (typeof pattern !== "string") return null;
|
|
|
|
var normalizedPattern = pattern.replace(regStrip, "");
|
|
if (normalizedPattern.length === 0) return null;
|
|
|
|
if (
|
|
normalizedPattern.startsWith("/") &&
|
|
normalizedPattern.lastIndexOf("/") > 0
|
|
) {
|
|
var lastSlash = normalizedPattern.lastIndexOf("/");
|
|
return new RegExp(
|
|
normalizedPattern.substring(1, lastSlash),
|
|
normalizedPattern.substring(lastSlash + 1)
|
|
);
|
|
}
|
|
|
|
return new RegExp(escapeStringRegExp(normalizedPattern));
|
|
}
|
|
|
|
function matchSiteRule(url, siteRules) {
|
|
if (!url || !Array.isArray(siteRules)) return null;
|
|
|
|
for (var i = 0; i < siteRules.length; i++) {
|
|
var rule = siteRules[i];
|
|
if (!rule || !rule.pattern) continue;
|
|
|
|
try {
|
|
var re = compileSiteRulePattern(rule.pattern);
|
|
if (re && re.test(url)) {
|
|
return rule;
|
|
}
|
|
} catch (e) {
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
function isSiteRuleDisabled(rule) {
|
|
return Boolean(
|
|
rule &&
|
|
(rule.enabled === false || rule.disableExtension === true)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Whether Speeder should run on this URL given global enabled and the matched rule (if any).
|
|
* - No rule: follows global (enabled unless explicitly false).
|
|
* - Rule with site "off" / disableExtension: always inactive (blacklist).
|
|
* - Rule with site "on": active even when global is off (whitelist).
|
|
*/
|
|
function isSpeederActiveForSite(globalEnabled, siteRule) {
|
|
var globalOn = globalEnabled !== false;
|
|
if (!siteRule) {
|
|
return globalOn;
|
|
}
|
|
if (isSiteRuleDisabled(siteRule)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
return {
|
|
compileSiteRulePattern: compileSiteRulePattern,
|
|
escapeStringRegExp: escapeStringRegExp,
|
|
isSiteRuleDisabled: isSiteRuleDisabled,
|
|
isSpeederActiveForSite: isSpeederActiveForSite,
|
|
matchSiteRule: matchSiteRule
|
|
};
|
|
});
|