From 96f1497fb8ff837951156b2fffd1c10b06cab3a9 Mon Sep 17 00:00:00 2001 From: dzamie Date: Tue, 28 Jun 2016 22:42:42 -0400 Subject: [PATCH 1/5] Add keybind, default state option to toggleable watcher Addresses #956 by adding a keybind to toggle visibility of thread watcher rather than simply the header bar icon. Also adds an option in config for the watcher to default to visible or not. --- src/Miscellaneous/Keybinds.coffee | 3 +++ src/Monitoring/ThreadWatcher.coffee | 3 ++- src/config/Config.coffee | 9 +++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Miscellaneous/Keybinds.coffee b/src/Miscellaneous/Keybinds.coffee index 1ce5a7a84..521092091 100644 --- a/src/Miscellaneous/Keybinds.coffee +++ b/src/Miscellaneous/Keybinds.coffee @@ -97,6 +97,9 @@ Keybinds = when Conf['Update thread watcher'] return unless ThreadWatcher.enabled ThreadWatcher.buttonFetchAll() + when Conf['Toggle thread watcher'] + return unless ThreadWatcher.enabled and Conf['Toggleable Thread Watcher'] + ThreadWatcher.toggleWatcher() # Images when Conf['Expand image'] return unless ImageExpand.enabled and threadRoot diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index bbef3f42b..cadb68615 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -35,7 +35,8 @@ ThreadWatcher = if Conf['Fixed Thread Watcher'] $.addClass doc, 'fixed-watcher' if Conf['Toggleable Thread Watcher'] - @dialog.hidden = true + if !Conf['Watcher Defaults to Visible'] + @dialog.hidden = true Header.addShortcut 'watcher', sc, 510 $.addClass doc, 'toggleable-watcher' diff --git a/src/config/Config.coffee b/src/config/Config.coffee index 39c34923b..6b314997d 100644 --- a/src/config/Config.coffee +++ b/src/config/Config.coffee @@ -389,6 +389,11 @@ Config = 'Adds a shortcut for the thread watcher and hides the watcher by default.' 1 ] + 'Watcher Defaults to Visible': [ + false + 'Displays the thread watcher by default, rather than hiding it.' + 2 + ] 'Mark New IPs': [ false 'Label each post from a new IP with the thread\'s current IP count.' @@ -857,6 +862,10 @@ Config = 'Shift+r' 'Manually refresh thread watcher.' ] + 'Toggle thread watcher': [ + 't' + 'Toggle visibility of thread watcher when toggle is enabled' + ] # Images 'Expand image': [ 'Shift+e' From 9d5c7c1ef7c13984e1a11a043181a8d089079f43 Mon Sep 17 00:00:00 2001 From: dzamie Date: Wed, 29 Jun 2016 22:37:14 -0400 Subject: [PATCH 2/5] Thread watcher always toggleable, add setting for initial visibility Changes previous "Toggleable Thread Watcher" and "Watcher Defaults to Visible" to always toggleable and "Persistent Thread Watcher". Updated keybind description to match. --- src/Miscellaneous/Keybinds.coffee | 2 +- src/Monitoring/ThreadWatcher.coffee | 10 +++++----- src/config/Config.coffee | 11 +++-------- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/Miscellaneous/Keybinds.coffee b/src/Miscellaneous/Keybinds.coffee index 521092091..f0d9d7158 100644 --- a/src/Miscellaneous/Keybinds.coffee +++ b/src/Miscellaneous/Keybinds.coffee @@ -98,7 +98,7 @@ Keybinds = return unless ThreadWatcher.enabled ThreadWatcher.buttonFetchAll() when Conf['Toggle thread watcher'] - return unless ThreadWatcher.enabled and Conf['Toggleable Thread Watcher'] + return unless ThreadWatcher.enabled ThreadWatcher.toggleWatcher() # Images when Conf['Expand image'] diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index cadb68615..946a59a95 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -34,11 +34,11 @@ ThreadWatcher = if Conf['Fixed Thread Watcher'] $.addClass doc, 'fixed-watcher' - if Conf['Toggleable Thread Watcher'] - if !Conf['Watcher Defaults to Visible'] - @dialog.hidden = true - Header.addShortcut 'watcher', sc, 510 - $.addClass doc, 'toggleable-watcher' + if !Conf['Persistent Thread Watcher'] + @dialog.hidden = true + + Header.addShortcut 'watcher', sc, 510 + $.addClass doc, 'toggleable-watcher' ThreadWatcher.fetchAuto() diff --git a/src/config/Config.coffee b/src/config/Config.coffee index 6b314997d..97169ff6a 100644 --- a/src/config/Config.coffee +++ b/src/config/Config.coffee @@ -384,16 +384,11 @@ Config = 'Makes the thread watcher scroll with the page.' 1 ] - 'Toggleable Thread Watcher': [ + 'Persistent Thread Watcher': [ true - 'Adds a shortcut for the thread watcher and hides the watcher by default.' + 'The thread watcher will be visible when the page is loaded.' 1 ] - 'Watcher Defaults to Visible': [ - false - 'Displays the thread watcher by default, rather than hiding it.' - 2 - ] 'Mark New IPs': [ false 'Label each post from a new IP with the thread\'s current IP count.' @@ -864,7 +859,7 @@ Config = ] 'Toggle thread watcher': [ 't' - 'Toggle visibility of thread watcher when toggle is enabled' + 'Toggle visibility of thread watcher.' ] # Images 'Expand image': [ From 07b2b759c8abf23b4b69805b036e59b016b64281 Mon Sep 17 00:00:00 2001 From: dzamie Date: Wed, 29 Jun 2016 22:53:31 -0400 Subject: [PATCH 3/5] Clean up code No need for 'toggleable-watcher' if it's always toggleable. --- src/Monitoring/ThreadWatcher.coffee | 1 - src/css/style.css | 3 --- 2 files changed, 4 deletions(-) diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index 946a59a95..0979c8a90 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -38,7 +38,6 @@ ThreadWatcher = @dialog.hidden = true Header.addShortcut 'watcher', sc, 510 - $.addClass doc, 'toggleable-watcher' ThreadWatcher.fetchAuto() diff --git a/src/css/style.css b/src/css/style.css index 0086ba717..e217bd534 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -931,9 +931,6 @@ span.hide-announcement { #thread-watcher a { text-decoration: none; } -:root:not(.toggleable-watcher) #thread-watcher .move > .close { - display: none; -} #thread-watcher .move > .close { position: absolute; right: 0px; From e827b63336b72bd7c37f68759861984eeff7ef4f Mon Sep 17 00:00:00 2001 From: ccd0 Date: Fri, 1 Jul 2016 00:05:27 -0700 Subject: [PATCH 4/5] Set 'Persistent Thread Watcher' to inverse of old 'Toggleable Thread Watcher' setting. Per discussion in #983. --- src/General/Settings.coffee | 3 +++ src/Monitoring/ThreadWatcher.coffee | 2 +- src/config/Config.coffee | 2 +- src/main/Main.coffee | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/General/Settings.coffee b/src/General/Settings.coffee index 71aad1826..c33fd000c 100644 --- a/src/General/Settings.coffee +++ b/src/General/Settings.coffee @@ -393,6 +393,9 @@ Settings = if compareString < '00001.00012.00000.00006' if data['sauces']? set 'sauces', data['sauces'].replace(/^(#?\s*)https:\/\/(?:desustorage|cuckchan)\.org\//mg, '$1https://desuarchive.org/') + if compareString < '00001.00012.00001.00000' + if not data['Persistent Thread Watcher']? and data['Toggleable Thread Watcher']? + set 'Persistent Thread Watcher', not data['Toggleable Thread Watcher'] changes loadSettings: (data, cb) -> diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee index 0979c8a90..1b9c6c99f 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -36,7 +36,7 @@ ThreadWatcher = $.addClass doc, 'fixed-watcher' if !Conf['Persistent Thread Watcher'] @dialog.hidden = true - + Header.addShortcut 'watcher', sc, 510 ThreadWatcher.fetchAuto() diff --git a/src/config/Config.coffee b/src/config/Config.coffee index 97169ff6a..cbf0d0373 100644 --- a/src/config/Config.coffee +++ b/src/config/Config.coffee @@ -385,7 +385,7 @@ Config = 1 ] 'Persistent Thread Watcher': [ - true + false 'The thread watcher will be visible when the page is loaded.' 1 ] diff --git a/src/main/Main.coffee b/src/main/Main.coffee index d561c0fa8..5df1d4811 100644 --- a/src/main/Main.coffee +++ b/src/main/Main.coffee @@ -52,6 +52,7 @@ Main = Conf['Show Name and Subject'] = false Conf['QR Shortcut'] = true Conf['Bottom QR Link'] = true + Conf['Toggleable Thread Watcher'] = true # Pseudo-enforce default whitelist while configuration loads if $.platform is 'crx' then $.global -> From 6f8e0a3bbda0773a46fa40347d46fc84c8b7c6bb Mon Sep 17 00:00:00 2001 From: ccd0 Date: Fri, 1 Jul 2016 01:44:16 -0700 Subject: [PATCH 5/5] Make 'all websites' permission optional. #793 --- src/meta/eventPage.coffee | 22 ++++++++++++++++++++-- src/meta/manifest.json | 6 ++++-- src/platform/CrossOrigin.coffee | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/meta/eventPage.coffee b/src/meta/eventPage.coffee index e5a107dc0..de87915e4 100644 --- a/src/meta/eventPage.coffee +++ b/src/meta/eventPage.coffee @@ -1,6 +1,24 @@ requestID = 0 chrome.runtime.onMessage.addListener (request, sender, sendResponse) -> + if request.responseType is 'arraybuffer' + # Cross-origin image fetching. Need permission. + chrome.permissions.contains + origins: ['*://*/'] + , (result) -> + if result + ajax request, sender, sendResponse + else + chrome.permissions.request + origins: ['*://*/'] + , -> + ajax request, sender, sendResponse + return true + else + # JSON fetching from non-HTTPS archive. + ajax request, sender, sendResponse + +ajax = (request, sender, sendResponse) -> id = requestID requestID++ sendResponse id @@ -10,11 +28,11 @@ chrome.runtime.onMessage.addListener (request, sender, sendResponse) -> xhr.responseType = request.responseType xhr.addEventListener 'load', -> if @readyState is @DONE && xhr.status is 200 - contentType = @getResponseHeader 'Content-Type' - contentDisposition = @getResponseHeader 'Content-Disposition' {response} = @ if request.responseType is 'arraybuffer' response = [new Uint8Array(response)...] + contentType = @getResponseHeader 'Content-Type' + contentDisposition = @getResponseHeader 'Content-Disposition' chrome.tabs.sendMessage sender.tab.id, {id, response, contentType, contentDisposition} else chrome.tabs.sendMessage sender.tab.id, {id, error: true} diff --git a/src/meta/manifest.json b/src/meta/manifest.json index 6685c4011..d21925bb9 100644 --- a/src/meta/manifest.json +++ b/src/meta/manifest.json @@ -25,7 +25,9 @@ <% } %> "minimum_chrome_version": "<%= meta.min.chrome %>", "permissions": [ "storage", - "http://*/", - "https://*/" + "*://a.4cdn.org/" + ], + "optional_permissions": [ + "*://*/" ] } diff --git a/src/platform/CrossOrigin.coffee b/src/platform/CrossOrigin.coffee index d4e9bcd06..de99e7083 100644 --- a/src/platform/CrossOrigin.coffee +++ b/src/platform/CrossOrigin.coffee @@ -14,7 +14,7 @@ CrossOrigin = # XXX https://forums.lanik.us/viewtopic.php?f=64&t=24173&p=78310 url = url.replace /^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/' <% if (type === 'crx') { %> - if /^https:\/\//.test(url) or location.protocol is 'http:' + if url.split('/')[...3].join('/') is "#{location.protocol}//i.4cdn.org" xhr = new XMLHttpRequest() xhr.open 'GET', url, true xhr.setRequestHeader key, value for key, value of headers