From 081d0c75c9b8c3b2afaeb190e1e4d51bcd4d08f7 Mon Sep 17 00:00:00 2001 From: Jonathan Chappelow Date: Tue, 8 Jun 2021 01:48:39 -0500 Subject: [PATCH] turbo drive misery --- cmd/dcrdata/package-lock.json | 11 ++++++++++ cmd/dcrdata/package.json | 1 + cmd/dcrdata/public/index.js | 2 +- .../js/controllers/address_controller.js | 2 +- .../js/controllers/attackcost_controller.js | 2 +- .../js/controllers/charts_controller.js | 2 +- .../js/controllers/market_controller.js | 2 +- .../controllers/pagenavigation_controller.js | 8 ++++---- .../js/controllers/search_controller.js | 4 ++-- .../js/controllers/status_controller.js | 6 +++--- ...bolinks_helper.js => turbodrive_helper.js} | 17 ++++++++-------- .../services/keyboard_navigation_service.js | 6 +++--- .../public/js/services/theme_service.js | 2 +- cmd/dcrdata/public/scss/themes.scss | 1 + cmd/dcrdata/views/address.tmpl | 4 ++-- cmd/dcrdata/views/block.tmpl | 2 +- cmd/dcrdata/views/extras.tmpl | 20 +++++++++---------- cmd/dcrdata/views/treasury.tmpl | 4 ++-- cmd/dcrdata/views/tx.tmpl | 6 +++--- cmd/dcrdata/webpack.common.js | 3 --- 20 files changed, 57 insertions(+), 48 deletions(-) rename cmd/dcrdata/public/js/helpers/{turbolinks_helper.js => turbodrive_helper.js} (81%) diff --git a/cmd/dcrdata/package-lock.json b/cmd/dcrdata/package-lock.json index 228b12f48..1866a6f2f 100644 --- a/cmd/dcrdata/package-lock.json +++ b/cmd/dcrdata/package-lock.json @@ -8,6 +8,7 @@ "version": "1.1.0", "license": "ISC", "dependencies": { + "@hotwired/turbo": "^7.0.0-beta.5", "bootstrap": "^4.6.0", "dompurify": "^2.2.8", "lodash-es": "^4.17.21", @@ -1158,6 +1159,11 @@ "node": ">=8" } }, + "node_modules/@hotwired/turbo": { + "version": "7.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.0.0-beta.5.tgz", + "integrity": "sha512-z10dI2U/StkMSmnfJUsyez6jrhnitgzjyw2CxE3LnAAzW/TBhvsMYKsVG7Xu337r3gh0r6UwIFWyvvtm3in6gg==" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -10097,6 +10103,11 @@ } } }, + "@hotwired/turbo": { + "version": "7.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.0.0-beta.5.tgz", + "integrity": "sha512-z10dI2U/StkMSmnfJUsyez6jrhnitgzjyw2CxE3LnAAzW/TBhvsMYKsVG7Xu337r3gh0r6UwIFWyvvtm3in6gg==" + }, "@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", diff --git a/cmd/dcrdata/package.json b/cmd/dcrdata/package.json index 7e87e5a2b..c715ff6b7 100644 --- a/cmd/dcrdata/package.json +++ b/cmd/dcrdata/package.json @@ -53,6 +53,7 @@ "webpack-merge": "^5.7.3" }, "dependencies": { + "@hotwired/turbo": "^7.0.0-beta.5", "bootstrap": "^4.6.0", "dompurify": "^2.2.8", "lodash-es": "^4.17.21", diff --git a/cmd/dcrdata/public/index.js b/cmd/dcrdata/public/index.js index e97be9fab..4ac8435cc 100644 --- a/cmd/dcrdata/public/index.js +++ b/cmd/dcrdata/public/index.js @@ -17,7 +17,7 @@ const application = Application.start() const context = require.context('./js/controllers', true, /\.js$/) application.load(definitionsFromContext(context)) -document.addEventListener('turbolinks:load', function (e) { +document.addEventListener('turbo:load', function (e) { document.querySelectorAll('.jsonly').forEach((el) => { el.classList.remove('jsonly') }) diff --git a/cmd/dcrdata/public/js/controllers/address_controller.js b/cmd/dcrdata/public/js/controllers/address_controller.js index e63498f0c..dbffd47c2 100644 --- a/cmd/dcrdata/public/js/controllers/address_controller.js +++ b/cmd/dcrdata/public/js/controllers/address_controller.js @@ -5,7 +5,7 @@ import { getDefault } from '../helpers/module_helper' import { padPoints, sizedBarPlotter } from '../helpers/chart_helper' import Zoom from '../helpers/zoom_helper' import globalEventBus from '../services/event_bus_service' -import TurboQuery from '../helpers/turbolinks_helper' +import TurboQuery from '../helpers/turbodrive_helper' import axios from 'axios' import humanize from '../helpers/humanize_helper' import txInBlock from '../helpers/block_helper' diff --git a/cmd/dcrdata/public/js/controllers/attackcost_controller.js b/cmd/dcrdata/public/js/controllers/attackcost_controller.js index a4d12f68f..c6ddb739c 100644 --- a/cmd/dcrdata/public/js/controllers/attackcost_controller.js +++ b/cmd/dcrdata/public/js/controllers/attackcost_controller.js @@ -1,5 +1,5 @@ import { Controller } from 'stimulus' -import TurboQuery from '../helpers/turbolinks_helper' +import TurboQuery from '../helpers/turbodrive_helper' import { getDefault } from '../helpers/module_helper' import globalEventBus from '../services/event_bus_service' import dompurify from 'dompurify' diff --git a/cmd/dcrdata/public/js/controllers/charts_controller.js b/cmd/dcrdata/public/js/controllers/charts_controller.js index c422f7778..13e40c189 100644 --- a/cmd/dcrdata/public/js/controllers/charts_controller.js +++ b/cmd/dcrdata/public/js/controllers/charts_controller.js @@ -5,7 +5,7 @@ import { darkEnabled } from '../services/theme_service' import { animationFrame } from '../helpers/animation_helper' import { getDefault } from '../helpers/module_helper' import axios from 'axios' -import TurboQuery from '../helpers/turbolinks_helper' +import TurboQuery from '../helpers/turbodrive_helper' import globalEventBus from '../services/event_bus_service' import { isEqual } from '../helpers/chart_helper' import dompurify from 'dompurify' diff --git a/cmd/dcrdata/public/js/controllers/market_controller.js b/cmd/dcrdata/public/js/controllers/market_controller.js index de0e671ea..3625142d1 100644 --- a/cmd/dcrdata/public/js/controllers/market_controller.js +++ b/cmd/dcrdata/public/js/controllers/market_controller.js @@ -1,5 +1,5 @@ import { Controller } from 'stimulus' -import TurboQuery from '../helpers/turbolinks_helper' +import TurboQuery from '../helpers/turbodrive_helper' import { getDefault } from '../helpers/module_helper' import humanize from '../helpers/humanize_helper' import { darkEnabled } from '../services/theme_service' diff --git a/cmd/dcrdata/public/js/controllers/pagenavigation_controller.js b/cmd/dcrdata/public/js/controllers/pagenavigation_controller.js index 7dbff0faa..bcadee43f 100644 --- a/cmd/dcrdata/public/js/controllers/pagenavigation_controller.js +++ b/cmd/dcrdata/public/js/controllers/pagenavigation_controller.js @@ -1,6 +1,6 @@ -/* global Turbolinks */ import { Controller } from 'stimulus' import Url from 'url-parse' +import * as Turbo from '@hotwired/turbo' export default class extends Controller { static get targets () { @@ -18,7 +18,7 @@ export default class extends Controller { q.byvotestatus = this.votestatusTarget.selectedOptions[0].value } url.set('query', q) - Turbolinks.visit(url.toString()) + Turbo.visit(url.toString()) } setFilterbyVoteStatus () { @@ -26,7 +26,7 @@ export default class extends Controller { const q = {} q.byvotestatus = this.votestatusTarget.selectedOptions[0].value url.set('query', q) - Turbolinks.visit(url.toString()) + Turbo.visit(url.toString()) } setListView () { @@ -36,6 +36,6 @@ export default class extends Controller { url.set('query', {}) } url.set('pathname', newPeriod) - Turbolinks.visit(url.href) + Turbo.visit(url.href) } } diff --git a/cmd/dcrdata/public/js/controllers/search_controller.js b/cmd/dcrdata/public/js/controllers/search_controller.js index c5367a083..11659c73e 100644 --- a/cmd/dcrdata/public/js/controllers/search_controller.js +++ b/cmd/dcrdata/public/js/controllers/search_controller.js @@ -1,5 +1,5 @@ -/* global Turbolinks */ import { Controller } from 'stimulus' +import * as Turbo from '@hotwired/turbo' export default class extends Controller { execute (e) { @@ -8,6 +8,6 @@ export default class extends Controller { if (search === '') { return } - Turbolinks.visit('/search?search=' + search) + Turbo.visit('/search?search=' + search) } } diff --git a/cmd/dcrdata/public/js/controllers/status_controller.js b/cmd/dcrdata/public/js/controllers/status_controller.js index 41f07e911..2bfb5ebb6 100644 --- a/cmd/dcrdata/public/js/controllers/status_controller.js +++ b/cmd/dcrdata/public/js/controllers/status_controller.js @@ -1,9 +1,9 @@ -/* global Turbolinks */ import { Controller } from 'stimulus' import dompurify from 'dompurify' import ws from '../services/messagesocket_service' import Notify from 'notifyjs' import globalEventBus from '../services/event_bus_service' +import * as Turbo from '@hotwired/turbo' function buildProgressBar (data) { const clean = dompurify.sanitize @@ -91,7 +91,7 @@ export default class extends Controller { if (!Notify.needsPermission) doNotification() this.messageTarget.querySelector('h5').textContent = 'Blockchain sync is complete. Redirecting to home in 20 secs.' - setTimeout(() => Turbolinks.visit('/'), 20000) + setTimeout(() => Turbo.visit('/'), 20000) return } } @@ -107,7 +107,7 @@ export default class extends Controller { _processBlock (blockData) { if (this.hasFutureBlockTarget) { - Turbolinks.visit(window.location, { action: 'replace' }) + Turbo.visit(window.location, { action: 'replace' }) } } } diff --git a/cmd/dcrdata/public/js/helpers/turbolinks_helper.js b/cmd/dcrdata/public/js/helpers/turbodrive_helper.js similarity index 81% rename from cmd/dcrdata/public/js/helpers/turbolinks_helper.js rename to cmd/dcrdata/public/js/helpers/turbodrive_helper.js index f4a40db31..b29c2b850 100644 --- a/cmd/dcrdata/public/js/helpers/turbolinks_helper.js +++ b/cmd/dcrdata/public/js/helpers/turbodrive_helper.js @@ -1,14 +1,14 @@ -/* global Turbolinks */ import Url from 'url-parse' +import * as Turbo from '@hotwired/turbo' export default class TurboQuery { - constructor (turbolinks) { + constructor (turbo) { const tq = this tq.replaceTimer = 0 tq.appendTimer = 0 - tq.turbolinks = turbolinks || Turbolinks || false - if (!tq.turbolinks || !tq.turbolinks.supported) { - console.error('No passed or global Turbolinks instance detected. TurboQuery requires Turbolinks.') + tq.turbo = turbo || Turbo || false + if (!tq.turbo) { + console.error('No passed or global Turbo instance detected. TurboQuery requires Turbo.') return } // These are timer callbacks. Bind them to the TurboQuery instance. @@ -33,8 +33,8 @@ export default class TurboQuery { _replaceHistory () { // see https://github.com/turbolinks/turbolinks/issues/219. This also works: - // window.history.replaceState(window.history.state, this.addr, this.url.href) - this.turbolinks.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.turbolinks.Location.wrap(this.url.href), this.turbolinks.uuid()) + window.history.replaceState(window.history.state, this.addr, this.url.href) + // this.turbo.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.turbo.Location.wrap(this.url.href), this.turbo.uuid()) this.replaceTimer = 0 } @@ -42,7 +42,8 @@ export default class TurboQuery { // same as replaceHref, but creates a new entry in history for navigating // with the browsers forward and back buttons. May still not work because of // TurboLinks caching behavior, I think. - this.turbolinks.controller.pushHistoryWithLocationAndRestorationIdentifier(this.turbolinks.Location.wrap(this.url.href), this.turbolinks.uuid()) + window.history.pushState(window.history.state, this.addr, this.url.href) + // this.turbo.controller.pushHistoryWithLocationAndRestorationIdentifier(this.turbo.Location.wrap(this.url.href), this.turbo.uuid()) this.appendTimer = 0 } diff --git a/cmd/dcrdata/public/js/services/keyboard_navigation_service.js b/cmd/dcrdata/public/js/services/keyboard_navigation_service.js index ec4f6c441..380ba9662 100644 --- a/cmd/dcrdata/public/js/services/keyboard_navigation_service.js +++ b/cmd/dcrdata/public/js/services/keyboard_navigation_service.js @@ -1,8 +1,8 @@ -/* global Turbolinks */ import { toggleMenu, toggleSun, closeMenu } from '../services/theme_service' import { setCookie } from './cookie_service' import Mousetrap from 'mousetrap' import { addPauseToMousetrap } from '../vendor/mousetrap-pause' +import * as Turbo from '@hotwired/turbo' addPauseToMousetrap(Mousetrap) @@ -130,7 +130,7 @@ Mousetrap.bind('enter', function (e) { jumpToIndexOnLoad = currentIndex } currentTarget.classList.add('activated') - Turbolinks.visit(location) + Turbo.visit(location) } }) @@ -169,7 +169,7 @@ if (keyNavEnabled()) { keyNavToggle.querySelector('.text').textContent = keyNavEnabled() ? 'Disable Hot Keys' : 'Enable Hot Keys' -document.addEventListener('turbolinks:load', function (e) { +document.addEventListener('turbo:load', function (e) { closeMenu(e) if (keyNavEnabled()) { keyNav(e, true) diff --git a/cmd/dcrdata/public/js/services/theme_service.js b/cmd/dcrdata/public/js/services/theme_service.js index 0969c3d21..8135a0d7f 100644 --- a/cmd/dcrdata/public/js/services/theme_service.js +++ b/cmd/dcrdata/public/js/services/theme_service.js @@ -39,7 +39,7 @@ export function toggleSun () { } } -document.addEventListener('turbolinks:before-render', function (event) { +document.addEventListener('turbo:before-render', function (event) { if (darkEnabled()) { toggleToDarkClasses(event.data.newBody) } else { diff --git a/cmd/dcrdata/public/scss/themes.scss b/cmd/dcrdata/public/scss/themes.scss index 4cf88aef5..835e0b1e8 100644 --- a/cmd/dcrdata/public/scss/themes.scss +++ b/cmd/dcrdata/public/scss/themes.scss @@ -174,6 +174,7 @@ body.darkBG { .nav-pills .nav-link.active { background-color: #2dd8a3; color: black; + cursor: pointer; } .dcrdata-logo { diff --git a/cmd/dcrdata/views/address.tmpl b/cmd/dcrdata/views/address.tmpl index c7c655cac..d8660965f 100644 --- a/cmd/dcrdata/views/address.tmpl +++ b/cmd/dcrdata/views/address.tmpl @@ -207,7 +207,7 @@ data-target="address.pageminus"> Previous @@ -216,7 +216,7 @@ data-target="address.pageplus"> Next diff --git a/cmd/dcrdata/views/block.tmpl b/cmd/dcrdata/views/block.tmpl index f8ab3d842..1382701aa 100644 --- a/cmd/dcrdata/views/block.tmpl +++ b/cmd/dcrdata/views/block.tmpl @@ -46,7 +46,7 @@ {{- else }} mempool | {{- end}} - api + api diff --git a/cmd/dcrdata/views/extras.tmpl b/cmd/dcrdata/views/extras.tmpl index 910c67d9c..626ccc741 100644 --- a/cmd/dcrdata/views/extras.tmpl +++ b/cmd/dcrdata/views/extras.tmpl @@ -1,5 +1,5 @@ {{define "html-head"}} - + @@ -36,7 +36,7 @@ - + {{.}} @@ -47,8 +47,6 @@ - - {{end}} @@ -77,7 +75,7 @@ /> -