From 686eac9e0aa1366d428888ad32504790ec06f894 Mon Sep 17 00:00:00 2001 From: batvale1 Date: Mon, 12 Aug 2024 22:03:17 +0300 Subject: [PATCH 01/12] #77 cross links --- client/src/run-browser.js | 1 - client/src/views/nav-toggle.js | 85 ++--- flavors/btcscan/config.env | 4 +- www/img/icons/BTCMempool-menu-logo.svg | 23 ++ www/img/icons/Bitcoin-menu-logo-old.svg | 17 + www/img/icons/Bitcoin-menu-logo.svg | 22 +- www/img/icons/Ethereum2-menu-logo-old.svg | 20 ++ www/img/icons/Ethereum2-menu-logo.svg | 32 +- www/img/icons/Monero-menu-logo.svg | 5 + www/style.css | 363 +++++++++++----------- 10 files changed, 289 insertions(+), 283 deletions(-) create mode 100644 www/img/icons/BTCMempool-menu-logo.svg create mode 100644 www/img/icons/Bitcoin-menu-logo-old.svg create mode 100644 www/img/icons/Ethereum2-menu-logo-old.svg create mode 100644 www/img/icons/Monero-menu-logo.svg diff --git a/client/src/run-browser.js b/client/src/run-browser.js index f66bfd2d..2ca02f79 100644 --- a/client/src/run-browser.js +++ b/client/src/run-browser.js @@ -54,7 +54,6 @@ const ogUrlDriver = description$ => O.from(description$) const canLinkDriver = description$ => O.from(description$) .subscribe(description => { const element = document.querySelector('link[rel="canonical"]'); - console.log('here', description); if (description && description !== 'none') { if (!element) { diff --git a/client/src/views/nav-toggle.js b/client/src/views/nav-toggle.js index f361d0e8..422188f7 100644 --- a/client/src/views/nav-toggle.js +++ b/client/src/views/nav-toggle.js @@ -1,70 +1,25 @@ import Snabbdom from 'snabbdom-pragma' -import { nativeAssetId } from '../const' -import { updateQuery } from '../util' +import navToggle from './nav-toggle' + + +const items = process.env.MENU_ITEMS && JSON.parse(process.env.MENU_ITEMS) + , active = process.env.MENU_ACTIVE const staticRoot = process.env.STATIC_ROOT || '' -const hasCam = process.browser && navigator.mediaDevices && navigator.mediaDevices.getUserMedia -const otherTheme = { dark: 'light', light: 'dark' } -export default (t, theme, page) => +export default ({ t, theme, page }) => -
-
- - - -
-
-
- { process.browser ?
- : - } -
-
-

Exchanges

-
-

Redot

- -
-
-
-
-

Explorers

- -

Developer Tools

- -
-
-

Other Products

- -
-
-

Useful Links

