Adding site details section
This commit is contained in:
		
							parent
							
								
									585cca6aa3
								
							
						
					
					
						commit
						fd1be7ceb8
					
				|  | @ -2,4 +2,4 @@ | ||||||
| *-update/* | *-update/* | ||||||
| *.DS_Store | *.DS_Store | ||||||
| node_modules | node_modules | ||||||
| src/replace-words-and-verbs.js | src/content-script.js | ||||||
|  |  | ||||||
|  | @ -1,680 +0,0 @@ | ||||||
| 'use strict'; |  | ||||||
| 
 |  | ||||||
| function getDefaultExportFromCjs (x) { |  | ||||||
| 	return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var replaceWords$1 = {}; |  | ||||||
| 
 |  | ||||||
| var dist = {}; |  | ||||||
| 
 |  | ||||||
| var hasRequiredDist; |  | ||||||
| 
 |  | ||||||
| function requireDist () { |  | ||||||
| 	if (hasRequiredDist) return dist; |  | ||||||
| 	hasRequiredDist = 1; |  | ||||||
| 	/** |  | ||||||
| 	 * @license |  | ||||||
| 	 * Copyright 2019 Ludan Stoecklé |  | ||||||
| 	 * SPDX-License-Identifier: Apache-2.0 |  | ||||||
| 	 */ |  | ||||||
| 	Object.defineProperty(dist, "__esModule", { value: true }); |  | ||||||
| 	dist.getConjugation = dist.getVerbInfo = dist.getIngPart = dist.mergeVerbsData = void 0; |  | ||||||
| 	const tenses = [ |  | ||||||
| 	    // SIMPLE
 |  | ||||||
| 	    'SIMPLE_PAST', |  | ||||||
| 	    'PAST', |  | ||||||
| 	    'SIMPLE_PRESENT', |  | ||||||
| 	    'PRESENT', |  | ||||||
| 	    'SIMPLE_FUTURE', |  | ||||||
| 	    'FUTURE', |  | ||||||
| 	    // PROGRESSIVE
 |  | ||||||
| 	    'PROGRESSIVE_PAST', |  | ||||||
| 	    'PROGRESSIVE_PRESENT', |  | ||||||
| 	    'PROGRESSIVE_FUTURE', |  | ||||||
| 	    // PERFECT
 |  | ||||||
| 	    'PERFECT_PAST', |  | ||||||
| 	    'PERFECT_PRESENT', |  | ||||||
| 	    'PERFECT_FUTURE', |  | ||||||
| 	    // PERFECT PROGRESSIVE
 |  | ||||||
| 	    'PERFECT_PROGRESSIVE_PAST', |  | ||||||
| 	    'PERFECT_PROGRESSIVE_PRESENT', |  | ||||||
| 	    'PERFECT_PROGRESSIVE_FUTURE', |  | ||||||
| 	    // PARTICIPLE
 |  | ||||||
| 	    'PARTICIPLE_PRESENT', |  | ||||||
| 	    'PARTICIPLE_PAST', |  | ||||||
| 	]; |  | ||||||
| 	const modals = ['can', 'could', 'may', 'might', 'must', 'shall', 'should', 'will', 'would', 'ought']; |  | ||||||
| 	// helpers
 |  | ||||||
