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/Miscellaneous/Keybinds.coffee b/src/Miscellaneous/Keybinds.coffee index 1ce5a7a84..f0d9d7158 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 + 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..1b9c6c99f 100644 --- a/src/Monitoring/ThreadWatcher.coffee +++ b/src/Monitoring/ThreadWatcher.coffee @@ -34,10 +34,10 @@ ThreadWatcher = if Conf['Fixed Thread Watcher'] $.addClass doc, 'fixed-watcher' - if Conf['Toggleable Thread Watcher'] + if !Conf['Persistent Thread Watcher'] @dialog.hidden = true - Header.addShortcut 'watcher', sc, 510 - $.addClass doc, 'toggleable-watcher' + + Header.addShortcut 'watcher', sc, 510 ThreadWatcher.fetchAuto() diff --git a/src/config/Config.coffee b/src/config/Config.coffee index 381372443..764acec8e 100644 --- a/src/config/Config.coffee +++ b/src/config/Config.coffee @@ -384,9 +384,9 @@ Config = 'Makes the thread watcher scroll with the page.' 1 ] - 'Toggleable Thread Watcher': [ - true - 'Adds a shortcut for the thread watcher and hides the watcher by default.' + 'Persistent Thread Watcher': [ + false + 'The thread watcher will be visible when the page is loaded.' 1 ] 'Mark New IPs': [ @@ -862,6 +862,10 @@ Config = 'Shift+r' 'Manually refresh thread watcher.' ] + 'Toggle thread watcher': [ + 't' + 'Toggle visibility of thread watcher.' + ] # Images 'Expand image': [ 'Shift+e' 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; 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 -> 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