From 60ae31ead00d9abc273c27a50cfebf972778ae60 Mon Sep 17 00:00:00 2001 From: Tuxedo Takodachi Date: Thu, 23 Feb 2023 21:19:18 +0100 Subject: [PATCH] Resolve even more templating issues before decaffinating --- decaffinate.md | 6 ++++ src/General/Header.coffee | 3 +- src/General/Test.coffee | 4 +-- src/Linkification/Linkify.coffee | 8 ++--- src/Monitoring/Favicon.coffee | 24 +++++++-------- src/classes/Post.coffee | 12 ++++---- src/main/Main.coffee | 14 +++++---- src/platform/$.coffee | 50 ++++++++++++++++---------------- src/platform/CrossOrigin.coffee | 32 ++++++++++---------- 9 files changed, 81 insertions(+), 72 deletions(-) create mode 100644 decaffinate.md diff --git a/decaffinate.md b/decaffinate.md new file mode 100644 index 000000000..23938e281 --- /dev/null +++ b/decaffinate.md @@ -0,0 +1,6 @@ +# migration from coffeescript to modern js/ts + +## TODO + +- look for TODO comments +- find alternative for `<% if (` diff --git a/src/General/Header.coffee b/src/General/Header.coffee index 7da629693..5aab703b7 100644 --- a/src/General/Header.coffee +++ b/src/General/Header.coffee @@ -385,7 +385,8 @@ Header = Header.previousOffset = offsetY setBarPosition: (bottom) -> - Header.barPositionToggler?.checked = bottom + # TODO check if barPositionToggler exists + Header.barPositionToggler.checked = bottom $.event 'CloseMenu' args = if bottom then [ 'bottom-header' diff --git a/src/General/Test.coffee b/src/General/Test.coffee index 1d9ef4cfa..93e0a86a7 100644 --- a/src/General/Test.coffee +++ b/src/General/Test.coffee @@ -1,4 +1,4 @@ -<% if (readJSON('/.tests_enabled')) { %> +# <% if (readJSON('/.tests_enabled')) { %> Test = init: -> return unless g.SITE.software is 'yotsuba' and g.VIEW in ['index', 'thread'] @@ -169,4 +169,4 @@ Test = Test.testAll() e.preventDefault() e.stopPropagation() -<% } %> +# <% } %> diff --git a/src/Linkification/Linkify.coffee b/src/Linkification/Linkify.coffee index 8c2ffa4d1..1a07ba4b7 100644 --- a/src/Linkification/Linkify.coffee +++ b/src/Linkification/Linkify.coffee @@ -71,10 +71,10 @@ Linkify = if Linkify.regString.test word links.push Linkify.makeRange node, endNode, index, length - <% if (readJSON('/.tests_enabled')) { %> - Test.assert -> - word is links[links.length-1].toString() - <% } %> + # <% if (readJSON('/.tests_enabled')) { %> + # Test.assert -> + # word is links[links.length-1].toString() + # <% } %> break unless test.lastIndex and node is endNode diff --git a/src/Monitoring/Favicon.coffee b/src/Monitoring/Favicon.coffee index 2b5e97605..d2ec34f91 100644 --- a/src/Monitoring/Favicon.coffee +++ b/src/Monitoring/Favicon.coffee @@ -16,12 +16,12 @@ import Mayhem_unreadSFW from './Favicon/Mayhem.unreadSFW.png'; import Mayhem_unreadSFWY from './Favicon/Mayhem.unreadSFWY.png'; import Mayhem_unreadNSFW from './Favicon/Mayhem.unreadNSFW.png'; import Mayhem_unreadNSFWY from './Favicon/Mayhem.unreadNSFWY.png'; -import 4chanJS_unreadDead from './Favicon/4chanJS.unreadDead.png'; -import 4chanJS_unreadDeadY from './Favicon/4chanJS.unreadDeadY.png'; -import 4chanJS_unreadSFW from './Favicon/4chanJS.unreadSFW.png'; -import 4chanJS_unreadSFWY from './Favicon/4chanJS.unreadSFWY.png'; -import 4chanJS_unreadNSFW from './Favicon/4chanJS.unreadNSFW.png'; -import 4chanJS_unreadNSFWY from './Favicon/4chanJS.unreadNSFWY.png'; +import fourChanJS_unreadDead from './Favicon/4chanJS.unreadDead.png'; +import fourChanJS_unreadDeadY from './Favicon/4chanJS.unreadDeadY.png'; +import fourChanJS_unreadSFW from './Favicon/4chanJS.unreadSFW.png'; +import fourChanJS_unreadSFWY from './Favicon/4chanJS.unreadSFWY.png'; +import fourChanJS_unreadNSFW from './Favicon/4chanJS.unreadNSFW.png'; +import fourChanJS_unreadNSFWY from './Favicon/4chanJS.unreadNSFWY.png'; import Original_unreadDead from './Favicon/Original.unreadDead.png'; import Original_unreadDeadY from './Favicon/Original.unreadDeadY.png'; import Original_unreadSFW from './Favicon/Original.unreadSFW.png'; @@ -85,12 +85,12 @@ Favicon = Mayhem_unreadNSFWY, ] '4chanJS': [ - 4chanJS_unreadDead, - 4chanJS_unreadDeadY, - 4chanJS_unreadSFW, - 4chanJS_unreadSFWY, - 4chanJS_unreadNSFW, - 4chanJS_unreadNSFWY, + fourChanJS_unreadDead, + fourChanJS_unreadDeadY, + fourChanJS_unreadSFW, + fourChanJS_unreadSFWY, + fourChanJS_unreadNSFW, + fourChanJS_unreadNSFWY, ] Original: [ Original_unreadDead, diff --git a/src/classes/Post.coffee b/src/classes/Post.coffee index 8551aa718..0cc2bd07f 100644 --- a/src/classes/Post.coffee +++ b/src/classes/Post.coffee @@ -2,9 +2,9 @@ class Post toString: -> @ID constructor: (root, @thread, @board, flags={}) -> - <% if (readJSON('/.tests_enabled')) { %> - @normalizedOriginal = Test.normalize root - <% } %> + # <% if (readJSON('/.tests_enabled')) { %> + # @normalizedOriginal = Test.normalize root + # <% } %> $.extend @, flags @ID = +root.id.match(/\d*$/)[0] @@ -57,9 +57,9 @@ class Post @isHidden = false @clones = [] - <% if (readJSON('/.tests_enabled')) { %> - return if @forBuildTest - <% } %> + # <% if (readJSON('/.tests_enabled')) { %> + # return if @forBuildTest + # <% } %> if g.posts.get(@fullID) @isRebuilt = true @clones = g.posts.get(@fullID).clones diff --git a/src/main/Main.coffee b/src/main/Main.coffee index 9065d0984..d9f232e43 100644 --- a/src/main/Main.coffee +++ b/src/main/Main.coffee @@ -130,8 +130,9 @@ Main = items.previousversion = changes.previousversion = g.VERSION $.set changes, -> if items['Show Updated Notifications'] ? true + # TODO meta el = $.el 'span', - `<%= html(meta.name + ' has been updated to version ${g.VERSION}.') %>` + `{ innerHTML: 'meta.name has been updated to version ${g.VERSION}.'}` new Notice 'info', el, 15 parseURL: (site=g.SITE, url=location) -> @@ -535,7 +536,7 @@ Main = $.addClass doc, 'tainted' if Conf['Disable Native Extension'] and !Main.isFirstRun msg = $.el 'div', - `<%= html('Failed to disable the native extension. You may need to block it.') %>` + `{innerHTML: 'Failed to disable the native extension. You may need to block it.'}` new Notice 'error', msg unless errors instanceof Array @@ -579,7 +580,8 @@ Main = title += " (+#{errors.length - 1} other errors)" if errors.length > 1 details = '' addDetails = (text) -> - unless encodeURIComponent(title + details + text + '\n').length > `<%= meta.newIssueMaxLength - meta.newIssue.replace(/%(title|details)/, '').length %>` + # TODO meta + unless encodeURIComponent(title + details + text + '\n').length > `"meta.newIssueMaxLength - meta.newIssue.replace(/%(title|details)/, '')".length` details += text + '\n' addDetails """ [Please describe the steps needed to reproduce this error.] @@ -704,6 +706,6 @@ Main = ['Mod Contact Links', ModContact] ] -<% if (readJSON('/.tests_enabled')) { %> -Main.features.push ['Build Test', Test] -<% } %> +# <% if (readJSON('/.tests_enabled')) { %> +# Main.features.push ['Build Test', Test] +# <% } %> diff --git a/src/platform/$.coffee b/src/platform/$.coffee index 7c2c4646e..b8ddeb38f 100644 --- a/src/platform/$.coffee +++ b/src/platform/$.coffee @@ -77,11 +77,11 @@ $.ajax = do -> options.type or= options.form and 'post' or 'get' # XXX https://forums.lanik.us/viewtopic.php?f=64&t=24173&p=78310 url = url.replace /^((?:https?:)?\/\/(?:\w+\.)?(?:4chan|4channel|4cdn)\.org)\/adv\//, '$1//adv/' - <% if (type === 'crx') { %> - # XXX https://bugs.chromium.org/p/chromium/issues/detail?id=920638 - if Conf['Work around CORB Bug'] and g.SITE.software is 'yotsuba' and !options.testCORB and FormData.prototype.entries - return $.ajaxPage url, options - <% } %> + # <% if (type === 'crx') { %> + # # XXX https://bugs.chromium.org/p/chromium/issues/detail?id=920638 + # if Conf['Work around CORB Bug'] and g.SITE.software is 'yotsuba' and !options.testCORB and FormData.prototype.entries + # return $.ajaxPage url, options + # <% } %> {onloadend, timeout, responseType, withCredentials, type, onprogress, form, headers} = options r = new pageXHR() try @@ -92,12 +92,12 @@ $.ajax = do -> $.extend r.upload, {onprogress} # connection error or content blocker $.on r, 'error', -> (c.warn "4chan X failed to load: #{url}" unless r.status) - <% if (type === 'crx') { %> - # XXX https://bugs.chromium.org/p/chromium/issues/detail?id=920638 - $.on r, 'load', -> - if !Conf['Work around CORB Bug'] and r.readyState is 4 and r.status is 200 and r.statusText is '' and r.response is null - $.set 'Work around CORB Bug', (Conf['Work around CORB Bug'] = Date.now()) - <% } %> + # <% if (type === 'crx') { %> + # # XXX https://bugs.chromium.org/p/chromium/issues/detail?id=920638 + # $.on r, 'load', -> + # if !Conf['Work around CORB Bug'] and r.readyState is 4 and r.status is 200 and r.statusText is '' and r.response is null + # $.set 'Work around CORB Bug', (Conf['Work around CORB Bug'] = Date.now()) + # <% } %> r.send form catch err # XXX Some content blockers in Firefox (e.g. Adblock Plus and NoScript) throw an exception instead of simulating a connection error. @@ -107,9 +107,9 @@ $.ajax = do -> $.queueTask $.event, 'loadend', null, r r -<% if (type === 'crx') { %> -# XXX https://bugs.chromium.org/p/chromium/issues/detail?id=920638 -do -> +# <% if (type === 'crx') { %> +# # XXX https://bugs.chromium.org/p/chromium/issues/detail?id=920638 +# do -> requestID = 0 requests = $.dict() @@ -179,7 +179,7 @@ do -> form = Array.from(form.entries()) if form $.event '4chanXAjax', {url, timeout, responseType, withCredentials, type, onprogress: !!onprogress, form, headers, id} req -<% } %> +# <% } %> # Status Code 304: Not modified # With the `If-Modified-Since` header we only receive the HTTP headers and no body for 304 responses. @@ -357,13 +357,13 @@ $.one = (el, events, handler) -> $.on el, events, cb $.event = (event, detail, root=d) -> - <% if (type === 'userscript') { %> + # <% if (type === 'userscript') { %> if detail? and typeof cloneInto is 'function' detail = cloneInto detail, d.defaultView - <% } %> + # <% } %> root.dispatchEvent new CustomEvent event, {bubbles: true, cancelable: true, detail} -<% if (type === 'userscript') { %> +# <% if (type === 'userscript') { %> # XXX Make $.event work in Pale Moon with GM 3.x (no cloneInto function). do -> return unless /PaleMoon\//.test(navigator.userAgent) and +GM_info?.version?.split('.')[0] >= 2 and typeof cloneInto is 'undefined' @@ -383,12 +383,12 @@ do -> obj $.event = (event, detail, root=d) -> root.dispatchEvent new CustomEvent event, {bubbles: true, cancelable: true, detail: clone detail} -<% } %> +# <% } %> $.modifiedClick = (e) -> e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or e.button isnt 0 -<% if (type === 'userscript') { %> +# <% if (type === 'userscript') { %> $.open = if GM?.openInTab? GM.openInTab @@ -396,10 +396,10 @@ $.open = GM_openInTab else (url) -> window.open url, '_blank' -<% } else { %> +# <% } else { %> $.open = (url) -> window.open url, '_blank' -<% } %> +# <% } %> $.debounce = (wait, fn) -> lastCall = 0 @@ -527,7 +527,7 @@ $.securityCheck = (data) -> if location.protocol isnt 'https:' delete data['Redirect to HTTPS'] -<% if (type === 'crx') { %> +# <% if (type === 'crx') { %> # https://developer.chrome.com/extensions/storage.html $.oldValue = local: $.dict() @@ -646,7 +646,7 @@ do -> cb? err unless --count chrome.storage.local.clear done chrome.storage.sync.clear done -<% } else { %> +# <% } else { %> # http://wiki.greasespot.net/Main_Page # https://tampermonkey.net/documentation.php @@ -809,4 +809,4 @@ else $.delete $.listValues().map (key) -> key.replace g.NAMESPACE, '' cb?() -<% } %> +# <% } %> diff --git a/src/platform/CrossOrigin.coffee b/src/platform/CrossOrigin.coffee index 2063d5f1f..73a16b972 100644 --- a/src/platform/CrossOrigin.coffee +++ b/src/platform/CrossOrigin.coffee @@ -1,4 +1,4 @@ -<% if (type === 'crx') { %> +# <% if (type === 'crx') { %> eventPageRequest = do -> callbacks = [] chrome.runtime.onMessage.addListener (response) -> @@ -8,17 +8,17 @@ eventPageRequest = do -> chrome.runtime.sendMessage params, (id) -> callbacks[id] = cb -<% } %> +# <% } %> CrossOrigin = binary: (url, cb, headers=$.dict()) -> # XXX https://forums.lanik.us/viewtopic.php?f=64&t=24173&p=78310 url = url.replace /^((?:https?:)?\/\/(?:\w+\.)?(?:4chan|4channel|4cdn)\.org)\/adv\//, '$1//adv/' - <% if (type === 'crx') { %> + # <% if (type === 'crx') { %> eventPageRequest {type: 'ajax', url, headers, responseType: 'arraybuffer'}, ({response, responseHeaderString}) -> response = new Uint8Array(response) if response cb response, responseHeaderString - <% } %> - <% if (type === 'userscript') { %> + # <% } %> + # <% if (type === 'userscript') { %> fallback = -> $.ajax url, { headers @@ -57,7 +57,7 @@ CrossOrigin = (GM?.xmlHttpRequest or GM_xmlhttpRequest) gmOptions catch fallback() - <% } %> + # <% } %> file: (url, cb) -> CrossOrigin.binary url, (data, headers) -> @@ -112,15 +112,15 @@ CrossOrigin = {onloadend, timeout, responseType, headers} = options responseType ?= 'json' - <% if (type === 'userscript') { %> + # <% if (type === 'userscript') { %> unless GM?.xmlHttpRequest? or GM_xmlhttpRequest? return $.ajax url, options - <% } %> + # <% } %> req = new CrossOrigin.Request() req.onloadend = onloadend - <% if (type === 'userscript') { %> + # <% if (type === 'userscript') { %> gmOptions = { method: 'GET' url @@ -153,14 +153,14 @@ CrossOrigin = req.abort = -> try gmReq.abort() - <% } %> + # <% } %> - <% if (type === 'crx') { %> + # <% if (type === 'crx') { %> eventPageRequest {type: 'ajax', url, responseType, headers, timeout}, (result) -> if result.status $.extend req, result req.onloadend() - <% } %> + # <% } %> req @@ -168,15 +168,15 @@ CrossOrigin = $.cache url, cb, ajax: CrossOrigin.ajax - <% if (type === 'crx') { %> + # <% if (type === 'crx') { %> permission: (cb, cbFail, origins) -> eventPageRequest {type: 'permission', origins}, (result) -> if result cb() else cbFail() - <% } %> - <% if (type === 'userscript') { %> + # <% } %> + # <% if (type === 'userscript') { %> permission: (cb) -> cb() - <% } %> + # <% } %>