diff --git a/lib/locale.js b/lib/locale.js index 172b20f..0544738 100644 --- a/lib/locale.js +++ b/lib/locale.js @@ -20,7 +20,7 @@ exports.menu_claim_address = "Claim Address", exports.ex_title = "Block Explorer", exports.ex_search_title = "Search", exports.ex_search_button = "Search", -exports.ex_search_message = "You may enter a block height, block hash ,tx hash or address.", +exports.ex_search_message = "Search by block height, block hash, tx hash or address", exports.ex_error = "Error!", exports.ex_warning = "Warning", exports.ex_search_error = "Search found no results.", diff --git a/lib/settings.js b/lib/settings.js index 26cd9d4..f7d49be 100644 --- a/lib/settings.js +++ b/lib/settings.js @@ -233,9 +233,15 @@ exports.shared_pages = { "display_order": 3 } }, - // show_search: Enable/disable the ability to search the explorer website (true/false) - // If set to false, the explorer will not display a search box or respond to search queries - "show_search": true + // search: A collection of settings that pertain to the search feature + "search": { + // enabled: Enable/disable the ability to search the explorer website (true/false) + // If set to false, the explorer will not display a search box or respond to search queries + "enabled": true, + // position: Determine where the search box should appear on the website + // valid options: inside-header, below-header + "position": "inside-header" + } }, // page_footer: A collection of settings that pertain to the page footer that is displayed at the bottom of all pages "page_footer": { @@ -1155,6 +1161,8 @@ exports.loadSettings = function loadSettings() { json_settings = fix_deprecated_setting(json_settings, 'wallet.user', 'wallet.username'); json_settings = fix_deprecated_setting(json_settings, 'wallet.pass', 'wallet.password'); json_settings = fix_deprecated_setting(json_settings, 'social_links', 'shared_pages.page_footer.social_links'); + // fix old deprecated settings from v1.99 + json_settings = fix_deprecated_setting(json_settings, 'shared_pages.page_header.show_search', 'shared_pages.page_header.search.enabled'); // check if social_links setting exists if (json_settings.shared_pages.page_footer.social_links != null) { // loop through the social links to look for and change image_url to image_path diff --git a/locale/en.json b/locale/en.json index 67db2e5..fc21fe9 100644 --- a/locale/en.json +++ b/locale/en.json @@ -15,7 +15,7 @@ "ex_title": "Block Explorer", "ex_search_title": "Search", "ex_search_button": "Search", - "ex_search_message": "You may enter a block height, block hash, tx hash or address.", + "ex_search_message": "Search by block height, block hash, tx hash or address", "ex_error": "Error!", "ex_search_error": "Search found no results for: ", "ex_latest_transactions": "Latest Transactions", diff --git a/public/css/style.scss b/public/css/style.scss index 5051689..29b294b 100644 --- a/public/css/style.scss +++ b/public/css/style.scss @@ -322,6 +322,106 @@ @include thead-light-border-color; } +@mixin header-button-light() { + @if theme-selector.$theme-name == "Cerulean" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Cosmo" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Cyborg" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Darkly" { + color: rgba(34, 34, 34, 0.7); + } @else if theme-selector.$theme-name == "Exor" { + color: rgba(34, 34, 34, 0.7); + } @else if theme-selector.$theme-name == "Flatly" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Journal" { + color: rgba(0, 0, 0, 0.7); + } @else if theme-selector.$theme-name == "Litera" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Lumen" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Lux" { + color: rgba(0, 0, 0, 0.3); + } @else if theme-selector.$theme-name == "Materia" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Minty" { + color: rgba(0, 0, 0, 0.3); + } @else if theme-selector.$theme-name == "Pulse" { + color: rgba(0, 0, 0, 0.4); + } @else if theme-selector.$theme-name == "Sandstone" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Simplex" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Sketchy" { + color: Sketchy.$gray-800; + } @else if theme-selector.$theme-name == "Slate" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Solar" { + color: rgba(0, 0, 0, 0.4); + } @else if theme-selector.$theme-name == "Spacelab" { + color: rgba(0, 0, 0, 0.4); + } @else if theme-selector.$theme-name == "Superhero" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "United" { + color: rgba(0, 0, 0, 0.5); + } @else if theme-selector.$theme-name == "Yeti" { + color: rgba(0, 0, 0, 0.5); + } @else { + color: rgba(0, 0, 0, 0.5); + } +} + +@mixin header-button-dark() { + @if theme-selector.$theme-name == "Cerulean" { + color: rgba(255, 255, 255, 0.8); + } @else if theme-selector.$theme-name == "Cosmo" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Cyborg" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Darkly" { + color: rgba(255, 255, 255, 0.6); + } @else if theme-selector.$theme-name == "Exor" { + color: Exor.$black; + } @else if theme-selector.$theme-name == "Flatly" { + color: Flatly.$white; + } @else if theme-selector.$theme-name == "Journal" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Litera" { + color: rgba(255, 255, 255, 0.6); + } @else if theme-selector.$theme-name == "Lumen" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Lux" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Materia" { + color: rgba(255, 255, 255, 0.75); + } @else if theme-selector.$theme-name == "Minty" { + color: rgba(255, 255, 255, 0.6); + } @else if theme-selector.$theme-name == "Pulse" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Sandstone" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Simplex" { + color: rgba(255, 255, 255, 0.75); + } @else if theme-selector.$theme-name == "Sketchy" { + color: Sketchy.$white; + } @else if theme-selector.$theme-name == "Slate" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Solar" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Spacelab" { + color: rgba(255, 255, 255, 0.75); + } @else if theme-selector.$theme-name == "Superhero" { + color: rgba(255, 255, 255, 0.75); + } @else if theme-selector.$theme-name == "United" { + color: rgba(255, 255, 255, 0.5); + } @else if theme-selector.$theme-name == "Yeti" { + color: rgba(255, 255, 255, 0.7); + } @else { + color: rgba(255, 255, 255, 0.5); + } +} + body { font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; } @@ -374,6 +474,10 @@ h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { } } +.nav-link { + white-space: nowrap; +} + #index-search { width: 80%; } @@ -698,4 +802,71 @@ tr { width: 20px; height: 20px; margin-right: 6px; +} + +.navbar-toggler-icon { + display: inline-block; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 1%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-toggler { + color: #000; + border-color: rgba(0, 0, 0, 0.1) !important; + border-width: 1px !important; + border-radius: .25rem !important; + padding: .25rem .75rem !important; + font-size: 1.171875rem !important; +} + +.navbar-header { + margin-left: auto; +} + +#search-navbar-collapse { + padding: 5px 0px; +} + +#search-navbar-collapse.collapse:not(.show) { + display: none; +} + +#search-header-button { + padding: .25rem .75rem; + font-size: 1.171875rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: .25rem; + border-color: rgba(0, 0, 0, 0.1) !important; + border-width: 1px !important; + + > span.fa-search { + padding-top: 5px; + width: 1.5em; + height: 1.5em; + } +} + +.navbar-light #search-header-button { + @include header-button-light; +} + +.navbar-dark #search-header-button { + @include header-button-dark; +} + +.navbar-nav .nav-link { + color: #000; +} + +.navbar-nav .active .nav-link { + color: #686868; +} + +.navbar-nav .nav-link:hover { + color: #686868; } \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index cd7e944..966dbf9 100644 --- a/routes/index.js +++ b/routes/index.js @@ -432,7 +432,7 @@ router.get('/address/:hash', function(req, res) { }); router.post('/search', function(req, res) { - if (settings.shared_pages.page_header.show_search == true) { + if (settings.shared_pages.page_header.search.enabled == true) { var query = req.body.search.trim(); if (query.length == 64) { diff --git a/settings.json.template b/settings.json.template index 77e1d2e..4027272 100644 --- a/settings.json.template +++ b/settings.json.template @@ -232,9 +232,15 @@ "display_order": 3 } }, - // show_search: Enable/disable the ability to search the explorer website (true/false) - // If set to false, the explorer will not display a search box or respond to search queries - "show_search": true + // search: A collection of settings that pertain to the search feature + "search": { + // enabled: Enable/disable the ability to search the explorer website (true/false) + // If set to false, the explorer will not display a search box or respond to search queries + "enabled": true, + // position: Determine where the search box should appear on the website + // valid options: inside-header, below-header + "position": "inside-header" + } }, // page_footer: A collection of settings that pertain to the page footer that is displayed at the bottom of all pages "page_footer": { diff --git a/views/layout.pug b/views/layout.pug index f79c741..367a823 100644 --- a/views/layout.pug +++ b/views/layout.pug @@ -286,19 +286,19 @@ html(lang='en') enableTooltips(); }); body - - var navbarClasses = ['nav','navbar','navbar-expand-lg']; + - var headerClasses = []; - var footerClasses = ['nav','navbar','navbar-default','d-none','d-md-flex','d-flex','footer']; if settings.shared_pages.page_header.sticky_header == true - - navbarClasses.push('fixed-top'); + - headerClasses.push('fixed-top'); if settings.shared_pages.page_footer.sticky_footer == true - footerClasses.push('fixed-bottom'); if settings.shared_pages.page_header.bgcolor != null && settings.shared_pages.page_header.bgcolor != '' - - navbarClasses.push('bg-' + settings.shared_pages.page_header.bgcolor); + - headerClasses.push('bg-' + settings.shared_pages.page_header.bgcolor); if settings.shared_pages.page_header.bgcolor.toString().toLowerCase() == 'dark' || settings.shared_pages.page_header.bgcolor.toString().toLowerCase() == 'light' - - navbarClasses.push('navbar-' + settings.shared_pages.page_header.bgcolor); + - headerClasses.push('navbar-' + settings.shared_pages.page_header.bgcolor); else - - navbarClasses.push('bg-primary'); - - navbarClasses.push('navbar-dark'); + - headerClasses.push('bg-primary'); + - headerClasses.push('navbar-dark'); if settings.shared_pages.page_footer.bgcolor != null && settings.shared_pages.page_footer.bgcolor != '' - footerClasses.push('bg-' + settings.shared_pages.page_footer.bgcolor); if settings.shared_pages.page_footer.bgcolor.toString().toLowerCase() == 'dark' || settings.shared_pages.page_footer.bgcolor.toString().toLowerCase() == 'light' @@ -306,86 +306,98 @@ html(lang='en') else - footerClasses.push('bg-primary'); - footerClasses.push('navbar-dark'); - div(class=navbarClasses, role='navigation', style=settings.shared_pages.page_header.home_link == 'logo' ? 'padding-left:0;' : '') - .navbar-header - button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbar-collapse') - span.navbar-toggler-icon - if settings.shared_pages.page_header.home_link == 'title' - a.navbar-brand(href='/', style='order:-1;') #{settings.shared_pages.page_title} - else if settings.shared_pages.page_header.home_link == 'coin' - a.navbar-brand(href='/', style='order:-1;') #{settings.coin.name} - else if settings.shared_pages.page_header.home_link == 'logo' - a(href='/', alt=settings.coin.name + ' Home', title=settings.coin.name + ' Home', style='order:-1;', data-toggle='tooltip', data-placement='bottom') - img.logo-main(src=(settings.shared_pages.page_header.home_link_logo == null || settings.shared_pages.page_header.home_link_logo == '' ? settings.shared_pages.logo : settings.shared_pages.page_header.home_link_logo), style='margin:0;max-height:' + settings.shared_pages.page_header.home_link_logo_height + 'px;') - .collapse.navbar-collapse(id='navbar-collapse') - ul.navbar-nav.mr-auto - li#home - a.nav-link(href='/') - span.fa.fa-search - span.margin-left-5 #{settings.locale.menu_explorer} - if settings.blockchain_specific.heavycoin.enabled == true && settings.blockchain_specific.heavycoin.reward_page.enabled == true - li#reward - a.nav-link(href='/reward') - span.fa.fa-star - span.margin-left-5 #{settings.locale.menu_reward} - if settings.masternodes_page.enabled == true - li#masternodes - a.nav-link(href='/masternodes') - span.fa.fa-share-alt - span.margin-left-5 Masternodes - if settings.movement_page.enabled == true - li#movement - a.nav-link.loading(href='/movement') - span.far.fa-money-bill-alt - span.margin-left-5 #{settings.locale.menu_movement} - if settings.network_page.enabled == true - li#network - a.nav-link(href='/network') - span.fas.fa-network-wired - span.margin-left-5 #{settings.locale.menu_network} - if settings.richlist_page.enabled == true - li#richlist - a.nav-link(href='/richlist') - span.fab.fa-btc - span.margin-left-5 #{settings.locale.menu_richlist} - if settings.markets_page.enabled == true - if settings.markets_page.show_market_dropdown_menu == true && settings.market_count > 1 - li#markets.dropdown - a.nav-link.dropdown-toggle(data-toggle='dropdown', href='#' role='button' aria-haspopup='true' aria-expanded='false') - span.fas.fa-chart-line - span.margin-left-5 #{settings.locale.menu_markets} - div.dropdown-menu - each mkt in settings.market_data - if mkt != null && mkt.id != null - each pair in mkt.trading_pairs - a.dropdown-item.loading(href='/markets/' + mkt.id + '/' + pair) - if mkt.logo != null && mkt.logo != '' - img.market-logo(src='data:image/png;base64,' + mkt.logo, title=mkt.name + ' (' + pair + ')', alt=mkt.name + ' (' + pair + ')') - else - i.market-logo.fas.fa-question-circle - span #{mkt.name} - span.small (#{pair}) - else - li#markets - a.nav-link.loading(href='/markets/' + settings.markets_page.default_exchange.exchange_name + '/' + settings.markets_page.default_exchange.trading_pair) - span.fas.fa-chart-line - span.margin-left-5 #{settings.locale.menu_markets} - if settings.api_page.enabled == true - li#info - a.nav-link(href='/info') - span.fa.fa-info-circle - span.margin-left-5 #{settings.locale.menu_api} - if settings.claim_address_page.show_header_menu == true && settings.claim_address_page.enabled == true - li#claim-address - a.nav-link.loading(href='/claim') - span.far.fa-address-card - span.margin-left-5 #{settings.locale.menu_claim_address} - div#body-container(style='margin-top:' + (settings.shared_pages.page_header.sticky_header == true ? '80px;' : '20px')) + div#main-header(class=headerClasses) + div.nav.navbar.navbar-expand-lg(role='navigation', style=settings.shared_pages.page_header.home_link == 'logo' ? 'padding-left:0;' : '') + .navbar-header + button.navbar-toggler(type='button', data-toggle='collapse', data-target='#navbar-collapse') + span.navbar-toggler-icon + if settings.shared_pages.page_header.home_link == 'title' + a.navbar-brand(href='/', style='order:-1;') #{settings.shared_pages.page_title} + else if settings.shared_pages.page_header.home_link == 'coin' + a.navbar-brand(href='/', style='order:-1;') #{settings.coin.name} + else if settings.shared_pages.page_header.home_link == 'logo' + a(href='/', alt=settings.coin.name + ' Home', title=settings.coin.name + ' Home', style='order:-1;', data-toggle='tooltip', data-placement='bottom') + img.logo-main(src=(settings.shared_pages.page_header.home_link_logo == null || settings.shared_pages.page_header.home_link_logo == '' ? settings.shared_pages.logo : settings.shared_pages.page_header.home_link_logo), style='margin:0;max-height:' + settings.shared_pages.page_header.home_link_logo_height + 'px;') + .collapse.navbar-collapse(id='navbar-collapse') + ul.navbar-nav.mr-auto(style='width:100%;') + li#home + a.nav-link(href='/') + span.fas.fa-cubes + span.margin-left-5 #{settings.locale.menu_explorer} + if settings.blockchain_specific.heavycoin.enabled == true && settings.blockchain_specific.heavycoin.reward_page.enabled == true + li#reward + a.nav-link(href='/reward') + span.fa.fa-star + span.margin-left-5 #{settings.locale.menu_reward} + if settings.masternodes_page.enabled == true + li#masternodes + a.nav-link(href='/masternodes') + span.fa.fa-share-alt + span.margin-left-5 Masternodes + if settings.movement_page.enabled == true + li#movement + a.nav-link.loading(href='/movement') + span.far.fa-money-bill-alt + span.margin-left-5 #{settings.locale.menu_movement} + if settings.network_page.enabled == true + li#network + a.nav-link(href='/network') + span.fas.fa-network-wired + span.margin-left-5 #{settings.locale.menu_network} + if settings.richlist_page.enabled == true + li#richlist + a.nav-link(href='/richlist') + span.fab.fa-btc + span.margin-left-5 #{settings.locale.menu_richlist} + if settings.markets_page.enabled == true + if settings.markets_page.show_market_dropdown_menu == true && settings.market_count > 1 + li#markets.dropdown + a.nav-link.dropdown-toggle(data-toggle='dropdown', href='#' role='button' aria-haspopup='true' aria-expanded='false') + span.fas.fa-chart-line + span.margin-left-5 #{settings.locale.menu_markets} + div.dropdown-menu + each mkt in settings.market_data + if mkt != null && mkt.id != null + each pair in mkt.trading_pairs + a.dropdown-item.loading(href='/markets/' + mkt.id + '/' + pair) + if mkt.logo != null && mkt.logo != '' + img.market-logo(src='data:image/png;base64,' + mkt.logo, title=mkt.name + ' (' + pair + ')', alt=mkt.name + ' (' + pair + ')') + else + i.market-logo.fas.fa-question-circle + span #{mkt.name} + span.small (#{pair}) + else + li#markets + a.nav-link.loading(href='/markets/' + settings.markets_page.default_exchange.exchange_name + '/' + settings.markets_page.default_exchange.trading_pair) + span.fas.fa-chart-line + span.margin-left-5 #{settings.locale.menu_markets} + if settings.api_page.enabled == true + li#info + a.nav-link(href='/info') + span.fa.fa-info-circle + span.margin-left-5 #{settings.locale.menu_api} + if settings.claim_address_page.show_header_menu == true && settings.claim_address_page.enabled == true + li#claim-address + a.nav-link.loading(href='/claim') + span.far.fa-address-card + span.margin-left-5 #{settings.locale.menu_claim_address} + if settings.shared_pages.page_header.search.enabled == true && settings.shared_pages.page_header.search.position.toString().toLowerCase() == 'inside-header' + button#search-header-button(data-toggle='collapse', data-target='#search-navbar-collapse') + span.fas.fa-search + if settings.shared_pages.page_header.search.enabled == true && settings.shared_pages.page_header.search.position.toString().toLowerCase() == 'inside-header' + div#search-navbar-collapse.collapse + div.navbar-nav.align-items-lg-center.ml-auto.search-box-custom(style='width:100%;') + form.form-inline.col-12.d-flex.justify-content-center(method='post', action='/search') + div.input-group.input-group-md.search-for(style='width:100%;') + input.form-control(type='text', name='search', placeholder=settings.locale.ex_search_message) + span.input-group-append + button.btn.btn-success.btn-sm(type='submit') #{settings.locale.ex_search_button} + div#body-container(style='margin-top:' + (settings.shared_pages.page_header.sticky_header == true ? '80px;' : '20px;')) if showSync != null && showSync == true .col-lg-12 .alert.alert-warning .cardSpacer - span.fas.fa-exclamation-triangle(style='margin-right:5px') + span.fas.fa-exclamation-triangle(style='margin-right:5px;') strong #{settings.locale.ex_warning} div #{settings.locale.initial_index_alert} .col-lg-12 @@ -410,7 +422,7 @@ html(lang='en') .col-lg-2 .card.card-default.border-0.d-none.d-lg-block.d-block.cardSpacer(id='pnlFive') - } - if settings.shared_pages.page_header.show_search == true + if settings.shared_pages.page_header.search.enabled == true && settings.shared_pages.page_header.search.position.toString().toLowerCase() == 'below-header' div#search-row.row.text-center form.form-inline.col-12.d-flex.justify-content-center(method='post', action='/search') #index-search.form-group.d-flex.justify-content-center