- -
-
-
-
+
+ + { process.env.NAVBAR_HTML ? navToggle(t, theme, page) : "" } +
diff --git a/flavors/btcscan/config.env b/flavors/btcscan/config.env index 401bff55..edbb0084 100644 --- a/flavors/btcscan/config.env +++ b/flavors/btcscan/config.env @@ -14,8 +14,10 @@ YESJS_BASE_HREF="${BASE_HREF//\/nojs\//\/}" export CANONICAL_URL="https://btcscan.org${YESJS_BASE_HREF:-/}" export MENU_ITEMS='{ - "Bitcoin": "/" + "BTC Mempool": "https://btcmempool.org/" +, "Bitcoin": "/" , "Ethereum 2": "https://ethscan.org/" +, "Monero": "https://xmrscan.org/" }' export FOOTER_LINKS='{ diff --git a/www/img/icons/BTCMempool-menu-logo.svg b/www/img/icons/BTCMempool-menu-logo.svg new file mode 100644 index 00000000..942b956a --- /dev/null +++ b/www/img/icons/BTCMempool-menu-logo.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/img/icons/Bitcoin-menu-logo-old.svg b/www/img/icons/Bitcoin-menu-logo-old.svg new file mode 100644 index 00000000..2f1b74c1 --- /dev/null +++ b/www/img/icons/Bitcoin-menu-logo-old.svg @@ -0,0 +1,17 @@ + + + btc_main + + + + + + + + + + + + + + diff --git a/www/img/icons/Bitcoin-menu-logo.svg b/www/img/icons/Bitcoin-menu-logo.svg index 9cf8dce6..f15b4a72 100644 --- a/www/img/icons/Bitcoin-menu-logo.svg +++ b/www/img/icons/Bitcoin-menu-logo.svg @@ -1,17 +1,5 @@ - - - btc_main - - - - - - - - - - - - - - \ No newline at end of file + + + + + diff --git a/www/img/icons/Ethereum2-menu-logo-old.svg b/www/img/icons/Ethereum2-menu-logo-old.svg new file mode 100644 index 00000000..4e70d303 --- /dev/null +++ b/www/img/icons/Ethereum2-menu-logo-old.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/www/img/icons/Ethereum2-menu-logo.svg b/www/img/icons/Ethereum2-menu-logo.svg index 9dd71f7a..800d2dab 100644 --- a/www/img/icons/Ethereum2-menu-logo.svg +++ b/www/img/icons/Ethereum2-menu-logo.svg @@ -1,20 +1,16 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/www/img/icons/Monero-menu-logo.svg b/www/img/icons/Monero-menu-logo.svg new file mode 100644 index 00000000..b06d2cd2 --- /dev/null +++ b/www/img/icons/Monero-menu-logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/www/style.css b/www/style.css index 51330b5a..67c2fa9e 100644 --- a/www/style.css +++ b/www/style.css @@ -81,7 +81,7 @@ a, a:link, a:visited, a:hover, a:focus { .main-nav li{ text-decoration: none; list-style: none; - margin-right: 30px; + margin-right: 0; } .main-nav li a{ @@ -97,8 +97,8 @@ a, a:link, a:visited, a:hover, a:focus { .main-nav .menu-logo{ - height: 30px; - width: 30px; + height: 40px; + width: 40px; margin-right: 8px; margin-bottom: 2px; } @@ -542,7 +542,7 @@ table th { height: 31px; } - .prev-next-blocks-btns > div:nth-child(1) a > div > div:nth-child(2) { +.prev-next-blocks-btns > div:nth-child(1) a > div > div:nth-child(2) { text-align: center; } @@ -598,7 +598,7 @@ body > .container, .navbar > .container, > .container, .content-wrap > div > .co } .blocks-table .blocks-table-row.header > * { - + color: #78838e; font-weight: 600; } @@ -1337,9 +1337,9 @@ img.footer_container_content_onion-links_icon { /* preload images. css hack via https://stackoverflow.com/a/14390213/865693 */ body::after{ - position:absolute; width:0; height:0; overflow:hidden; z-index:-1; - content: url(img/icons/plus.png) url(img/icons/arrow_right_blu.png) url(img/icons/arrow_left_blu.png) url(img/icons/copy.png) - url(img/icons/menu-logo.svg) url(img/Loading.gif) url(img/icons/search.png); + position:absolute; width:0; height:0; overflow:hidden; z-index:-1; + content: url(img/icons/plus.png) url(img/icons/arrow_right_blu.png) url(img/icons/arrow_left_blu.png) url(img/icons/copy.png) + url(img/icons/menu-logo.svg) url(img/Loading.gif) url(img/icons/search.png); } /* only show loading animation when we're loading for more than 0.5s, @@ -1466,6 +1466,7 @@ body::after{ .nav-link { color: #fff; font-weight: 600; + padding: 0.5rem 0.5rem; } .nav-link:hover { @@ -1502,15 +1503,15 @@ body::after{ /* input/output counter */ .vouts, .vins { - counter-reset: txcnt -1; + counter-reset: txcnt -1; } .vout-header-container > span:first-child:before, .vin-header-container > span:first-child:before { - counter-increment: txcnt; - content: "#" counter(txcnt); - padding-right: 5px; - font-size: 0.9em; - color: #475562; - margin-left: -19px; + counter-increment: txcnt; + content: "#" counter(txcnt); + padding-right: 5px; + font-size: 0.9em; + color: #475562; + margin-left: -19px; } .theme-light .vout-header-container > span:first-child:before, .theme-light .vin-header-container > span:first-child:before { color: #c3cbd3; @@ -1546,79 +1547,79 @@ body::after{ @media only screen and (max-width: 995px) { - /* transactions table */ - - div.transactions-table-row.header { - display:none !important; - } - - /* table row (transaction) */ - .transactions-table-row { - margin: 0 0 1rem 0; - display: flex !important; - flex-direction: column !important; - height: auto !important; - padding: 20px; - } - - .transactions-table-link-row { - margin-bottom: 20px; - } - - .transactions-table-link-row:nth-child(odd) { - background: #22242c; - } - - /* table row (transaction item) */ - .transactions-table .transactions-table-row.block-data > * { - border: none; - position: relative; - padding-left: 0 !important; - padding: 10px; - display: flex; - justify-content: space-between; - align-items: center; - width: 100% !important; - text-align: right; - /* border-top: 1px solid #22242C; */ - } - - .transactions-table-row { - /* Behave like a "row" */ - display: block; - } - - div.transactions-table-cell { - display: flex !important; - justify-content: space-between; - width: 100% !important; - padding: 10px 0; - word-break: break-all; - text-align: right; - } - - .transactions-table .transactions-table-row > div:nth-child(1) { - padding-left: 0px; - } - - div.transactions-table-cell:before { - width: 45%; - padding-right: 10px; - font-weight: 600; - color: #78838e; - margin-right: 50px; - word-break: keep-all; - } - - /* - Label the data - */ - div.transactions-table-cell:before { content: attr(data-label); text-align: left; width: auto;} + /* transactions table */ + + div.transactions-table-row.header { + display:none !important; + } + + /* table row (transaction) */ + .transactions-table-row { + margin: 0 0 1rem 0; + display: flex !important; + flex-direction: column !important; + height: auto !important; + padding: 20px; + } + + .transactions-table-link-row { + margin-bottom: 20px; + } + + .transactions-table-link-row:nth-child(odd) { + background: #22242c; + } + + /* table row (transaction item) */ + .transactions-table .transactions-table-row.block-data > * { + border: none; + position: relative; + padding-left: 0 !important; + padding: 10px; + display: flex; + justify-content: space-between; + align-items: center; + width: 100% !important; + text-align: right; + /* border-top: 1px solid #22242C; */ + } + + .transactions-table-row { + /* Behave like a "row" */ + display: block; + } + + div.transactions-table-cell { + display: flex !important; + justify-content: space-between; + width: 100% !important; + padding: 10px 0; + word-break: break-all; + text-align: right; + } + + .transactions-table .transactions-table-row > div:nth-child(1) { + padding-left: 0px; + } + + div.transactions-table-cell:before { + width: 45%; + padding-right: 10px; + font-weight: 600; + color: #78838e; + margin-right: 50px; + word-break: keep-all; + } + + /* + Label the data + */ + div.transactions-table-cell:before { content: attr(data-label); text-align: left; width: auto;} } @media only screen and (max-width: 990px) { - + .page-search-bar { margin: 5px auto 30px auto; } @@ -1634,59 +1635,59 @@ body::after{ @media only screen and (max-width: 850px) { - /* blocks table */ - - div.blocks-table-row.header { - display:none; - } - - /* table row (transaction) */ - .blocks-table-row { - margin: 0 0 1rem 0; - display: flex; - flex-direction: column; - height: auto !important; - padding: 20px; - } - - .blocks-table-link-row { - margin-bottom: 20px; - } - - .blocks-table-link-row:nth-child(odd) { - background: #22242c; - } - - /* table row (transaction item) */ - .blocks-table .blocks-table-row.block-data > * { - border: none; - position: relative; - padding-left: 0 !important; - padding: 10px; - display: flex; - justify-content: space-between; - align-items: center; - width: 100% !important; - text-align: right; - /* border-top: 1px solid #22242C; */ - } - - .blocks-table-row { - /* Behave like a "row" */ - display: block; - } - - div.blocks-table-cell:before { - width: 45%; - padding-right: 10px; - font-weight: 600; - color: #78838e; - } - - /* - Label the data - */ - div.blocks-table-cell:before { content: attr(data-label); text-align: left; width: auto;} + /* blocks table */ + + div.blocks-table-row.header { + display:none; + } + + /* table row (transaction) */ + .blocks-table-row { + margin: 0 0 1rem 0; + display: flex; + flex-direction: column; + height: auto !important; + padding: 20px; + } + + .blocks-table-link-row { + margin-bottom: 20px; + } + + .blocks-table-link-row:nth-child(odd) { + background: #22242c; + } + + /* table row (transaction item) */ + .blocks-table .blocks-table-row.block-data > * { + border: none; + position: relative; + padding-left: 0 !important; + padding: 10px; + display: flex; + justify-content: space-between; + align-items: center; + width: 100% !important; + text-align: right; + /* border-top: 1px solid #22242C; */ + } + + .blocks-table-row { + /* Behave like a "row" */ + display: block; + } + + div.blocks-table-cell:before { + width: 45%; + padding-right: 10px; + font-weight: 600; + color: #78838e; + } + + /* + Label the data + */ + div.blocks-table-cell:before { content: attr(data-label); text-align: left; width: auto;} } @@ -1734,26 +1735,26 @@ body::after{ padding: 0 !important; } -.transaction-box .ins-and-outs .direction-arrow { - display: flex; - justify-self: center; -} + .transaction-box .ins-and-outs .direction-arrow { + display: flex; + justify-self: center; + } -.ins-and-outs { - position: relative !important; -} + .ins-and-outs { + position: relative !important; + } -.ins-and-outs_spacer { - height: 20px; - width: 10px; -} + .ins-and-outs_spacer { + height: 20px; + width: 10px; + } -.direction-arrow-container { - width: 100%; - height: auto !important; - margin: 0; - padding: 0; -} + .direction-arrow-container { + width: 100%; + height: auto !important; + margin: 0; + padding: 0; + } } @@ -1790,7 +1791,7 @@ body::after{ } @media only screen and (max-width: 550px) { - + .page-search-bar { margin: 5px auto 30px auto; @@ -1850,7 +1851,7 @@ body::after{ .title-bar-recent h1 { font-size: 18px; } - + .title-bar-recent h1 a { margin-right: 20px; } @@ -1906,8 +1907,8 @@ body::after{ border-left: 6px solid transparent; content: ''; height: 0; - top: 20px; - left: 20px; + top: 20px; + left: 20px; width: 0; } .code-button-btn:before { @@ -1917,7 +1918,7 @@ body::after{ content: 'Copied!'; font-size: 14px; padding: 6px 10px; - top: 26px; + top: 26px; white-space: nowrap; } @@ -2121,7 +2122,7 @@ dl.mempool-histogram .bar { position: relative; top: 50%; -webkit-transform: translateY(-50%); - transform: translateY(-50%); + transform: translateY(-50%); transition: background-color .3s ease; cursor: pointer; white-space: nowrap; @@ -2145,8 +2146,8 @@ dl.mempool-histogram .bar:before { } -/**** - * Burger Menu Hover works on Bigscreen only +/**** + * Burger Menu Hover works on Bigscreen only * Hover is used for displaying the dropdown menu to support NO-JS *****/ @media only screen and (min-width: 500px) { @@ -2217,16 +2218,16 @@ dl.mempool-histogram .bar:before { } .toggle-menu .section1 .wallets-link a{ - display: flex; - font-size: 12px; - justify-content: center; - align-items:center; - color: #fff; - border: 1px solid #4e555d; - padding: 5px 10px; - border-radius: 5px; - margin-right: 5px; - margin-bottom: 5px; + display: flex; + font-size: 12px; + justify-content: center; + align-items:center; + color: #fff; + border: 1px solid #4e555d; + padding: 5px 10px; + border-radius: 5px; + margin-right: 5px; + margin-bottom: 5px; } .toggle-menu .section1 .wallets-link a img{ @@ -2270,7 +2271,7 @@ dl.mempool-histogram .bar:before { .sub-navbar{ width: 100%; - background-color: #21272d; + background-color: #21272d; display: flex; margin-bottom: 40px; } @@ -2355,11 +2356,11 @@ a.back-link img{ } .blocks-table .blocks-table-row, .transactions-table .transactions-table-row { - padding:20px 30px; + padding:20px 30px; } .assets-table .assets-table-row{ - padding:20px 40px; + padding:20px 40px; } .stats-table{ @@ -2407,10 +2408,10 @@ h3.table-title{ padding: 0 20px; } -/**** - * Burger Menu for Mobile - * A javascript function (toggleIcon) adds a className (open-menu) to toggle the menu -*****/ + /**** + * Burger Menu for Mobile + * A javascript function (toggleIcon) adds a className (open-menu) to toggle the menu + *****/ .toggle-container .toggle-menu{ width: 95vw; position: absolute; @@ -2430,12 +2431,12 @@ h3.table-title{ opacity: 0; top: 50%; } - + .toggle-container.open-menu .burger-icon span:first-child { opacity: 1; transform: rotate(45deg); } - + .toggle-container.open-menu .burger-icon span:last-child { opacity: 1; transform: rotate(-45deg); From 033638ed562bdcdb6d3e63a53495c07c60d1d024 Mon Sep 17 00:00:00 2001 From: batvale1 Date: Fri, 23 Aug 2024 13:10:30 +0300 Subject: [PATCH 02/12] #77 fix for changes --- client/src/views/nav-toggle.js | 85 +++++++++++++++++++++++++-------- client/src/views/navbar-menu.js | 19 ++++---- 2 files changed, 76 insertions(+), 28 deletions(-) diff --git a/client/src/views/nav-toggle.js b/client/src/views/nav-toggle.js index 422188f7..ba290833 100644 --- a/client/src/views/nav-toggle.js +++ b/client/src/views/nav-toggle.js @@ -1,25 +1,72 @@ import Snabbdom from 'snabbdom-pragma' -import navToggle from './nav-toggle' - - -const items = process.env.MENU_ITEMS && JSON.parse(process.env.MENU_ITEMS) - , active = process.env.MENU_ACTIVE +import { nativeAssetId } from '../const' +import { updateQuery } from '../util' const staticRoot = process.env.STATIC_ROOT || '' +const hasCam = process.browser && navigator.mediaDevices && navigator.mediaDevices.getUserMedia +const otherTheme = { dark: 'light', light: 'dark' } -export default ({ t, theme, page }) => +export default (t, theme, page) => -
- - { process.env.NAVBAR_HTML ? navToggle(t, theme, page) : "" } +
+
+ + + +
+
+
+ { process.browser ?
+ : + } +
+
+

Exchanges

+
+

Redot

+ +
+
+
+
+

Explorers

+ +

Developer Tools

+ +
+ + +
+
diff --git a/client/src/views/navbar-menu.js b/client/src/views/navbar-menu.js index 4a3f8e28..19ac27b1 100644 --- a/client/src/views/navbar-menu.js +++ b/client/src/views/navbar-menu.js @@ -3,7 +3,7 @@ import navToggle from './nav-toggle' const items = process.env.MENU_ITEMS && JSON.parse(process.env.MENU_ITEMS) - , active = process.env.MENU_ACTIVE + , active = process.env.MENU_ACTIVE const staticRoot = process.env.STATIC_ROOT || '' @@ -12,13 +12,14 @@ export default ({ t, theme, page }) =>
- { process.env.NAVBAR_HTML ? navToggle(t, theme, page) : "" } -
\ No newline at end of file + { process.env.NAVBAR_HTML ? navToggle(t, theme, page) : "" } +
From e82ceefba56fb1772a4aa5d60eaf1c4e5ce9842e Mon Sep 17 00:00:00 2001 From: batvale1 Date: Fri, 25 Apr 2025 08:11:49 +0300 Subject: [PATCH 03/12] #102 seo pages --- client/src/app.js | 40 +++++++ client/src/views/footer.js | 53 +++++---- client/src/views/home-cycle-top-seo.js | 82 +++++++++++++ client/src/views/home-ledger-seo.js | 109 ++++++++++++++++++ client/src/views/home-moving-average-seo.js | 78 +++++++++++++ client/src/views/home-testnet-seo.js | 84 ++++++++++++++ .../src/views/home-transaction-speed-seo.js | 77 +++++++++++++ client/src/views/index.js | 5 + flavors/btcscan/extras.css | 47 +++++++- 9 files changed, 551 insertions(+), 24 deletions(-) create mode 100644 client/src/views/home-cycle-top-seo.js create mode 100644 client/src/views/home-ledger-seo.js create mode 100644 client/src/views/home-moving-average-seo.js create mode 100644 client/src/views/home-testnet-seo.js create mode 100644 client/src/views/home-transaction-speed-seo.js diff --git a/client/src/app.js b/client/src/app.js index 34220718..d0a06b1f 100644 --- a/client/src/app.js +++ b/client/src/app.js @@ -44,6 +44,11 @@ export default function main({ DOM, HTTP, route, storage, scanner: scan$, search /// User actions , page$ = route() , goHome$ = route('/') + , goTestnetSeo$ = route('/bitcoin-testnet') + , goCycleTopSeo$ = route('/pi-cycle-top') + , goTransactionSpeedSeo$ = route('/btc-transaction-speed') + , goLedgerSeo$ = route('/ledger-vs-bitcoin') + , goMovingAverageSeo$ = route('/200-week-moving-average') , goBlocks$ = route('/blocks/recent').map(loc => ({ start_height: loc.query.start != null ? +loc.query.start : null })) , goBlock$ = route('/block/:hash').map(loc => ({ hash: loc.params.hash, start_index: +loc.query.start || 0 })) , goHeight$ = route('/block-height/:height').map(loc => loc.params.height) @@ -239,6 +244,11 @@ export default function main({ DOM, HTTP, route, storage, scanner: scan$, search // Currently visible view , view$ = O.merge(page$.mapTo(null) , goHome$.mapTo('dashBoard') + , goTestnetSeo$.mapTo('dashBoardTestnetSeo') + , goCycleTopSeo$.mapTo('dashBoardCycleTopSeo') + , goTransactionSpeedSeo$.mapTo('dashBoardTransactionSpeedSeo') + , goLedgerSeo$.mapTo('dashBoardLedgerSeo') + , goMovingAverageSeo$.mapTo('dashBoardMovingAverageSeo') , goBlocks$.mapTo('recentBlocks') , goRecent$.mapTo('recentTxs') , block$.filter(notNully).mapTo('block') @@ -256,6 +266,11 @@ export default function main({ DOM, HTTP, route, storage, scanner: scan$, search // Page title , title$ = O.merge(page$.withLatestFrom(t$, (_, t) => t`Bitcoin Blockchain Explorer | BTCScan`) , goBlocks$.withLatestFrom(t$, (_, t) => t`Bitcoin Blocks | BTCScan`) + , goTestnetSeo$.withLatestFrom(t$, (_, t) => t`Bitcoin Testnet Tools & Wallets | BTCScan`) + , goCycleTopSeo$.withLatestFrom(t$, (_, t) => t`Bitcoin Pi Cycle Top Indicator: What It Means | BTCScan`) + , goTransactionSpeedSeo$.withLatestFrom(t$, (_, t) => t`How Fast is Bitcoin? BTC Transaction Speed Explained | BTCScan`) + , goLedgerSeo$.withLatestFrom(t$, (_, t) => t`Using Ledger with Bitcoin: Security, Setup & Tips | BTCScan`) + , goMovingAverageSeo$.withLatestFrom(t$, (_, t) => t`Bitcoin’s 200-Week Moving Average: A Long-Term Signal | BTCScan`) , block$.filter(notNully).withLatestFrom(t$, (block, t) => t`Bitcoin Block ${block.height} | BTCScan`) , tx$.filter(notNully).withLatestFrom(t$, (tx, t) => t`Bitcoin Transaction ${tx.txid} | BTCScan` ) , addr$.filter(notNully).withLatestFrom(goAddr$, t$, (_, goAddr, t) => t`Bitcoin Address ${goAddr.display_addr} | BTCScan`) @@ -266,6 +281,11 @@ export default function main({ DOM, HTTP, route, storage, scanner: scan$, search , goRecent$.withLatestFrom(t$, (_, t) => t`Bitcoin Blockchain Explorer - Recent Transactions | BTCScan`)) , description$ = O.merge(page$.withLatestFrom(t$, (_, t) => t`Real-time blockchain data. With the BTC block explorer, you can search blocks, addresses, and transactions on the Bitcoin blockchain`) + , goTestnetSeo$.withLatestFrom(t$, (_, t) => t`Explore the best Bitcoin Testnet wallets, faucets, and developer tools to test transactions safely.`) + , goCycleTopSeo$.withLatestFrom(t$, (_, t) => t`Understand the Bitcoin Pi Cycle Top indicator, how it predicts market tops, and whether it's still accurate.`) + , goTransactionSpeedSeo$.withLatestFrom(t$, (_, t) => t`Learn how fast Bitcoin transactions are, what affects their speed, and how BTC compares to other cryptocurrencies.`) + , goLedgerSeo$.withLatestFrom(t$, (_, t) => t`Get started with Ledger wallets for Bitcoin. Learn how to store, transfer, and secure your BTC.`) + , goMovingAverageSeo$.withLatestFrom(t$, (_, t) => t`Discover how the 200-week MA helps predict Bitcoin cycles and why it's a key level for investors.`) , goBlocks$.withLatestFrom(t$, (_, t) => t`Btcscan’s Bitcoin blockchain explorer helps make sense of past and real-time network data. Search BTC explorer for information on blocks, transactions, and addresses`) , goRecent$.withLatestFrom(t$, (_, t) => t`Check recent bitcoin transactions using Btcscan, a tool for tracking BTC transactions. Find ID transaction, bitcoin value, size, and fees.`) , goPush$.withLatestFrom(t$, (_, t) => t`Consult broadcast raw transactions with the BTC block explorer powered by BTCscan - Redot. Find ID transaction, bitcoin value, size, and fees.`) @@ -274,6 +294,11 @@ export default function main({ DOM, HTTP, route, storage, scanner: scan$, search , addr$.filter(notNully).withLatestFrom(goAddr$, t$, (_, goAddr, t) => t`Check Bitcoin (BTC) Address ${goAddr.display_addr} current balance and its transactions history`)) , ogTitle$ = O.merge(page$.withLatestFrom(t$, (_, t) => t`Bitcoin Blockchain Explorer | BTCScan`) + , goTestnetSeo$.withLatestFrom(t$, (_, t) => t`Bitcoin Testnet Tools & Wallets | BTCScan`) + , goCycleTopSeo$.withLatestFrom(t$, (_, t) => t`Bitcoin Pi Cycle Top Indicator: What It Means | BTCScan`) + , goTransactionSpeedSeo$.withLatestFrom(t$, (_, t) => t`How Fast is Bitcoin? BTC Transaction Speed Explained | BTCScan`) + , goLedgerSeo$.withLatestFrom(t$, (_, t) => t`Using Ledger with Bitcoin: Security, Setup & Tips | BTCScan`) + , goMovingAverageSeo$.withLatestFrom(t$, (_, t) => t`Bitcoin’s 200-Week Moving Average: A Long-Term Signal | BTCScan`) , goBlocks$.withLatestFrom(t$, (_, t) => t`Btcscan - Bitcoin Blockchain Explorer | BTC Search Engine`) , goRecent$.withLatestFrom(t$, (_, t) => t`Bitcoin Blockchain Explorer - Recent Transactions | BTCScan`) , block$.filter(notNully).withLatestFrom(t$, (block, t) => t`Bitcoin block ${block.height} | BTCScan`) @@ -282,6 +307,11 @@ export default function main({ DOM, HTTP, route, storage, scanner: scan$, search , addr$.filter(notNully).withLatestFrom(goAddr$, t$, (_, goAddr, t) => t`Bitcoin Address ${goAddr.display_addr} | BTCScan`)) , ogDescription$ = O.merge(page$.withLatestFrom(t$, (_, t) => t`Real-time blockchain data. With the BTC block explorer, you can search blocks, addresses, and transactions on the Bitcoin blockchain`) + , goTestnetSeo$.withLatestFrom(t$, (_, t) => t`Explore the best Bitcoin Testnet wallets, faucets, and developer tools to test transactions safely.`) + , goCycleTopSeo$.withLatestFrom(t$, (_, t) => t`Understand the Bitcoin Pi Cycle Top indicator, how it predicts market tops, and whether it's still accurate.`) + , goTransactionSpeedSeo$.withLatestFrom(t$, (_, t) => t`Learn how fast Bitcoin transactions are, what affects their speed, and how BTC compares to other cryptocurrencies.`) + , goLedgerSeo$.withLatestFrom(t$, (_, t) => t`Get started with Ledger wallets for Bitcoin. Learn how to store, transfer, and secure your BTC.`) + , goMovingAverageSeo$.withLatestFrom(t$, (_, t) => t`Discover how the 200-week MA helps predict Bitcoin cycles and why it's a key level for investors.`) , goBlocks$.withLatestFrom(t$, (_, t) => t`Btcscan’s Bitcoin blockchain explorer helps make sense of past and real-time network data. Search BTC explorer for information on blocks, transactions, and addresses`) , goRecent$.withLatestFrom(t$, (_, t) => t`Check recent bitcoin transactions using Btcscan, a tool for tracking BTC transactions. Find ID transaction, bitcoin value, size, and fees.`) , goPush$.withLatestFrom(t$, (_, t) => t`Consult broadcast raw transactions with the BTC block explorer powered by BTCscan - Redot. Find ID transaction, bitcoin value, size, and fees.`) @@ -393,6 +423,16 @@ export default function main({ DOM, HTTP, route, storage, scanner: scan$, search , goHome$.flatMap(_ => [{ category: 'blocks', method: 'GET', path: '/blocks' } , { category: 'recent', method: 'GET', path: '/mempool/recent' }]) + , goTestnetSeo$.flatMap(_ => [{ category: 'blocks', method: 'GET', path: '/blocks' } + , { category: 'recent', method: 'GET', path: '/mempool/recent' }]) + , goCycleTopSeo$.flatMap(_ => [{ category: 'blocks', method: 'GET', path: '/blocks' } + , { category: 'recent', method: 'GET', path: '/mempool/recent' }]) + , goTransactionSpeedSeo$.flatMap(_ => [{ category: 'blocks', method: 'GET', path: '/blocks' } + , { category: 'recent', method: 'GET', path: '/mempool/recent' }]) + , goLedgerSeo$.flatMap(_ => [{ category: 'blocks', method: 'GET', path: '/blocks' } + , { category: 'recent', method: 'GET', path: '/mempool/recent' }]) + , goMovingAverageSeo$.flatMap(_ => [{ category: 'blocks', method: 'GET', path: '/blocks' } + , { category: 'recent', method: 'GET', path: '/mempool/recent' }]) // // elements/liquid only // diff --git a/client/src/views/footer.js b/client/src/views/footer.js index 76f57570..229c5728 100644 --- a/client/src/views/footer.js +++ b/client/src/views/footer.js @@ -8,36 +8,45 @@ export default ({ t, page }) =>