diff --git a/src/js/exports.js b/src/js/exports.js index 055cd98..c7d759d 100644 --- a/src/js/exports.js +++ b/src/js/exports.js @@ -16,7 +16,7 @@ export async function injectTab({ // Get Current Tab const [tab] = await chrome.tabs.query({ currentWindow: true, active: true }) - console.log(`tab: ${tab.id}`, tab) + console.debug(`tab: ${tab.id}`, tab) // Create URL to links.html const url = new URL(chrome.runtime.getURL('../html/links.html')) @@ -40,7 +40,7 @@ export async function injectTab({ }) // Open Tab to links.html with desired params - console.log(`url: ${url.toString()}`) + console.debug(`url: ${url.toString()}`) await chrome.tabs.create({ active: true, url: url.toString() }) } @@ -51,7 +51,7 @@ export async function injectTab({ */ export function updateOptions(options) { for (const [key, value] of Object.entries(options)) { - // console.log(`${key}: ${value}`) + // console.debug(`${key}: ${value}`) const el = document.getElementById(key) if (el) { if (typeof value === 'boolean') { diff --git a/src/js/extract.js b/src/js/extract.js index 5866d19..12fcbdc 100644 --- a/src/js/extract.js +++ b/src/js/extract.js @@ -14,7 +14,7 @@ if (!window.injected) { * @param {Function} sendResponse */ function onMessage(message, sender, sendResponse) { - console.log(`onMessage: message: ${message}`) + console.debug(`onMessage: message: ${message}`) if (message === 'all') { sendResponse(extractAllLinks()) } else if (message === 'selection') { @@ -30,14 +30,14 @@ function onMessage(message, sender, sendResponse) { * @return {Array} */ function extractAllLinks() { - console.log('extractAllLinks') + console.debug('extractAllLinks') const links = [] for (const element of document.links) { if (element.href) { pushElement(links, element) } } - console.log('links:', links) + console.debug('links:', links) return links } @@ -47,10 +47,10 @@ function extractAllLinks() { * @return {Array} */ function extractSelection() { - console.log('extractSelection') + console.debug('extractSelection') const links = [] const selection = window.getSelection() - console.log('selection:', selection) + console.debug('selection:', selection) if (selection?.type !== 'Range') { console.log('No selection or wrong selection.type') return links @@ -66,7 +66,7 @@ function extractSelection() { } }) } - console.log('links:', links) + console.debug('links:', links) return links } diff --git a/src/js/links.js b/src/js/links.js index 984b8e9..7422128 100644 --- a/src/js/links.js +++ b/src/js/links.js @@ -39,7 +39,7 @@ async function initLinks() { try { const tabId = parseInt(urlParams.get('tab')) const selection = urlParams.has('selection') - console.log(`tabId: ${tabId}, selection: ${selection}`) + console.debug(`tabId: ${tabId}, selection: ${selection}`) if (tabId) { const action = selection ? 'selection' : 'all' @@ -63,13 +63,13 @@ async function initLinks() { * @param {Array} links */ async function processLinks(links) { - console.log('processLinks:', links) + console.debug('processLinks:', links) const urlFilter = urlParams.get('filter') const onlyDomains = urlParams.has('domains') - console.log(`urlFilter: ${urlFilter}`) - console.log(`onlyDomains: ${onlyDomains}`) + console.debug(`urlFilter: ${urlFilter}`) + console.debug(`onlyDomains: ${onlyDomains}`) const { options } = await chrome.storage.sync.get(['options']) - console.log('options:', options) + console.debug('options:', options) // Filter links by :// if not disabled by user if (options.defaultFilter) { @@ -86,7 +86,7 @@ async function processLinks(links) { // Filter links based on pattern if (urlFilter) { const re = new RegExp(urlFilter, options.flags) - console.log(`Filtering Links with re: ${re}`) + console.debug(`Filtering Links with re: ${re}`) items = items.filter((item) => item.match(re)) } @@ -153,7 +153,7 @@ function getBaseURL(link) { * @param {String} selector */ function updateTable(links, selector) { - console.log(`updateTable: ${selector}`) + console.debug(`updateTable: ${selector}`) const tbody = document.querySelector(`${selector} tbody`) links.forEach(function (url) { const link = document.createElement('a') @@ -171,11 +171,11 @@ function updateTable(links, selector) { * @param {MouseEvent} event */ function openLinksClick(event) { - console.log('openLinksClick:', event) + console.debug('openLinksClick:', event) const closest = event.target?.closest('a') const target = document.querySelector(closest?.dataset?.target) let links = target?.innerText?.trim() - console.log('links:', links) + console.debug('links:', links) if (links) { links.split('\n').forEach(function (url) { chrome.tabs.create({ active: false, url }).then() @@ -191,7 +191,7 @@ function openLinksClick(event) { * @param {MouseEvent} event */ function downloadFileClick(event) { - console.log('downloadFileClick:', event) + console.debug('downloadFileClick:', event) const closest = event.target?.closest('a') const target = document.querySelector(closest?.dataset?.target) let links = target?.innerText?.trim() @@ -210,7 +210,7 @@ function downloadFileClick(event) { * @param {String} text */ function download(filename, text) { - console.log(`download: ${filename}`) + console.debug(`download: ${filename}`) const element = document.createElement('a') element.setAttribute( 'href', @@ -229,7 +229,7 @@ function download(filename, text) { * @param {KeyboardEvent} e */ function handleKeyboard(e) { - // console.log('handleKeyboard:', e) + // console.debug('handleKeyboard:', e) if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.repeat) { return } @@ -248,7 +248,7 @@ function handleKeyboard(e) { } function dtDraw(event) { - console.log('dtDraw:', event) + console.debug('dtDraw:', event) const tbody = event.target.querySelector('tbody') let length = tbody.rows.length if (tbody.rows.length === 1) { diff --git a/src/js/main.js b/src/js/main.js index 1f53048..05a3885 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -12,9 +12,9 @@ if (backToTop) { if (typeof ClipboardJS !== 'undefined') { const clipboard = new ClipboardJS('.clip') clipboard.on('success', function (event) { - // console.info('clipboard.success:', event) + // console.debug('clipboard.success:', event) const text = event.text.trim() - console.log(`text: "${text}"`) + console.debug(`text: "${text}"`) if (event.trigger.dataset.toast) { showToast(event.trigger.dataset.toast) } else { @@ -22,7 +22,7 @@ if (typeof ClipboardJS !== 'undefined') { } }) clipboard.on('error', function (event) { - // console.log('clipboard.error:', event) + // console.debug('clipboard.error:', event) showToast('Clipboard Copy Failed', 'warning') }) } @@ -55,7 +55,7 @@ function onScroll() { function showToast(message, type = 'success') { console.log(`showToast: ${type}:`, message) const element = document.querySelector('.d-none .toast').cloneNode(true) - element.addEventListener('mouseover', () => toast.hide()) + element.addEventListener('mousemove', () => toast.hide()) element.classList.add(`text-bg-${type}`) element.querySelector('.toast-body').innerHTML = message document.getElementById('toast-container').appendChild(element) diff --git a/src/js/options.js b/src/js/options.js index 668f038..0ae8808 100644 --- a/src/js/options.js +++ b/src/js/options.js @@ -24,12 +24,12 @@ optionsForm * @function initOptions */ async function initOptions() { - // console.log('initOptions') + // console.debug('initOptions') const { options, patterns } = await chrome.storage.sync.get([ 'options', 'patterns', ]) - console.log('options, patterns:', options, patterns) + console.debug('options, patterns:', options, patterns) updateOptions(options) updateTable(patterns) @@ -52,7 +52,7 @@ async function initOptions() { * @param {String} namespace */ function onChanged(changes, namespace) { - // console.log('onChanged:', changes, namespace) + // console.debug('onChanged:', changes, namespace) for (let [key, { newValue }] of Object.entries(changes)) { if (namespace === 'sync' && key === 'options') { updateOptions(newValue) @@ -69,7 +69,7 @@ function onChanged(changes, namespace) { * @param {SubmitEvent} event */ async function addFilter(event) { - // console.log('addFilter:', event) + // console.debug('addFilter:', event) event.preventDefault() const element = document.querySelector('#filters-form input') const filter = element.value @@ -78,7 +78,7 @@ async function addFilter(event) { const { patterns } = await chrome.storage.sync.get(['patterns']) if (!patterns.includes(filter)) { patterns.push(filter) - console.log('patterns:', patterns) + console.debug('patterns:', patterns) await chrome.storage.sync.set({ patterns }) updateTable(patterns) } @@ -184,14 +184,13 @@ async function saveEditing(event, idx) { console.debug(`saveEditInput: ${idx}`, event) const td = document.getElementById(`td-filter-${idx}`) console.debug('td:', td) - if (!td) { - return console.warn(`TD Not Found: #td-filter-${idx}`) + console.warn(`TD Not Found: #td-filter-${idx}`) + return false } const input = td.querySelector('input') - console.log('input:', input) - const value = input.value + let value = input.value console.log('value:', value) if (!value) { await deleteFilter(event, idx) @@ -199,12 +198,19 @@ async function saveEditing(event, idx) { } const { patterns } = await chrome.storage.sync.get(['patterns']) - if (value !== patterns[idx]) { - console.log(`chrome.storage.sync.set: patterns[${idx}]: ${value}`) + console.debug('patterns:', patterns) + if (value === patterns[idx]) { + console.info('Value Unchanged!') + } else if (patterns.includes(value)) { + showToast('Filter Already Exists!', 'warning') + console.info('Value Already Exists!') + value = patterns[idx] + } else { + console.info( + `Updated idx: ${idx} from "${patterns[idx]}" to "${value}"` + ) patterns[idx] = value await chrome.storage.sync.set({ patterns }) - } else { - console.info('Value Unchanged!') } const link = genFilterLink(idx, value) @@ -222,7 +228,6 @@ function beginEditing(event, idx) { console.debug(`addEditInput: ${idx}`, event) const td = document.getElementById(`td-filter-${idx}`) console.debug('td:', td) - if (!td) { return console.warn(`TD Not Found: #td-filter-${idx}`) } @@ -252,11 +257,11 @@ async function deleteFilter(event, index = undefined) { console.log('deleteFilter:', event) event.preventDefault() const { patterns } = await chrome.storage.sync.get(['patterns']) + // console.debug('patterns:', patterns) if (!index) { const anchor = event.target.closest('a') const filter = anchor?.dataset?.value console.log(`filter: ${filter}`) - // console.log('patterns:', patterns) if (filter && patterns.includes(filter)) { index = patterns.indexOf(filter) } @@ -265,7 +270,7 @@ async function deleteFilter(event, index = undefined) { if (index !== undefined) { patterns.splice(index, 1) await chrome.storage.sync.set({ patterns }) - console.log('patterns:', patterns) + console.debug('patterns:', patterns) updateTable(patterns) document.getElementById('add-filter').focus() } @@ -293,7 +298,7 @@ async function resetForm(event) { * @param {InputEvent} event */ async function saveOptions(event) { - console.log('saveOptions:', event) + console.debug('saveOptions:', event) const { options } = await chrome.storage.sync.get(['options']) let key = event.target?.id let value @@ -303,7 +308,7 @@ async function saveOptions(event) { let flags = element.value.toLowerCase().replace(/\s+/gm, '').split('') flags = new Set(flags) flags = [...flags].join('') - console.log(`flags: ${flags}`) + console.debug(`flags: ${flags}`) for (const flag of flags) { if (!'dgimsuvy'.includes(flag)) { element.classList.add('is-invalid') @@ -321,7 +326,7 @@ async function saveOptions(event) { } if (value !== undefined) { options[key] = value - console.log(`Set: ${key}:`, value) + console.info(`Set: ${key}:`, value) await chrome.storage.sync.set({ options }) } } diff --git a/src/js/popup.js b/src/js/popup.js index 70d232a..23979de 100644 --- a/src/js/popup.js +++ b/src/js/popup.js @@ -24,12 +24,12 @@ document * @function initOptions */ async function initPopup() { - // console.log('initPopup') + // console.debug('initPopup') const { options, patterns } = await chrome.storage.sync.get([ 'options', 'patterns', ]) - console.log('options, patterns:', options, patterns) + console.debug('options, patterns:', options, patterns) // document.getElementById('defaultFilter').checked = options.defaultFilter updateOptions(options) if (patterns?.length) { @@ -72,10 +72,10 @@ function createFilterLink(number, value = '') { * @param {MouseEvent} event */ async function popupLinks(event) { - console.log('popupLinks:', event) + console.debug('popupLinks:', event) event.preventDefault() const anchor = event.target.closest('a') - // console.log(`anchor.href: ${anchor.href}`) + // console.debug(`anchor.href: ${anchor.href}`) let url if (anchor.href.endsWith('html/options.html')) { chrome.runtime.openOptionsPage() @@ -85,7 +85,7 @@ async function popupLinks(event) { } else { url = chrome.runtime.getURL(anchor.href) } - // console.log('url:', url) + console.log('url:', url) await chrome.tabs.create({ active: true, url }) return window.close() } @@ -96,7 +96,7 @@ async function popupLinks(event) { * @param {SubmitEvent} event */ async function filterForm(event) { - console.log('filterForm:', event) + console.debug('filterForm:', event) event.preventDefault() const filterInput = document.getElementById('filter-input') let filter @@ -154,7 +154,7 @@ async function linksForm(event) { * @param {InputEvent} event */ function updateLinks(event) { - // console.log('updateLinks:', event) + // console.debug('updateLinks:', event) let text = event.target.value.split(/\r\n?|\n/g) text = text.filter((str) => str !== '') const urls = extractURLs(event.target.value) @@ -173,7 +173,7 @@ function updateLinks(event) { * @param {Array} lines */ function updateElements(el, lines) { - // console.log('el, lines:', el, lines) + // console.debug('el, lines:', el, lines) if (lines?.length > 0) { el.classList.remove('disabled') el.textContent = `${el.dataset.text} (${lines.length})` @@ -209,11 +209,11 @@ function extractURLs(text) { * @param {InputEvent} event */ async function saveOptions(event) { - console.log('saveOptions:', event) + console.debug('saveOptions:', event) const { options } = await chrome.storage.sync.get(['options']) if (event.target.id && event.target.checked !== undefined) { options[event.target.id] = event.target.checked - console.log(`Set: ${event.target.id}:`, event.target.checked) + console.info(`Set: ${event.target.id}:`, event.target.checked) await chrome.storage.sync.set({ options }) } } diff --git a/src/js/service-worker.js b/src/js/service-worker.js index bed39a7..7cc8c83 100644 --- a/src/js/service-worker.js +++ b/src/js/service-worker.js @@ -58,22 +58,22 @@ async function onClicked(ctx, tab) { if (['options', 'filters'].includes(ctx.menuItemId)) { chrome.runtime.openOptionsPage() } else if (ctx.menuItemId === 'links') { - console.log('injectTab: links') + console.debug('injectTab: links') await injectTab() } else if (ctx.menuItemId === 'domains') { - console.log('injectTab: domains') + console.debug('injectTab: domains') await injectTab({ domains: true }) } else if (ctx.menuItemId === 'selection') { - console.log('injectTab: selection') + console.debug('injectTab: selection') await injectTab({ selection: true }) } else if (ctx.menuItemId.startsWith('filter-')) { const i = ctx.menuItemId.split('-')[1] - console.log(`injectTab: filter-${i}`) + console.debug(`injectTab: filter-${i}`) const { patterns } = await chrome.storage.sync.get(['patterns']) - console.log(`filter: ${patterns[i]}`) + console.debug(`filter: ${patterns[i]}`) await injectTab({ filter: patterns[i] }) } else if (ctx.menuItemId === 'copy') { - console.log('injectFunction: copy') + console.debug('injectFunction: copy') await injectFunction(copyActiveElementText, [ctx]) } else { console.error(`Unknown ctx.menuItemId: ${ctx.menuItemId}`) @@ -102,7 +102,7 @@ async function onCommand(command) { * @param {String} namespace */ async function onChanged(changes, namespace) { - // console.log('onChanged:', changes, namespace) + // console.debug('onChanged:', changes, namespace) for (const [key, { oldValue, newValue }] of Object.entries(changes)) { if (namespace === 'sync' && key === 'options') { if (oldValue?.contextMenu !== newValue?.contextMenu) { @@ -133,7 +133,7 @@ async function onChanged(changes, namespace) { * @param {Array} patterns */ function createContextMenus(patterns) { - console.log('createContextMenus:', patterns) + console.debug('createContextMenus:', patterns) chrome.contextMenus.removeAll() const ctx = ['all'] const contexts = [