From f6d8f222a6efc052dd986fad0080db757f5896e6 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 5 May 2021 21:25:47 +1000 Subject: [PATCH] clear file picker button --- extension/api.js | 24 +++++++++++++------ extension/icons/fa/long-arrow-alt-right.svg | 2 +- extension/icons/fa/minus.svg | 2 ++ .../menu.css | 12 ++++++++++ .../menu.js | 22 +++++++++++++---- 5 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 extension/icons/fa/minus.svg diff --git a/extension/api.js b/extension/api.js index 30de179..203f562 100644 --- a/extension/api.js +++ b/extension/api.js @@ -74,14 +74,24 @@ storage.get = (namespace, key = undefined, fallback = undefined) => * @param {string} key - the key associated with the value * @param {*} value - the data to save */ +storage._queue = []; storage.set = (namespace, key, value) => { - return new Promise(async (res, rej) => { - const values = await storage.get(namespace, undefined, {}); - storage._onChangeListeners.forEach((listener) => - listener({ type: 'set', namespace, key, new: value, old: values[key] }) - ); - chrome.storage.sync.set({ [namespace]: { ...values, [key]: value } }, res); - }); + const precursor = storage._queue[storage._queue.length - 1] || undefined, + interaction = new Promise(async (res, rej) => { + if (precursor !== undefined) { + await precursor; + storage._queue.shift(); + } + const values = await storage.get(namespace, undefined, {}); + if (values.hasOwnProperty(key)) delete values[key]; + storage._onChangeListeners.forEach((listener) => + listener({ type: 'set', namespace, key, new: value, old: values[key] }) + ); + console.log(namespace, key, value, { ...values, [key]: value }); + chrome.storage.sync.set({ [namespace]: { ...values, [key]: value } }, res); + }); + storage._queue.push(interaction); + return interaction; }; /** * clear data from an enhancer store diff --git a/extension/icons/fa/long-arrow-alt-right.svg b/extension/icons/fa/long-arrow-alt-right.svg index 13a4808..f3aaad8 100644 --- a/extension/icons/fa/long-arrow-alt-right.svg +++ b/extension/icons/fa/long-arrow-alt-right.svg @@ -1,2 +1,2 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/extension/icons/fa/minus.svg b/extension/icons/fa/minus.svg new file mode 100644 index 0000000..cf64af1 --- /dev/null +++ b/extension/icons/fa/minus.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css index cdcccf5..0fea1fc 100644 --- a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css +++ b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css @@ -386,6 +386,18 @@ label [data-icon='fa/question-circle'] { border: none; background: none; } +.library--file_label .library--file_title { + display: flex; +} +.library--file_title .library--file_remove { + margin-top: auto; + padding-top: 0.2em; + margin-left: auto; +} +.library--file_title .library--file_remove svg { + cursor: pointer; + width: 0.8em; +} .library--title, .library--title h2 { margin: 0; diff --git a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js index 36b7532..fb29842 100644 --- a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js +++ b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js @@ -240,8 +240,9 @@ components.options = { : '' )} /> -

${web.escapeHtml(label)} -

+

${web.escapeHtml(label)} + +

${web.escapeHtml(state || 'choose file...')} @@ -250,13 +251,24 @@ components.options = { opt.addEventListener('change', (event) => { const file = event.target.files[0], reader = new FileReader(); - opt.querySelector('.library--file_path').innerText = file.name; - storage.set(id, key, file.name); - reader.onload = (progress) => { + opt.querySelector('.library--file_path').innerText = file.name; + reader.onload = (progress) => { + storage.set(id, key, file.name); storage.set(id, `_file.${key}`, progress.currentTarget.result); }; reader.readAsText(file); }); + opt.querySelector('.library--file_remove').addEventListener( + 'click', + (event) => { + event.preventDefault(); + opt.querySelector('input').value = ''; + opt.querySelector('.library--file_path').innerText = 'choose file...'; + storage.set(id, key, undefined); + storage.set(id, `_file.${key}`, undefined); + }, + false + ); opt.addEventListener('click', (event) => { document.documentElement.scrollTop = 0; });