/** * Options Page (Other) * Belongs to LocalCDN * * @author nobody * @since 2021-02-19 * * @license MPL 2.0 * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ 'use strict'; /** * Options (Other) */ let optionsOther = {}; /** * Private Methods */ optionsOther._renderIconSection = function (opt) { let url, bgColor, txtColor, selectedIcon; if (!chrome.browserAction.setIcon) { document.getElementById('icon-style-div').style.display = 'none'; return; } if (opt.selectedIcon === null || opt.selectedIcon === undefined) { selectedIcon = 'Default'; } else { selectedIcon = opt.selectedIcon; } if (selectedIcon === 'Default') { document.getElementById('icon-default').checked = true; } else if (selectedIcon === 'Grey') { document.getElementById('icon-grey').checked = true; } else if (selectedIcon === 'Light') { document.getElementById('icon-light').checked = true; } url = chrome.runtime.getURL(`icons/action/${selectedIcon.toLowerCase()}/icon38-default.png`); document.getElementById(BadgeSetting.HTML_ICON_BADGE_PREVIEW).src = url; document.getElementById(BadgeSettingHTMLFilter.HTML_ICON_BADGE_PREVIEW).src = url; document.getElementById(BadgeSettingMissingResource.HTML_ICON_BADGE_PREVIEW).src = url; bgColor = opt.badgeDefaultBackgroundColor; txtColor = opt.badgeDefaultTextColor; optionsOther._createBadge(BadgeSetting, bgColor, txtColor); bgColor = opt.badgeHTMLFilterBackgroundColor; txtColor = opt.badgeHTMLfilterTextColor; optionsOther._createBadge(BadgeSettingHTMLFilter, bgColor, txtColor); bgColor = opt.badgeMissingResourceBackgroundColor; txtColor = opt.badgeMissingResourceTextColor; optionsOther._createBadge(BadgeSettingMissingResource, bgColor, txtColor); }; optionsOther._createBadge = function (element, bgColor, txtColor) { document.getElementById(element.COUNTER_PREVIEW_BADGE).style.backgroundColor = bgColor; document.getElementById(element.PRE_BADGED_BACKGROUND_COLOR).style.backgroundColor = bgColor; document.getElementById(element.BADGED_BACKGROUND_COLOR).value = bgColor; document.getElementById(element.COUNTER_PREVIEW_BADGE).style.color = txtColor; document.getElementById(element.PRE_BADGED_TEXT_COLOR).style.backgroundColor = txtColor; document.getElementById(element.BADGED_TEXT_COLOR).value = txtColor; document.getElementById(element.BADGED_BACKGROUND_COLOR).addEventListener('keyup', optionsOther._onChangedHexColor); document.getElementById(element.BADGED_TEXT_COLOR).addEventListener('keyup', optionsOther._onChangedHexColor); document.getElementById(element.RESTORE_BACKGROUND_COLOR).addEventListener('click', optionsOther._setDefaultColor); document.getElementById(element.RESTORE_TEXT_COLOR).addEventListener('click', optionsOther._setDefaultColor); optionsOther._colorPicker(element); }; optionsOther._renderStorageSection = function (opt) { document.getElementById('sync-help').addEventListener('click', function () { options._onLinkClick(`${Links.FAQ}#sync`); }); document.getElementById('storage-type-local').addEventListener('change', optionsOther._onStorageOptionChanged); document.getElementById('storage-type-sync').addEventListener('change', optionsOther._onStorageOptionChanged); document.getElementById('export-data').addEventListener('click', storageManager.export); document.getElementById('import-data').addEventListener('click', storageManager.startImportFilePicker); document.getElementById('import-file-picker').addEventListener('change', storageManager.handleImportFilePicker); optionsOther._preSelectStorage(opt.storageType); }; optionsOther._setIcon = function (optionValue) { wrappers.setIcon({'path': optionValue}, 'Enabled'); let url = chrome.runtime.getURL(`icons/action/${optionValue.toLowerCase()}/icon38-default.png`); document.getElementById(BadgeSetting.HTML_ICON_BADGE_PREVIEW).src = url; document.getElementById(BadgeSettingHTMLFilter.HTML_ICON_BADGE_PREVIEW).src = url; document.getElementById(BadgeSettingMissingResource.HTML_ICON_BADGE_PREVIEW).src = url; }; optionsOther._preSelectStorage = function (type) { if (type === 'local') { document.getElementById('storage-type-local').checked = true; } else { document.getElementById('storage-type-sync').checked = true; } }; optionsOther._onStorageOptionChanged = function ({target}) { chrome.storage.local.set({ [Setting.STORAGE_TYPE]: target.value, }); if (target.value === 'local') { storageManager.migrateData('local'); } else { optionsOther._fetchSyncData(); } }; optionsOther._fetchSyncData = function () { if (confirm('Fetch remote data now?')) { storageManager.migrateData('sync-fetch'); } else { storageManager.migrateData('sync'); } }; optionsOther._colorPicker = function (element) { /* eslint-disable no-undef, no-invalid-this */ const badgeBackgroundColor = new CP(document.getElementById(element.BADGED_BACKGROUND_COLOR)); badgeBackgroundColor.on('change', function (r, g, b) { this.source.value = this.color(r, g, b); }); badgeBackgroundColor.on('drag', function (r, g, b) { let bgColor = this.color(r, g, b); wrappers.setBadgeBackgroundColor({'color': bgColor, 'type': element.TYPE}); this.source.value = bgColor; document.getElementById(element.COUNTER_PREVIEW_BADGE).style.backgroundColor = bgColor; document.getElementById(element.PRE_BADGED_BACKGROUND_COLOR).style.backgroundColor = bgColor; }); const badgeDefaultTextColor = new CP(document.getElementById(element.BADGED_TEXT_COLOR)); badgeDefaultTextColor.on('change', function (r, g, b) { this.source.value = this.color(r, g, b); }); badgeDefaultTextColor.on('drag', function (r, g, b) { let txtColor = this.color(r, g, b); wrappers.setBadgeTextColor({'color': txtColor, 'type': element.TYPE}); this.source.value = txtColor; document.getElementById(element.COUNTER_PREVIEW_BADGE).style.color = txtColor; document.getElementById(element.PRE_BADGED_TEXT_COLOR).style.backgroundColor = txtColor; }); /* eslint-enable no-undef, no-invalid-this */ }; optionsOther._setDefaultColor = function ({target}) { let element = optionsOther._getBadgeElement(target.id); if (element === undefined) { return; } if (target.id === element.RESTORE_TEXT_COLOR) { let txtColor = element.HEX_TEXT_COLOR; wrappers.setBadgeTextColor({'type': element.TYPE, 'color': txtColor}); document.getElementById(element.COUNTER_PREVIEW_BADGE).style.color = txtColor; document.getElementById(element.PRE_BADGED_TEXT_COLOR).style.backgroundColor = txtColor; document.getElementById(element.BADGED_TEXT_COLOR).value = txtColor; } else if (target.id === element.RESTORE_BACKGROUND_COLOR) { let bgColor = element.HEX_BACKGROUND_COLOR; wrappers.setBadgeBackgroundColor({'type': element.TYPE, 'color': bgColor}); document.getElementById(element.COUNTER_PREVIEW_BADGE).style.backgroundColor = bgColor; document.getElementById(element.PRE_BADGED_BACKGROUND_COLOR).style.backgroundColor = bgColor; document.getElementById(element.BADGED_BACKGROUND_COLOR).value = bgColor; } }; optionsOther._onChangedHexColor = function ({target}) { let element = optionsOther._getBadgeElement(target.id); if (element === undefined) { return; } if ((/#([a-f0-9]{3}){1,2}\b/i).test(target.value)) { target.classList.remove('color-error'); if (target.id === element.BADGED_TEXT_COLOR) { let txtColor = target.value; document.getElementById(element.COUNTER_PREVIEW_BADGE).style.color = txtColor; document.getElementById(element.PRE_BADGED_TEXT_COLOR).style.backgroundColor = txtColor; } else if (target.id === element.BADGED_BACKGROUND_COLOR) { let bgColor = target.value; document.getElementById(element.COUNTER_PREVIEW_BADGE).style.backgroundColor = bgColor; document.getElementById(element.PRE_BADGED_BACKGROUND_COLOR).style.backgroundColor = bgColor; } } else { target.classList.add('color-error'); } }; optionsOther._getBadgeElement = function (targetId) { switch (targetId) { case BadgeSetting.BADGED_TEXT_COLOR: case BadgeSetting.BADGED_BACKGROUND_COLOR: case BadgeSetting.RESTORE_TEXT_COLOR: case BadgeSetting.RESTORE_BACKGROUND_COLOR: return BadgeSetting; case BadgeSettingHTMLFilter.BADGED_TEXT_COLOR: case BadgeSettingHTMLFilter.BADGED_BACKGROUND_COLOR: case BadgeSettingHTMLFilter.RESTORE_TEXT_COLOR: case BadgeSettingHTMLFilter.RESTORE_BACKGROUND_COLOR: return BadgeSettingHTMLFilter; case BadgeSettingMissingResource.BADGED_TEXT_COLOR: case BadgeSettingMissingResource.BADGED_BACKGROUND_COLOR: case BadgeSettingMissingResource.RESTORE_TEXT_COLOR: case BadgeSettingMissingResource.RESTORE_BACKGROUND_COLOR: return BadgeSettingMissingResource; default: return undefined; } }; optionsOther.init = function (opt) { if (BrowserType.CHROMIUM) { document.getElementById('div-badged-text-color').style.display = 'none'; document.getElementById('html-div-badged-text-color').style.display = 'none'; document.getElementById('missing-div-badged-text-color').style.display = 'none'; } document.getElementById('icon-default').addEventListener('change', options.onOptionChanged); document.getElementById('icon-grey').addEventListener('change', options.onOptionChanged); document.getElementById('icon-light').addEventListener('change', options.onOptionChanged); optionsOther._renderIconSection(opt); optionsOther._renderStorageSection(opt); document.getElementById('badged-background-color').addEventListener('change', options.onOptionChanged); document.getElementById('badged-text-color').addEventListener('change', options.onOptionChanged); document.getElementById('html-badged-background-color').addEventListener('change', options.onOptionChanged); document.getElementById('html-badged-text-color').addEventListener('change', options.onOptionChanged); }; optionsOther._platformSupportIcons = true;