| 	function mergeVerbsData(irregularsInfo, gerundsInfo) { |  | ||||||
| 	    const res = {}; |  | ||||||
| 	    // gerunds
 |  | ||||||
| 	    if (gerundsInfo) { |  | ||||||
| 	        const gerundKeys = Object.keys(gerundsInfo); |  | ||||||
| 	        for (const gerundKey of gerundKeys) { |  | ||||||
| 	            const gerundVal = gerundsInfo[gerundKey]; |  | ||||||
| 	            res[gerundKey] = [null, null, gerundVal]; |  | ||||||
| 	        } |  | ||||||
| 	    } |  | ||||||
| 	    // irregulars
 |  | ||||||
| 	    if (irregularsInfo) { |  | ||||||
| 	        const irregularKeys = Object.keys(irregularsInfo); |  | ||||||
| 	        for (const irregularKey of irregularKeys) { |  | ||||||
| 	            const irregularVal = irregularsInfo[irregularKey]; |  | ||||||
| 	            if (!res[irregularKey]) { |  | ||||||
| 	                res[irregularKey] = [irregularVal[0][0], irregularVal[0][1], null]; |  | ||||||
| 	            } |  | ||||||
| 	            else { |  | ||||||
| 	                res[irregularKey] = [irregularVal[0][0], irregularVal[0][1], res[irregularKey][2]]; |  | ||||||
| 	            } |  | ||||||
| 	        } |  | ||||||
| 	    } |  | ||||||
| 	    return res; |  | ||||||
| 	} |  | ||||||
| 	dist.mergeVerbsData = mergeVerbsData; |  | ||||||
| 	function getIrregularHelper(verbsInfo, verb, index) { |  | ||||||
| 	    const verbInfo = getVerbInfo(verbsInfo, verb); |  | ||||||
| 	    if (verbInfo && verbInfo.length != 0) { |  | ||||||
| 	        return verbInfo[index]; |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        return null; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getCommonEdPart(verb) { |  | ||||||
| 	    if (verb.endsWith('ie') || verb.endsWith('ee')) { |  | ||||||
| 	        return verb + 'd'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (yWithVowel(verb)) { |  | ||||||
| 	        // vowel + y: play -> played
 |  | ||||||
| 	        return verb + 'ed'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb.endsWith('y')) { |  | ||||||
| 	        // no vowel + y: cry -> cried
 |  | ||||||
| 	        return verb.substring(0, verb.length - 1) + 'ied'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb.endsWith('e')) { |  | ||||||
| 	        return verb + 'd'; |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        return verb + 'ed'; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getPastPart(verbsInfo, verb) { |  | ||||||
| 	    if (verb === 'be') { |  | ||||||
| 	        return 'been'; |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        const irregular = getIrregularHelper(verbsInfo, verb, 1); |  | ||||||
| 	        if (irregular) { |  | ||||||
| 	            return irregular; |  | ||||||
| 	        } |  | ||||||
| 	        else { |  | ||||||
| 	            return getCommonEdPart(verb); |  | ||||||
| 	        } |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getPreteritPart(verbsInfo, verb, person) { |  | ||||||
| 	    let irregular; |  | ||||||
| 	    if (verb === 'be') { |  | ||||||
| 	        if (person === 0 || person === 2) { |  | ||||||
| 	            return 'was'; |  | ||||||
| 	        } |  | ||||||
| 	        else { |  | ||||||
| 	            return 'were'; |  | ||||||
| 	        } |  | ||||||
| 	    } |  | ||||||
| 	    else if ((irregular = getIrregularHelper(verbsInfo, verb, 0))) { |  | ||||||
| 	        return irregular; |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        return getCommonEdPart(verb); |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getIngPart(verbsInfo, verb) { |  | ||||||
| 	    const consonants = 'bcdfghjklmnpqrstvxzw'; |  | ||||||
| 	    const irregular = getIrregularHelper(verbsInfo, verb, 2); |  | ||||||
| 	    if (irregular) { |  | ||||||
| 	        return irregular; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb.match(new RegExp(`[${consonants}]e$`, 'g')) && verb != 'be' && verb != 'singe') { |  | ||||||
| 	        // If  the  infinitive  ends  with  a  consonant followed by an –e,
 |  | ||||||
| 	        // you have to take off the –e to form your present participle.
 |  | ||||||
| 	        // this is not in the english-verbs-gerunds list
 |  | ||||||
| 	        // hum and unless it is 'to be'! which becomes being, not bing.
 |  | ||||||
| 	        return verb.substring(0, verb.length - 1) + 'ing'; |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        return verb + 'ing'; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	dist.getIngPart = getIngPart; |  | ||||||
| 	/* does not throw an exception: |  | ||||||
| 	most verb conjugation is rule based, thus not finding it in the resource is not a problem */ |  | ||||||
| 	function getVerbInfo(verbsInfo, verb) { |  | ||||||
| 	    return verbsInfo ? verbsInfo[verb] : null; |  | ||||||
| 	} |  | ||||||
| 	dist.getVerbInfo = getVerbInfo; |  | ||||||
| 	// 1 per tense
 |  | ||||||
| 	function getSimplePast(verbsInfo, verb, person) { |  | ||||||
| 	    return getPreteritPart(verbsInfo, verb, person); |  | ||||||
| 	} |  | ||||||
| 	function yWithVowel(verb) { |  | ||||||
| 	    return verb.match(/[aeiouy]y$/) !== null; |  | ||||||
| 	} |  | ||||||
| 	function getSimplePresentHeShe(verb) { |  | ||||||
| 	    if (modals.indexOf(verb) > -1) { |  | ||||||
| 	        return verb; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb === 'have') { |  | ||||||
| 	        return 'has'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb === 'be') { |  | ||||||
| 	        return 'is'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb === 'do') { |  | ||||||
| 	        return 'does'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb === 'go') { |  | ||||||
| 	        return 'goes'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (yWithVowel(verb)) { |  | ||||||
| 	        // vowel + y: play -> plays
 |  | ||||||
| 	        return verb + 's'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb.endsWith('y')) { |  | ||||||
| 	        // no vowel + y: fly -> flies
 |  | ||||||
| 	        return verb.substring(0, verb.length - 1) + 'ies'; |  | ||||||
| 	    } |  | ||||||
| 	    else if (verb.endsWith('ss') || verb.endsWith('x') || verb.endsWith('sh') || verb.endsWith('ch')) { |  | ||||||
| 	        return verb + 'es'; |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        // default
 |  | ||||||
| 	        return verb + 's'; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getSimplePresent(verb, person) { |  | ||||||
| 	    if (person != 2) { |  | ||||||
| 	        if (verb === 'be') { |  | ||||||
| 	            if (person === 0) { |  | ||||||
| 	                return 'am'; |  | ||||||
| 	            } |  | ||||||
| 	            else { |  | ||||||
| 	                return 'are'; |  | ||||||
| 	            } |  | ||||||
| 	        } |  | ||||||
| 	        else { |  | ||||||
| 	            return verb; |  | ||||||
| 	        } |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        return getSimplePresentHeShe(verb); |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getSimpleFuture(verb, person, isGoingTo, negative) { |  | ||||||
| 	    if (isGoingTo) { |  | ||||||
| 	        return getSimplePresent('be', person) + ' ' + getNegative(negative) + 'going to ' + verb; |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        return 'will ' + getNegative(negative) + verb; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getNegative(negative) { |  | ||||||
| 	    return negative ? 'not ' : ''; |  | ||||||
| 	} |  | ||||||
| 	function getProgressivePast(verbsInfo, verb, person, negative) { |  | ||||||
| 	    return getPreteritPart(verbsInfo, 'be', person) + ' ' + getNegative(negative) + getIngPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getProgressivePresent(verbsInfo, verb, person, negative) { |  | ||||||
| 	    return getSimplePresent('be', person) + ' ' + getNegative(negative) + getIngPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getProgressiveFuture(verbsInfo, verb, negative) { |  | ||||||
| 	    return 'will ' + getNegative(negative) + 'be ' + getIngPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getPerfectPast(verbsInfo, verb, negative) { |  | ||||||
| 	    return 'had ' + getNegative(negative) + getPastPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getPerfectPresent(verbsInfo, verb, person, negative) { |  | ||||||
| 	    return getSimplePresent('have', person) + ' ' + getNegative(negative) + getPastPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getPerfectFuture(verbsInfo, verb, negative) { |  | ||||||
| 	    return 'will ' + getNegative(negative) + 'have ' + getPastPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getPerfectProgressivePast(verbsInfo, verb, negative) { |  | ||||||
| 	    return 'had ' + getNegative(negative) + 'been ' + getIngPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getPerfectProgressivePresent(verbsInfo, verb, person, negative) { |  | ||||||
| 	    return getSimplePresent('have', person) + ' ' + getNegative(negative) + 'been ' + getIngPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function getPerfectProgressiveFuture(verbsInfo, verb, negative) { |  | ||||||
| 	    return 'will ' + getNegative(negative) + 'have been ' + getIngPart(verbsInfo, verb); |  | ||||||
| 	} |  | ||||||
| 	function doContract(original) { |  | ||||||
| 	    const contractions = [ |  | ||||||
| 	        // present
 |  | ||||||
| 	        ['does not', "doesn't"], |  | ||||||
| 	        ['do not', "don't"], |  | ||||||
| 	        ['is not', "isn't"], |  | ||||||
| 	        ['are not', "aren't"], |  | ||||||
| 	        ['has not', "hasn't"], |  | ||||||
| 	        ['have not', "haven't"], |  | ||||||
| 	        ['can not', "can't"], |  | ||||||
| 	        ['could not', "couldn't"], |  | ||||||
| 	        ['may not', "mayn't"], |  | ||||||
| 	        ['might not', "mightn't"], |  | ||||||
| 	        ['will not', "won't"], |  | ||||||
| 	        ['shall not', "shan't"], |  | ||||||
| 	        ['would not', "wouldn't"], |  | ||||||
| 	        ['should not', "shouldn't"], |  | ||||||
| 	        ['must not', "mustn't"], |  | ||||||
| 	        ['ought not', "oughtn't"], |  | ||||||
| 	        // past
 |  | ||||||
| 	        ['did not', "didn't"], |  | ||||||
| 	        ['was not', "wasn't"], |  | ||||||
| 	        ['were not', "weren't"], |  | ||||||
| 	        ['had not', "hadn't"], |  | ||||||
| 	    ]; |  | ||||||
| 	    for (const contraction of contractions) { |  | ||||||
| 	        const replaced = original.replace(contraction[0], contraction[1]); |  | ||||||
| 	        if (replaced !== original) { |  | ||||||
| 	            // finding one in fine, then we stop
 |  | ||||||
| 	            return replaced; |  | ||||||
| 	        } |  | ||||||
| 	    } |  | ||||||
| 	    // istanbul ignore next
 |  | ||||||
| 	    return original; |  | ||||||
| 	} |  | ||||||
| 	function getConjugatedVerb(verbsInfo, verb, tense, person, isNegative, isHaveNoDo, isGoingTo) { |  | ||||||
| 	    switch (tense) { |  | ||||||
| 	        case 'PAST': |  | ||||||
| 	        case 'SIMPLE_PAST': |  | ||||||
| 	            if (isNegative) { |  | ||||||
| 	                if (verb === 'be' || verb === 'do' || modals.indexOf(verb) > -1 || isHaveNoDo) { |  | ||||||
| 	                    return getSimplePast(verbsInfo, verb, person) + ' not'; |  | ||||||
| 	                } |  | ||||||
| 	                else { |  | ||||||
| 	                    // 'do ...' form
 |  | ||||||
| 	                    return getSimplePast(verbsInfo, 'do', person) + ' not ' + verb; |  | ||||||
| 	                } |  | ||||||
| 	            } |  | ||||||
| 	            else { |  | ||||||
| 	                return getSimplePast(verbsInfo, verb, person); |  | ||||||
| 	            } |  | ||||||
| 	        case 'PRESENT': |  | ||||||
| 	        case 'SIMPLE_PRESENT': |  | ||||||
| 	            if (isNegative) { |  | ||||||
| 	                if (verb === 'be' || verb === 'do' || modals.indexOf(verb) > -1 || isHaveNoDo) { |  | ||||||
| 	                    return getSimplePresent(verb, person) + ' not'; |  | ||||||
| 	                } |  | ||||||
| 	                else { |  | ||||||
| 	                    // 'do ...' form
 |  | ||||||
| 	                    return getSimplePresent('do', person) + ' not ' + verb; |  | ||||||
| 	                } |  | ||||||
| 	            } |  | ||||||
| 	            else { |  | ||||||
| 	                return getSimplePresent(verb, person); |  | ||||||
| 	            } |  | ||||||
| 	        case 'FUTURE': |  | ||||||
| 	        case 'SIMPLE_FUTURE': |  | ||||||
| 	            return getSimpleFuture(verb, person, isGoingTo, isNegative); |  | ||||||
| 	        case 'PROGRESSIVE_PAST': |  | ||||||
| 	            return getProgressivePast(verbsInfo, verb, person, isNegative); |  | ||||||
| 	        case 'PROGRESSIVE_PRESENT': |  | ||||||
| 	            return getProgressivePresent(verbsInfo, verb, person, isNegative); |  | ||||||
| 	        case 'PROGRESSIVE_FUTURE': |  | ||||||
| 	            return getProgressiveFuture(verbsInfo, verb, isNegative); |  | ||||||
| 	        case 'PERFECT_PAST': |  | ||||||
| 	            return getPerfectPast(verbsInfo, verb, isNegative); |  | ||||||
| 	        case 'PERFECT_PRESENT': |  | ||||||
| 	            return getPerfectPresent(verbsInfo, verb, person, isNegative); |  | ||||||
| 	        case 'PERFECT_FUTURE': |  | ||||||
| 	            return getPerfectFuture(verbsInfo, verb, isNegative); |  | ||||||
| 	        case 'PERFECT_PROGRESSIVE_PAST': |  | ||||||
| 	            return getPerfectProgressivePast(verbsInfo, verb, isNegative); |  | ||||||
| 	        case 'PERFECT_PROGRESSIVE_PRESENT': |  | ||||||
| 	            return getPerfectProgressivePresent(verbsInfo, verb, person, isNegative); |  | ||||||
| 	        case 'PERFECT_PROGRESSIVE_FUTURE': |  | ||||||
| 	            return getPerfectProgressiveFuture(verbsInfo, verb, isNegative); |  | ||||||
| 	        case 'PARTICIPLE_PRESENT': |  | ||||||
| 	            return (isNegative ? 'not ' : '') + getIngPart(verbsInfo, verb); |  | ||||||
| 	        case 'PARTICIPLE_PAST': |  | ||||||
| 	            return (isNegative ? 'not ' : '') + getPastPart(verbsInfo, verb); |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	function getConjugation(verbsInfo, verb, tense, person, extraParams) { |  | ||||||
| 	    if (!verb) { |  | ||||||
| 	        const err = new Error(); |  | ||||||
| 	        err.name = 'TypeError'; |  | ||||||
| 	        err.message = 'verb must not be null'; |  | ||||||
| 	        throw err; |  | ||||||
| 	    } |  | ||||||
| 	    if (tenses.indexOf(tense) == -1) { |  | ||||||
| 	        const err = new Error(); |  | ||||||
| 	        err.name = 'TypeError'; |  | ||||||
| 	        err.message = `invalid tense: ${tense}`; |  | ||||||
| 	        throw err; |  | ||||||
| 	    } |  | ||||||
| 	    if ([0, 1, 2, 3, 4, 5].indexOf(person) === -1) { |  | ||||||
| 	        const err = new Error(); |  | ||||||
| 	        err.name = 'TypeError'; |  | ||||||
| 	        err.message = 'person must be 0 1 2 3 4 or 5'; |  | ||||||
| 	        throw err; |  | ||||||
| 	    } |  | ||||||
| 	    const isGoingTo = extraParams && extraParams.GOING_TO ? true : false; |  | ||||||
| 	    const isNegative = extraParams && extraParams.NEGATIVE ? true : false; |  | ||||||
| 	    const isHaveNoDo = isNegative && verb === 'have' && extraParams.NO_DO ? true : false; |  | ||||||
| 	    const conjugated = getConjugatedVerb(verbsInfo, verb, tense, person, isNegative, isHaveNoDo, isGoingTo); |  | ||||||
| 	    if (isNegative && (extraParams.CONTRACT || isHaveNoDo)) { |  | ||||||
| 	        // Note that in the form without the auxiliary verb DO, the verb HAVE is always contracted with the adverb not.
 |  | ||||||
| 	        return doContract(conjugated); |  | ||||||
| 	    } |  | ||||||
| 	    else { |  | ||||||
| 	        return conjugated; |  | ||||||
| 	    } |  | ||||||
| 	} |  | ||||||
| 	dist.getConjugation = getConjugation; |  | ||||||
| 	 |  | ||||||
| 	return dist; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var hasRequiredReplaceWords; |  | ||||||
| 
 |  | ||||||
| function requireReplaceWords () { |  | ||||||
| 	if (hasRequiredReplaceWords) return replaceWords$1; |  | ||||||
| 	hasRequiredReplaceWords = 1; |  | ||||||
| 	//PAUSED_KEY = 'pause-this-domain-pls-interactive-fics-yalla-bina';
 |  | ||||||
| 
 |  | ||||||
| 	const verbsHelper = requireDist(); |  | ||||||
| 
 |  | ||||||
| 	browser.runtime.onMessage.addListener((message, sender, sendResponse) => { |  | ||||||
| 	  if ('input_word' in message){ |  | ||||||
| 	    escapeAndReplace(message.input_word, message.replace_value, message.case_sensitive); |  | ||||||
| 	  } else { |  | ||||||
| 	    replaceAll(); |  | ||||||
| 	  } |  | ||||||
| 	}); |  | ||||||
| 
 |  | ||||||
| 	function replaceAll() { |  | ||||||
| 	  browser.storage.local.get(null, replaceAllInStorage); // TODO this is bad
 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function replaceAllInStorage(options) { |  | ||||||
| 	  //const hostname = window.location.hostname
 |  | ||||||
| 	  //const is_paused = options[PAUSED_KEY] && options[PAUSED_KEY].indexOf(hostname) !== -1
 |  | ||||||
| 	  { // change paused later to only care about hostname
 |  | ||||||
| 	    replaceVerbs(options); |  | ||||||
| 	    replaceName(options); |  | ||||||
| 	    replacePronouns(options); |  | ||||||
| 	    replacePov(options); |  | ||||||
| 	    replacePlv(options); |  | ||||||
| 	    replaceAlso(options); |  | ||||||
| 	  } |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function replaceName(options) { |  | ||||||
| 	  const regexp = /\by\/n\b|\(y\/n\)|\[y\/n\]/ig; |  | ||||||
| 	  walk(document.body, regexp, options["name"], directMethod); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function replaceVerbs(options) { |  | ||||||
| 	  if (getPronouns(options.preset, options.other).plurality == "plural") { |  | ||||||
| 	    const regexp = /([Pp])(?:rn|ov)\/S [Vv]rb\/([\w\s]+)\/([\w\s]+)\/|[Vv]rb\/([\w\s]+)\/([\w\s]+)\/ ([Pp])(?:rn|ov)\/S/; |  | ||||||
| 	    walk(document.body, regexp, options, pluralThirdVerbMethod); |  | ||||||
| 	  } |  | ||||||
| 
 |  | ||||||
| 	  const regexp = /vrb\/([\w\s]+)\/([\w\s]+)\//; |  | ||||||
| 	  walk(document.body, regexp, options, verbMethod); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// TODO case sensitivity, premade regexp
 |  | ||||||
| 	function replacePronouns(options) { |  | ||||||
| 	  if (options.preset == "") { return; } |  | ||||||
| 	  let pronouns = getPronouns(options.preset, options.other); |  | ||||||
| 	  replacePronounSet("Prn/s", "prn/s", pronouns["subjective"]); |  | ||||||
| 	  replacePronounSet("Prn/o", "prn/o", pronouns["objective"]); |  | ||||||
| 	  replacePronounSet("Prn/p", "prn/p", pronouns["possessive"]); |  | ||||||
| 	  replacePronounSet("Prn/a", "prn/a", pronouns["adjective"]); |  | ||||||
| 	  replacePronounSet("Prn/r", "prn/r", pronouns["reflexive"]); |  | ||||||
| 	  replacePronounSet("Prn/H", "prn/H", pronouns["honorific-abbr"]); |  | ||||||
| 	  replacePronounSet("Prn/h", "prn/h", pronouns["honorific"]); |  | ||||||
| 	  replacePronounSet("Prn/N", "prn/N", pronouns["noun-adult"]); |  | ||||||
| 	  replacePronounSet("Prn/n", "prn/n", pronouns["noun-child"]); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function getPronouns(key, other) { |  | ||||||
| 	  switch (key) { |  | ||||||
| 	    case "she": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "she", |  | ||||||
| 	        "objective": "her", |  | ||||||
| 	        "possessive": "her", |  | ||||||
| 	        "adjective": "hers", |  | ||||||
| 	        "reflexive": "herself", |  | ||||||
| 	        "honorific-abbr": "Ms.", |  | ||||||
| 	        "honorific": "miss", |  | ||||||
| 	        "noun-adult": "woman", |  | ||||||
| 	        "noun-child": "girl", |  | ||||||
| 	        "plurality": "singular" |  | ||||||
| 	      }; |  | ||||||
| 	    case "he": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "he", |  | ||||||
| 	        "objective": "him", |  | ||||||
| 	        "possessive": "his", |  | ||||||
| 	        "adjective": "his", |  | ||||||
| 	        "reflexive": "himself", |  | ||||||
| 	        "honorific-abbr": "Mr.", |  | ||||||
| 	        "honorific": "mister", |  | ||||||
| 	        "noun-adult": "man", |  | ||||||
| 	        "noun-child": "boy", |  | ||||||
| 	        "plurality": "singular" |  | ||||||
| 	      }; |  | ||||||
| 	    case "they": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "they", |  | ||||||
| 	        "objective": "them", |  | ||||||
| 	        "possessive": "their", |  | ||||||
| 	        "adjective": "theirs", |  | ||||||
| 	        "reflexive": "themself", |  | ||||||
| 	        "honorific-abbr": "Mx.", |  | ||||||
| 	        "honorific": "mix", |  | ||||||
| 	        "noun-adult": "person", |  | ||||||
| 	        "noun-child": "kid", |  | ||||||
| 	        "plurality": "plural" |  | ||||||
| 	      }; |  | ||||||
| 	    case "first": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "I", |  | ||||||
| 	        "objective": "me", |  | ||||||
| 	        "possessive": "my", |  | ||||||
| 	        "adjective": "mine", |  | ||||||
| 	        "reflexive": "myself" |  | ||||||
| 	      }; |  | ||||||
| 	    case "second": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "you", |  | ||||||
| 	        "objective": "you", |  | ||||||
| 	        "possessive": "your", |  | ||||||
| 	        "adjective": "yours", |  | ||||||
| 	        "reflexive": "yourself" |  | ||||||
| 	      }; |  | ||||||
| 	    case "first-plural": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "we", |  | ||||||
| 	        "objective": "us", |  | ||||||
| 	        "possessive": "our", |  | ||||||
| 	        "adjective": "ours", |  | ||||||
| 	        "reflexive": "ourselves" |  | ||||||
| 	      }; |  | ||||||
| 	    case "second-plural": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "you", |  | ||||||
| 	        "objective": "you", |  | ||||||
| 	        "possessive": "your", |  | ||||||
| 	        "adjective": "yours", |  | ||||||
| 	        "reflexive": "yourselves" |  | ||||||
| 	      }; |  | ||||||
| 	    case "third-plural": |  | ||||||
| 	      return { |  | ||||||
| 	        "subjective": "they", |  | ||||||
| 	        "objective": "them", |  | ||||||
| 	        "possessive": "their", |  | ||||||
| 	        "adjective": "theirs", |  | ||||||
| 	        "reflexive": "themselves" |  | ||||||
| 	      }; |  | ||||||
| 	    case "other": |  | ||||||
| 	      return other; |  | ||||||
| 	  } |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function replacePronounSet(keyCapital, key, pronoun) { |  | ||||||
| 	  if (pronoun === undefined) { return; } |  | ||||||
| 	  escapeAndReplace(keyCapital, capitalize(pronoun), true); |  | ||||||
| 	  escapeAndReplace(key, pronoun, true); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function replacePov(options) { |  | ||||||
| 	  let pronouns; |  | ||||||
| 	  switch (options.pov) { |  | ||||||
| 	    case "": |  | ||||||
| 	      return; |  | ||||||
| 	    case "third": |  | ||||||
| 	      pronouns = getPronouns(options.preset, options.other); |  | ||||||
| 	      replacePronounSet("Pov/S", "pov/S", options.name); |  | ||||||
| 	      replacePronounSet("Pov/O", "pov/O", options.name); |  | ||||||
| 	      replacePronounSet("Pov/P", "pov/P", options.name + "'s"); |  | ||||||
| 	      replacePronounSet("Pov/A", "pov/A", options.name + "'s"); |  | ||||||
| 	      replacePronounSet("Pov/R", "pov/R", options.name + "'s self"); |  | ||||||
| 	      break; |  | ||||||
| 	    default: |  | ||||||
| 	      pronouns = getPronouns(options.pov, null); |  | ||||||
| 	      replacePronounSet("Pov/S", "pov/S", pronouns["subjective"]); |  | ||||||
| 	      replacePronounSet("Pov/O", "pov/O", pronouns["objective"]); |  | ||||||
| 	      replacePronounSet("Pov/P", "pov/P", pronouns["possessive"]); |  | ||||||
| 	      replacePronounSet("Pov/A", "pov/A", pronouns["adjective"]); |  | ||||||
| 	      replacePronounSet("Pov/R", "pov/R", pronouns["reflexive"]); |  | ||||||
| 	  } |  | ||||||
| 	  replacePronounSet("Pov/s", "pov/s", pronouns["subjective"]); |  | ||||||
| 	  replacePronounSet("Pov/o", "pov/o", pronouns["objective"]); |  | ||||||
| 	  replacePronounSet("Pov/p", "pov/p", pronouns["possessive"]); |  | ||||||
| 	  replacePronounSet("Pov/a", "pov/a", pronouns["adjective"]); |  | ||||||
| 	  replacePronounSet("Pov/r", "pov/r", pronouns["reflexive"]); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function replacePlv(options) { |  | ||||||
| 	  if (options.pov == "") { return; } |  | ||||||
| 	  let pronouns = getPronouns(options.pov + "-plural", null); |  | ||||||
| 	  replacePronounSet("Plv/s", "plv/s", pronouns["subjective"]); |  | ||||||
| 	  replacePronounSet("Plv/o", "plv/o", pronouns["objective"]); |  | ||||||
| 	  replacePronounSet("Plv/p", "plv/p", pronouns["possessive"]); |  | ||||||
| 	  replacePronounSet("Plv/a", "plv/a", pronouns["adjective"]); |  | ||||||
| 	  replacePronounSet("Plv/r", "plv/r", pronouns["reflexive"]); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function replaceAlso(options) { |  | ||||||
| 	  Object.entries(options.also).forEach(([key, value]) => { |  | ||||||
| 	    escapeAndReplace(key, value, true); |  | ||||||
| 	  }); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function escapeAndReplace(input_word, replace_value, case_sensitive) { |  | ||||||
| 	  let input_word_escaped = input_word.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); |  | ||||||
| 	  const flags = case_sensitive ? "g" : "ig"; |  | ||||||
| 	  if (input_word_escaped[0].match(/[a-z]/i)) { |  | ||||||
| 	    input_word_escaped = `\\b${input_word_escaped}`; |  | ||||||
| 	  } |  | ||||||
| 	  if (input_word_escaped[input_word_escaped.length - 1].match((/[a-z]/i))) { |  | ||||||
| 	    input_word_escaped = `${input_word_escaped}\\b`; |  | ||||||
| 	  } |  | ||||||
| 	  const regexp_input_word = new RegExp(input_word_escaped, flags); |  | ||||||
| 	  walk(document.body, regexp_input_word, replace_value, directMethod); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function walk(node, input_word, replace_value, replaceMethod) { |  | ||||||
| 	  if (node.contentEditable == "true" || node.type == "textarea" || node.type == "input") { return; } |  | ||||||
| 	  let child, next; |  | ||||||
| 	  switch (node.nodeType) { |  | ||||||
| 	    case 1:  /* ELEMENT_NODE */ |  | ||||||
| 	    case 9:  /* DOCUMENT_NODE */ |  | ||||||
| 	    case 11: /* DOCUMENT_FRAGMENT_NODE */ |  | ||||||
| 	      child = node.firstChild; |  | ||||||
| 	      while (child) { |  | ||||||
| 	        next = child.nextSibling; |  | ||||||
| 	        walk(child, input_word, replace_value, replaceMethod); |  | ||||||
| 	        child = next; |  | ||||||
| 	      } |  | ||||||
| 	      break; |  | ||||||
| 	    case 3: /* TEXT_NODE */ |  | ||||||
| 	      replaceMethod(node, input_word, replace_value); |  | ||||||
| 	  } |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function directMethod(node, input_word, replace_value) { |  | ||||||
| 	  node.nodeValue = node.nodeValue.replace(input_word, replace_value); // TODO might replaceall work better here?;
 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// TODO do something about options being not input_word
 |  | ||||||
| 	function verbMethod(node, regexp, options) { |  | ||||||
| 	  let match = node.nodeValue.match(regexp); |  | ||||||
| 	  if (match == null) { return; } |  | ||||||
| 	  const verb = match[1]; |  | ||||||
| 	  const tense = match[2].toUpperCase().replaceAll(" ", "_"); |  | ||||||
| 	  const replace_value = verbsHelper.getConjugation(null, verb, tense, getPovIndex(options)); |  | ||||||
| 	  node.nodeValue = node.nodeValue.replace(regexp, replace_value); |  | ||||||
| 	  verbMethod(node, regexp, options); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function pluralThirdVerbMethod(node, regexp, options) { |  | ||||||
| 	  let match = node.nodeValue.match(regexp); |  | ||||||
| 	  if (match == null) { return }	  const before = match[1]; |  | ||||||
| 	  match[4]; |  | ||||||
| 	  const wasBefore = !(before === undefined); |  | ||||||
| 	  let verb, tense; |  | ||||||
| 	  if (wasBefore) { |  | ||||||
| 	    verb = match[2]; |  | ||||||
| 	    tense = match[3]; |  | ||||||
| 	  } else { |  | ||||||
| 	    verb = match[5]; |  | ||||||
| 	    tense = match[6]; |  | ||||||
| 	  } |  | ||||||
| 	  tense = tense.toUpperCase().replaceAll(" ", "_"); |  | ||||||
| 	  const replace_verb = verbsHelper.getConjugation(null, verb, tense, 2); |  | ||||||
| 	  let replace_value; |  | ||||||
| 	  if (wasBefore) { |  | ||||||
| 	    replace_value = options["name"] + " " + replace_verb; |  | ||||||
| 	  } else { |  | ||||||
| 	    replace_value = replace_verb + " " + options["name"]; |  | ||||||
| 	  } |  | ||||||
| 	  node.nodeValue = node.nodeValue.replace(regexp, replace_value); |  | ||||||
| 	  pluralThirdVerbMethod(node, regexp, options); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	function capitalize(word) { |  | ||||||
| 	  return word.charAt(0).toUpperCase() + word.slice(1); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// TODO figure out plv for this
 |  | ||||||
| 	function getPovIndex(options) { |  | ||||||
| 	  switch (options.pov) { |  | ||||||
| 	    case "first": |  | ||||||
| 	      return 0; |  | ||||||
| 	    case "second": |  | ||||||
| 	      return 1; |  | ||||||
| 	    case "third": |  | ||||||
| 	      if (getPronouns(options.preset, options.other).plurality == "singular") { |  | ||||||
| 	        return 2; |  | ||||||
| 	      } else { /* Plurality is plural, "they go" */ |  | ||||||
| 	        return 5; |  | ||||||
| 	      } |  | ||||||
| 	  } |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	replaceAll(); |  | ||||||
| 	return replaceWords$1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| var replaceWordsExports = requireReplaceWords(); |  | ||||||
| var replaceWords = /*@__PURE__*/getDefaultExportFromCjs(replaceWordsExports); |  | ||||||
| 
 |  | ||||||
| module.exports = replaceWords; |  | ||||||
							
								
								
									
										133
									
								
								src/popup.css
								
								
								
								
							
							
						
						
									
										133
									
								
								src/popup.css
								
								
								
								
							|  | @ -22,6 +22,20 @@ | ||||||
|   --color-l-gray-140: hsla(33, 54%, 17%, 1); |   --color-l-gray-140: hsla(33, 54%, 17%, 1); | ||||||
|   --color-l-alpha-gray: hsla(34, 37%, 70%, 0.15); |   --color-l-alpha-gray: hsla(34, 37%, 70%, 0.15); | ||||||
| 
 | 
 | ||||||
|  |   /* Green */ | ||||||
|  |   --color-l-green-10: hsla(148, 30%, 65%, 1); | ||||||
|  |   --color-l-green-20: hsla(148, 48%, 47%, 1); | ||||||
|  |   --color-l-green-30: hsla(149, 50%, 39%, 1); | ||||||
|  |   --color-l-green-40: hsla(153, 65%, 29%, 1); | ||||||
|  |   --color-l-alpha-green: hsla(74, 69%, 44%, 0.2); | ||||||
|  | 
 | ||||||
|  |   /* Red */ | ||||||
|  |   --color-l-red-10: hsla(4, 59%, 64%, 1); | ||||||
|  |   --color-l-red-20: hsla(4, 72%, 55%, 1); | ||||||
|  |   --color-l-red-30: hsla(4, 56%, 48%, 1); | ||||||
|  |   --color-l-red-40: hsla(4, 72%, 35%, 1); | ||||||
|  |   --color-l-alpha-red: hsla(350, 84%, 63%, 0.2); | ||||||
|  | 
 | ||||||
|   --text-color: var(--color-l-gray-120); |   --text-color: var(--color-l-gray-120); | ||||||
|   --desc-color: var(--color-l-gray-100); |   --desc-color: var(--color-l-gray-100); | ||||||
|   --placeholder-color: var(--color-l-gray-70); |   --placeholder-color: var(--color-l-gray-70); | ||||||
|  | @ -96,15 +110,16 @@ input:focus { | ||||||
| 
 | 
 | ||||||
| select { | select { | ||||||
|   padding: 6px; |   padding: 6px; | ||||||
|  |   padding-right: 26px; | ||||||
|   box-shadow: var(--shadow); |   box-shadow: var(--shadow); | ||||||
|  |   appearance: none; | ||||||
|  |   background: url("data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%23655134\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m7 15 5 5 5-5\"/><path d=\"m7 9 5-5 5 5\"/></svg>") no-repeat; | ||||||
|  |   background-position-x: calc(100% - 2px); | ||||||
|  |   background-position-y: calc(50% - 2px); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| select:active { | select:active, select:focus { | ||||||
|   transition: 0.1s; |   outline: none; | ||||||
|   box-shadow: var(--shadow-active); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| select:focus { |  | ||||||
|   box-shadow: var(--shadow-focus); |   box-shadow: var(--shadow-focus); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -192,6 +207,11 @@ html { | ||||||
|   scrollbar-color: var(--scrollbar-color) transparent; |   scrollbar-color: var(--scrollbar-color) transparent; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | h1 { | ||||||
|  |   font-size: var(--large-text); | ||||||
|  |   font-weight: 600; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| ul { | ul { | ||||||
|   list-style: none; |   list-style: none; | ||||||
|   padding-left: 0; |   padding-left: 0; | ||||||
|  | @ -207,55 +227,59 @@ ul { | ||||||
|   margin-bottom: 20px; |   margin-bottom: 20px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #button-grid > button { | button:not(.delete) { | ||||||
|   display: flex; |   display: flex; | ||||||
|   justify-content: center; |   justify-content: center; | ||||||
|   align-items: center; |   align-items: center; | ||||||
|   font-weight: 600; |   font-weight: 600; | ||||||
|   border: 1px solid var(--border-color); |   border: 1px solid var(--border-color); | ||||||
|   border-radius: .5em; |  | ||||||
|   width: 100%; |  | ||||||
|   font-size: var(--large-text); |   font-size: var(--large-text); | ||||||
|   padding: 6px; |   padding: 6px; | ||||||
|  |   cursor: pointer; | ||||||
|  |   box-shadow: var(--shadow); | ||||||
|  |   background-color: var(--color-l-gray-20); | ||||||
|  |   color: var(--text-color); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #button-grid > button { | ||||||
|  |   border-radius: .5em; | ||||||
|  |   width: 100%; | ||||||
|   margin-top: 6px; |   margin-top: 6px; | ||||||
|   margin-bottom: 6px; |   margin-bottom: 6px; | ||||||
|   gap: 8px; |   gap: 8px; | ||||||
|   text-align: center; |   text-align: center; | ||||||
|   cursor: pointer; |  | ||||||
|   box-shadow: var(--shadow); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #button-grid > button > svg { | button > svg { | ||||||
|   width: 24px; |   transform: translateY(-.15em); | ||||||
|   height: 24px; |  | ||||||
|   transform: translateY(-10%); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #button-grid > button > p { | #button-grid > button > p { | ||||||
|   margin: 0; |   margin: 0; | ||||||
|   font-family: 'Inter', sans-serif; |   font-family: 'Inter', sans-serif; | ||||||
|   font-feature-settings: var(--font-features); |   font-feature-settings: var(--font-features); | ||||||
|   transform: translateY(-10%); |   transform: translateY(-.15em); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #button-grid > button:hover { | button:not(.delete):hover { | ||||||
|   transition-duration: 0.3s; |   transition-duration: 0.3s; | ||||||
|   box-shadow: var(--shadow-hover); |   box-shadow: var(--shadow-hover); | ||||||
|  |   background-color: var(--color-l-gray-10); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #button-grid > button:active { | button:not(.delete):active { | ||||||
|   transition: 0.3s; |   transition: 0.3s; | ||||||
|   box-shadow: var(--shadow-active); |   box-shadow: var(--shadow-active); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #button-grid > button:active > p { | #button-grid > button:active > p { | ||||||
|   transition: 0.3s; |   transition: 0.3s; | ||||||
|   transform: translateY(0%); |   transform: translateY(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #button-grid > button:active > svg { | button:not(.delete):active > svg { | ||||||
|   transition: 0.3s; |   transition: 0.3s; | ||||||
| transform: translateY(0%); |   transform: translateY(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Save button */ | /* Save button */ | ||||||
|  | @ -272,20 +296,6 @@ transform: translateY(0%); | ||||||
|   background-color: var(--color-l-gray-90); |   background-color: var(--color-l-gray-90); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Restore button */ |  | ||||||
| #restore { |  | ||||||
|   background-color: var(--color-l-gray-20); |  | ||||||
|   color: var(--text-color); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #restore:hover { |  | ||||||
|   background-color: var(--color-l-gray-10); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #restore:active { |  | ||||||
|   background-color: var(--color-l-gray-20); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| .visually-hidden { | .visually-hidden { | ||||||
|  | @ -303,25 +313,53 @@ transform: translateY(0%); | ||||||
| /* Site enabled section */ | /* Site enabled section */ | ||||||
| 
 | 
 | ||||||
| #site-enabled { | #site-enabled { | ||||||
|   display: none; /* TODO Actually do this section! */ |   display: flex; | ||||||
|   grid-template-columns: 2fr 1fr; |   justify-content: space-between; | ||||||
|   background-color: var(--color-l-gray-10); |   background-color: var(--color-l-gray-10); | ||||||
|   padding: 10px; |   padding: 10px; | ||||||
|   border: 0; |   border: 1px solid var(--border-color); | ||||||
|   border-radius: .5em; |   border-radius: .5em; | ||||||
|  |   margin-top: var(--small-text); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #hostname { | #state { | ||||||
|   font-size: var(--large-text); |   color: var(--color-l-red-20); | ||||||
|   font-weight: 400; |   transition: .3s; | ||||||
|   text-align: center; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #site-enabled svg { | #state.is-on { | ||||||
|   width: 50%; |   color: var(--color-l-green-20); | ||||||
|   justify-self: center; |   transition: .3s; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #toggle { | ||||||
|  |   border-radius: 3em; | ||||||
|  |   padding: 12px; | ||||||
|   align-self: center; |   align-self: center; | ||||||
|   cursor: pointer; |   margin-right: 5px; | ||||||
|  |   background-color: var(--color-l-red-20); | ||||||
|  |   color: var(--color-l-gray-10); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #toggle:hover { | ||||||
|  | background-color: var(--color-l-red-10); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #toggle:active { | ||||||
|  | background-color: var(--color-l-red-20); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #toggle.is-on { | ||||||
|  |   background-color: var(--color-l-green-20); | ||||||
|  |   color: var(--color-l-gray-10); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #toggle.is-on:hover { | ||||||
|  |   background-color: var(--color-l-green-10); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #toggle.is-on:active { | ||||||
|  |   background-color: var(--color-l-green-20); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -331,7 +369,7 @@ transform: translateY(0%); | ||||||
| #configuration { | #configuration { | ||||||
|   background-color: var(--color-l-gray-10); |   background-color: var(--color-l-gray-10); | ||||||
|   padding: 10px; |   padding: 10px; | ||||||
|   border: 0; |   border: 1px solid var(--border-color); | ||||||
|   border-radius: .5em; |   border-radius: .5em; | ||||||
|   margin-top: var(--small-text); |   margin-top: var(--small-text); | ||||||
| } | } | ||||||
|  | @ -418,7 +456,6 @@ label { | ||||||
| a { | a { | ||||||
|   color: var(--link-color); |   color: var(--link-color); | ||||||
|   text-decoration: underline; |   text-decoration: underline; | ||||||
|   text-underline-offset: 2px; |  | ||||||
|   transition-duration: 0.3s; |   transition-duration: 0.3s; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -9,9 +9,13 @@ | ||||||
|   <body> |   <body> | ||||||
|     <main> |     <main> | ||||||
|       <div id="site-enabled"> |       <div id="site-enabled"> | ||||||
|         <h1 id="hostname">mycoolsite.com</h1> |         <div> | ||||||
|         <!--<p>Enable the site bla bla</p>--> |           <h1 id="domain">example.com</h1> | ||||||
|         <img src="img/toggle-on.svg" alt="Toggle to disable"/> |           <p>MetamorPOV replacements are <b id="state">disabled</b> for this website</p> | ||||||
|  |         </div> | ||||||
|  |         <button type="button" id="toggle" title="Toggle to enable"> | ||||||
|  |           <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v10"/><path d="M18.4 6.6a9 9 0 1 1-12.77.04"/></svg> | ||||||
|  |         </button> | ||||||
|       </div> |       </div> | ||||||
| 
 | 
 | ||||||
|       <div id="configuration"> |       <div id="configuration"> | ||||||
|  |  | ||||||
							
								
								
									
										54
									
								
								src/popup.js
								
								
								
								
							
							
						
						
									
										54
									
								
								src/popup.js
								
								
								
								
							|  | @ -1,12 +1,63 @@ | ||||||
| document.addEventListener("DOMContentLoaded", init); | document.addEventListener("DOMContentLoaded", init); | ||||||
| 
 | 
 | ||||||
| function init() { | function init() { | ||||||
|  |   loadDomain(); | ||||||
|  |   document.querySelector("#toggle").addEventListener("click", toggle); | ||||||
|  | 
 | ||||||
|   restore(); |   restore(); | ||||||
|   document.querySelector("#preset").addEventListener("change", showOther); |   document.querySelector("#preset").addEventListener("change", showOther); | ||||||
|   document.querySelector("#options").addEventListener("submit", save); |   document.querySelector("#options").addEventListener("submit", save); | ||||||
|   document.querySelector("#restore").addEventListener("click", restore); |   document.querySelector("#restore").addEventListener("click", restore); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /*TODO except browser like about*/ | ||||||
|  | /* Loads and displays information about the current domain */ | ||||||
|  | function loadDomain() { | ||||||
|  |   let tabs = browser.tabs.query({ active: true, currentWindow: true }); | ||||||
|  |   tabs.then((tabs) => { | ||||||
|  |     const hostname = new URL(tabs[0].url).hostname; | ||||||
|  |     document.querySelector("#domain").innerHTML = hostname; | ||||||
|  | 
 | ||||||
|  |     let storage = browser.storage.local.get("domains"); | ||||||
|  |     storage.then((storage) => { | ||||||
|  |       const hostname = document.querySelector("#domain").innerHTML; | ||||||
|  |       const domains = storage.domains; | ||||||
|  |       if (domains === undefined) { | ||||||
|  |         browser.storage.local.set({"domains": []}); | ||||||
|  |       } | ||||||
|  |       else if (domains.includes(hostname)) { | ||||||
|  |         toggleButton(); | ||||||
|  |       } | ||||||
|  |     }, logError); | ||||||
|  |   }, logError); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Adds or removes the current domain from storage */ | ||||||
|  | function toggle() { | ||||||
|  |   let storage = browser.storage.local.get("domains"); | ||||||
|  |   storage.then((storage) => { | ||||||
|  |     const hostname = document.querySelector("#domain").innerHTML; | ||||||
|  |     let domains = storage.domains; | ||||||
|  |     const index = domains.indexOf(hostname); | ||||||
|  |     if (index > -1) { | ||||||
|  |       domains.splice(index, 1); | ||||||
|  |     } else { | ||||||
|  |       domains.push(hostname); | ||||||
|  |     } | ||||||
|  |     browser.storage.local.set({"domains": domains}); | ||||||
|  |   }, logError); | ||||||
|  |   toggleButton(); | ||||||
|  |   browser.tabs.reload(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Toggles the displayed button state */ | ||||||
|  | function toggleButton() { | ||||||
|  |   document.querySelector("#toggle").classList.toggle("is-on"); | ||||||
|  |   let state = document.querySelector("#state"); | ||||||
|  |   state.classList.toggle("is-on"); | ||||||
|  |   state.innerHTML == "disabled" ? state.innerHTML = "enabled" : state.innerHTML = "disabled"; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Gets saved options and loads them */ | /* Gets saved options and loads them */ | ||||||
| function restore() { | function restore() { | ||||||
|   let options = browser.storage.local.get(); |   let options = browser.storage.local.get(); | ||||||
|  | @ -121,7 +172,8 @@ function createLi(index) { | ||||||
| 
 | 
 | ||||||
|   const button = document.createElement("button"); |   const button = document.createElement("button"); | ||||||
|   button.type = "button"; |   button.type = "button"; | ||||||
|   button.id = "delete"; |   button.id = "delete-" + index; | ||||||
|  |   button.className = "delete" | ||||||
|   button.innerHTML = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2z\"/><path d=\"m12 9 6 6\"/><path d=\"m18 9-6 6\"/></svg>"; |   button.innerHTML = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M10 5a2 2 0 0 0-1.344.519l-6.328 5.74a1 1 0 0 0 0 1.481l6.328 5.741A2 2 0 0 0 10 19h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2z\"/><path d=\"m12 9 6 6\"/><path d=\"m18 9-6 6\"/></svg>"; | ||||||
|   button.addEventListener("click", removeLi); |   button.addEventListener("click", removeLi); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,5 +1,3 @@ | ||||||
| //PAUSED_KEY = 'pause-this-domain-pls-interactive-fics-yalla-bina';
 |  | ||||||
| 
 |  | ||||||
| const verbsHelper = require('english-verbs-helper'); | const verbsHelper = require('english-verbs-helper'); | ||||||
| 
 | 
 | ||||||
| browser.runtime.onMessage.addListener((message, sender, sendResponse) => { | browser.runtime.onMessage.addListener((message, sender, sendResponse) => { | ||||||
|  | @ -15,8 +13,11 @@ function replaceAll() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function replaceAllInStorage(options) { | function replaceAllInStorage(options) { | ||||||
|   //const hostname = window.location.hostname
 |   const hostname = window.location.hostname; | ||||||
|   //const is_paused = options[PAUSED_KEY] && options[PAUSED_KEY].indexOf(hostname) !== -1
 |   if (!options.domains.includes(hostname)) { | ||||||
|  |     return; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   if (true) { // change paused later to only care about hostname
 |   if (true) { // change paused later to only care about hostname
 | ||||||
|     replaceVerbs(options); |     replaceVerbs(options); | ||||||
|     replaceName(options); |     replaceName(options); | ||||||
|  | @ -33,7 +34,9 @@ function replaceName(options) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function replaceVerbs(options) { | function replaceVerbs(options) { | ||||||
|   if (getPronouns(options.preset, options.other).plurality == "plural") { |   const isPlural = getPronouns(options.preset, options.other).plurality == "plural"; | ||||||
|  |   const isPluralThird = isPlural && options.pov == "third"; | ||||||
|  |   if (isPluralThird) { | ||||||
|     const regexp = /([Pp])(?:rn|ov)\/S [Vv]rb\/([\w\s]+)\/([\w\s]+)\/|[Vv]rb\/([\w\s]+)\/([\w\s]+)\/ ([Pp])(?:rn|ov)\/S/; |     const regexp = /([Pp])(?:rn|ov)\/S [Vv]rb\/([\w\s]+)\/([\w\s]+)\/|[Vv]rb\/([\w\s]+)\/([\w\s]+)\/ ([Pp])(?:rn|ov)\/S/; | ||||||
|     walk(document.body, regexp, options, pluralThirdVerbMethod); |     walk(document.body, regexp, options, pluralThirdVerbMethod); | ||||||
|   } |   } | ||||||
|  | @ -242,7 +245,7 @@ function verbMethod(node, regexp, options) { | ||||||
| 
 | 
 | ||||||
| function pluralThirdVerbMethod(node, regexp, options) { | function pluralThirdVerbMethod(node, regexp, options) { | ||||||
|   let match = node.nodeValue.match(regexp); |   let match = node.nodeValue.match(regexp); | ||||||
|   if (match == null) { return }; |   if (match == null) { return; } | ||||||
|   const before = match[1]; |   const before = match[1]; | ||||||
|   const after = match[4]; |   const after = match[4]; | ||||||
|   const wasBefore = !(before === undefined); |   const wasBefore = !(before === undefined); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue