From 529fea844c96da8f181eb58c3423cab22986e018 Mon Sep 17 00:00:00 2001 From: nobody Date: Sun, 21 Feb 2021 19:50:41 +0100 Subject: [PATCH] Implemented: Simple logging page (#279) --- core/constants.js | 1 + core/interceptor.js | 2 +- core/messenger.js | 9 +++ core/request-analyzer.js | 6 +- icons/logging-dark.svg | 120 +++++++++++++++++++++++++++++++ icons/logging-light.svg | 120 +++++++++++++++++++++++++++++++ modules/internal/log.js | 28 ++++++++ pages/background/background.html | 1 + pages/options/options.html | 3 +- pages/options/options.js | 6 ++ pages/popup/popup.css | 14 +++- pages/popup/popup.html | 3 + pages/popup/popup.js | 23 +++++- pages/updates/updates.html | 1 + 14 files changed, 329 insertions(+), 8 deletions(-) create mode 100644 icons/logging-dark.svg create mode 100644 icons/logging-light.svg create mode 100644 modules/internal/log.js diff --git a/core/constants.js b/core/constants.js index bd4550ec..5f2f39ad 100644 --- a/core/constants.js +++ b/core/constants.js @@ -216,6 +216,7 @@ const Links = { 'LOCALCDN_TEST': 'https://www.localcdn.org/test', 'LOCALCDN_TEST_WEBSITE': 'https://www.localcdn.org/test/check', 'WEBLATE': 'https://hosted.weblate.org/projects/localcdn/localcdn/', + 'LOGGING': chrome.extension.getURL('pages/logging/logging.html'), }; const CDNs = { diff --git a/core/interceptor.js b/core/interceptor.js index 88f0221a..47323484 100644 --- a/core/interceptor.js +++ b/core/interceptor.js @@ -41,7 +41,7 @@ interceptor.handleRequest = function (requestDetails, tabIdentifier, tab) { }; } - targetDetails = requestAnalyzer.getLocalTarget(requestDetails); + targetDetails = requestAnalyzer.getLocalTarget(requestDetails, tab.url); targetPath = targetDetails.path; if (Regex.GOOGLE_FONTS.test(requestDetails.url)) { diff --git a/core/messenger.js b/core/messenger.js index 394bf106..e959f9a8 100644 --- a/core/messenger.js +++ b/core/messenger.js @@ -107,6 +107,15 @@ messenger._handleMessageReceived = function (message, sender, sendResponse) { 'runAt': 'document_start' }); } + + if (topic === 'logs:get') { + sendResponse({'logs': log.data}); + return MessageResponse.SYNCHRONOUS; + } + + if (topic === 'logs:delete') { + log.data = []; + } }; diff --git a/core/request-analyzer.js b/core/request-analyzer.js index 5c3a4334..86209f2e 100644 --- a/core/request-analyzer.js +++ b/core/request-analyzer.js @@ -65,7 +65,7 @@ requestAnalyzer.isValidCandidate = function (requestDetails, tabDetails) { return requestDetails.method === WebRequest.GET; }; -requestAnalyzer.getLocalTarget = function (requestDetails) { +requestAnalyzer.getLocalTarget = function (requestDetails, initiator) { let destinationUrl, destinationHost, destinationPath, hostMappings, basePath, resourceMappings, destinationSearchString; @@ -95,7 +95,7 @@ requestAnalyzer.getLocalTarget = function (requestDetails) { // Return either the local target's path or false. // eslint-disable-next-line max-len - return requestAnalyzer._findLocalTarget(resourceMappings, basePath, destinationHost, destinationPath, destinationSearchString); + return requestAnalyzer._findLocalTarget(resourceMappings, basePath, destinationHost, destinationPath, destinationSearchString, initiator); }; @@ -114,7 +114,7 @@ requestAnalyzer._matchBasePath = function (hostMappings, channelPath) { }; // eslint-disable-next-line max-len -requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channelHost, channelPath, destinationSearchString) { +requestAnalyzer._findLocalTarget = function (resourceMappings, basePath, channelHost, channelPath, destinationSearchString, initiator) { let resourcePath, versionNumber, resourcePattern, filename, shorthandResource; storageManager.type.get(Setting.LOGGING, function (items) { diff --git a/icons/logging-dark.svg b/icons/logging-dark.svg new file mode 100644 index 00000000..f06babd7 --- /dev/null +++ b/icons/logging-dark.svg @@ -0,0 +1,120 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/icons/logging-light.svg b/icons/logging-light.svg new file mode 100644 index 00000000..1506d4b2 --- /dev/null +++ b/icons/logging-light.svg @@ -0,0 +1,120 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/internal/log.js b/modules/internal/log.js new file mode 100644 index 00000000..e6e2e6c1 --- /dev/null +++ b/modules/internal/log.js @@ -0,0 +1,28 @@ +/** + * Log + * 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'; + + +/** + * Log + */ + +var log = {}; + +log.append = function (initiator, resource, target, highlight) { + log.data.push({initiator, resource, target, highlight}); +}; + +log.data = []; diff --git a/pages/background/background.html b/pages/background/background.html index 938ba589..2058612d 100644 --- a/pages/background/background.html +++ b/pages/background/background.html @@ -12,6 +12,7 @@ + diff --git a/pages/options/options.html b/pages/options/options.html index 8d4d4ce4..8b815dba 100644 --- a/pages/options/options.html +++ b/pages/options/options.html @@ -302,7 +302,8 @@
  • Changelog (In-App)
  • Donate (In-App)
  • FAQ (In-App)
  • -
  • Statistics (In-App)

  • +
  • Statistics (In-App)
  • +
  • Logs (In-App)

  • Source (www.codeberg.org)
  • Website (www.localcdn.org)
  • Testing Utility (www.localcdn.org/test)
  • diff --git a/pages/options/options.js b/pages/options/options.js index cfa54777..cf07ee78 100644 --- a/pages/options/options.js +++ b/pages/options/options.js @@ -260,6 +260,12 @@ options.onOptionChanged = function ({target}) { case Setting.SELECTED_ICON: optionsOther._setIcon(optionValue); break; + case Setting.LOGGING: + console.log(optionValue); + if (optionValue === false) { + chrome.runtime.sendMessage({'topic': 'logs:delete', 'value': ''}); + } + break; } storageManager.type.set({ diff --git a/pages/popup/popup.css b/pages/popup/popup.css index 2b75bc42..336b42e5 100644 --- a/pages/popup/popup.css +++ b/pages/popup/popup.css @@ -196,7 +196,7 @@ footer { float: right; font-size: 12px; margin-left: 10px; - padding: 5px 22px; + padding: 5px 10px; -moz-user-select: none; -ms-user-select: none; -webkit-user-select: none; @@ -265,12 +265,18 @@ footer { #statistics-button:hover { filter: contrast(0.5); +#logging-button-svg { + background-image: url("../../icons/logging-dark.svg"); } -#statistics-button { +#statistics-button, #logging-button { display: none; } +#options-button:hover, #statistics-button:hover, #logging-button:hover { + filter: contrast(0.5); +} + /** * Toggles */ @@ -497,6 +503,10 @@ input:checked + .slider:hover { background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgNDUyLjU5NCA0NTIuNTk0IgogICBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA0NTIuNTk0IDQ1Mi41OTQiCiAgIGlkPSJzdmcxNCIKICAgc29kaXBvZGk6ZG9jbmFtZT0ic3RhdGlzdGljcy1saWdodC5zdmciCiAgIGlua3NjYXBlOnZlcnNpb249IjAuOTIuMyAoMjQwNTU0NiwgMjAxOC0wMy0xMSkiPgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTIwIj4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICAgIDxkYzp0aXRsZT48L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMTgiIC8+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxIgogICAgIG9iamVjdHRvbGVyYW5jZT0iMTAiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAiCiAgICAgZ3VpZGV0b2xlcmFuY2U9IjEwIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxNjgwIgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijk5NyIKICAgICBpZD0ibmFtZWR2aWV3MTYiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMzY4NzEyOCIKICAgICBpbmtzY2FwZTpjeD0iLTM3Ni44MTQ2OCIKICAgICBpbmtzY2FwZTpjeT0iNjIzLjQ3MTU4IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcxMiIgLz4KICA8ZwogICAgIGlkPSJnMTIiCiAgICAgc3R5bGU9ImZpbGw6Izc3Nzc3NztmaWxsLW9wYWNpdHk6MSI+CiAgICA8cGF0aAogICAgICAgZD0ibTQzMC41MTEsNDQuNjU0aC00MDguNDI5Yy0xMi4xNzYsMC0yMi4wODIsOS45MDYtMjIuMDgyLDIyLjA4MnYyNTAuMjI0YzAsMTIuMTc2IDkuOTA2LDIyLjA4MiAyMi4wODIsMjIuMDgyaDE1NC4zMjNsLTYuNDI4LDQ4Ljg5OGgtMjcuNTA1Yy01LjUyMiwwLTEwLDQuNDc3LTEwLDEwczQuNDc4LDEwIDEwLDEwaDE2Ny42NWM1LjUyMiwwIDEwLTQuNDc3IDEwLTEwcy00LjQ3OC0xMC0xMC0xMGgtMjcuNTA2bC02LjQyOC00OC44OThoMTU0LjMyMmMxMi4xNzcsMCAyMi4wODMtOS45MDYgMjIuMDgzLTIyLjA4MnYtMjUwLjIyNGMwLjAwMS0xMi4xNzYtOS45MDUtMjIuMDgyLTIyLjA4Mi0yMi4wODJ6bS00MDguNDI5LDIwaDQwOC40MjljMS4xNDgsMCAyLjA4MywwLjkzNCAyLjA4MywyLjA4MnYyMTEuMzU5aC00MTIuNTk0di0yMTEuMzU5YzAtMS4xNDggMC45MzQtMi4wODIgMi4wODItMi4wODJ6bTI0MC4zNjIsMzIzLjI4NmgtNzIuMjk2bDYuNDI5LTQ4Ljg5OGg1OS40MzlsNi40MjgsNDguODk4em0xNjguMDY3LTY4Ljg5OGgtNDA4LjQyOWMtMS4xNDgsMC0yLjA4Mi0wLjkzNC0yLjA4Mi0yLjA4MnYtMTguODY1aDQxMi41OTR2MTguODY1YzAsMS4xNDgtMC45MzUsMi4wODItMi4wODMsMi4wODJ6IgogICAgICAgaWQ9InBhdGgyIgogICAgICAgc3R5bGU9ImZpbGw6I2YyZjJmMjtmaWxsLW9wYWNpdHk6MSIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDg2LjI5NywyNTkuMDQyIGggNDAgYyA1LjUyMiwwIDEwLC00LjQ3NyAxMCwtMTAgdiAtNjIgYyAwLC01LjUyMyAtNC40NzgsLTEwIC0xMCwtMTAgaCAtNDAgYyAtNS41MjIsMCAtMTAsNC40NzcgLTEwLDEwIHYgNjIgYyAwLDUuNTIzIDQuNDc3LDEwIDEwLDEwIHoiCiAgICAgICBpZD0icGF0aDQiCiAgICAgICBzdHlsZT0iZmlsbDojZjJmMmYyO2ZpbGwtb3BhY2l0eToxIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0ic3Nzc3Nzc3NzIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMzI2LjI5NywyNTguNTU1IGggNDAgYyA1LjUyMiwwIDEwLC00LjQ3NyAxMCwtMTAgdiAtMjkuNTUgYyAwLC01LjUyMyAtNC40NzgsLTEwIC0xMCwtMTAgaCAtNDAgYyAtNS41MjIsMCAtMTAsNC40NzcgLTEwLDEwIHYgMjkuNTUgYyAwLDUuNTIzIDQuNDc3LDEwIDEwLDEwIHoiCiAgICAgICBpZD0icGF0aDYiCiAgICAgICBzdHlsZT0iZmlsbDojZjJmMmYyO2ZpbGwtb3BhY2l0eToxIgogICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0ic3Nzc3Nzc3NzIiAvPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMjQ2LjI5NywyNTkuMDQyIGggNDAgYyA1LjUyMiwwIDEwLC00LjQ3NyAxMCwtMTAgViAxNjAuNjIgYyAwLC01LjUyMyAtNC40NzgsLTEwIC0xMCwtMTAgaCAtNDAgYyAtNS41MjIsMCAtMTAsNC40NzcgLTEwLDEwIHYgODguNDIyIGMgMCw1LjUyMyA0LjQ3NywxMCAxMCwxMCB6IgogICAgICAgaWQ9InBhdGg4IgogICAgICAgc3R5bGU9ImZpbGw6I2YyZjJmMjtmaWxsLW9wYWNpdHk6MSIKICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9InNzc3Nzc3NzcyIgLz4KICAgIDxwYXRoCiAgICAgICBkPSJtIDE2Ni4yOTcsMjU5LjA0MiBoIDQwIGMgNS41MjIsMCAxMCwtNC40NzcgMTAsLTEwIFYgMTMwLjI0NSBjIDAsLTUuNTIzIC00LjQ3OCwtMTAgLTEwLC0xMCBoIC00MCBjIC01LjUyMiwwIC0xMCw0LjQ3NyAtMTAsMTAgdiAxMTguNzk3IGMgMCw1LjUyMyA0LjQ3NywxMCAxMCwxMCB6IgogICAgICAgaWQ9InBhdGgxMCIKICAgICAgIHN0eWxlPSJmaWxsOiNmMmYyZjI7ZmlsbC1vcGFjaXR5OjEiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJzc3Nzc3Nzc3MiIC8+CiAgPC9nPgo8L3N2Zz4K"); } + #logging-button-svg { + background-image: url("../../icons/logging-light.svg"); + } + input:checked + .slider { background-color: #6bb798; } diff --git a/pages/popup/popup.html b/pages/popup/popup.html index 97498199..fa01ba74 100644 --- a/pages/popup/popup.html +++ b/pages/popup/popup.html @@ -57,6 +57,9 @@
    Website broken?
    +
    +
    +
    diff --git a/pages/popup/popup.js b/pages/popup/popup.js index 07a21b8f..09192393 100644 --- a/pages/popup/popup.js +++ b/pages/popup/popup.js @@ -77,6 +77,11 @@ popup._renderNonContextualContents = function () { document.getElementById('statistics-button').style.display = 'block'; document.getElementById('statistics-button').addEventListener('mouseup', popup._onStatisticsButtonClicked); } + + if (popup._loggingStatus) { + document.getElementById('logging-button').style.display = 'block'; + document.getElementById('logging-button').addEventListener('mouseup', popup._onLoggingButtonClicked); + } }; popup._renderContextualContents = function () { @@ -261,8 +266,12 @@ popup._readLocalStorage = function () { popup._readStorage = function () { return new Promise((resolve) => { - storageManager.type.get([Setting.NEGATE_HTML_FILTER_LIST], function (items) { + storageManager.type.get([ + Setting.NEGATE_HTML_FILTER_LIST, + Setting.LOGGING + ], function (items) { popup.negateHtmlFilterList = items.negateHtmlFilterList; + popup._loggingStatus = items.enableLogging; resolve(); }); }); @@ -538,6 +547,17 @@ popup._onStatisticsButtonClicked = function () { } }; +popup._onLoggingButtonClicked = function () { + if (event.button === 0 || event.button === 1) { + chrome.tabs.create({ + 'url': Links.LOGGING, + 'active': event.button === 0, + }); + } + if (event.button === 0) { + window.close(); + } +}; /** * Initializations @@ -545,5 +565,6 @@ popup._onStatisticsButtonClicked = function () { popup.negateHtmlFilterList = false; popup._statisticsStatus = false; +popup._loggingStatus = false; document.addEventListener('DOMContentLoaded', popup._onDocumentLoaded); diff --git a/pages/updates/updates.html b/pages/updates/updates.html index 9fba07a7..c4ccc5e9 100644 --- a/pages/updates/updates.html +++ b/pages/updates/updates.html @@ -26,6 +26,7 @@