commit
34de762677
@ -1,20 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
wget https://cli-assets.heroku.com/branches/stable/heroku-linux-amd64.tar.gz |
|
||||||
sudo mkdir -p /usr/local/lib /usr/local/bin |
|
||||||
sudo tar -xvzf heroku-linux-amd64.tar.gz -C /usr/local/lib |
|
||||||
sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku |
|
||||||
|
|
||||||
cat > ~/.netrc << EOF |
|
||||||
machine api.heroku.com |
|
||||||
login $HEROKU_LOGIN |
|
||||||
password $HEROKU_API_KEY |
|
||||||
EOF |
|
||||||
|
|
||||||
cat >> ~/.ssh/config << EOF |
|
||||||
VerifyHostKeyDNS yes |
|
||||||
StrictHostKeyChecking no |
|
||||||
EOF |
|
||||||
|
|
||||||
cat >> ~/.ssh/known_hosts << EOF |
|
||||||
heroku.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAu8erSx6jh+8ztsfHwkNeFr/SZaSOcvoa8AyMpaerGIPZDB2TKNgNkMSYTLYGDK2ivsqXopo2W7dpQRBIVF80q9mNXy5tbt1WE04gbOBB26Wn2hF4bk3Tu+BNMFbvMjPbkVlC2hcFuQJdH4T2i/dtauyTpJbD/6ExHR9XYVhdhdMs0JsjP/Q5FNoWh2ff9YbZVpDQSTPvusUp4liLjPfa/i0t+2LpNCeWy8Y+V9gUlDWiyYwrfMVI0UwNCZZKHs1Unpc11/4HLitQRtvuk0Ot5qwwBxbmtvCDKZvj1aFBid71/mYdGRPYZMIxq1zgP1acePC1zfTG/lvuQ7d0Pe0kaw== |
|
||||||
EOF |
|
@ -1,7 +0,0 @@ |
|||||||
web: bin/start-pgbouncer-stunnel mix phx.server |
|
||||||
worker: bin/start-pgbouncer-stunnel mix exq.start |
|
||||||
scheduler: bin/start-pgbouncer-stunnel mix exq.start scheduler |
|
||||||
blocks: bin/start-pgbouncer-stunnel mix scrape.blocks 1000000 |
|
||||||
receipts: bin/start-pgbouncer-stunnel mix scrape.receipts 10000 |
|
||||||
internal_transactions: bin/start-pgbouncer-stunnel mix scrape.internal_transactions 10000 |
|
||||||
balances: bin/start-pgbouncer-stunnel mix scrape.balances 1000000 |
|
@ -1,111 +0,0 @@ |
|||||||
// Variables |
|
||||||
// -------------------------------------------------- |
|
||||||
//== Colors |
|
||||||
// |
|
||||||
$ma-green: #80bb41; |
|
||||||
$ma-grey: #414144; |
|
||||||
$ma-md-grey: #797a7c; |
|
||||||
$ma-lightgrey: #dddede; |
|
||||||
$ma-teal: #009579; |
|
||||||
$ma-blue: #2474bb; |
|
||||||
$ma-darkblue: darken(#2474bb, 20%); |
|
||||||
$ma-red: #c03b44; |
|
||||||
$ma-white: #fff; |
|
||||||
$ma-black: #2d2926; |
|
||||||
$ma-evergreen: #16433c; |
|
||||||
|
|
||||||
// Fonts |
|
||||||
// |
|
||||||
$ma-sans-serif: 'Boxed Bold', Helvetica, Arial, sans-serif; |
|
||||||
$ma-body-sans-serif: 'Roboto', Helvetica, sans-serif; |
|
||||||
// Bootstrap Variables: |
|
||||||
$bootstrap-sass-asset-helper: false; |
|
||||||
//## Gray and brand colors for use across Bootstrap. |
|
||||||
$gray-base: #000 !default; |
|
||||||
$gray-darker: lighten($gray-base, 13.5%) !default; // #222 |
|
||||||
$gray-dark: lighten($gray-base, 20%) !default; |
|
||||||
// #333 |
|
||||||
$gray: lighten($gray-base, 33.5%) !default; // #555 |
|
||||||
$gray-light: lighten($gray-base, 46.7%) !default; // #777 |
|
||||||
$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee |
|
||||||
$brand-primary: $ma-blue; |
|
||||||
$brand-success: $ma-green; |
|
||||||
$brand-info: #5bc0de !default; |
|
||||||
$brand-warning: #f0ad4e !default; |
|
||||||
$brand-danger: $ma-red; |
|
||||||
//== Scaffolding |
|
||||||
// |
|
||||||
//## Settings for some of the most global styles. |
|
||||||
//** Background color for `<body>`. |
|
||||||
$body-bg: #fff !default; //** Global text color on `<body>`. |
|
||||||
$text-color: $gray-dark !default; |
|
||||||
$text-inactive: $ma-lightgrey; |
|
||||||
//** Global textual link color. |
|
||||||
$link-color: $ma-darkblue!default; //** Link hover color set via `darken()` function. |
|
||||||
$link-hover-color: darken($link-color, 15%) !default; //** Link hover decoration. |
|
||||||
$link-hover-decoration: underline !default; |
|
||||||
//== Typography |
|
||||||
// |
|
||||||
//## Font, line-height, and color for body text, headings, and more. |
|
||||||
$font-family-sans-serif: "Boxed Bold", Helvetica, Arial, sans-serif !default; |
|
||||||
$font-family-body-san-serif: "Roboto", Helvetica, Arial, sans-serif !default; //** Default monospace fonts for `<code>`, `<kbd>`, and `<pre>`. |
|
||||||
$font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace !default; |
|
||||||
$font-family-base: $font-family-sans-serif !default; |
|
||||||
//** Unit-less `line-height` for use in components like buttons. |
|
||||||
$line-height-base: 1.428571429 !default; // 20/14 |
|
||||||
//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc. |
|
||||||
$line-height-computed: floor(($font-size-base * $line-height-base)) !default; // ~20px |
|
||||||
//** By default, this inherits from the `<body>`. |
|
||||||
$headings-font-family: inherit !default; |
|
||||||
$headings-font-weight: 500 !default; |
|
||||||
$headings-line-height: 1.1 !default; |
|
||||||
$headings-color: inherit !default; |
|
||||||
|
|
||||||
//== Media queries breakpoints |
|
||||||
// |
|
||||||
//## Define the breakpoints at which your layout will change, adapting to different screen sizes. |
|
||||||
// Extra small screen / phone |
|
||||||
//** Deprecated `$screen-xs` as of v3.0.1 |
|
||||||
$screen-xs: 480px !default; //** Deprecated `$screen-xs-min` as of v3.2.0 |
|
||||||
$screen-xs-min: $screen-xs !default; //** Deprecated `$screen-phone` as of v3.0.1 |
|
||||||
$screen-phone: $screen-xs-min !default; |
|
||||||
// Small screen / tablet |
|
||||||
//** Deprecated `$screen-sm` as of v3.0.1 |
|
||||||
$screen-sm: 768px !default; |
|
||||||
$screen-sm-min: $screen-sm !default; //** Deprecated `$screen-tablet` as of v3.0.1 |
|
||||||
$screen-tablet: $screen-sm-min !default; |
|
||||||
// Medium screen / desktop |
|
||||||
//** Deprecated `$screen-md` as of v3.0.1 |
|
||||||
$screen-md: 992px !default; |
|
||||||
$screen-md-min: $screen-md !default; //** Deprecated `$screen-desktop` as of v3.0.1 |
|
||||||
$screen-desktop: $screen-md-min !default; |
|
||||||
// Large screen / wide desktop |
|
||||||
//** Deprecated `$screen-lg` as of v3.0.1 |
|
||||||
$screen-lg: 1200px !default; |
|
||||||
$screen-lg-min: $screen-lg !default; //** Deprecated `$screen-lg-desktop` as of v3.0.1 |
|
||||||
$screen-lg-desktop: $screen-lg-min !default; |
|
||||||
// So media queries don't overlap when required, provide a maximum |
|
||||||
$screen-xs-max: ($screen-sm-min - 1) !default; |
|
||||||
$screen-sm-max: ($screen-md-min - 1) !default; |
|
||||||
$screen-md-max: ($screen-lg-min - 1) !default; |
|
||||||
//== Grid system |
|
||||||
// |
|
||||||
//## Define your custom responsive grid. |
|
||||||
//** Number of columns in the grid. |
|
||||||
$grid-columns: 12 !default; //** Padding between columns. Gets divided in half for the left and right. |
|
||||||
$grid-gutter-width: 30px !default; // Navbar collapse |
|
||||||
//** Point at which the navbar becomes uncollapsed. |
|
||||||
$grid-float-breakpoint: $screen-sm-min !default; //** Point at which the navbar begins collapsing. |
|
||||||
$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default; |
|
||||||
//== Container sizes |
|
||||||
// |
|
||||||
//## Define the maximum width of `.container` for different screen sizes. |
|
||||||
// Small screen / tablet |
|
||||||
$container-tablet: (720px + $grid-gutter-width) !default; //** For `$screen-sm-min` and up. |
|
||||||
$container-sm: $container-tablet !default; |
|
||||||
// Medium screen / desktop |
|
||||||
$container-desktop: (940px + $grid-gutter-width) !default; //** For `$screen-md-min` and up. |
|
||||||
$container-md: $container-desktop !default; |
|
||||||
// Large screen / wide desktop |
|
||||||
$container-large-desktop: (1140px + $grid-gutter-width) !default; //** For `$screen-lg-min` and up. |
|
||||||
$container-lg: $container-large-desktop !default; |
|
@ -1,54 +0,0 @@ |
|||||||
%explorer-container-height { |
|
||||||
margin-top: $explorer-header-small; |
|
||||||
min-height: calc(100vh - #{$explorer-header-small} - #{explorer-size(-1) * 2}); |
|
||||||
} |
|
||||||
|
|
||||||
@media (orientation: landscape) and (max-height: $explorer-breakpoint-landscape) { |
|
||||||
%explorer-container-height { |
|
||||||
margin-top: $explorer-header-medium; |
|
||||||
min-height: calc(100vh - #{$explorer-header-medium} - #{explorer-size(-1) * 2}); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@media (min-width: $explorer-breakpoint-landscape) { |
|
||||||
%explorer-container-height { |
|
||||||
margin-top: $explorer-header-large; |
|
||||||
min-height: calc(100vh - #{$explorer-header-large} - #{explorer-size(-1) * 2}); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
.container { |
|
||||||
@extend %explorer-container-height; |
|
||||||
background: #f5f7fa; |
|
||||||
padding-top: explorer-size(-1); |
|
||||||
padding-bottom: explorer-size(-1); |
|
||||||
|
|
||||||
&__section { |
|
||||||
display: block; |
|
||||||
padding: 0 explorer-size(-2); |
|
||||||
margin: 0 auto; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@media (min-width: $explorer-breakpoint-md) { |
|
||||||
.container { |
|
||||||
&__section { |
|
||||||
|
|
||||||
|
|
||||||
&--partitioned { |
|
||||||
display: flex; |
|
||||||
justify-content: space-between; |
|
||||||
align-items: stretch; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
&__subsection { |
|
||||||
flex: 1; |
|
||||||
margin-right: explorer-size(-2); |
|
||||||
|
|
||||||
& + & { margin-left: explorer-size(-2); } |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,8 +1,16 @@ |
|||||||
.footer { |
.footer { |
||||||
@include explorer-typography("body1"); |
font-size: 12px; |
||||||
|
position: fixed; |
||||||
|
width: calc(100% - 200px); |
||||||
display: block; |
display: block; |
||||||
background: explorer-color("slate", "900"); |
bottom: 0; |
||||||
color: explorer-color("white"); |
background: explorer-color("gray", "50"); |
||||||
|
color:explorer-color("gray", "700"); |
||||||
text-align: center; |
text-align: center; |
||||||
padding: explorer-size(-1) 0; |
padding: 14px; |
||||||
|
height: 50px; |
||||||
|
|
||||||
|
@media (max-width: 768px) { |
||||||
|
width: 100%; |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -0,0 +1,170 @@ |
|||||||
|
|
||||||
|
/* --------------------------------------------------- |
||||||
|
SIDEBAR STYLE |
||||||
|
----------------------------------------------------- */ |
||||||
|
#sidebar { |
||||||
|
min-width: 200px; |
||||||
|
background: $gray-200; |
||||||
|
position: sticky; |
||||||
|
top: 0px; |
||||||
|
|
||||||
|
@media (max-width: 768px) { |
||||||
|
transition: all 0.6s cubic-bezier(0.945, 0.020, 0.270, 0.665); |
||||||
|
transform-origin: bottom left; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#sidebar .active { |
||||||
|
|
||||||
|
@media (max-width: 768px) { |
||||||
|
margin-left: -200px; |
||||||
|
transform: rotateY(100deg); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#sidebar .sidebar-header { |
||||||
|
background-color: $primary; |
||||||
|
color: $gray-800; |
||||||
|
height: 66px; |
||||||
|
padding: 12px 12px 17px; |
||||||
|
text-align: center; |
||||||
|
box-shadow:0 2px 2px 0 rgba(38,50,56,.16), 0 0 2px 0 rgba(38,50,56,.12); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
#sidebar .menu-items { |
||||||
|
list-style: none; |
||||||
|
padding: 0.5em 0; |
||||||
|
margin: 0; |
||||||
|
|
||||||
|
div { |
||||||
|
color: $gray-800; |
||||||
|
padding: 24px 2px 24px 18px; |
||||||
|
font-size: 13px; |
||||||
|
font-weight: normal; |
||||||
|
background-repeat: no-repeat; |
||||||
|
background-position: left 20px center; |
||||||
|
transition: all 0.15s linear; |
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
img { |
||||||
|
width: 35px; |
||||||
|
height: 100%; |
||||||
|
margin-right: 5px; |
||||||
|
} |
||||||
|
|
||||||
|
&:hover { |
||||||
|
background-color: rgba(0, 0, 0, 0.1); |
||||||
|
} |
||||||
|
|
||||||
|
&:focus { |
||||||
|
outline: none; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#sidebar ul li.active > a, a[aria-expanded="true"] { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
#sidebar li { |
||||||
|
list-style-type: none; |
||||||
|
padding-left: 5px; |
||||||
|
line-height: 25px; |
||||||
|
} |
||||||
|
a[data-toggle="collapse"] { |
||||||
|
position: relative; |
||||||
|
} |
||||||
|
|
||||||
|
#pageSubmenu { |
||||||
|
margin-bottom: 5px; |
||||||
|
} |
||||||
|
|
||||||
|
/* --------------------------------------------------- |
||||||
|
CONTENT STYLE |
||||||
|
----------------------------------------------------- */ |
||||||
|
#sidebarCollapse { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------------------------------- |
||||||
|
MEDIAQUERIES |
||||||
|
----------------------------------------------------- */ |
||||||
|
@media (max-width: 768px) { |
||||||
|
#sidebar { |
||||||
|
margin-left: -200px; |
||||||
|
transform: rotateY(90deg); |
||||||
|
height: 100vh; |
||||||
|
position: fixed; |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
#sidebar.active { |
||||||
|
margin-left: 0; |
||||||
|
transform: none; |
||||||
|
outline: none; |
||||||
|
|
||||||
|
~ #content { |
||||||
|
position: absolute; |
||||||
|
right: -200px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#sidebar .menu-items div { |
||||||
|
padding-top: 11px; |
||||||
|
} |
||||||
|
|
||||||
|
#sidebarCollapse { |
||||||
|
display: block; |
||||||
|
width: 45px; |
||||||
|
height: 65px; |
||||||
|
background-image: none; |
||||||
|
border-color: transparent !important; |
||||||
|
box-shadow: 0 2px 2px 0 rgba(38,50,56,.16), 0 0 2px 0 rgba(38,50,56,.12); |
||||||
|
outline: none; |
||||||
|
} |
||||||
|
|
||||||
|
#sidebarCollapse span { |
||||||
|
width: 80%; |
||||||
|
height: 2px; |
||||||
|
margin: 0 auto; |
||||||
|
display: block; |
||||||
|
background: $black; |
||||||
|
transition: all 0.8s; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#sidebarCollapse span:first-of-type, |
||||||
|
#sidebarCollapse span:nth-of-type(2), |
||||||
|
#sidebarCollapse span:last-of-type { |
||||||
|
transform: none; |
||||||
|
opacity: 1; |
||||||
|
margin: 7px auto; |
||||||
|
} |
||||||
|
#sidebarCollapse.active span { |
||||||
|
transform: none; |
||||||
|
opacity: 1; |
||||||
|
margin: 0 auto; |
||||||
|
|
||||||
|
} |
||||||
|
#sidebarCollapse.active span:first-of-type { |
||||||
|
transform: rotate(45deg) translate(2px, 2px); |
||||||
|
} |
||||||
|
#sidebarCollapse.active span:nth-of-type(2) { |
||||||
|
opacity: 0; |
||||||
|
} |
||||||
|
#sidebarCollapse.active span:last-of-type { |
||||||
|
transform: rotate(-45deg) translate(1px, -1px); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.social-media { |
||||||
|
font-size: 20px; |
||||||
|
padding: 5px; |
||||||
|
margin-left: 10px; |
||||||
|
margin-top: 4px; |
||||||
|
color: $gray-500; |
||||||
|
} |
@ -0,0 +1,4 @@ |
|||||||
|
.filter { |
||||||
|
min-width: 100%; |
||||||
|
transform: translate3d(1px, 26px, 0px) !important; |
||||||
|
} |
@ -1,430 +0,0 @@ |
|||||||
|
|
||||||
body { |
|
||||||
background-color: #f8f8f8; |
|
||||||
} |
|
||||||
#wrapper { |
|
||||||
width: 100%; |
|
||||||
} |
|
||||||
#page-wrapper { |
|
||||||
padding: 0 15px; |
|
||||||
min-height: 568px; |
|
||||||
background-color: white; |
|
||||||
} |
|
||||||
@media (min-width: 768px) { |
|
||||||
#page-wrapper { |
|
||||||
position: inherit; |
|
||||||
margin: 0 0 0 250px; |
|
||||||
padding: 0 30px; |
|
||||||
border-left: 1px solid #e7e7e7; |
|
||||||
} |
|
||||||
} |
|
||||||
.navbar-top-links { |
|
||||||
margin-right: 0; |
|
||||||
} |
|
||||||
.navbar-top-links li { |
|
||||||
display: inline-block; |
|
||||||
} |
|
||||||
.navbar-top-links li:last-child { |
|
||||||
margin-right: 15px; |
|
||||||
} |
|
||||||
.navbar-top-links li a { |
|
||||||
padding: 15px; |
|
||||||
min-height: 50px; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-menu li { |
|
||||||
display: block; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-menu li:last-child { |
|
||||||
margin-right: 0; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-menu li a { |
|
||||||
padding: 3px 20px; |
|
||||||
min-height: 0; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-menu li a div { |
|
||||||
white-space: normal; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-messages, |
|
||||||
.navbar-top-links .dropdown-tasks, |
|
||||||
.navbar-top-links .dropdown-alerts { |
|
||||||
width: 310px; |
|
||||||
min-width: 0; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-messages { |
|
||||||
margin-left: 5px; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-tasks { |
|
||||||
margin-left: -59px; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-alerts { |
|
||||||
margin-left: -123px; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-user { |
|
||||||
right: 0; |
|
||||||
left: auto; |
|
||||||
} |
|
||||||
.sidebar .sidebar-nav.navbar-collapse { |
|
||||||
padding-left: 0; |
|
||||||
padding-right: 0; |
|
||||||
} |
|
||||||
.sidebar .sidebar-search { |
|
||||||
padding: 15px; |
|
||||||
} |
|
||||||
.sidebar ul li { |
|
||||||
border-bottom: 1px solid #e7e7e7; |
|
||||||
} |
|
||||||
.sidebar ul li a.active { |
|
||||||
background-color: #eeeeee; |
|
||||||
} |
|
||||||
.sidebar .arrow { |
|
||||||
float: right; |
|
||||||
} |
|
||||||
.sidebar .fa.arrow:before { |
|
||||||
content: "\f104"; |
|
||||||
} |
|
||||||
.sidebar .active > a > .fa.arrow:before { |
|
||||||
content: "\f107"; |
|
||||||
} |
|
||||||
.sidebar .nav-second-level li, |
|
||||||
.sidebar .nav-third-level li { |
|
||||||
border-bottom: none !important; |
|
||||||
} |
|
||||||
.sidebar .nav-second-level li a { |
|
||||||
padding-left: 37px; |
|
||||||
} |
|
||||||
.sidebar .nav-third-level li a { |
|
||||||
padding-left: 52px; |
|
||||||
} |
|
||||||
@media (min-width: 768px) { |
|
||||||
.sidebar { |
|
||||||
z-index: 1; |
|
||||||
position: absolute; |
|
||||||
width: 250px; |
|
||||||
margin-top: 51px; |
|
||||||
} |
|
||||||
.navbar-top-links .dropdown-messages, |
|
||||||
.navbar-top-links .dropdown-tasks, |
|
||||||
.navbar-top-links .dropdown-alerts { |
|
||||||
margin-left: auto; |
|
||||||
} |
|
||||||
} |
|
||||||
.btn-outline { |
|
||||||
color: inherit; |
|
||||||
background-color: transparent; |
|
||||||
transition: all .5s; |
|
||||||
} |
|
||||||
.btn-primary.btn-outline { |
|
||||||
color: #428bca; |
|
||||||
} |
|
||||||
.btn-success.btn-outline { |
|
||||||
color: #5cb85c; |
|
||||||
} |
|
||||||
.btn-info.btn-outline { |
|
||||||
color: #5bc0de; |
|
||||||
} |
|
||||||
.btn-warning.btn-outline { |
|
||||||
color: #f0ad4e; |
|
||||||
} |
|
||||||
.btn-danger.btn-outline { |
|
||||||
color: #d9534f; |
|
||||||
} |
|
||||||
.btn-primary.btn-outline:hover, |
|
||||||
.btn-success.btn-outline:hover, |
|
||||||
.btn-info.btn-outline:hover, |
|
||||||
.btn-warning.btn-outline:hover, |
|
||||||
.btn-danger.btn-outline:hover { |
|
||||||
color: white; |
|
||||||
} |
|
||||||
.chat { |
|
||||||
margin: 0; |
|
||||||
padding: 0; |
|
||||||
list-style: none; |
|
||||||
} |
|
||||||
.chat li { |
|
||||||
margin-bottom: 10px; |
|
||||||
padding-bottom: 5px; |
|
||||||
border-bottom: 1px dotted #999999; |
|
||||||
} |
|
||||||
.chat li.left .chat-body { |
|
||||||
margin-left: 60px; |
|
||||||
} |
|
||||||
.chat li.right .chat-body { |
|
||||||
margin-right: 60px; |
|
||||||
} |
|
||||||
.chat li .chat-body p { |
|
||||||
margin: 0; |
|
||||||
} |
|
||||||
.panel .slidedown .glyphicon, |
|
||||||
.chat .glyphicon { |
|
||||||
margin-right: 5px; |
|
||||||
} |
|
||||||
.chat-panel .panel-body { |
|
||||||
height: 350px; |
|
||||||
overflow-y: scroll; |
|
||||||
} |
|
||||||
.login-panel { |
|
||||||
margin-top: 25%; |
|
||||||
} |
|
||||||
.flot-chart { |
|
||||||
display: block; |
|
||||||
height: 400px; |
|
||||||
} |
|
||||||
.flot-chart-content { |
|
||||||
width: 100%; |
|
||||||
height: 100%; |
|
||||||
} |
|
||||||
table.dataTable thead .sorting, |
|
||||||
table.dataTable thead .sorting_asc, |
|
||||||
table.dataTable thead .sorting_desc, |
|
||||||
table.dataTable thead .sorting_asc_disabled, |
|
||||||
table.dataTable thead .sorting_desc_disabled { |
|
||||||
background: transparent; |
|
||||||
} |
|
||||||
table.dataTable thead .sorting_asc:after { |
|
||||||
content: "\f0de"; |
|
||||||
float: right; |
|
||||||
font-family: fontawesome; |
|
||||||
} |
|
||||||
table.dataTable thead .sorting_desc:after { |
|
||||||
content: "\f0dd"; |
|
||||||
float: right; |
|
||||||
font-family: fontawesome; |
|
||||||
} |
|
||||||
table.dataTable thead .sorting:after { |
|
||||||
content: "\f0dc"; |
|
||||||
float: right; |
|
||||||
font-family: fontawesome; |
|
||||||
color: rgba(50, 50, 50, 0.5); |
|
||||||
} |
|
||||||
.btn-circle { |
|
||||||
width: 30px; |
|
||||||
height: 30px; |
|
||||||
padding: 6px 0; |
|
||||||
border-radius: 15px; |
|
||||||
text-align: center; |
|
||||||
font-size: 12px; |
|
||||||
line-height: 1.428571429; |
|
||||||
} |
|
||||||
.btn-circle.btn-lg { |
|
||||||
width: 50px; |
|
||||||
height: 50px; |
|
||||||
padding: 10px 16px; |
|
||||||
border-radius: 25px; |
|
||||||
font-size: 18px; |
|
||||||
line-height: 1.33; |
|
||||||
} |
|
||||||
.btn-circle.btn-xl { |
|
||||||
width: 70px; |
|
||||||
height: 70px; |
|
||||||
padding: 10px 16px; |
|
||||||
border-radius: 35px; |
|
||||||
font-size: 24px; |
|
||||||
line-height: 1.33; |
|
||||||
} |
|
||||||
.show-grid [class^="col-"] { |
|
||||||
padding-top: 10px; |
|
||||||
padding-bottom: 10px; |
|
||||||
border: 1px solid #ddd; |
|
||||||
background-color: #eee !important; |
|
||||||
} |
|
||||||
.show-grid { |
|
||||||
margin: 15px 0; |
|
||||||
} |
|
||||||
.huge { |
|
||||||
font-size: 40px; |
|
||||||
} |
|
||||||
.panel-green { |
|
||||||
border-color: #5cb85c; |
|
||||||
} |
|
||||||
.panel-green > .panel-heading { |
|
||||||
border-color: #5cb85c; |
|
||||||
color: white; |
|
||||||
background-color: #5cb85c; |
|
||||||
} |
|
||||||
.panel-green > a { |
|
||||||
color: #5cb85c; |
|
||||||
} |
|
||||||
.panel-green > a:hover { |
|
||||||
color: #3d8b3d; |
|
||||||
} |
|
||||||
.panel-red { |
|
||||||
border-color: #d9534f; |
|
||||||
} |
|
||||||
.panel-red > .panel-heading { |
|
||||||
border-color: #d9534f; |
|
||||||
color: white; |
|
||||||
background-color: #d9534f; |
|
||||||
} |
|
||||||
.panel-red > a { |
|
||||||
color: #d9534f; |
|
||||||
} |
|
||||||
.panel-red > a:hover { |
|
||||||
color: #b52b27; |
|
||||||
} |
|
||||||
.panel-yellow { |
|
||||||
border-color: #f0ad4e; |
|
||||||
} |
|
||||||
.panel-yellow > .panel-heading { |
|
||||||
border-color: #f0ad4e; |
|
||||||
color: white; |
|
||||||
background-color: #f0ad4e; |
|
||||||
} |
|
||||||
.panel-yellow > a { |
|
||||||
color: #f0ad4e; |
|
||||||
} |
|
||||||
.panel-yellow > a:hover { |
|
||||||
color: #df8a13; |
|
||||||
} |
|
||||||
.timeline { |
|
||||||
position: relative; |
|
||||||
padding: 20px 0 20px; |
|
||||||
list-style: none; |
|
||||||
} |
|
||||||
.timeline:before { |
|
||||||
content: " "; |
|
||||||
position: absolute; |
|
||||||
top: 0; |
|
||||||
bottom: 0; |
|
||||||
left: 50%; |
|
||||||
width: 3px; |
|
||||||
margin-left: -1.5px; |
|
||||||
background-color: #eeeeee; |
|
||||||
} |
|
||||||
.timeline > li { |
|
||||||
position: relative; |
|
||||||
margin-bottom: 20px; |
|
||||||
} |
|
||||||
.timeline > li:before, |
|
||||||
.timeline > li:after { |
|
||||||
content: " "; |
|
||||||
display: table; |
|
||||||
} |
|
||||||
.timeline > li:after { |
|
||||||
clear: both; |
|
||||||
} |
|
||||||
.timeline > li:before, |
|
||||||
.timeline > li:after { |
|
||||||
content: " "; |
|
||||||
display: table; |
|
||||||
} |
|
||||||
.timeline > li:after { |
|
||||||
clear: both; |
|
||||||
} |
|
||||||
.timeline > li > .timeline-panel { |
|
||||||
float: left; |
|
||||||
position: relative; |
|
||||||
width: 46%; |
|
||||||
padding: 20px; |
|
||||||
border: 1px solid #d4d4d4; |
|
||||||
border-radius: 2px; |
|
||||||
-webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); |
|
||||||
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); |
|
||||||
} |
|
||||||
.timeline > li > .timeline-panel:before { |
|
||||||
content: " "; |
|
||||||
display: inline-block; |
|
||||||
position: absolute; |
|
||||||
top: 26px; |
|
||||||
right: -15px; |
|
||||||
border-top: 15px solid transparent; |
|
||||||
border-right: 0 solid #ccc; |
|
||||||
border-bottom: 15px solid transparent; |
|
||||||
border-left: 15px solid #ccc; |
|
||||||
} |
|
||||||
.timeline > li > .timeline-panel:after { |
|
||||||
content: " "; |
|
||||||
display: inline-block; |
|
||||||
position: absolute; |
|
||||||
top: 27px; |
|
||||||
right: -14px; |
|
||||||
border-top: 14px solid transparent; |
|
||||||
border-right: 0 solid #fff; |
|
||||||
border-bottom: 14px solid transparent; |
|
||||||
border-left: 14px solid #fff; |
|
||||||
} |
|
||||||
.timeline > li > .timeline-badge { |
|
||||||
z-index: 100; |
|
||||||
position: absolute; |
|
||||||
top: 16px; |
|
||||||
left: 50%; |
|
||||||
width: 50px; |
|
||||||
height: 50px; |
|
||||||
margin-left: -25px; |
|
||||||
border-radius: 50% 50% 50% 50%; |
|
||||||
text-align: center; |
|
||||||
font-size: 1.4em; |
|
||||||
line-height: 50px; |
|
||||||
color: #fff; |
|
||||||
background-color: #999999; |
|
||||||
} |
|
||||||
.timeline > li.timeline-inverted > .timeline-panel { |
|
||||||
float: right; |
|
||||||
} |
|
||||||
.timeline > li.timeline-inverted > .timeline-panel:before { |
|
||||||
right: auto; |
|
||||||
left: -15px; |
|
||||||
border-right-width: 15px; |
|
||||||
border-left-width: 0; |
|
||||||
} |
|
||||||
.timeline > li.timeline-inverted > .timeline-panel:after { |
|
||||||
right: auto; |
|
||||||
left: -14px; |
|
||||||
border-right-width: 14px; |
|
||||||
border-left-width: 0; |
|
||||||
} |
|
||||||
.timeline-badge.primary { |
|
||||||
background-color: #2e6da4 !important; |
|
||||||
} |
|
||||||
.timeline-badge.success { |
|
||||||
background-color: #3f903f !important; |
|
||||||
} |
|
||||||
.timeline-badge.warning { |
|
||||||
background-color: #f0ad4e !important; |
|
||||||
} |
|
||||||
.timeline-badge.danger { |
|
||||||
background-color: #d9534f !important; |
|
||||||
} |
|
||||||
.timeline-badge.info { |
|
||||||
background-color: #5bc0de !important; |
|
||||||
} |
|
||||||
.timeline-title { |
|
||||||
margin-top: 0; |
|
||||||
color: inherit; |
|
||||||
} |
|
||||||
.timeline-body > p, |
|
||||||
.timeline-body > ul { |
|
||||||
margin-bottom: 0; |
|
||||||
} |
|
||||||
.timeline-body > p + p { |
|
||||||
margin-top: 5px; |
|
||||||
} |
|
||||||
@media (max-width: 767px) { |
|
||||||
ul.timeline:before { |
|
||||||
left: 40px; |
|
||||||
} |
|
||||||
ul.timeline > li > .timeline-panel { |
|
||||||
width: calc(10%); |
|
||||||
width: -moz-calc(10%); |
|
||||||
width: -webkit-calc(10%); |
|
||||||
} |
|
||||||
ul.timeline > li > .timeline-badge { |
|
||||||
top: 16px; |
|
||||||
left: 15px; |
|
||||||
margin-left: 0; |
|
||||||
} |
|
||||||
ul.timeline > li > .timeline-panel { |
|
||||||
float: right; |
|
||||||
} |
|
||||||
ul.timeline > li > .timeline-panel:before { |
|
||||||
right: auto; |
|
||||||
left: -15px; |
|
||||||
border-right-width: 15px; |
|
||||||
border-left-width: 0; |
|
||||||
} |
|
||||||
ul.timeline > li > .timeline-panel:after { |
|
||||||
right: auto; |
|
||||||
left: -14px; |
|
||||||
border-right-width: 14px; |
|
||||||
border-left-width: 0; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,71 @@ |
|||||||
|
.wrapper { |
||||||
|
display: flex; |
||||||
|
align-items: stretch; |
||||||
|
height: 100vh !important; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#content { |
||||||
|
width: 100%; |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
min-height: 100vh; |
||||||
|
transition: all 0.3s; |
||||||
|
transition: all 0.6s cubic-bezier(0.945, 0.020, 0.270, 0.665); |
||||||
|
position: absolute; |
||||||
|
right: 0px; |
||||||
|
|
||||||
|
@media (min-width: 768px) { |
||||||
|
position: static; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.content-container { |
||||||
|
padding-top: 90px; |
||||||
|
|
||||||
|
@media (max-width: 768px){ |
||||||
|
padding-top: 40px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.content-header { |
||||||
|
width: calc(100% - 200px); |
||||||
|
display: flex; |
||||||
|
z-index: 1000; |
||||||
|
|
||||||
|
@media (min-width: 768px){ |
||||||
|
position: absolute; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
.container { |
||||||
|
&__section { |
||||||
|
display: block; |
||||||
|
padding: 0 15px; |
||||||
|
margin: 0 10px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@media (min-width: 768px) { |
||||||
|
.container { |
||||||
|
&__section { |
||||||
|
|
||||||
|
|
||||||
|
&--partitioned { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: stretch; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
&__subsection { |
||||||
|
flex: 1; |
||||||
|
margin-right: 10px; |
||||||
|
|
||||||
|
& + & { margin-left: 5px; } |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,928 @@ |
|||||||
|
// Variables |
||||||
|
// |
||||||
|
// Variables should follow the `$component-state-property-size` formula for |
||||||
|
// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. |
||||||
|
|
||||||
|
|
||||||
|
// |
||||||
|
// Color system |
||||||
|
// |
||||||
|
|
||||||
|
// stylelint-disable |
||||||
|
$white: #fff !default; |
||||||
|
$gray-100: #f8f9fa !default; |
||||||
|
$gray-200: #e9ecef !default; |
||||||
|
$gray-300: #dee2e6 !default; |
||||||
|
$gray-400: #ced4da !default; |
||||||
|
$gray-500: #adb5bd !default; |
||||||
|
$gray-600: #6c757d !default; |
||||||
|
$gray-700: #495057 !default; |
||||||
|
$gray-800: #343a40 !default; |
||||||
|
$gray-900: #212529 !default; |
||||||
|
$black: #000 !default; |
||||||
|
|
||||||
|
$grays: () !default; |
||||||
|
$grays: map-merge(( |
||||||
|
"100": $gray-100, |
||||||
|
"200": $gray-200, |
||||||
|
"300": $gray-300, |
||||||
|
"400": $gray-400, |
||||||
|
"500": $gray-500, |
||||||
|
"600": $gray-600, |
||||||
|
"700": $gray-700, |
||||||
|
"800": $gray-800, |
||||||
|
"900": $gray-900 |
||||||
|
), $grays); |
||||||
|
|
||||||
|
$blue: #4786ff !default; |
||||||
|
$indigo: #6610f2 !default; |
||||||
|
$purple: #8940d5 !default; |
||||||
|
$pink: #e83e8c !default; |
||||||
|
$red: #dc3545 !default; |
||||||
|
$orange: #fd7e14 !default; |
||||||
|
$yellow: #ffc107 !default; |
||||||
|
$green: #1bb85a !default; |
||||||
|
$teal: #20c997 !default; |
||||||
|
$cyan: #17a2b8 !default; |
||||||
|
|
||||||
|
$colors: () !default; |
||||||
|
$colors: map-merge(( |
||||||
|
"blue": $blue, |
||||||
|
"indigo": $indigo, |
||||||
|
"purple": $purple, |
||||||
|
"pink": $pink, |
||||||
|
"red": $red, |
||||||
|
"orange": $orange, |
||||||
|
"yellow": $yellow, |
||||||
|
"green": $green, |
||||||
|
"teal": $teal, |
||||||
|
"cyan": $cyan, |
||||||
|
"white": $white, |
||||||
|
"gray": $gray-600, |
||||||
|
"gray-dark": $gray-800 |
||||||
|
), $colors); |
||||||
|
|
||||||
|
$primary: $blue !default; |
||||||
|
$secondary: $gray-600 !default; |
||||||
|
$success: $green !default; |
||||||
|
$info: $cyan !default; |
||||||
|
$warning: $yellow !default; |
||||||
|
$danger: $red !default; |
||||||
|
$light: $gray-100 !default; |
||||||
|
$dark: $gray-800 !default; |
||||||
|
|
||||||
|
$theme-colors: () !default; |
||||||
|
$theme-colors: map-merge(( |
||||||
|
"primary": $primary, |
||||||
|
"secondary": $secondary, |
||||||
|
"success": $success, |
||||||
|
"info": $info, |
||||||
|
"warning": $warning, |
||||||
|
"danger": $danger, |
||||||
|
"light": $light, |
||||||
|
"dark": $dark |
||||||
|
), $theme-colors); |
||||||
|
// stylelint-enable |
||||||
|
|
||||||
|
// Set a specific jump point for requesting color jumps |
||||||
|
$theme-color-interval: 8% !default; |
||||||
|
|
||||||
|
// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255. |
||||||
|
$yiq-contrasted-threshold: 150 !default; |
||||||
|
|
||||||
|
// Customize the light and dark text colors for use in our YIQ color contrast function. |
||||||
|
$yiq-text-dark: $gray-900 !default; |
||||||
|
$yiq-text-light: $white !default; |
||||||
|
|
||||||
|
// Options |
||||||
|
// |
||||||
|
// Quickly modify global styling by enabling or disabling optional features. |
||||||
|
|
||||||
|
$enable-caret: true !default; |
||||||
|
$enable-rounded: true !default; |
||||||
|
$enable-shadows: false !default; |
||||||
|
$enable-gradients: false !default; |
||||||
|
$enable-transitions: true !default; |
||||||
|
$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS |
||||||
|
$enable-grid-classes: true !default; |
||||||
|
$enable-print-styles: true !default; |
||||||
|
|
||||||
|
|
||||||
|
// Spacing |
||||||
|
// |
||||||
|
// Control the default styling of most Bootstrap elements by modifying these |
||||||
|
// variables. Mostly focused on spacing. |
||||||
|
// You can add more entries to the $spacers map, should you need more variation. |
||||||
|
|
||||||
|
// stylelint-disable |
||||||
|
$spacer: 1rem !default; |
||||||
|
$spacers: () !default; |
||||||
|
$spacers: map-merge(( |
||||||
|
0: 0, |
||||||
|
1: ($spacer * .25), |
||||||
|
2: ($spacer * .5), |
||||||
|
3: $spacer, |
||||||
|
4: ($spacer * 1.5), |
||||||
|
5: ($spacer * 3) |
||||||
|
), $spacers); |
||||||
|
|
||||||
|
// This variable affects the `.h-*` and `.w-*` classes. |
||||||
|
$sizes: () !default; |
||||||
|
$sizes: map-merge(( |
||||||
|
25: 25%, |
||||||
|
50: 50%, |
||||||
|
75: 75%, |
||||||
|
100: 100%, |
||||||
|
auto: auto |
||||||
|
), $sizes); |
||||||
|
// stylelint-enable |
||||||
|
|
||||||
|
// Body |
||||||
|
// |
||||||
|
// Settings for the `<body>` element. |
||||||
|
|
||||||
|
$body-bg: $white !default; |
||||||
|
$body-color: $gray-900 !default; |
||||||
|
|
||||||
|
// Links |
||||||
|
// |
||||||
|
// Style anchor elements. |
||||||
|
|
||||||
|
$link-color: theme-color("primary") !default; |
||||||
|
$link-decoration: none !default; |
||||||
|
$link-hover-color: darken($link-color, 15%) !default; |
||||||
|
$link-hover-decoration: underline !default; |
||||||
|
|
||||||
|
// Paragraphs |
||||||
|
// |
||||||
|
// Style p element. |
||||||
|
|
||||||
|
$paragraph-margin-bottom: 1rem !default; |
||||||
|
|
||||||
|
|
||||||
|
// Grid breakpoints |
||||||
|
// |
||||||
|
// Define the minimum dimensions at which your layout will change, |
||||||
|
// adapting to different screen sizes, for use in media queries. |
||||||
|
|
||||||
|
$grid-breakpoints: ( |
||||||
|
xs: 0, |
||||||
|
sm: 576px, |
||||||
|
md: 768px, |
||||||
|
lg: 992px, |
||||||
|
xl: 1200px |
||||||
|
) !default; |
||||||
|
|
||||||
|
@include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); |
||||||
|
@include _assert-starts-at-zero($grid-breakpoints); |
||||||
|
|
||||||
|
|
||||||
|
// Grid containers |
||||||
|
// |
||||||
|
// Define the maximum width of `.container` for different screen sizes. |
||||||
|
|
||||||
|
$container-max-widths: ( |
||||||
|
sm: 540px, |
||||||
|
md: 720px, |
||||||
|
lg: 960px, |
||||||
|
xl: 1140px |
||||||
|
) !default; |
||||||
|
|
||||||
|
@include _assert-ascending($container-max-widths, "$container-max-widths"); |
||||||
|
|
||||||
|
|
||||||
|
// Grid columns |
||||||
|
// |
||||||
|
// Set the number of columns and specify the width of the gutters. |
||||||
|
|
||||||
|
$grid-columns: 12 !default; |
||||||
|
$grid-gutter-width: 30px !default; |
||||||
|
|
||||||
|
// Components |
||||||
|
// |
||||||
|
// Define common padding and border radius sizes and more. |
||||||
|
|
||||||
|
$line-height-lg: 1.5 !default; |
||||||
|
$line-height-sm: 1.5 !default; |
||||||
|
|
||||||
|
$border-width: 1px !default; |
||||||
|
$border-color: $gray-300 !default; |
||||||
|
|
||||||
|
$border-radius: .25rem !default; |
||||||
|
$border-radius-lg: .3rem !default; |
||||||
|
$border-radius-sm: .2rem !default; |
||||||
|
|
||||||
|
$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default; |
||||||
|
$box-shadow: 0 .5rem 1rem rgba($black, .15) !default; |
||||||
|
$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default; |
||||||
|
|
||||||
|
$component-active-color: $white !default; |
||||||
|
$component-active-bg: theme-color("primary") !default; |
||||||
|
|
||||||
|
$caret-width: .3em !default; |
||||||
|
|
||||||
|
$transition-base: all .2s ease-in-out !default; |
||||||
|
$transition-fade: opacity .15s linear !default; |
||||||
|
$transition-collapse: height .35s ease !default; |
||||||
|
|
||||||
|
|
||||||
|
// Fonts |
||||||
|
// |
||||||
|
// Font, line-height, and color for body text, headings, and more. |
||||||
|
|
||||||
|
// stylelint-disable value-keyword-case |
||||||
|
$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; |
||||||
|
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; |
||||||
|
$font-family-base: $font-family-sans-serif !default; |
||||||
|
// stylelint-enable value-keyword-case |
||||||
|
|
||||||
|
$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` |
||||||
|
$font-size-lg: ($font-size-base * 1.25) !default; |
||||||
|
$font-size-sm: ($font-size-base * .875) !default; |
||||||
|
|
||||||
|
$font-weight-light: 300 !default; |
||||||
|
$font-weight-normal: 400 !default; |
||||||
|
$font-weight-bold: 700 !default; |
||||||
|
|
||||||
|
$font-weight-base: $font-weight-normal !default; |
||||||
|
$line-height-base: 1.5 !default; |
||||||
|
|
||||||
|
$h1-font-size: $font-size-base * 2.5 !default; |
||||||
|
$h2-font-size: $font-size-base * 2 !default; |
||||||
|
$h3-font-size: $font-size-base * 1.75 !default; |
||||||
|
$h4-font-size: $font-size-base * 1.5 !default; |
||||||
|
$h5-font-size: $font-size-base * 1.25 !default; |
||||||
|
$h6-font-size: $font-size-base !default; |
||||||
|
|
||||||
|
$headings-margin-bottom: ($spacer / 2) !default; |
||||||
|
$headings-font-family: inherit !default; |
||||||
|
$headings-font-weight: 500 !default; |
||||||
|
$headings-line-height: 1.2 !default; |
||||||
|
$headings-color: inherit !default; |
||||||
|
|
||||||
|
$display1-size: 6rem !default; |
||||||
|
$display2-size: 5.5rem !default; |
||||||
|
$display3-size: 4.5rem !default; |
||||||
|
$display4-size: 3.5rem !default; |
||||||
|
|
||||||
|
$display1-weight: 300 !default; |
||||||
|
$display2-weight: 300 !default; |
||||||
|
$display3-weight: 300 !default; |
||||||
|
$display4-weight: 300 !default; |
||||||
|
$display-line-height: $headings-line-height !default; |
||||||
|
|
||||||
|
$lead-font-size: ($font-size-base * 1.25) !default; |
||||||
|
$lead-font-weight: 300 !default; |
||||||
|
|
||||||
|
$small-font-size: 80% !default; |
||||||
|
|
||||||
|
$text-muted: $gray-600 !default; |
||||||
|
|
||||||
|
$blockquote-small-color: $gray-600 !default; |
||||||
|
$blockquote-font-size: ($font-size-base * 1.25) !default; |
||||||
|
|
||||||
|
$hr-border-color: rgba($black, .1) !default; |
||||||
|
$hr-border-width: $border-width !default; |
||||||
|
|
||||||
|
$mark-padding: .2em !default; |
||||||
|
|
||||||
|
$dt-font-weight: $font-weight-bold !default; |
||||||
|
|
||||||
|
$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default; |
||||||
|
$nested-kbd-font-weight: $font-weight-bold !default; |
||||||
|
|
||||||
|
$list-inline-padding: .5rem !default; |
||||||
|
|
||||||
|
$mark-bg: #fcf8e3 !default; |
||||||
|
|
||||||
|
$hr-margin-y: $spacer !default; |
||||||
|
|
||||||
|
|
||||||
|
// Tables |
||||||
|
// |
||||||
|
// Customizes the `.table` component with basic values, each used across all table variations. |
||||||
|
|
||||||
|
$table-cell-padding: .75rem !default; |
||||||
|
$table-cell-padding-sm: .3rem !default; |
||||||
|
|
||||||
|
$table-bg: transparent !default; |
||||||
|
$table-accent-bg: rgba($black, .05) !default; |
||||||
|
$table-hover-bg: rgba($black, .075) !default; |
||||||
|
$table-active-bg: $table-hover-bg !default; |
||||||
|
|
||||||
|
$table-border-width: $border-width !default; |
||||||
|
$table-border-color: $gray-300 !default; |
||||||
|
|
||||||
|
$table-head-bg: $gray-200 !default; |
||||||
|
$table-head-color: $gray-700 !default; |
||||||
|
|
||||||
|
$table-dark-bg: $gray-900 !default; |
||||||
|
$table-dark-accent-bg: rgba($white, .05) !default; |
||||||
|
$table-dark-hover-bg: rgba($white, .075) !default; |
||||||
|
$table-dark-border-color: lighten($gray-900, 7.5%) !default; |
||||||
|
$table-dark-color: $body-bg !default; |
||||||
|
|
||||||
|
$table-striped-order: odd !default; |
||||||
|
|
||||||
|
$table-caption-color: $text-muted !default; |
||||||
|
|
||||||
|
// Buttons + Forms |
||||||
|
// |
||||||
|
// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. |
||||||
|
|
||||||
|
$input-btn-padding-y: .375rem !default; |
||||||
|
$input-btn-padding-x: .75rem !default; |
||||||
|
$input-btn-line-height: $line-height-base !default; |
||||||
|
|
||||||
|
$input-btn-focus-width: .2rem !default; |
||||||
|
$input-btn-focus-color: rgba($component-active-bg, .25) !default; |
||||||
|
$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default; |
||||||
|
|
||||||
|
$input-btn-padding-y-sm: .25rem !default; |
||||||
|
$input-btn-padding-x-sm: .5rem !default; |
||||||
|
$input-btn-line-height-sm: $line-height-sm !default; |
||||||
|
|
||||||
|
$input-btn-padding-y-lg: .5rem !default; |
||||||
|
$input-btn-padding-x-lg: 1rem !default; |
||||||
|
$input-btn-line-height-lg: $line-height-lg !default; |
||||||
|
|
||||||
|
$input-btn-border-width: $border-width !default; |
||||||
|
|
||||||
|
|
||||||
|
// Buttons |
||||||
|
// |
||||||
|
// For each of Bootstrap's buttons, define text, background, and border color. |
||||||
|
|
||||||
|
$btn-padding-y: $input-btn-padding-y !default; |
||||||
|
$btn-padding-x: $input-btn-padding-x !default; |
||||||
|
$btn-line-height: $input-btn-line-height !default; |
||||||
|
|
||||||
|
$btn-padding-y-sm: $input-btn-padding-y-sm !default; |
||||||
|
$btn-padding-x-sm: $input-btn-padding-x-sm !default; |
||||||
|
$btn-line-height-sm: $input-btn-line-height-sm !default; |
||||||
|
|
||||||
|
$btn-padding-y-lg: $input-btn-padding-y-lg !default; |
||||||
|
$btn-padding-x-lg: $input-btn-padding-x-lg !default; |
||||||
|
$btn-line-height-lg: $input-btn-line-height-lg !default; |
||||||
|
|
||||||
|
$btn-border-width: $input-btn-border-width !default; |
||||||
|
|
||||||
|
$btn-font-weight: $font-weight-normal !default; |
||||||
|
$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default; |
||||||
|
$btn-focus-width: $input-btn-focus-width !default; |
||||||
|
$btn-focus-box-shadow: $input-btn-focus-box-shadow !default; |
||||||
|
$btn-disabled-opacity: .65 !default; |
||||||
|
$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; |
||||||
|
|
||||||
|
$btn-link-disabled-color: $gray-600 !default; |
||||||
|
|
||||||
|
$btn-block-spacing-y: .5rem !default; |
||||||
|
|
||||||
|
// Allows for customizing button radius independently from global border radius |
||||||
|
$btn-border-radius: $border-radius !default; |
||||||
|
$btn-border-radius-lg: $border-radius-lg !default; |
||||||
|
$btn-border-radius-sm: $border-radius-sm !default; |
||||||
|
|
||||||
|
$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; |
||||||
|
|
||||||
|
|
||||||
|
// Forms |
||||||
|
|
||||||
|
$label-margin-bottom: .5rem !default; |
||||||
|
|
||||||
|
$input-padding-y: $input-btn-padding-y !default; |
||||||
|
$input-padding-x: $input-btn-padding-x !default; |
||||||
|
$input-line-height: $input-btn-line-height !default; |
||||||
|
|
||||||
|
$input-padding-y-sm: $input-btn-padding-y-sm !default; |
||||||
|
$input-padding-x-sm: $input-btn-padding-x-sm !default; |
||||||
|
$input-line-height-sm: $input-btn-line-height-sm !default; |
||||||
|
|
||||||
|
$input-padding-y-lg: $input-btn-padding-y-lg !default; |
||||||
|
$input-padding-x-lg: $input-btn-padding-x-lg !default; |
||||||
|
$input-line-height-lg: $input-btn-line-height-lg !default; |
||||||
|
|
||||||
|
$input-bg: $white !default; |
||||||
|
$input-disabled-bg: $gray-200 !default; |
||||||
|
|
||||||
|
$input-color: $gray-700 !default; |
||||||
|
$input-border-color: $gray-400 !default; |
||||||
|
$input-border-width: $input-btn-border-width !default; |
||||||
|
$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default; |
||||||
|
|
||||||
|
$input-border-radius: $border-radius !default; |
||||||
|
$input-border-radius-lg: $border-radius-lg !default; |
||||||
|
$input-border-radius-sm: $border-radius-sm !default; |
||||||
|
|
||||||
|
$input-focus-bg: $input-bg !default; |
||||||
|
$input-focus-border-color: lighten($component-active-bg, 25%) !default; |
||||||
|
$input-focus-color: $input-color !default; |
||||||
|
$input-focus-width: $input-btn-focus-width !default; |
||||||
|
$input-focus-box-shadow: $input-btn-focus-box-shadow !default; |
||||||
|
|
||||||
|
$input-placeholder-color: $gray-600 !default; |
||||||
|
$input-plaintext-color: $body-color !default; |
||||||
|
|
||||||
|
$input-height-border: $input-border-width * 2 !default; |
||||||
|
|
||||||
|
$input-height-inner: ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default; |
||||||
|
$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default; |
||||||
|
|
||||||
|
$input-height-inner-sm: ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default; |
||||||
|
$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default; |
||||||
|
|
||||||
|
$input-height-inner-lg: ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default; |
||||||
|
$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default; |
||||||
|
|
||||||
|
$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; |
||||||
|
|
||||||
|
$form-text-margin-top: .25rem !default; |
||||||
|
|
||||||
|
$form-check-input-gutter: 1.25rem !default; |
||||||
|
$form-check-input-margin-y: .3rem !default; |
||||||
|
$form-check-input-margin-x: .25rem !default; |
||||||
|
|
||||||
|
$form-check-inline-margin-x: .75rem !default; |
||||||
|
$form-check-inline-input-margin-x: .3125rem !default; |
||||||
|
|
||||||
|
$form-group-margin-bottom: 1rem !default; |
||||||
|
|
||||||
|
$input-group-addon-color: $input-color !default; |
||||||
|
$input-group-addon-bg: $gray-200 !default; |
||||||
|
$input-group-addon-border-color: $input-border-color !default; |
||||||
|
|
||||||
|
$custom-control-gutter: 1.5rem !default; |
||||||
|
$custom-control-spacer-x: 1rem !default; |
||||||
|
|
||||||
|
$custom-control-indicator-size: 1rem !default; |
||||||
|
$custom-control-indicator-bg: $gray-300 !default; |
||||||
|
$custom-control-indicator-bg-size: 50% 50% !default; |
||||||
|
$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default; |
||||||
|
|
||||||
|
$custom-control-indicator-disabled-bg: $gray-200 !default; |
||||||
|
$custom-control-label-disabled-color: $gray-600 !default; |
||||||
|
|
||||||
|
$custom-control-indicator-checked-color: $component-active-color !default; |
||||||
|
$custom-control-indicator-checked-bg: $component-active-bg !default; |
||||||
|
$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default; |
||||||
|
$custom-control-indicator-checked-box-shadow: none !default; |
||||||
|
|
||||||
|
$custom-control-indicator-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default; |
||||||
|
|
||||||
|
$custom-control-indicator-active-color: $component-active-color !default; |
||||||
|
$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default; |
||||||
|
$custom-control-indicator-active-box-shadow: none !default; |
||||||
|
|
||||||
|
$custom-checkbox-indicator-border-radius: $border-radius !default; |
||||||
|
$custom-checkbox-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
|
||||||
|
$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default; |
||||||
|
$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default; |
||||||
|
$custom-checkbox-indicator-icon-indeterminate: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
$custom-checkbox-indicator-indeterminate-box-shadow: none !default; |
||||||
|
|
||||||
|
$custom-radio-indicator-border-radius: 50% !default; |
||||||
|
$custom-radio-indicator-icon-checked: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
|
||||||
|
$custom-select-padding-y: .375rem !default; |
||||||
|
$custom-select-padding-x: .75rem !default; |
||||||
|
$custom-select-height: $input-height !default; |
||||||
|
$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator |
||||||
|
$custom-select-line-height: $input-btn-line-height !default; |
||||||
|
$custom-select-color: $input-color !default; |
||||||
|
$custom-select-disabled-color: $gray-600 !default; |
||||||
|
$custom-select-bg: $input-bg !default; |
||||||
|
$custom-select-disabled-bg: $gray-200 !default; |
||||||
|
$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions |
||||||
|
$custom-select-indicator-color: $gray-800 !default; |
||||||
|
$custom-select-indicator: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
$custom-select-border-width: $input-btn-border-width !default; |
||||||
|
$custom-select-border-color: $input-border-color !default; |
||||||
|
$custom-select-border-radius: $border-radius !default; |
||||||
|
|
||||||
|
$custom-select-focus-border-color: $input-focus-border-color !default; |
||||||
|
$custom-select-focus-box-shadow: inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default; |
||||||
|
|
||||||
|
$custom-select-font-size-sm: 75% !default; |
||||||
|
$custom-select-height-sm: $input-height-sm !default; |
||||||
|
|
||||||
|
$custom-select-font-size-lg: 125% !default; |
||||||
|
$custom-select-height-lg: $input-height-lg !default; |
||||||
|
|
||||||
|
$custom-range-track-width: 100% !default; |
||||||
|
$custom-range-track-height: .5rem !default; |
||||||
|
$custom-range-track-cursor: pointer !default; |
||||||
|
$custom-range-track-bg: $gray-300 !default; |
||||||
|
$custom-range-track-border-radius: 1rem !default; |
||||||
|
$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default; |
||||||
|
|
||||||
|
$custom-range-thumb-width: 1rem !default; |
||||||
|
$custom-range-thumb-height: $custom-range-thumb-width !default; |
||||||
|
$custom-range-thumb-bg: $component-active-bg !default; |
||||||
|
$custom-range-thumb-border: 0 !default; |
||||||
|
$custom-range-thumb-border-radius: 1rem !default; |
||||||
|
$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default; |
||||||
|
$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default; |
||||||
|
$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default; |
||||||
|
|
||||||
|
$custom-file-height: $input-height !default; |
||||||
|
$custom-file-focus-border-color: $input-focus-border-color !default; |
||||||
|
$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default; |
||||||
|
|
||||||
|
$custom-file-padding-y: $input-btn-padding-y !default; |
||||||
|
$custom-file-padding-x: $input-btn-padding-x !default; |
||||||
|
$custom-file-line-height: $input-btn-line-height !default; |
||||||
|
$custom-file-color: $input-color !default; |
||||||
|
$custom-file-bg: $input-bg !default; |
||||||
|
$custom-file-border-width: $input-btn-border-width !default; |
||||||
|
$custom-file-border-color: $input-border-color !default; |
||||||
|
$custom-file-border-radius: $input-border-radius !default; |
||||||
|
$custom-file-box-shadow: $input-box-shadow !default; |
||||||
|
$custom-file-button-color: $custom-file-color !default; |
||||||
|
$custom-file-button-bg: $input-group-addon-bg !default; |
||||||
|
$custom-file-text: ( |
||||||
|
en: "Browse" |
||||||
|
) !default; |
||||||
|
|
||||||
|
|
||||||
|
// Form validation |
||||||
|
$form-feedback-margin-top: $form-text-margin-top !default; |
||||||
|
$form-feedback-font-size: $small-font-size !default; |
||||||
|
$form-feedback-valid-color: theme-color("success") !default; |
||||||
|
$form-feedback-invalid-color: theme-color("danger") !default; |
||||||
|
|
||||||
|
|
||||||
|
// Dropdowns |
||||||
|
// |
||||||
|
// Dropdown menu container and contents. |
||||||
|
|
||||||
|
$dropdown-min-width: 10rem !default; |
||||||
|
$dropdown-padding-y: .5rem !default; |
||||||
|
$dropdown-spacer: .125rem !default; |
||||||
|
$dropdown-bg: $white !default; |
||||||
|
$dropdown-border-color: rgba($black, .15) !default; |
||||||
|
$dropdown-border-radius: $border-radius !default; |
||||||
|
$dropdown-border-width: $border-width !default; |
||||||
|
$dropdown-divider-bg: $gray-200 !default; |
||||||
|
$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default; |
||||||
|
|
||||||
|
$dropdown-link-color: $gray-900 !default; |
||||||
|
$dropdown-link-hover-color: darken($gray-900, 5%) !default; |
||||||
|
$dropdown-link-hover-bg: $gray-100 !default; |
||||||
|
|
||||||
|
$dropdown-link-active-color: $component-active-color !default; |
||||||
|
$dropdown-link-active-bg: $component-active-bg !default; |
||||||
|
|
||||||
|
$dropdown-link-disabled-color: $gray-600 !default; |
||||||
|
|
||||||
|
$dropdown-item-padding-y: .25rem !default; |
||||||
|
$dropdown-item-padding-x: 1.5rem !default; |
||||||
|
|
||||||
|
$dropdown-header-color: $gray-600 !default; |
||||||
|
|
||||||
|
|
||||||
|
// Z-index master list |
||||||
|
// |
||||||
|
// Warning: Avoid customizing these values. They're used for a bird's eye view |
||||||
|
// of components dependent on the z-axis and are designed to all work together. |
||||||
|
|
||||||
|
$zindex-dropdown: 1000 !default; |
||||||
|
$zindex-sticky: 1020 !default; |
||||||
|
$zindex-fixed: 1030 !default; |
||||||
|
$zindex-modal-backdrop: 1040 !default; |
||||||
|
$zindex-modal: 1050 !default; |
||||||
|
$zindex-popover: 1060 !default; |
||||||
|
$zindex-tooltip: 1070 !default; |
||||||
|
|
||||||
|
// Navs |
||||||
|
|
||||||
|
$nav-link-padding-y: .5rem !default; |
||||||
|
$nav-link-padding-x: 1rem !default; |
||||||
|
$nav-link-disabled-color: $gray-600 !default; |
||||||
|
|
||||||
|
$nav-tabs-border-color: $gray-300 !default; |
||||||
|
$nav-tabs-border-width: $border-width !default; |
||||||
|
$nav-tabs-border-radius: $border-radius !default; |
||||||
|
$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default; |
||||||
|
$nav-tabs-link-active-color: $gray-700 !default; |
||||||
|
$nav-tabs-link-active-bg: $body-bg !default; |
||||||
|
$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default; |
||||||
|
|
||||||
|
$nav-pills-border-radius: $border-radius !default; |
||||||
|
$nav-pills-link-active-color: $component-active-color !default; |
||||||
|
$nav-pills-link-active-bg: $component-active-bg !default; |
||||||
|
|
||||||
|
$nav-divider-color: $gray-200 !default; |
||||||
|
$nav-divider-margin-y: ($spacer / 2) !default; |
||||||
|
|
||||||
|
// Navbar |
||||||
|
|
||||||
|
$navbar-padding-y: ($spacer / 2) !default; |
||||||
|
$navbar-padding-x: $spacer !default; |
||||||
|
|
||||||
|
$navbar-nav-link-padding-x: .5rem !default; |
||||||
|
|
||||||
|
$navbar-brand-font-size: $font-size-lg !default; |
||||||
|
// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link |
||||||
|
$nav-link-height: ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default; |
||||||
|
$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default; |
||||||
|
$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default; |
||||||
|
|
||||||
|
$navbar-toggler-padding-y: .25rem !default; |
||||||
|
$navbar-toggler-padding-x: .75rem !default; |
||||||
|
$navbar-toggler-font-size: $font-size-lg !default; |
||||||
|
$navbar-toggler-border-radius: $btn-border-radius !default; |
||||||
|
|
||||||
|
$navbar-dark-color: rgba($white, .5) !default; |
||||||
|
$navbar-dark-hover-color: rgba($white, .75) !default; |
||||||
|
$navbar-dark-active-color: $white !default; |
||||||
|
$navbar-dark-disabled-color: rgba($white, .25) !default; |
||||||
|
$navbar-dark-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
$navbar-dark-toggler-border-color: rgba($white, .1) !default; |
||||||
|
|
||||||
|
$navbar-light-color: rgba($black, .5) !default; |
||||||
|
$navbar-light-hover-color: rgba($black, .7) !default; |
||||||
|
$navbar-light-active-color: rgba($black, .9) !default; |
||||||
|
$navbar-light-disabled-color: rgba($black, .3) !default; |
||||||
|
$navbar-light-toggler-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
$navbar-light-toggler-border-color: rgba($black, .1) !default; |
||||||
|
|
||||||
|
// Pagination |
||||||
|
|
||||||
|
$pagination-padding-y: .5rem !default; |
||||||
|
$pagination-padding-x: .75rem !default; |
||||||
|
$pagination-padding-y-sm: .25rem !default; |
||||||
|
$pagination-padding-x-sm: .5rem !default; |
||||||
|
$pagination-padding-y-lg: .75rem !default; |
||||||
|
$pagination-padding-x-lg: 1.5rem !default; |
||||||
|
$pagination-line-height: 1.25 !default; |
||||||
|
|
||||||
|
$pagination-color: $link-color !default; |
||||||
|
$pagination-bg: $white !default; |
||||||
|
$pagination-border-width: $border-width !default; |
||||||
|
$pagination-border-color: $gray-300 !default; |
||||||
|
|
||||||
|
$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default; |
||||||
|
$pagination-focus-outline: 0 !default; |
||||||
|
|
||||||
|
$pagination-hover-color: $link-hover-color !default; |
||||||
|
$pagination-hover-bg: $gray-200 !default; |
||||||
|
$pagination-hover-border-color: $gray-300 !default; |
||||||
|
|
||||||
|
$pagination-active-color: $component-active-color !default; |
||||||
|
$pagination-active-bg: $component-active-bg !default; |
||||||
|
$pagination-active-border-color: $pagination-active-bg !default; |
||||||
|
|
||||||
|
$pagination-disabled-color: $gray-600 !default; |
||||||
|
$pagination-disabled-bg: $white !default; |
||||||
|
$pagination-disabled-border-color: $gray-300 !default; |
||||||
|
|
||||||
|
|
||||||
|
// Jumbotron |
||||||
|
|
||||||
|
$jumbotron-padding: 2rem !default; |
||||||
|
$jumbotron-bg: $gray-200 !default; |
||||||
|
|
||||||
|
|
||||||
|
// Cards |
||||||
|
|
||||||
|
$card-spacer-y: .75rem !default; |
||||||
|
$card-spacer-x: 1.25rem !default; |
||||||
|
$card-border-width: $border-width !default; |
||||||
|
$card-border-radius: $border-radius !default; |
||||||
|
$card-border-color: rgba($black, .125) !default; |
||||||
|
$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default; |
||||||
|
$card-cap-bg: rgba($black, .03) !default; |
||||||
|
$card-bg: $white !default; |
||||||
|
|
||||||
|
$card-img-overlay-padding: 1.25rem !default; |
||||||
|
|
||||||
|
$card-group-margin: ($grid-gutter-width / 2) !default; |
||||||
|
$card-deck-margin: $card-group-margin !default; |
||||||
|
|
||||||
|
$card-columns-count: 3 !default; |
||||||
|
$card-columns-gap: 1.25rem !default; |
||||||
|
$card-columns-margin: $card-spacer-y !default; |
||||||
|
|
||||||
|
|
||||||
|
// Tooltips |
||||||
|
|
||||||
|
$tooltip-font-size: $font-size-sm !default; |
||||||
|
$tooltip-max-width: 200px !default; |
||||||
|
$tooltip-color: $white !default; |
||||||
|
$tooltip-bg: $black !default; |
||||||
|
$tooltip-border-radius: $border-radius !default; |
||||||
|
$tooltip-opacity: .9 !default; |
||||||
|
$tooltip-padding-y: .25rem !default; |
||||||
|
$tooltip-padding-x: .5rem !default; |
||||||
|
$tooltip-margin: 0 !default; |
||||||
|
|
||||||
|
$tooltip-arrow-width: .8rem !default; |
||||||
|
$tooltip-arrow-height: .4rem !default; |
||||||
|
$tooltip-arrow-color: $tooltip-bg !default; |
||||||
|
|
||||||
|
|
||||||
|
// Popovers |
||||||
|
|
||||||
|
$popover-font-size: $font-size-sm !default; |
||||||
|
$popover-bg: $white !default; |
||||||
|
$popover-max-width: 276px !default; |
||||||
|
$popover-border-width: $border-width !default; |
||||||
|
$popover-border-color: rgba($black, .2) !default; |
||||||
|
$popover-border-radius: $border-radius-lg !default; |
||||||
|
$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default; |
||||||
|
|
||||||
|
$popover-header-bg: darken($popover-bg, 3%) !default; |
||||||
|
$popover-header-color: $headings-color !default; |
||||||
|
$popover-header-padding-y: .5rem !default; |
||||||
|
$popover-header-padding-x: .75rem !default; |
||||||
|
|
||||||
|
$popover-body-color: $body-color !default; |
||||||
|
$popover-body-padding-y: $popover-header-padding-y !default; |
||||||
|
$popover-body-padding-x: $popover-header-padding-x !default; |
||||||
|
|
||||||
|
$popover-arrow-width: 1rem !default; |
||||||
|
$popover-arrow-height: .5rem !default; |
||||||
|
$popover-arrow-color: $popover-bg !default; |
||||||
|
|
||||||
|
$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default; |
||||||
|
|
||||||
|
|
||||||
|
// Badges |
||||||
|
|
||||||
|
$badge-font-size: 75% !default; |
||||||
|
$badge-font-weight: $font-weight-bold !default; |
||||||
|
$badge-padding-y: .25em !default; |
||||||
|
$badge-padding-x: .4em !default; |
||||||
|
$badge-border-radius: $border-radius !default; |
||||||
|
|
||||||
|
$badge-pill-padding-x: .6em !default; |
||||||
|
// Use a higher than normal value to ensure completely rounded edges when |
||||||
|
// customizing padding or font-size on labels. |
||||||
|
$badge-pill-border-radius: 10rem !default; |
||||||
|
|
||||||
|
|
||||||
|
// Modals |
||||||
|
|
||||||
|
// Padding applied to the modal body |
||||||
|
$modal-inner-padding: 1rem !default; |
||||||
|
|
||||||
|
$modal-dialog-margin: .5rem !default; |
||||||
|
$modal-dialog-margin-y-sm-up: 1.75rem !default; |
||||||
|
|
||||||
|
$modal-title-line-height: $line-height-base !default; |
||||||
|
|
||||||
|
$modal-content-bg: $white !default; |
||||||
|
$modal-content-border-color: rgba($black, .2) !default; |
||||||
|
$modal-content-border-width: $border-width !default; |
||||||
|
$modal-content-border-radius: $border-radius-lg !default; |
||||||
|
$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default; |
||||||
|
$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default; |
||||||
|
|
||||||
|
$modal-backdrop-bg: $black !default; |
||||||
|
$modal-backdrop-opacity: .5 !default; |
||||||
|
$modal-header-border-color: $gray-200 !default; |
||||||
|
$modal-footer-border-color: $modal-header-border-color !default; |
||||||
|
$modal-header-border-width: $modal-content-border-width !default; |
||||||
|
$modal-footer-border-width: $modal-header-border-width !default; |
||||||
|
$modal-header-padding: 1rem !default; |
||||||
|
|
||||||
|
$modal-lg: 800px !default; |
||||||
|
$modal-md: 500px !default; |
||||||
|
$modal-sm: 300px !default; |
||||||
|
|
||||||
|
$modal-transition: transform .3s ease-out !default; |
||||||
|
|
||||||
|
|
||||||
|
// Alerts |
||||||
|
// |
||||||
|
// Define alert colors, border radius, and padding. |
||||||
|
|
||||||
|
$alert-padding-y: .75rem !default; |
||||||
|
$alert-padding-x: 1.25rem !default; |
||||||
|
$alert-margin-bottom: 1rem !default; |
||||||
|
$alert-border-radius: $border-radius !default; |
||||||
|
$alert-link-font-weight: $font-weight-bold !default; |
||||||
|
$alert-border-width: $border-width !default; |
||||||
|
|
||||||
|
$alert-bg-level: -10 !default; |
||||||
|
$alert-border-level: -9 !default; |
||||||
|
$alert-color-level: 6 !default; |
||||||
|
|
||||||
|
|
||||||
|
// Progress bars |
||||||
|
|
||||||
|
$progress-height: 1rem !default; |
||||||
|
$progress-font-size: ($font-size-base * .75) !default; |
||||||
|
$progress-bg: $gray-200 !default; |
||||||
|
$progress-border-radius: $border-radius !default; |
||||||
|
$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default; |
||||||
|
$progress-bar-color: $white !default; |
||||||
|
$progress-bar-bg: theme-color("primary") !default; |
||||||
|
$progress-bar-animation-timing: 1s linear infinite !default; |
||||||
|
$progress-bar-transition: width .6s ease !default; |
||||||
|
|
||||||
|
// List group |
||||||
|
|
||||||
|
$list-group-bg: $white !default; |
||||||
|
$list-group-border-color: rgba($black, .125) !default; |
||||||
|
$list-group-border-width: $border-width !default; |
||||||
|
$list-group-border-radius: $border-radius !default; |
||||||
|
|
||||||
|
$list-group-item-padding-y: .75rem !default; |
||||||
|
$list-group-item-padding-x: 1.25rem !default; |
||||||
|
|
||||||
|
$list-group-hover-bg: $gray-100 !default; |
||||||
|
$list-group-active-color: $component-active-color !default; |
||||||
|
$list-group-active-bg: $component-active-bg !default; |
||||||
|
$list-group-active-border-color: $list-group-active-bg !default; |
||||||
|
|
||||||
|
$list-group-disabled-color: $gray-600 !default; |
||||||
|
$list-group-disabled-bg: $list-group-bg !default; |
||||||
|
|
||||||
|
$list-group-action-color: $gray-700 !default; |
||||||
|
$list-group-action-hover-color: $list-group-action-color !default; |
||||||
|
|
||||||
|
$list-group-action-active-color: $body-color !default; |
||||||
|
$list-group-action-active-bg: $gray-200 !default; |
||||||
|
|
||||||
|
|
||||||
|
// Image thumbnails |
||||||
|
|
||||||
|
$thumbnail-padding: .25rem !default; |
||||||
|
$thumbnail-bg: $body-bg !default; |
||||||
|
$thumbnail-border-width: $border-width !default; |
||||||
|
$thumbnail-border-color: $gray-300 !default; |
||||||
|
$thumbnail-border-radius: $border-radius !default; |
||||||
|
$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default; |
||||||
|
|
||||||
|
|
||||||
|
// Figures |
||||||
|
|
||||||
|
$figure-caption-font-size: 90% !default; |
||||||
|
$figure-caption-color: $gray-600 !default; |
||||||
|
|
||||||
|
|
||||||
|
// Breadcrumbs |
||||||
|
|
||||||
|
$breadcrumb-padding-y: .75rem !default; |
||||||
|
$breadcrumb-padding-x: 1rem !default; |
||||||
|
$breadcrumb-item-padding: .5rem !default; |
||||||
|
|
||||||
|
$breadcrumb-margin-bottom: 1rem !default; |
||||||
|
|
||||||
|
$breadcrumb-bg: $gray-200 !default; |
||||||
|
$breadcrumb-divider-color: $gray-600 !default; |
||||||
|
$breadcrumb-active-color: $gray-600 !default; |
||||||
|
$breadcrumb-divider: quote("/") !default; |
||||||
|
|
||||||
|
$breadcrumb-border-radius: $border-radius !default; |
||||||
|
|
||||||
|
|
||||||
|
// Carousel |
||||||
|
|
||||||
|
$carousel-control-color: $white !default; |
||||||
|
$carousel-control-width: 15% !default; |
||||||
|
$carousel-control-opacity: .5 !default; |
||||||
|
|
||||||
|
$carousel-indicator-width: 30px !default; |
||||||
|
$carousel-indicator-height: 3px !default; |
||||||
|
$carousel-indicator-spacer: 3px !default; |
||||||
|
$carousel-indicator-active-bg: $white !default; |
||||||
|
|
||||||
|
$carousel-caption-width: 70% !default; |
||||||
|
$carousel-caption-color: $white !default; |
||||||
|
|
||||||
|
$carousel-control-icon-width: 20px !default; |
||||||
|
|
||||||
|
$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default; |
||||||
|
|
||||||
|
$carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`) |
||||||
|
|
||||||
|
|
||||||
|
// Close |
||||||
|
|
||||||
|
$close-font-size: $font-size-base * 1.5 !default; |
||||||
|
$close-font-weight: $font-weight-bold !default; |
||||||
|
$close-color: $black !default; |
||||||
|
$close-text-shadow: 0 1px 0 $white !default; |
||||||
|
|
||||||
|
// Code |
||||||
|
|
||||||
|
$code-font-size: 87.5% !default; |
||||||
|
$code-color: $pink !default; |
||||||
|
|
||||||
|
$kbd-padding-y: .2rem !default; |
||||||
|
$kbd-padding-x: .4rem !default; |
||||||
|
$kbd-font-size: $code-font-size !default; |
||||||
|
$kbd-color: $white !default; |
||||||
|
$kbd-bg: $gray-900 !default; |
||||||
|
|
||||||
|
$pre-color: $gray-900 !default; |
||||||
|
$pre-scrollable-max-height: 340px !default; |
||||||
|
|
||||||
|
|
||||||
|
// Printing |
||||||
|
$print-page-size: a3 !default; |
||||||
|
$print-body-min-width: map-get($grid-breakpoints, "lg") !default; |
@ -0,0 +1 @@ |
|||||||
|
@import "neutral-variables"; |
@ -0,0 +1,4 @@ |
|||||||
|
$('#sidebarCollapse').on('click', function () { |
||||||
|
$('#sidebar').toggleClass('active') |
||||||
|
$(this).toggleClass('active') |
||||||
|
}) |
@ -1,15 +1,7 @@ |
|||||||
defmodule ExplorerWeb.AddressController do |
defmodule ExplorerWeb.AddressController do |
||||||
use ExplorerWeb, :controller |
use ExplorerWeb, :controller |
||||||
|
|
||||||
alias Explorer.Chain |
def show(conn, %{"id" => id, "locale" => locale}) do |
||||||
|
redirect(conn, to: address_transaction_path(conn, :index, locale, id)) |
||||||
def show(conn, %{"id" => string}) do |
|
||||||
with {:ok, hash} <- Chain.string_to_address_hash(string), |
|
||||||
{:ok, address} <- Chain.hash_to_address(hash) do |
|
||||||
render(conn, "show.html", address: address) |
|
||||||
else |
|
||||||
:error -> not_found(conn) |
|
||||||
{:error, :not_found} -> not_found(conn) |
|
||||||
end |
|
||||||
end |
end |
||||||
end |
end |
||||||
|
@ -0,0 +1,48 @@ |
|||||||
|
defmodule ExplorerWeb.AddressTransactionController do |
||||||
|
@moduledoc """ |
||||||
|
Display all the Transactions that terminate at this Address. |
||||||
|
""" |
||||||
|
|
||||||
|
use ExplorerWeb, :controller |
||||||
|
|
||||||
|
alias Explorer.Chain |
||||||
|
|
||||||
|
def index(conn, %{"address_id" => address_hash_string} = params) do |
||||||
|
with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), |
||||||
|
{:ok, address} <- Chain.hash_to_address(address_hash) do |
||||||
|
options = [ |
||||||
|
necessity_by_association: %{ |
||||||
|
block: :required, |
||||||
|
from_address: :optional, |
||||||
|
to_address: :optional, |
||||||
|
receipt: :required |
||||||
|
}, |
||||||
|
pagination: params |
||||||
|
] |
||||||
|
|
||||||
|
page = |
||||||
|
Chain.address_to_transactions( |
||||||
|
address, |
||||||
|
Keyword.merge(options, current_filter(params)) |
||||||
|
) |
||||||
|
|
||||||
|
render(conn, "index.html", address: address, filter: params["filter"], page: page) |
||||||
|
else |
||||||
|
:error -> |
||||||
|
not_found(conn) |
||||||
|
|
||||||
|
{:error, :not_found} -> |
||||||
|
not_found(conn) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
defp current_filter(params) do |
||||||
|
params |
||||||
|
|> Map.get("filter") |
||||||
|
|> case do |
||||||
|
"to" -> [direction: :to] |
||||||
|
"from" -> [direction: :from] |
||||||
|
_ -> [] |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -1,34 +0,0 @@ |
|||||||
defmodule ExplorerWeb.AddressTransactionFromController do |
|
||||||
@moduledoc """ |
|
||||||
Display all the Transactions that originate at this Address. |
|
||||||
""" |
|
||||||
|
|
||||||
use ExplorerWeb, :controller |
|
||||||
|
|
||||||
alias Explorer.Chain |
|
||||||
|
|
||||||
def index(conn, %{"address_id" => from_address_hash_string} = params) do |
|
||||||
with {:ok, from_address_hash} <- Chain.string_to_address_hash(from_address_hash_string), |
|
||||||
{:ok, from_address} <- Chain.hash_to_address(from_address_hash) do |
|
||||||
page = |
|
||||||
Chain.from_address_to_transactions( |
|
||||||
from_address, |
|
||||||
necessity_by_association: %{ |
|
||||||
block: :required, |
|
||||||
from_address: :optional, |
|
||||||
to_address: :optional, |
|
||||||
receipt: :required |
|
||||||
}, |
|
||||||
pagination: params |
|
||||||
) |
|
||||||
|
|
||||||
render(conn, "index.html", page: page) |
|
||||||
else |
|
||||||
:error -> |
|
||||||
not_found(conn) |
|
||||||
|
|
||||||
{:error, :not_found} -> |
|
||||||
not_found(conn) |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
@ -1,34 +0,0 @@ |
|||||||
defmodule ExplorerWeb.AddressTransactionToController do |
|
||||||
@moduledoc """ |
|
||||||
Display all the Transactions that terminate at this Address. |
|
||||||
""" |
|
||||||
|
|
||||||
use ExplorerWeb, :controller |
|
||||||
|
|
||||||
alias Explorer.Chain |
|
||||||
|
|
||||||
def index(conn, %{"address_id" => to_address_hash_string} = params) do |
|
||||||
with {:ok, to_address_hash} <- Chain.string_to_address_hash(to_address_hash_string), |
|
||||||
{:ok, to_address} <- Chain.hash_to_address(to_address_hash) do |
|
||||||
page = |
|
||||||
Chain.to_address_to_transactions( |
|
||||||
to_address, |
|
||||||
necessity_by_association: %{ |
|
||||||
block: :required, |
|
||||||
from_address: :optional, |
|
||||||
to_address: :optional, |
|
||||||
receipt: :required |
|
||||||
}, |
|
||||||
pagination: params |
|
||||||
) |
|
||||||
|
|
||||||
render(conn, "index.html", page: page) |
|
||||||
else |
|
||||||
:error -> |
|
||||||
not_found(conn) |
|
||||||
|
|
||||||
{:error, :not_found} -> |
|
||||||
not_found(conn) |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
@ -1,38 +0,0 @@ |
|||||||
<section class="container__section address"> |
|
||||||
<div class="address__header"> |
|
||||||
<h1 class="address__heading"><%= gettext "Address" %></h1> |
|
||||||
<h3 class="address__subheading"><%= @address.hash %></h3> |
|
||||||
</div> |
|
||||||
<div class="address__container"> |
|
||||||
<div class="address__tabs"> |
|
||||||
<h2 class="address__tab address__tab--active"> |
|
||||||
<%= link( |
|
||||||
gettext("Overview"), |
|
||||||
to: address_path(@conn, :show, @conn.assigns.locale, @address.hash), |
|
||||||
class: "address__link address__link--active" |
|
||||||
) %> |
|
||||||
</h2> |
|
||||||
<h2 class="address__tab"> |
|
||||||
<%= link(gettext("Transactions To"), to: address_transaction_to_path(@conn, :index, @conn.assigns.locale, @address.hash), class: "address__link") %> |
|
||||||
</h2> |
|
||||||
<h2 class="address__tab"> |
|
||||||
<%= link( |
|
||||||
gettext("Transactions From"), |
|
||||||
to: address_transaction_from_path(@conn, :index, @conn.assigns.locale, @address.hash), |
|
||||||
class: "address__link" |
|
||||||
) %> |
|
||||||
</h2> |
|
||||||
</div> |
|
||||||
<div class="address__attributes"> |
|
||||||
<dl> |
|
||||||
<div class="address__item"> |
|
||||||
<dt class="address__item-key"><%= gettext "Balance" %></dt> |
|
||||||
<dd class="address__item-value address__balance" title="<%= @address.hash %>"> |
|
||||||
<%= format_balance(@address.balance) %> <%= gettext "Ether" %> |
|
||||||
</dd> |
|
||||||
</div> |
|
||||||
</dl> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</section> |
|
||||||
|
|
@ -1,108 +0,0 @@ |
|||||||
<section class="container__section block"> |
|
||||||
<div class="address__headline"> |
|
||||||
<h1 class="address__headline-title"><%= gettext("Address %{number}", number: @conn.params["address_id"]) %></h1> |
|
||||||
<div class="address__pagination"><%= pagination_links @conn, @page, ["en", @conn.params["address_id"]], view_style: :bulma, first: true, distance: 1, previous: Phoenix.HTML.raw("‹"), next: Phoenix.HTML.raw("›"), path: &address_transaction_to_path/5 %></div> |
|
||||||
<div class="address__pagination"> |
|
||||||
<%= pagination_links( |
|
||||||
@conn, |
|
||||||
@page, |
|
||||||
["en", @conn.params["address_id"]], |
|
||||||
distance: 1, |
|
||||||
first: true, |
|
||||||
next: Phoenix.HTML.raw("›"), |
|
||||||
path: &address_transaction_to_path/5, |
|
||||||
previous: Phoenix.HTML.raw("‹"), |
|
||||||
view_style: :bulma |
|
||||||
) %> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<div class="address__container"> |
|
||||||
<div class="address__tabs"> |
|
||||||
<h2 class="address__tab"> |
|
||||||
<%= link( |
|
||||||
gettext("Overview"), |
|
||||||
class: "address__link", |
|
||||||
to: address_path(@conn, :show, @conn.assigns.locale, @conn.params["address_id"]) |
|
||||||
) %> |
|
||||||
</h2> |
|
||||||
<h2 class="address__tab"> |
|
||||||
<%= link( |
|
||||||
gettext("Transactions To"), |
|
||||||
class: "address__link", |
|
||||||
to: address_transaction_to_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
|
||||||
) %> |
|
||||||
</h2> |
|
||||||
<h2 class="address__tab address__tab--active"> |
|
||||||
<%= link( |
|
||||||
gettext("Transactions From"), |
|
||||||
class: "address__link address__link--active", |
|
||||||
to: address_transaction_from_path(@conn, :index, @conn.assigns.locale, @conn.params["address_id"]) |
|
||||||
) %> |
|
||||||
</h2> |
|
||||||
</div> |
|
||||||
<div class="transactions__container"> |
|
||||||
<table class="transactions__table"> |
|
||||||
<thead class="transactions__header"> |
|
||||||
<tr> |
|
||||||
<th class="transactions__column-header transactions__column-header--status"> |
|
||||||
<span class="transactions__column-title transactions__column-title--status"><%= gettext "Status" %></span> |
|
||||||
</th> |
|
||||||
<th class="transactions__column-header"><%= gettext "Hash" %></th> |
|
||||||
<th class="transactions__column-header transactions__column-header--optional"><%= gettext "Block" %></th> |
|
||||||
<th class="transactions__column-header"><%= gettext "Age" %></th> |
|
||||||
<th class="transactions__column-header transactions__column-header--optional"><%= gettext "From" %></th> |
|
||||||
<th class="transactions__column-header transactions__column-header--optional"><%= gettext "To" %></th> |
|
||||||
<th class="transactions__column-header"><%= gettext "Value" %></th> |
|
||||||
</tr> |
|
||||||
</thead> |
|
||||||
<tbody> |
|
||||||
<%= for transaction <- @page.entries do %> |
|
||||||
<tr class="transactions__row"> |
|
||||||
<td class="transactions__column transactions__column--status"> |
|
||||||
<div class="transactions__dot transactions__dot--<%= status(transaction) %>"></div> |
|
||||||
</td> |
|
||||||
<td class="transactions__column transactions__column--hash"> |
|
||||||
<div class="transactions__hash"> |
|
||||||
<%= link( |
|
||||||
hash(transaction), |
|
||||||
class: "transactions__link transactions__link--truncated transactions__link--long-hash", |
|
||||||
to: transaction_path(@conn, :show, @conn.assigns.locale, transaction) |
|
||||||
) %> |
|
||||||
</div> |
|
||||||
</td> |
|
||||||
<td class="transactions__column transactions__column--block transactions__column--optional"> |
|
||||||
<%= link( |
|
||||||
block(transaction), |
|
||||||
class: "transactions__link", |
|
||||||
to: block_path(@conn, :show, @conn.assigns.locale, transaction.block) |
|
||||||
) %> |
|
||||||
</td> |
|
||||||
<td class="transactions__column transactions__column--age"> |
|
||||||
<%= transaction.block.timestamp |> Timex.from_now %> |
|
||||||
</td> |
|
||||||
<td class="transactions__column transactions__column--from transactions__column--optional"> |
|
||||||
<div class="transactions__hash"> |
|
||||||
<%= link( |
|
||||||
from_address(transaction), |
|
||||||
class: "transactions__link transactions__link--truncated transactions__link--hash", |
|
||||||
to: address_path(@conn, :show, @conn.assigns.locale, transaction.from_address) |
|
||||||
) %> |
|
||||||
</div> |
|
||||||
</td> |
|
||||||
<td class="transactions__column transactions__column--to transactions__column--optional"> |
|
||||||
<div class="transactions__hash"> |
|
||||||
<%= link( |
|
||||||
to_address(transaction), |
|
||||||
class: "transactions__link transactions__link--truncated transactions__link--hash", |
|
||||||
to: address_path(@conn, :show, @conn.assigns.locale, transaction.to_address) |
|
||||||
) %> |
|
||||||
</div> |
|
||||||
</td> |
|
||||||
<td class="transactions__column transactions__column--value"><%= value(transaction) %> <%= gettext "Ether" %></td> |
|
||||||
</tr> |
|
||||||
<% end %> |
|
||||||
</tbody> |
|
||||||
</table> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</section> |
|
@ -1,99 +0,0 @@ |
|||||||
<section class="container__section block"> |
|
||||||
<div class="block__header"> |
|
||||||
<h1 class="block__heading"><%= gettext "Block #%{number} Details", number: @block.number %></h1> |
|
||||||
</div> |
|
||||||
<div class="block__container"> |
|
||||||
<div class="block__tabs"> |
|
||||||
<h2 class="block__tab block__tab--active"> |
|
||||||
<%= link( |
|
||||||
gettext("Overview"), |
|
||||||
class: "block__link block__link--active", |
|
||||||
to: block_path(@conn, :show, @conn.assigns.locale, @block.number) |
|
||||||
) %> |
|
||||||
</h2> |
|
||||||
<h2 class="block__tab"> |
|
||||||
<%= link( |
|
||||||
gettext("Transactions"), |
|
||||||
class: "block__link", |
|
||||||
to: block_transaction_path(@conn, :index, @conn.assigns.locale, @block.number) |
|
||||||
) %> |
|
||||||
</h2> |
|
||||||
</div> |
|
||||||
<div class="block__attributes"> |
|
||||||
<div class="block__column"> |
|
||||||
<dl> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Number" %></dt> |
|
||||||
<dd class="block__item-value"><%= @block.number %></dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Timestamp" %></dt> |
|
||||||
<dd class="block__item-value"><%= age(@block) %> (<%= formatted_timestamp(@block) %>)</dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Transactions" %></dt> |
|
||||||
<dd class="block__item-value"> |
|
||||||
<%= gettext "%{count} transactions in this block", count: @block_transaction_count %> |
|
||||||
</dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Hash" %></dt> |
|
||||||
<% hash = hash(@block) %> |
|
||||||
<dd class="block__item-value" title="<%= hash %>"><%= hash %></dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Parent Hash" %></dt> |
|
||||||
<% parent_hash = parent_hash(@block) %> |
|
||||||
<dd class="block__item-value" title="<%= parent_hash %>"> |
|
||||||
<%= link( |
|
||||||
parent_hash, |
|
||||||
class: "block__link", |
|
||||||
to: block_path(@conn, :show, @conn.assigns.locale, @block.number - 1) |
|
||||||
) %> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Miner" %></dt> |
|
||||||
<% miner_hash = miner_hash(@block) %> |
|
||||||
<dd class="block__item-value" title="<%= miner_hash %>"><%= miner_hash %></dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Difficulty" %></dt> |
|
||||||
<dd class="block__item-value" title="<%= @block.difficulty %>"> |
|
||||||
<%= @block.difficulty |> Cldr.Number.to_string! %> |
|
||||||
</dd> |
|
||||||
</div> |
|
||||||
</dl> |
|
||||||
</div> |
|
||||||
<div class="block__column"> |
|
||||||
<dl> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Total Difficulty" %></dt> |
|
||||||
<dd class="block__item-value" title="<%= @block.total_difficulty %>"> |
|
||||||
<%= @block.total_difficulty |> Cldr.Number.to_string! %> |
|
||||||
</dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Size" %></dt> |
|
||||||
<dd class="block__item-value"><%= Cldr.Unit.new(:byte, @block.size) |> Cldr.Unit.to_string! %></dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Gas Used" %></dt> |
|
||||||
<dd class="block__item-value"> |
|
||||||
<%= @block.gas_used |
|
||||||
|> Cldr.Number.to_string! %> (<%= (@block.gas_used / @block.gas_limit) |
|
||||||
|> Cldr.Number.to_string!(format: "#.#%") %>) |
|
||||||
</dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Gas Limit" %></dt> |
|
||||||
<dd class="block__item-value"><%= @block.gas_limit |> Cldr.Number.to_string! %></dd> |
|
||||||
</div> |
|
||||||
<div class="block__item"> |
|
||||||
<dt class="block__item-key"><%= gettext "Nonce" %></dt> |
|
||||||
<dd class="block__item-value"><%= @block.nonce %></dd> |
|
||||||
</div> |
|
||||||
</dl> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</section> |
|
@ -1,32 +0,0 @@ |
|||||||
<header class="header"> |
|
||||||
<table class="header__container" cellspacing="0" cellpadding="0" border="0"> |
|
||||||
<tr class="header__row"> |
|
||||||
<td class="header__cell header__cell--logo"> |
|
||||||
<a href="<%= chain_path(@conn, :show) %>" class="header__logo-link"> |
|
||||||
<%= logo_image(@conn, alt: gettext("POA Network Explorer"), class: "header__logo") %> |
|
||||||
</a> |
|
||||||
</td> |
|
||||||
<td class="header__cell header__cell--search"> |
|
||||||
<%= form_for( |
|
||||||
@conn, |
|
||||||
chain_path(@conn, :search, Gettext.get_locale), |
|
||||||
[class: "header__cell--search-form", method: :get, enforce_utf8: false], |
|
||||||
fn f -> %> |
|
||||||
<%= img_tag :svg, src: static_path(@conn, "/images/mgi.svg"), class: "header__cell--search-glass" %> |
|
||||||
<%= search_input( |
|
||||||
f, |
|
||||||
:q, |
|
||||||
class: 'header__cell--search-input', |
|
||||||
placeholder: gettext("Search by address, transaction hash, or block number") |
|
||||||
) %> |
|
||||||
<% end) %> |
|
||||||
</td> |
|
||||||
<td class="header__cell header__cell--links" align="right"> |
|
||||||
<a href="<%= block_path(@conn, :index, Gettext.get_locale) %>" class="header__link"> |
|
||||||
<img class="header__link-image" src="<%= static_path(@conn, "/images/block.svg") %>" /> |
|
||||||
<div class="header__link-name header__link-name--blocks"><%= gettext("Blocks") %></div> |
|
||||||
</a> |
|
||||||
</td> |
|
||||||
</tr> |
|
||||||
</table> |
|
||||||
</header> |
|
@ -1,12 +0,0 @@ |
|||||||
defmodule ExplorerWeb.AddressTransactionFromView do |
|
||||||
use ExplorerWeb, :view |
|
||||||
|
|
||||||
alias ExplorerWeb.TransactionView |
|
||||||
|
|
||||||
defdelegate block(transaction), to: TransactionView |
|
||||||
defdelegate from_address(transaction), to: TransactionView |
|
||||||
defdelegate hash(transaction), to: TransactionView |
|
||||||
defdelegate status(transacton), to: TransactionView |
|
||||||
defdelegate to_address(transaction), to: TransactionView |
|
||||||
defdelegate value(transaction), to: TransactionView |
|
||||||
end |
|
@ -1,11 +1,22 @@ |
|||||||
defmodule ExplorerWeb.AddressTransactionToView do |
defmodule ExplorerWeb.AddressTransactionView do |
||||||
use ExplorerWeb, :view |
use ExplorerWeb, :view |
||||||
|
|
||||||
alias ExplorerWeb.TransactionView |
alias ExplorerWeb.{AddressView, TransactionView} |
||||||
|
|
||||||
|
defdelegate balance(address), to: AddressView |
||||||
defdelegate block(transaction), to: TransactionView |
defdelegate block(transaction), to: TransactionView |
||||||
|
defdelegate fee(transaction), to: TransactionView |
||||||
defdelegate from_address(transaction), to: TransactionView |
defdelegate from_address(transaction), to: TransactionView |
||||||
defdelegate hash(transaction), to: TransactionView |
defdelegate hash(transaction), to: TransactionView |
||||||
|
|
||||||
|
def format_current_filter(filter) do |
||||||
|
case filter do |
||||||
|
"to" -> gettext("To") |
||||||
|
"from" -> gettext("From") |
||||||
|
_ -> gettext("All") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
defdelegate status(transacton), to: TransactionView |
defdelegate status(transacton), to: TransactionView |
||||||
defdelegate to_address(transaction), to: TransactionView |
defdelegate to_address(transaction), to: TransactionView |
||||||
defdelegate value(transaction), to: TransactionView |
defdelegate value(transaction), to: TransactionView |
@ -1,13 +1,16 @@ |
|||||||
defmodule ExplorerWeb.AddressView do |
defmodule ExplorerWeb.AddressView do |
||||||
use ExplorerWeb, :view |
use ExplorerWeb, :view |
||||||
@dialyzer :no_match |
|
||||||
|
|
||||||
def format_balance(nil), do: "0" |
alias Explorer.Chain |
||||||
|
|
||||||
|
@dialyzer :no_match |
||||||
|
|
||||||
def format_balance(balance) do |
def balance(address) do |
||||||
balance |
address |
||||||
|> Decimal.new() |
|> Chain.balance(:ether) |
||||||
|> Decimal.div(Decimal.new(1_000_000_000_000_000_000)) |
|> case do |
||||||
|> Decimal.to_string(:normal) |
nil -> "" |
||||||
|
ether -> Cldr.Number.to_string!(ether, fractional_digits: 18) |
||||||
|
end |
||||||
end |
end |
||||||
end |
end |
||||||
|
@ -1,9 +1,3 @@ |
|||||||
defmodule ExplorerWeb.LayoutView do |
defmodule ExplorerWeb.LayoutView do |
||||||
use ExplorerWeb, :view |
use ExplorerWeb, :view |
||||||
|
|
||||||
def logo_image(conn, alt: alt, class: class) do |
|
||||||
conn |
|
||||||
|> static_path("/images/logo.svg") |
|
||||||
|> img_tag(class: class, alt: alt) |
|
||||||
end |
|
||||||
end |
end |
||||||
|
@ -1,79 +0,0 @@ |
|||||||
defmodule ExplorerWeb.AddressTransactionFromControllerTest do |
|
||||||
use ExplorerWeb.ConnCase |
|
||||||
|
|
||||||
import ExplorerWeb.Router.Helpers, only: [address_transaction_from_path: 4] |
|
||||||
|
|
||||||
describe "GET index/2" do |
|
||||||
test "without address", %{conn: conn} do |
|
||||||
conn = get(conn, address_transaction_from_path(conn, :index, :en, "unknown")) |
|
||||||
|
|
||||||
assert html_response(conn, 404) |
|
||||||
end |
|
||||||
|
|
||||||
test "returns transactions from this address", %{conn: conn} do |
|
||||||
address = insert(:address) |
|
||||||
block = insert(:block) |
|
||||||
transaction = insert(:transaction, block_hash: block.hash, from_address_hash: address.hash, index: 0) |
|
||||||
insert(:receipt, transaction_hash: transaction.hash, transaction_index: transaction.index) |
|
||||||
|
|
||||||
conn = get(conn, address_transaction_from_path(ExplorerWeb.Endpoint, :index, :en, address.hash)) |
|
||||||
|
|
||||||
assert html = html_response(conn, 200) |
|
||||||
|
|
||||||
transaction_hash_divs = Floki.find(html, "td.transactions__column--hash div.transactions__hash a") |
|
||||||
|
|
||||||
assert length(transaction_hash_divs) == 1 |
|
||||||
|
|
||||||
assert List.first(transaction_hash_divs) |> Floki.attribute("href") == [ |
|
||||||
"/en/transactions/#{Phoenix.Param.to_param(transaction)}" |
|
||||||
] |
|
||||||
end |
|
||||||
|
|
||||||
test "does not return transactions to this address", %{conn: conn} do |
|
||||||
block = insert(:block) |
|
||||||
transaction = insert(:transaction, block_hash: block.hash, index: 0) |
|
||||||
insert(:receipt, transaction_hash: transaction.hash, transaction_index: transaction.index) |
|
||||||
address = insert(:address) |
|
||||||
|
|
||||||
conn = get(conn, address_transaction_from_path(ExplorerWeb.Endpoint, :index, :en, address.hash)) |
|
||||||
|
|
||||||
assert html = html_response(conn, 200) |
|
||||||
assert html |> Floki.find("tbody tr") |> length == 0 |
|
||||||
end |
|
||||||
|
|
||||||
test "does not return related transactions without a receipt", %{conn: conn} do |
|
||||||
block = insert(:block) |
|
||||||
insert(:transaction, block_hash: block.hash, index: 0) |
|
||||||
address = insert(:address) |
|
||||||
|
|
||||||
conn = get(conn, address_transaction_from_path(ExplorerWeb.Endpoint, :index, :en, address.hash)) |
|
||||||
|
|
||||||
assert html = html_response(conn, 200) |
|
||||||
assert html |> Floki.find("tbody tr") |> length == 0 |
|
||||||
end |
|
||||||
|
|
||||||
test "does not return related transactions without a from address", %{conn: conn} do |
|
||||||
block = insert(:block) |
|
||||||
transaction = insert(:transaction, block_hash: block.hash, index: 0) |
|
||||||
insert(:receipt, transaction_hash: transaction.hash, transaction_index: transaction.index) |
|
||||||
address = insert(:address) |
|
||||||
|
|
||||||
conn = get(conn, address_transaction_from_path(ExplorerWeb.Endpoint, :index, :en, address.hash)) |
|
||||||
|
|
||||||
assert html = html_response(conn, 200) |
|
||||||
assert html |> Floki.find("tbody tr") |> length == 0 |
|
||||||
end |
|
||||||
|
|
||||||
test "does not return related transactions without a to address", %{conn: conn} do |
|
||||||
block = insert(:block) |
|
||||||
transaction = insert(:transaction, block_hash: block.hash, index: 0) |
|
||||||
insert(:receipt, transaction_hash: transaction.hash, transaction_index: transaction.index) |
|
||||||
address = insert(:address) |
|
||||||
|
|
||||||
conn = get(conn, address_transaction_from_path(ExplorerWeb.Endpoint, :index, :en, address.hash)) |
|
||||||
|
|
||||||
assert html = html_response(conn, 200) |
|
||||||
assert html |> Floki.find("tbody tr") |> length == 0 |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
@ -0,0 +1,67 @@ |
|||||||
|
defmodule ExplorerWeb.AddressTransactionViewTest do |
||||||
|
use Explorer.DataCase |
||||||
|
|
||||||
|
alias ExplorerWeb.AddressTransactionView |
||||||
|
|
||||||
|
describe "fee/0" do |
||||||
|
test "formats the fee for a successful transaction" do |
||||||
|
insert(:block, number: 24) |
||||||
|
time = Timex.now() |> Timex.shift(hours: -2) |
||||||
|
|
||||||
|
block = |
||||||
|
insert(:block, %{ |
||||||
|
number: 1, |
||||||
|
gas_used: 99523, |
||||||
|
timestamp: time |
||||||
|
}) |
||||||
|
|
||||||
|
to_address = insert(:address) |
||||||
|
from_address = insert(:address) |
||||||
|
|
||||||
|
transaction = |
||||||
|
insert( |
||||||
|
:transaction, |
||||||
|
block_hash: block.hash, |
||||||
|
from_address_hash: from_address.hash, |
||||||
|
gas_price: Decimal.new(1_000_000_000.0), |
||||||
|
index: 0, |
||||||
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
||||||
|
to_address_hash: to_address.hash, |
||||||
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
||||||
|
) |
||||||
|
|
||||||
|
insert( |
||||||
|
:receipt, |
||||||
|
gas_used: Decimal.new(435_334), |
||||||
|
status: :ok, |
||||||
|
transaction_hash: transaction.hash, |
||||||
|
transaction_index: transaction.index |
||||||
|
) |
||||||
|
|
||||||
|
transaction = |
||||||
|
transaction |
||||||
|
|> Repo.preload([:receipt]) |
||||||
|
|
||||||
|
assert AddressTransactionView.fee(transaction) == "0.000,435,334,000,000,000" |
||||||
|
end |
||||||
|
|
||||||
|
test "fee returns max_gas for pending transaction" do |
||||||
|
to_address = insert(:address) |
||||||
|
from_address = insert(:address) |
||||||
|
|
||||||
|
transaction = |
||||||
|
insert( |
||||||
|
:transaction, |
||||||
|
from_address_hash: from_address.hash, |
||||||
|
gas: Decimal.new(21000.0), |
||||||
|
gas_price: Decimal.new(1_000_000_000.0), |
||||||
|
inserted_at: Timex.parse!("1970-01-01T00:00:18-00:00", "{ISO:Extended}"), |
||||||
|
to_address_hash: to_address.hash, |
||||||
|
updated_at: Timex.parse!("1980-01-01T00:00:18-00:00", "{ISO:Extended}") |
||||||
|
) |
||||||
|
|> Repo.preload([:to_address, :from_address, :receipt]) |
||||||
|
|
||||||
|
assert AddressTransactionView.fee(transaction) == "<= 0.000,021,000,000,000,000" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
@ -1,49 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
|
|
||||||
set -ex |
|
||||||
|
|
||||||
[[ -z ${HEROKU_APPLICATION} ]] && HEROKU_APPLICATION=$1 |
|
||||||
|
|
||||||
[[ ! -s "$(git rev-parse --git-dir)/shallow" ]] || git fetch --unshallow origin |
|
||||||
|
|
||||||
if ! git remote | grep heroku |
|
||||||
then |
|
||||||
git remote add heroku git@heroku.com:${HEROKU_APPLICATION}.git |
|
||||||
git fetch heroku |
|
||||||
fi |
|
||||||
|
|
||||||
WORKER_COUNT=$(heroku ps | grep 'worker\.' | wc -l) |
|
||||||
SCHEDULER_COUNT=$(heroku ps | grep 'scheduler\.' | wc -l) |
|
||||||
RECEIPTS_COUNT=$(heroku ps | grep 'receipts\.' | wc -l) |
|
||||||
BLOCKS_COUNT=$(heroku ps | grep 'blocks\.' | wc -l) |
|
||||||
|
|
||||||
if ! git diff HEAD heroku/master --exit-code -- priv/repo |
|
||||||
then |
|
||||||
if heroku features --app $HEROKU_APPLICATION | grep '\[+\] preboot' |
|
||||||
then |
|
||||||
heroku features:disable preboot --app $HEROKU_APPLICATION |
|
||||||
heroku maintenance:on --app $HEROKU_APPLICATION |
|
||||||
heroku scale worker=0 scheduler=0 receipts=0 blocks=0 --app $HEROKU_APPLICATION |
|
||||||
heroku pg:killall --app $HEROKU_APPLICATION |
|
||||||
git push heroku $CIRCLE_SHA1:refs/heads/master |
|
||||||
heroku pg:backups capture --app $HEROKU_APPLICATION |
|
||||||
heroku run "POOL_SIZE=2 mix ecto.migrate" --app $HEROKU_APPLICATION |
|
||||||
heroku scale worker=${WORKER_COUNT} scheduler=${SCHEDULER_COUNT} receipts=${RECEIPTS_COUNT} blocks=${BLOCKS_COUNT} --app $HEROKU_APPLICATION |
|
||||||
heroku restart --app $HEROKU_APPLICATION |
|
||||||
heroku maintenance:off --app $HEROKU_APPLICATION |
|
||||||
heroku features:enable preboot --app $HEROKU_APPLICATION |
|
||||||
else |
|
||||||
heroku maintenance:on --app $HEROKU_APPLICATION |
|
||||||
heroku scale worker=0 scheduler=0 receipts=0 blocks=0 --app $HEROKU_APPLICATION |
|
||||||
heroku pg:killall --app $HEROKU_APPLICATION |
|
||||||
git push heroku $CIRCLE_SHA1:refs/heads/master |
|
||||||
heroku pg:backups capture --app $HEROKU_APPLICATION |
|
||||||
heroku run "POOL_SIZE=2 mix ecto.migrate" --app $HEROKU_APPLICATION |
|
||||||
heroku scale worker=${WORKER_COUNT} scheduler=${SCHEDULER_COUNT} receipts=${RECEIPTS_COUNT} blocks=${BLOCKS_COUNT} --app $HEROKU_APPLICATION |
|
||||||
heroku restart --app $HEROKU_APPLICATION |
|
||||||
heroku maintenance:off --app $HEROKU_APPLICATION |
|
||||||
fi |
|
||||||
else |
|
||||||
git push heroku $CIRCLE_SHA1:refs/heads/master |
|
||||||
heroku pg:backups capture --app $HEROKU_APPLICATION |
|
||||||
fi |
|
@ -1,12 +0,0 @@ |
|||||||
#!/usr/bin/env bash |
|
||||||
# Placeholder for pgbouncer buildpack |
|
||||||
|
|
||||||
function clean_up() { |
|
||||||
KILL $CHILD_PID |
|
||||||
exit |
|
||||||
} |
|
||||||
trap clean_up SIGHUP SIGINT SIGTERM |
|
||||||
|
|
||||||
$@ & |
|
||||||
CHILD_PID=$! |
|
||||||
wait $CHILD_PID |
|
@ -1,3 +0,0 @@ |
|||||||
erlang_version=20.3.2 |
|
||||||
elixir_version=1.6.4 |
|
||||||
always_rebuild=true |
|
@ -1,7 +0,0 @@ |
|||||||
assets_path=assets |
|
||||||
clean_cache=true |
|
||||||
node_version=9.4.0 |
|
||||||
npm_version=5.6.0 |
|
||||||
phoenix_relative_path=apps/explorer_web |
|
||||||
# phx for phoenix 1.3 support. |
|
||||||
phoenix_ex=phx |
|
Loading…
Reference in new issue