diff --git a/src/common/storage.ts b/src/common/storage.ts index ce3631ed..17b29a2e 100644 --- a/src/common/storage.ts +++ b/src/common/storage.ts @@ -88,6 +88,7 @@ export async function _getRuleFromUrl(url: string): Promise { case 'ENDS': case 'ENDS_WITH': return url.endsWith(urlFragment); + case 'REGEX': case 'REGEXP': return new RegExp(urlFragment).test(url); case 'EXACT': diff --git a/src/content.js b/src/content.js index d97c0158..feafe0cf 100644 --- a/src/content.js +++ b/src/content.js @@ -128,7 +128,6 @@ export async function applyRule(ruleParam, updateTitle) { const callback = function () { if (document.title !== lastTitle) { - console.log('Processing title with mutation observer'); originalTitleElement.setAttribute('content', document.title); originalTitle = originalTitleElement.getAttribute('content'); diff --git a/src/stores/rules.store.ts b/src/stores/rules.store.ts index 97eef7d7..24bf340b 100644 --- a/src/stores/rules.store.ts +++ b/src/stores/rules.store.ts @@ -28,18 +28,20 @@ export const useRulesStore = defineStore('rules', { fixDuplicateRuleIds(rules: Rule[]) { const uniqueIds = new Set(); - for (const rule of rules) { + rules = rules.map((rule) => { if (uniqueIds.has(rule.id)) { rule.id = _generateRandomId(); } uniqueIds.add(rule.id); - } + + return rule; + }); return rules; }, - handleMissingRuleSettings(rules: Rule[]) { - rules.forEach((rule) => { + handleMissingRuleSettings(rules: Rule[]): Rule[] { + rules = rules.map((rule) => { if (!rule.id) { rule.id = _generateRandomId(); } @@ -49,10 +51,18 @@ export const useRulesStore = defineStore('rules', { rule.detection = 'STARTS_WITH'; } + if (rule.detection === 'REGEXP') { + rule.detection = 'REGEX'; + } + if (rule.detection === 'ENDS') { rule.detection = 'ENDS_WITH'; } + + return rule; }); + + return rules; }, async updateRulePosition(ruleId: string, position: number) { const index = this.getRuleIndexById(ruleId); @@ -68,12 +78,16 @@ export const useRulesStore = defineStore('rules', { await this.save(); }, - addMissingInvisibleChar(groups: Group[]) { - groups.forEach((group) => { + addMissingInvisibleChar(groups: Group[]): Group[] { + groups = groups.map((group) => { if (!group.title.endsWith(INVISIBLE_CHAR)) { group.title = group.title + INVISIBLE_CHAR; } + + return group; }); + + return groups; }, async init() { try { @@ -88,12 +102,10 @@ export const useRulesStore = defineStore('rules', { throw new Error('Failed to set config'); } - this.handleMissingRuleSettings(tabModifier.rules); - // FIX: Remove this later + tabModifier.rules = this.handleMissingRuleSettings(tabModifier.rules); tabModifier.rules = this.fixDuplicateRuleIds(tabModifier.rules); - - this.addMissingInvisibleChar(tabModifier.groups); + tabModifier.groups = this.addMissingInvisibleChar(tabModifier.groups); this.groups = tabModifier.groups; this.rules = tabModifier.rules; @@ -112,6 +124,10 @@ export const useRulesStore = defineStore('rules', { shouldInit: boolean = true ): Promise { try { + config.rules = this.handleMissingRuleSettings(config.rules); + config.rules = this.fixDuplicateRuleIds(config.rules); + config.groups = this.addMissingInvisibleChar(config.groups); + const defaultConfig = _getDefaultTabModifierSettings(); const mergedConfig = { @@ -312,7 +328,7 @@ export const useRulesStore = defineStore('rules', { tabModifier = _getDefaultTabModifierSettings(); } - tabModifier.rules.push(rule); + tabModifier.rules.unshift(rule); this.rules = tabModifier.rules;