Merge pull request #228 from rockstardev/dev-currency-selection

Showing currency name next to icon
This commit is contained in:
Nicolas Dorier
2018-07-19 13:54:19 +09:00
committed by GitHub
40 changed files with 3960 additions and 30 deletions

View File

@@ -45,6 +45,7 @@ namespace BTCPayServer
public string BlockExplorerLink { get; internal set; }
public string UriScheme { get; internal set; }
public Money MinFee { get; internal set; }
public string DisplayName { get; set; }
[Obsolete("Should not be needed")]
public bool IsBTC

View File

@@ -17,12 +17,13 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Bitcoin",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://www.smartbit.com.au/tx/{0}" : "https://testnet.smartbit.com.au/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,
UriScheme = "bitcoin",
CryptoImagePath = "imlegacy/bitcoin-symbol.svg",
LightningImagePath = "imlegacy/btc-lightning.svg",
CryptoImagePath = "imlegacy/bitcoin.svg",
LightningImagePath = "imlegacy/bitcoin-lightning.svg",
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("0'") : new KeyPath("1'")
});

View File

@@ -10,6 +10,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "BGold",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://explorer.bitcoingold.org/insight/tx/{0}/" : "https://test-explorer.bitcoingold.org/insight/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,
@@ -19,7 +20,7 @@ namespace BTCPayServer
"BTG_X = BTG_BTC * BTC_X",
"BTG_BTC = bitfinex(BTG_BTC)",
},
CryptoImagePath = "imlegacy/btg-symbol.svg",
CryptoImagePath = "imlegacy/btg.svg",
LightningImagePath = "imlegacy/btg-lightning.svg",
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("156'") : new KeyPath("1'")

View File

@@ -16,6 +16,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Dogecoin",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://dogechain.info/tx/{0}" : "https://dogechain.info/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,

View File

@@ -16,6 +16,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Feathercoin",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://explorer.feathercoin.com/tx/{0}" : "https://explorer.feathercoin.com/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,

View File

@@ -15,6 +15,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Groestlcoin",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://chainz.cryptoid.info/grs/tx.dws?{0}.htm" : "https://chainz.cryptoid.info/grs-test/tx.dws?{0}.htm",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,

View File

@@ -16,12 +16,13 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Litecoin",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://live.blockcypher.com/ltc/tx/{0}/" : "http://explorer.litecointools.com/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,
UriScheme = "litecoin",
CryptoImagePath = "imlegacy/litecoin-symbol.svg",
LightningImagePath = "imlegacy/ltc-lightning.svg",
CryptoImagePath = "imlegacy/litecoin.svg",
LightningImagePath = "imlegacy/litecoin-lightning.svg",
DefaultSettings = BTCPayDefaultSettings.GetDefaultSettings(NetworkType),
CoinType = NetworkType == NetworkType.Mainnet ? new KeyPath("2'") : new KeyPath("1'")
});

View File

@@ -16,6 +16,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Monacoin",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://mona.insight.monaco-ex.org/insight/tx/{0}" : "https://testnet-mona.insight.monaco-ex.org/insight/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,

View File

@@ -16,6 +16,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Polis",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://insight.polispay.org/tx/{0}" : "https://insight.polispay.org/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,

View File

@@ -16,6 +16,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Ufo",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://chainz.cryptoid.info/ufo/tx.dws?{0}" : "https://chainz.cryptoid.info/ufo/tx.dws?{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,

View File

@@ -16,6 +16,7 @@ namespace BTCPayServer
Add(new BTCPayNetwork()
{
CryptoCode = nbxplorerNetwork.CryptoCode,
DisplayName = "Viacoin",
BlockExplorerLink = NetworkType == NetworkType.Mainnet ? "https://explorer.viacoin.org/tx/{0}" : "https://explorer.viacoin.org/tx/{0}",
NBitcoinNetwork = nbxplorerNetwork.NBitcoinNetwork,
NBXplorerNetwork = nbxplorerNetwork,

View File

@@ -189,7 +189,7 @@ namespace BTCPayServer.Controllers
_CSP.Add(new ConsentSecurityPolicy("script-src", "'unsafe-eval'")); // Needed by Vue
if(!string.IsNullOrEmpty(model.CustomCSSLink) &&
if (!string.IsNullOrEmpty(model.CustomCSSLink) &&
Uri.TryCreate(model.CustomCSSLink, UriKind.Absolute, out var uri))
{
_CSP.Clear();
@@ -248,6 +248,8 @@ namespace BTCPayServer.Controllers
{
CryptoCode = network.CryptoCode,
PaymentMethodId = paymentMethodId.ToString(),
PaymentMethodName = GetDisplayName(paymentMethodId, network),
CryptoImage = GetImage(paymentMethodId, network),
IsLightning = paymentMethodId.PaymentType == PaymentTypes.LightningLike,
ServerUrl = HttpContext.Request.GetAbsoluteRoot(),
OrderId = invoice.OrderId,
@@ -279,7 +281,6 @@ namespace BTCPayServer.Controllers
TxCount = accounting.TxRequired,
BtcPaid = accounting.Paid.ToString(),
Status = invoice.Status,
CryptoImage = "/" + GetImage(paymentMethodId, network),
NetworkFee = paymentMethodDetails.GetTxFee(),
IsMultiCurrency = invoice.GetPayments().Select(p => p.GetPaymentMethodId()).Concat(new[] { paymentMethod.GetId() }).Distinct().Count() > 1,
AllowCoinConversion = storeBlob.AllowCoinConversion,
@@ -288,10 +289,14 @@ namespace BTCPayServer.Controllers
.Select(kv => new PaymentModel.AvailableCrypto()
{
PaymentMethodId = kv.GetId().ToString(),
CryptoImage = "/" + GetImage(kv.GetId(), kv.Network),
CryptoCode = kv.GetId().CryptoCode,
PaymentMethodName = GetDisplayName(kv.GetId(), kv.Network),
IsLightning = kv.GetId().PaymentType == PaymentTypes.LightningLike,
CryptoImage = GetImage(kv.GetId(), kv.Network),
Link = Url.Action(nameof(Checkout), new { invoiceId = invoiceId, paymentMethodId = kv.GetId().ToString() })
}).Where(c => c.CryptoImage != "/")
.ToList()
.OrderByDescending(a => a.CryptoCode == "BTC").ThenBy(a => a.PaymentMethodName).ThenBy(a => a.IsLightning ? 1 : 0)
.ToList()
};
var expiration = TimeSpan.FromSeconds(model.ExpirationSeconds);
@@ -299,9 +304,17 @@ namespace BTCPayServer.Controllers
return model;
}
private string GetDisplayName(PaymentMethodId paymentMethodId, BTCPayNetwork network)
{
return paymentMethodId.PaymentType == PaymentTypes.BTCLike ?
network.DisplayName : network.DisplayName + " - Lightning";
}
private string GetImage(PaymentMethodId paymentMethodId, BTCPayNetwork network)
{
return (paymentMethodId.PaymentType == PaymentTypes.BTCLike ? Url.Content(network.CryptoImagePath) : Url.Content(network.LightningImagePath));
var res = paymentMethodId.PaymentType == PaymentTypes.BTCLike ?
Url.Content(network.CryptoImagePath) : Url.Content(network.LightningImagePath);
return "/" + res;
}
private string OrderAmountFromInvoice(string cryptoCode, ProductInformation productInformation)
@@ -338,7 +351,7 @@ namespace BTCPayServer.Controllers
provider = (NumberFormatInfo)provider.Clone();
provider.CurrencyDecimalDigits = divisibility;
}
if (currencyData.Crypto)
return price.ToString("C", provider);
else

View File

@@ -12,6 +12,9 @@ namespace BTCPayServer.Models.InvoicingModels
public string PaymentMethodId { get; set; }
public string CryptoImage { get; set; }
public string Link { get; set; }
public string PaymentMethodName { get; set; }
public bool IsLightning { get; set; }
public string CryptoCode { get; set; }
}
public string HtmlTitle { get; set; }
public string CustomCSSLink { get; set; }
@@ -30,8 +33,7 @@ namespace BTCPayServer.Models.InvoicingModels
public string Status { get; set; }
public string MerchantRefLink { get; set; }
public int MaxTimeSeconds { get; set; }
// These properties are not used in client side code
public string StoreName { get; set; }
public string ItemDesc { get; set; }
public string TimeLeft { get; set; }
@@ -45,12 +47,13 @@ namespace BTCPayServer.Models.InvoicingModels
public string StoreEmail { get; set; }
public string OrderId { get; set; }
public string CryptoImage { get; set; }
public decimal NetworkFee { get; set; }
public bool IsMultiCurrency { get; set; }
public int MaxTimeMinutes { get; internal set; }
public string PaymentType { get; internal set; }
public string PaymentMethodId { get; internal set; }
public int MaxTimeMinutes { get; set; }
public string PaymentType { get; set; }
public string PaymentMethodId { get; set; }
public string PaymentMethodName { get; set; }
public string CryptoImage { get; set; }
public bool AllowCoinConversion { get; set; }
public string PeerInfo { get; set; }

View File

@@ -42,14 +42,30 @@
</div>
</div>
<div class="single-item-order__right">
<div class="payment__currencies">
@foreach (var crypto in Model.AvailableCryptos)
{
<a href="@crypto.Link" onclick="return changeCurrency('@crypto.PaymentMethodId');">
<img style="height:32px; margin-left:5px;" alt="@crypto.PaymentMethodId" src="@crypto.CryptoImage" />
</a>
}
</div>
@if (Model.AvailableCryptos.Count > 1)
{
<div class="payment__currencies" onclick="openPaymentMethodDialog()">
<img v-bind:src="srvModel.cryptoImage" />
<span class="clickable_underline">{{srvModel.paymentMethodName}} ({{srvModel.cryptoCode}})</span>
<span v-show="srvModel.isLightning">&#9889;</span>
<span class="clickable_indicator fa fa-angle-right"></span>
</div>
<div id="vexPopupDialog">
<ul class="vexmenu">
@foreach (var crypto in Model.AvailableCryptos)
{
<li class="vexmenuitem">
<a href="@crypto.Link" onclick="return closePaymentMethodDialog('@crypto.PaymentMethodId');">
<img alt="@crypto.PaymentMethodName" src="@crypto.CryptoImage" />
@crypto.PaymentMethodName
@(crypto.IsLightning ? Html.Raw("&#9889;") : null)
<span>@crypto.CryptoCode</span>
</a>
</li>
}
</ul>
</div>
}
<div class="payment__spinner">
<partial name="Checkout-Spinner" />
</div>

View File

@@ -20,12 +20,15 @@
</script>
<bundle name="wwwroot/bundles/checkout-bundle.min.js" />
<script>vex.defaultOptions.className = 'vex-theme-btcpay'</script>
@if(Model.CustomCSSLink != null)
@if (Model.CustomCSSLink != null)
{
<link href="@Model.CustomCSSLink" rel="stylesheet" />
}
<style type="text/css">
</style>
</head>
<body style="background: #E4E4E4">
<noscript>
@@ -82,7 +85,7 @@
$('select').prettyDropdown({
classic: false,
height: 30,
height: 32,
reverse: true,
hoverIntent: 5000
});

View File

@@ -33,6 +33,7 @@
"outputFileName": "wwwroot/bundles/checkout-bundle.min.css",
"inputFiles": [
"wwwroot/vendor/font-awesome/css/font-awesome.css",
"wwwroot/vendor/vex/css/vex.css",
"wwwroot/checkout/**/*.css",
"wwwroot/vendor/jquery-prettydropdowns/prettydropdowns.css"
]
@@ -47,6 +48,7 @@
"wwwroot/vendor/i18next/i18next.js",
"wwwroot/vendor/i18next/vue-i18next.js",
"wwwroot/vendor/jquery-prettydropdowns/jquery.prettydropdowns.js",
"wwwroot/vendor/vex/js/vex.combined.min.js",
"wwwroot/checkout/**/*.js"
]
}

View File

@@ -8289,7 +8289,7 @@ strong {
.modal.page {
overflow-y: hidden;
position: relative;
z-index: 105111;
z-index: 10;
}
.content {
@@ -8420,6 +8420,7 @@ strong {
color: #565D6E;
letter-spacing: .45px;
background: #fff;
height: 40px;
}
.single-item-order {

View File

@@ -0,0 +1,67 @@
.vexmenu {
margin: 0;
list-style: none;
padding: 0;
}
.vexmenuitem {
display: block;
float: none;
line-height: inherit;
position: relative;
list-style: none;
cursor: pointer;
padding: 5px;
border-bottom: 1px solid #eee;
}
.vexmenuitem a {
display: block;
}
.vexmenuitem a span {
float: right;
color: gray;
}
.vexmenuitem a img {
height: 24px;
}
.vexmenuitem:hover {
background-color: #eee;
}
.vexmenuitem:last-child {
border-bottom: none;
}
#vexPopupDialog {
display: none;
}
.payment__currencies {
font-size: 14px;
cursor: pointer;
}
.payment__currencies img {
height: 32px;
}
.clickable_underline {
border-bottom: 1px dotted #ccc;
}
.payment__currencies:hover .clickable_underline {
border-bottom: 1px dotted black;
}
.clickable_indicator {
margin-right: -10px;
opacity: 0.3;
}
.payment__currencies:hover .clickable_indicator {
opacity: 1;
}

View File

@@ -0,0 +1,204 @@
@-webkit-keyframes vex-flyin {
0% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px);
}
100% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0);
}
}
@keyframes vex-flyin {
0% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px);
}
100% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0);
}
}
@-webkit-keyframes vex-flyout {
0% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0);
}
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px);
}
}
@keyframes vex-flyout {
0% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0);
}
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px);
}
}
@-webkit-keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent;
}
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
}
100% {
box-shadow: inset 0 0 0 300px transparent;
}
}
@keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent;
}
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25);
}
100% {
box-shadow: inset 0 0 0 300px transparent;
}
}
.vex.vex-theme-btcpay {
padding-top: 160px;
padding-bottom: 160px;
}
.vex.vex-theme-btcpay.vex-closing .vex-content {
-webkit-animation: vex-flyout .5s forwards;
animation: vex-flyout .5s forwards;
}
.vex.vex-theme-btcpay .vex-content {
-webkit-animation: vex-flyin .5s;
animation: vex-flyin .5s;
}
.vex.vex-theme-btcpay .vex-content {
border-radius: 5px;
background: #ffffff;
color: #444;
padding: 5px;
position: relative;
margin: 0 auto;
max-width: 100%;
width: 300px;
font-size: 14px;
}
.vex.vex-theme-btcpay .vex-content h1, .vex.vex-theme-btcpay .vex-content h2, .vex.vex-theme-btcpay .vex-content h3, .vex.vex-theme-btcpay .vex-content h4, .vex.vex-theme-btcpay .vex-content h5, .vex.vex-theme-btcpay .vex-content h6, .vex.vex-theme-btcpay .vex-content p, .vex.vex-theme-btcpay .vex-content ul, .vex.vex-theme-btcpay .vex-content li {
color: inherit;
}
.vex.vex-theme-btcpay .vex-close {
display: none;
}
.vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em;
}
.vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input {
margin-bottom: 1em;
}
.vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input select, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="week"] {
border-radius: 3px;
background: #fff;
width: 100%;
padding: .25em .67em;
border: 0;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em;
}
.vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #8dbdf1;
outline: none;
}
.vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-buttons {
*zoom: 1;
}
.vex.vex-theme-btcpay .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both;
}
.vex.vex-theme-btcpay .vex-dialog-button {
border-radius: 3px;
border: 0;
float: right;
margin: 0 0 0 .5em;
font-family: inherit;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .8em;
line-height: 1em;
padding: .75em 2em;
}
.vex.vex-theme-btcpay .vex-dialog-button.vex-last {
margin-left: 0;
}
.vex.vex-theme-btcpay .vex-dialog-button:focus {
-webkit-animation: vex-pulse 1.1s infinite;
animation: vex-pulse 1.1s infinite;
outline: none;
}
@media (max-width: 568px) {
.vex.vex-theme-btcpay .vex-dialog-button:focus {
-webkit-animation: none;
animation: none;
}
}
.vex.vex-theme-btcpay .vex-dialog-button.vex-dialog-button-primary {
background: #3288e6;
color: #fff;
}
.vex.vex-theme-btcpay .vex-dialog-button.vex-dialog-button-secondary {
background: #e0e0e0;
color: #777;
}
.vex-loading-spinner.vex-theme-btcpay {
box-shadow: 0 0 0 0.5em #f0f0f0, 0 0 1px 0.5em rgba(0, 0, 0, 0.3);
border-radius: 100%;
background: #f0f0f0;
border: .2em solid transparent;
border-top-color: #bbb;
top: -1.1em;
bottom: auto;
}

View File

@@ -16,6 +16,8 @@ function resetTabsSlider() {
$("#altcoins").hide();
$("#altcoins").removeClass("active");
closePaymentMethodDialog(null);
}
function onDataCallback(jsonData) {
@@ -69,7 +71,7 @@ function onDataCallback(jsonData) {
}
function changeCurrency(currency) {
if (srvModel.paymentMethodId !== currency) {
if (currency !== null && srvModel.paymentMethodId !== currency) {
$(".payment__currencies").hide();
$(".payment__spinner").show();
srvModel.paymentMethodId = currency;

View File

@@ -0,0 +1,11 @@
function openPaymentMethodDialog() {
var content = $("#vexPopupDialog").html();
vex.open({
unsafeContent: content
});
}
function closePaymentMethodDialog(currencyId) {
vex.closeAll();
return changeCurrency(currencyId);
}

View File

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 73 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,11 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="64" width="64" version="1.1"
x="0px" y="0px"
viewBox="0 0 64 64"
xml:space="preserve"
xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<g transform="translate(0.00630876,-0.00301984)">
<path fill="#f7931a" d="m63.033,39.744c-4.274,17.143-21.637,27.576-38.782,23.301-17.138-4.274-27.571-21.638-23.295-38.78,4.272-17.145,21.635-27.579,38.775-23.305,17.144,4.274,27.576,21.64,23.302,38.784z"/>
<path fill="#FFF" d="m46.103,27.444c0.637-4.258-2.605-6.547-7.038-8.074l1.438-5.768-3.511-0.875-1.4,5.616c-0.923-0.23-1.871-0.447-2.813-0.662l1.41-5.653-3.509-0.875-1.439,5.766c-0.764-0.174-1.514-0.346-2.242-0.527l0.004-0.018-4.842-1.209-0.934,3.75s2.605,0.597,2.55,0.634c1.422,0.355,1.679,1.296,1.636,2.042l-1.638,6.571c0.098,0.025,0.225,0.061,0.365,0.117-0.117-0.029-0.242-0.061-0.371-0.092l-2.296,9.205c-0.174,0.432-0.615,1.08-1.609,0.834,0.035,0.051-2.552-0.637-2.552-0.637l-1.743,4.019,4.569,1.139c0.85,0.213,1.683,0.436,2.503,0.646l-1.453,5.834,3.507,0.875,1.439-5.772c0.958,0.26,1.888,0.5,2.798,0.726l-1.434,5.745,3.511,0.875,1.453-5.823c5.987,1.133,10.489,0.676,12.384-4.739,1.527-4.36-0.076-6.875-3.226-8.515,2.294-0.529,4.022-2.038,4.483-5.155zm-8.022,11.249c-1.085,4.36-8.426,2.003-10.806,1.412l1.928-7.729c2.38,0.594,10.012,1.77,8.878,6.317zm1.086-11.312c-0.99,3.966-7.1,1.951-9.082,1.457l1.748-7.01c1.982,0.494,8.365,1.416,7.334,5.553z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 747 B

After

Width:  |  Height:  |  Size: 747 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0.847 0.876 329.254 329.256"><title>Litecoin</title><path d="M330.102 165.503c0 90.922-73.705 164.629-164.626 164.629C74.554 330.132.848 256.425.848 165.503.848 74.582 74.554.876 165.476.876c90.92 0 164.626 73.706 164.626 164.627" fill="#bebebe"/><path d="M295.15 165.505c0 71.613-58.057 129.675-129.674 129.675-71.616 0-129.677-58.062-129.677-129.675 0-71.619 58.061-129.677 129.677-129.677 71.618 0 129.674 58.057 129.674 129.677" fill="#bebebe"/><path d="M155.854 209.482l10.693-40.264 25.316-9.249 6.297-23.663-.215-.587-24.92 9.104 17.955-67.608h-50.921l-23.481 88.23-19.605 7.162-6.478 24.395 19.59-7.156-13.839 51.998h135.521l8.688-32.362h-84.601" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 747 B

View File

@@ -0,0 +1,183 @@
@-webkit-keyframes vex-slideup {
0% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 0; }
1% {
-webkit-transform: translateY(800px);
transform: translateY(800px);
opacity: 0; }
2% {
-webkit-transform: translateY(800px);
transform: translateY(800px);
opacity: 1; }
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 1; } }
@keyframes vex-slideup {
0% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 0; }
1% {
-webkit-transform: translateY(800px);
transform: translateY(800px);
opacity: 0; }
2% {
-webkit-transform: translateY(800px);
transform: translateY(800px);
opacity: 1; }
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 1; } }
@-webkit-keyframes vex-slidedown {
0% {
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
-webkit-transform: translateY(800px);
transform: translateY(800px); } }
@keyframes vex-slidedown {
0% {
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
-webkit-transform: translateY(800px);
transform: translateY(800px); } }
@-webkit-keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
@keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
.vex.vex-theme-bottom-right-corner {
top: auto;
bottom: 0;
right: 0;
overflow: visible; }
.vex.vex-theme-bottom-right-corner .vex-overlay {
display: none; }
.vex.vex-theme-bottom-right-corner.vex-closing .vex-content {
-webkit-animation: vex-slidedown .5s forwards;
animation: vex-slidedown .5s forwards; }
.vex.vex-theme-bottom-right-corner .vex-content {
-webkit-animation: vex-slideup .5s;
animation: vex-slideup .5s; }
.vex.vex-theme-bottom-right-corner .vex-content {
border-radius: 5px 0 0 0;
font-family: "Helvetica Neue", sans-serif;
background: #f0f0f0;
color: #444;
padding: 1em;
max-width: 100%;
width: 450px;
font-size: 1.1em;
line-height: 1.5em;
position: fixed;
bottom: 0;
right: 0;
left: auto; }
.vex.vex-theme-bottom-right-corner .vex-content h1, .vex.vex-theme-bottom-right-corner .vex-content h2, .vex.vex-theme-bottom-right-corner .vex-content h3, .vex.vex-theme-bottom-right-corner .vex-content h4, .vex.vex-theme-bottom-right-corner .vex-content h5, .vex.vex-theme-bottom-right-corner .vex-content h6, .vex.vex-theme-bottom-right-corner .vex-content p, .vex.vex-theme-bottom-right-corner .vex-content ul, .vex.vex-theme-bottom-right-corner .vex-content li {
color: inherit; }
.vex.vex-theme-bottom-right-corner .vex-close {
border-radius: 5px;
position: absolute;
top: 0;
right: 0;
cursor: pointer; }
.vex.vex-theme-bottom-right-corner .vex-close:before {
border-radius: 3px;
position: absolute;
content: "\00D7";
font-size: 26px;
font-weight: normal;
line-height: 31px;
height: 30px;
width: 30px;
text-align: center;
top: 3px;
right: 3px;
color: #bbb;
background: transparent; }
.vex.vex-theme-bottom-right-corner .vex-close:hover:before, .vex.vex-theme-bottom-right-corner .vex-close:active:before {
color: #777;
background: #e0e0e0; }
.vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em; }
.vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input {
margin-bottom: 1em; }
.vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input select, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="week"] {
border-radius: 3px;
background: #fff;
width: 100%;
padding: .25em .67em;
border: 0;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em; }
.vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #8dbdf1;
outline: none; }
.vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-buttons {
*zoom: 1; }
.vex.vex-theme-bottom-right-corner .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both; }
.vex.vex-theme-bottom-right-corner .vex-dialog-button {
border-radius: 3px;
border: 0;
float: right;
margin: 0 0 0 .5em;
font-family: inherit;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .8em;
line-height: 1em;
padding: .75em 2em; }
.vex.vex-theme-bottom-right-corner .vex-dialog-button.vex-last {
margin-left: 0; }
.vex.vex-theme-bottom-right-corner .vex-dialog-button:focus {
-webkit-animation: vex-pulse 1.1s infinite;
animation: vex-pulse 1.1s infinite;
outline: none; }
@media (max-width: 568px) {
.vex.vex-theme-bottom-right-corner .vex-dialog-button:focus {
-webkit-animation: none;
animation: none; } }
.vex.vex-theme-bottom-right-corner .vex-dialog-button.vex-dialog-button-primary {
background: #3288e6;
color: #fff; }
.vex.vex-theme-bottom-right-corner .vex-dialog-button.vex-dialog-button-secondary {
background: #e0e0e0;
color: #777; }
.vex-loading-spinner.vex-theme-bottom-right-corner {
box-shadow: 0 0 0 0.5em #f0f0f0, 0 0 1px 0.5em rgba(0, 0, 0, 0.3);
border-radius: 100%;
background: #f0f0f0;
border: .2em solid transparent;
border-top-color: #bbb;
top: -1.1em;
bottom: auto; }
body.vex-open {
overflow: initial; }

View File

@@ -0,0 +1,162 @@
@-webkit-keyframes vex-flyin {
0% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); }
100% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); } }
@keyframes vex-flyin {
0% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); }
100% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); } }
@-webkit-keyframes vex-flyout {
0% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); } }
@keyframes vex-flyout {
0% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); } }
@-webkit-keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
@keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
.vex.vex-theme-default {
padding-top: 160px;
padding-bottom: 160px; }
.vex.vex-theme-default.vex-closing .vex-content {
-webkit-animation: vex-flyout .5s forwards;
animation: vex-flyout .5s forwards; }
.vex.vex-theme-default .vex-content {
-webkit-animation: vex-flyin .5s;
animation: vex-flyin .5s; }
.vex.vex-theme-default .vex-content {
border-radius: 5px;
font-family: "Helvetica Neue", sans-serif;
background: #f0f0f0;
color: #444;
padding: 1em;
position: relative;
margin: 0 auto;
max-width: 100%;
width: 450px;
font-size: 1.1em;
line-height: 1.5em; }
.vex.vex-theme-default .vex-content h1, .vex.vex-theme-default .vex-content h2, .vex.vex-theme-default .vex-content h3, .vex.vex-theme-default .vex-content h4, .vex.vex-theme-default .vex-content h5, .vex.vex-theme-default .vex-content h6, .vex.vex-theme-default .vex-content p, .vex.vex-theme-default .vex-content ul, .vex.vex-theme-default .vex-content li {
color: inherit; }
.vex.vex-theme-default .vex-close {
border-radius: 5px;
position: absolute;
top: 0;
right: 0;
cursor: pointer; }
.vex.vex-theme-default .vex-close:before {
border-radius: 3px;
position: absolute;
content: "\00D7";
font-size: 26px;
font-weight: normal;
line-height: 31px;
height: 30px;
width: 30px;
text-align: center;
top: 3px;
right: 3px;
color: #bbb;
background: transparent; }
.vex.vex-theme-default .vex-close:hover:before, .vex.vex-theme-default .vex-close:active:before {
color: #777;
background: #e0e0e0; }
.vex.vex-theme-default .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em; }
.vex.vex-theme-default .vex-dialog-form .vex-dialog-input {
margin-bottom: 1em; }
.vex.vex-theme-default .vex-dialog-form .vex-dialog-input select, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="week"] {
border-radius: 3px;
background: #fff;
width: 100%;
padding: .25em .67em;
border: 0;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em; }
.vex.vex-theme-default .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-default .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #8dbdf1;
outline: none; }
.vex.vex-theme-default .vex-dialog-form .vex-dialog-buttons {
*zoom: 1; }
.vex.vex-theme-default .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both; }
.vex.vex-theme-default .vex-dialog-button {
border-radius: 3px;
border: 0;
float: right;
margin: 0 0 0 .5em;
font-family: inherit;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .8em;
line-height: 1em;
padding: .75em 2em; }
.vex.vex-theme-default .vex-dialog-button.vex-last {
margin-left: 0; }
.vex.vex-theme-default .vex-dialog-button:focus {
-webkit-animation: vex-pulse 1.1s infinite;
animation: vex-pulse 1.1s infinite;
outline: none; }
@media (max-width: 568px) {
.vex.vex-theme-default .vex-dialog-button:focus {
-webkit-animation: none;
animation: none; } }
.vex.vex-theme-default .vex-dialog-button.vex-dialog-button-primary {
background: #3288e6;
color: #fff; }
.vex.vex-theme-default .vex-dialog-button.vex-dialog-button-secondary {
background: #e0e0e0;
color: #777; }
.vex-loading-spinner.vex-theme-default {
box-shadow: 0 0 0 0.5em #f0f0f0, 0 0 1px 0.5em rgba(0, 0, 0, 0.3);
border-radius: 100%;
background: #f0f0f0;
border: .2em solid transparent;
border-top-color: #bbb;
top: -1.1em;
bottom: auto; }

View File

@@ -0,0 +1,176 @@
@-webkit-keyframes vex-flipin-horizontal {
0% {
opacity: 0;
-webkit-transform: rotateY(-90deg);
transform: rotateY(-90deg); }
100% {
opacity: 1;
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg); } }
@keyframes vex-flipin-horizontal {
0% {
opacity: 0;
-webkit-transform: rotateY(-90deg);
transform: rotateY(-90deg); }
100% {
opacity: 1;
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg); } }
@-webkit-keyframes vex-flipout-horizontal {
0% {
opacity: 1;
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg); }
100% {
opacity: 0;
-webkit-transform: rotateY(90deg);
transform: rotateY(90deg); } }
@keyframes vex-flipout-horizontal {
0% {
opacity: 1;
-webkit-transform: rotateY(0deg);
transform: rotateY(0deg); }
100% {
opacity: 0;
-webkit-transform: rotateY(90deg);
transform: rotateY(90deg); } }
.vex.vex-theme-flat-attack {
-webkit-perspective: 1300px;
perspective: 1300px;
-webkit-perspective-origin: 50% 150px;
perspective-origin: 50% 150px;
padding-top: 100px;
padding-bottom: 100px;
font-size: 1.5em; }
.vex.vex-theme-flat-attack.vex-closing .vex-content {
-webkit-animation: vex-flipout-horizontal .5s forwards;
animation: vex-flipout-horizontal .5s forwards; }
.vex.vex-theme-flat-attack .vex-content {
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
-webkit-animation: vex-flipin-horizontal .5s;
animation: vex-flipin-horizontal .5s; }
.vex.vex-theme-flat-attack .vex-content {
font-family: "Helvetica Neue", sans-serif;
font-weight: 200;
background: #fff;
color: #444;
padding: 2em 2em 3em 2em;
line-height: 1.5em;
position: relative;
margin: 0 auto;
max-width: 100%;
width: 600px; }
.vex.vex-theme-flat-attack .vex-content h1, .vex.vex-theme-flat-attack .vex-content h2, .vex.vex-theme-flat-attack .vex-content h3, .vex.vex-theme-flat-attack .vex-content h4, .vex.vex-theme-flat-attack .vex-content h5, .vex.vex-theme-flat-attack .vex-content h6, .vex.vex-theme-flat-attack .vex-content p, .vex.vex-theme-flat-attack .vex-content ul, .vex.vex-theme-flat-attack .vex-content li {
color: inherit; }
.vex.vex-theme-flat-attack .vex-close {
position: absolute;
top: 0;
right: 0;
cursor: pointer; }
.vex.vex-theme-flat-attack .vex-close:before {
font-family: "Helvetica Neue", sans-serif;
font-weight: 100;
line-height: 1px;
padding-top: .5em;
display: block;
font-size: 2em;
text-indent: 1px;
overflow: hidden;
height: 1.25em;
width: 1.25em;
text-align: center;
top: 0;
right: 0;
color: #fff;
background: #666; }
.vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em; }
.vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input {
margin-bottom: .5em; }
.vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="week"] {
border-radius: 3px;
background: #f0f0f0;
width: 100%;
padding: .25em .67em;
border: 0;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em; }
.vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #666;
outline: none; }
.vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-buttons {
*zoom: 1;
padding-top: 1em;
margin-bottom: -3em;
margin-left: -2em;
margin-right: -2em; }
.vex.vex-theme-flat-attack .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both; }
.vex.vex-theme-flat-attack .vex-dialog-button {
border-radius: 0;
border: 0;
margin: 0;
float: right;
padding: .5em 1em;
font-size: 1.13em;
text-transform: uppercase;
font-weight: 200;
letter-spacing: .1em;
line-height: 1em;
font-family: inherit; }
.vex.vex-theme-flat-attack .vex-dialog-button.vex-last {
margin-left: 0; }
.vex.vex-theme-flat-attack .vex-dialog-button:focus {
outline: none; }
.vex.vex-theme-flat-attack .vex-dialog-button.vex-dialog-button-primary {
background: #666;
color: #fff; }
.vex.vex-theme-flat-attack .vex-dialog-button.vex-dialog-button-primary:focus {
box-shadow: inset 0 3px rgba(0, 0, 0, 0.2); }
.vex.vex-theme-flat-attack .vex-dialog-button.vex-dialog-button-secondary {
background: #fff;
color: #ccc; }
.vex.vex-theme-flat-attack .vex-dialog-button.vex-dialog-button-secondary:focus {
box-shadow: inset 0 3px #aaa;
background: #eee;
color: #777; }
.vex.vex-theme-flat-attack .vex-dialog-button.vex-dialog-button-secondary:hover, .vex.vex-theme-flat-attack .vex-dialog-button.vex-dialog-button-secondary:active {
color: #777; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-close:before {
background: #ff7ea7; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #ff7ea7; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-pink .vex-dialog-form .vex-dialog-buttons .vex-dialog-button.vex-dialog-button-primary {
background: #ff7ea7; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-close:before {
background: #ce4a55; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #ce4a55; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-red .vex-dialog-form .vex-dialog-buttons .vex-dialog-button.vex-dialog-button-primary {
background: #ce4a55; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-close:before {
background: #34b989; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #34b989; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-green .vex-dialog-form .vex-dialog-buttons .vex-dialog-button.vex-dialog-button-primary {
background: #34b989; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-close:before {
background: #477FA5; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #477FA5; }
.vex.vex-theme-flat-attack.vex-theme-flat-attack-blue .vex-dialog-form .vex-dialog-buttons .vex-dialog-button.vex-dialog-button-primary {
background: #477FA5; }
.vex-loading-spinner.vex-theme-flat-attack {
height: 4em;
width: 4em; }

View File

@@ -0,0 +1,165 @@
@-webkit-keyframes vex-flyin {
0% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); }
100% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); } }
@keyframes vex-flyin {
0% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); }
100% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); } }
@-webkit-keyframes vex-flyout {
0% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); } }
@keyframes vex-flyout {
0% {
opacity: 1;
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
opacity: 0;
-webkit-transform: translateY(-40px);
transform: translateY(-40px); } }
@-webkit-keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
@keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
.vex.vex-theme-os {
padding-top: 160px;
padding-bottom: 160px; }
.vex.vex-theme-os.vex-closing .vex-content {
-webkit-animation: vex-flyout .5s forwards;
animation: vex-flyout .5s forwards; }
.vex.vex-theme-os .vex-content {
-webkit-animation: vex-flyin .5s;
animation: vex-flyin .5s; }
.vex.vex-theme-os .vex-content {
border-radius: 5px;
box-shadow: inset 0 1px #a6a6a6, 0 0 0 1px rgba(0, 0, 0, 0.08);
font-family: "Helvetica Neue", sans-serif;
border-top: 20px solid #bbb;
background: #f0f0f0;
color: #444;
padding: 1em;
position: relative;
margin: 0 auto;
max-width: 100%;
width: 450px;
font-size: 1.1em;
line-height: 1.5em; }
.vex.vex-theme-os .vex-content h1, .vex.vex-theme-os .vex-content h2, .vex.vex-theme-os .vex-content h3, .vex.vex-theme-os .vex-content h4, .vex.vex-theme-os .vex-content h5, .vex.vex-theme-os .vex-content h6, .vex.vex-theme-os .vex-content p, .vex.vex-theme-os .vex-content ul, .vex.vex-theme-os .vex-content li {
color: inherit; }
.vex.vex-theme-os .vex-close {
border-radius: 0 5px 0 0;
position: absolute;
top: 0;
right: 0;
cursor: pointer; }
.vex.vex-theme-os .vex-close:before {
border-radius: 3px;
position: absolute;
content: "\00D7";
font-size: 26px;
font-weight: normal;
line-height: 31px;
height: 30px;
width: 30px;
text-align: center;
top: 3px;
right: 3px;
color: #bbb;
background: transparent; }
.vex.vex-theme-os .vex-close:hover:before, .vex.vex-theme-os .vex-close:active:before {
color: #777;
background: #e0e0e0; }
.vex.vex-theme-os .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em; }
.vex.vex-theme-os .vex-dialog-form .vex-dialog-input {
margin-bottom: 1em; }
.vex.vex-theme-os .vex-dialog-form .vex-dialog-input select, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="week"] {
border-radius: 3px;
background: #fff;
width: 100%;
padding: .25em .67em;
border: 0;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em; }
.vex.vex-theme-os .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-os .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 1px #3288e6;
outline: none; }
.vex.vex-theme-os .vex-dialog-form .vex-dialog-buttons {
*zoom: 1; }
.vex.vex-theme-os .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both; }
.vex.vex-theme-os .vex-dialog-button {
border-radius: 3px;
border: 0;
float: right;
margin: 0 0 0 .5em;
font-family: inherit;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .8em;
line-height: 1em;
padding: .75em 2em; }
.vex.vex-theme-os .vex-dialog-button.vex-last {
margin-left: 0; }
.vex.vex-theme-os .vex-dialog-button:focus {
-webkit-animation: vex-pulse 1.1s infinite;
animation: vex-pulse 1.1s infinite;
outline: none; }
@media (max-width: 568px) {
.vex.vex-theme-os .vex-dialog-button:focus {
-webkit-animation: none;
animation: none; } }
.vex.vex-theme-os .vex-dialog-button.vex-dialog-button-primary {
background: #3288e6;
color: #fff; }
.vex.vex-theme-os .vex-dialog-button.vex-dialog-button-secondary {
background: #e0e0e0;
color: #777; }
.vex-loading-spinner.vex-theme-os {
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2), 0 0 0.5em rgba(0, 0, 0, 0.2);
border-radius: 100%;
background: rgba(255, 255, 255, 0.2);
width: 0;
height: 0;
border: 1.2em solid #bbb;
border-top-color: #f0f0f0;
border-bottom-color: #f0f0f0; }

View File

@@ -0,0 +1,107 @@
@-webkit-keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
@keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
.vex.vex-theme-plain {
padding-top: 160px;
padding-bottom: 160px; }
.vex.vex-theme-plain .vex-content {
font-family: "Helvetica Neue", sans-serif;
background: #fff;
color: #444;
padding: 1em;
position: relative;
margin: 0 auto;
max-width: 100%;
width: 450px;
font-size: 1.1em;
line-height: 1.5em; }
.vex.vex-theme-plain .vex-content h1, .vex.vex-theme-plain .vex-content h2, .vex.vex-theme-plain .vex-content h3, .vex.vex-theme-plain .vex-content h4, .vex.vex-theme-plain .vex-content h5, .vex.vex-theme-plain .vex-content h6, .vex.vex-theme-plain .vex-content p, .vex.vex-theme-plain .vex-content ul, .vex.vex-theme-plain .vex-content li {
color: inherit; }
.vex.vex-theme-plain .vex-close {
position: absolute;
top: 0;
right: 0;
cursor: pointer; }
.vex.vex-theme-plain .vex-close:before {
position: absolute;
content: "\00D7";
font-size: 26px;
font-weight: normal;
line-height: 31px;
height: 30px;
width: 30px;
text-align: center;
top: 3px;
right: 3px;
color: #bbb;
background: transparent; }
.vex.vex-theme-plain .vex-close:hover:before, .vex.vex-theme-plain .vex-close:active:before {
color: #777;
background: #e0e0e0; }
.vex.vex-theme-plain .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em; }
.vex.vex-theme-plain .vex-dialog-form .vex-dialog-input {
margin-bottom: 1em; }
.vex.vex-theme-plain .vex-dialog-form .vex-dialog-input select, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="week"] {
background: #f0f0f0;
width: 100%;
padding: .25em .67em;
border: 0;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em; }
.vex.vex-theme-plain .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-plain .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px rgba(0, 0, 0, 0.2);
outline: none; }
.vex.vex-theme-plain .vex-dialog-form .vex-dialog-buttons {
*zoom: 1; }
.vex.vex-theme-plain .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both; }
.vex.vex-theme-plain .vex-dialog-button {
border-radius: 0;
border: 0;
float: right;
margin: 0 0 0 .5em;
font-family: inherit;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .8em;
line-height: 1em;
padding: .75em 2em; }
.vex.vex-theme-plain .vex-dialog-button.vex-last {
margin-left: 0; }
.vex.vex-theme-plain .vex-dialog-button:focus {
-webkit-animation: vex-pulse 1.1s infinite;
animation: vex-pulse 1.1s infinite;
outline: none; }
@media (max-width: 568px) {
.vex.vex-theme-plain .vex-dialog-button:focus {
-webkit-animation: none;
animation: none; } }
.vex.vex-theme-plain .vex-dialog-button.vex-dialog-button-primary {
background: #3288e6;
color: #fff; }
.vex.vex-theme-plain .vex-dialog-button.vex-dialog-button-secondary {
background: #e0e0e0;
color: #777; }
.vex-loading-spinner.vex-theme-plain {
height: 2.5em;
width: 2.5em; }

View File

@@ -0,0 +1,178 @@
@-webkit-keyframes vex-dropin {
0% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 0; }
1% {
-webkit-transform: translateY(-800px);
transform: translateY(-800px);
opacity: 0; }
2% {
-webkit-transform: translateY(-800px);
transform: translateY(-800px);
opacity: 1; }
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 1; } }
@keyframes vex-dropin {
0% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 0; }
1% {
-webkit-transform: translateY(-800px);
transform: translateY(-800px);
opacity: 0; }
2% {
-webkit-transform: translateY(-800px);
transform: translateY(-800px);
opacity: 1; }
100% {
-webkit-transform: translateY(0);
transform: translateY(0);
opacity: 1; } }
@-webkit-keyframes vex-dropout {
0% {
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
-webkit-transform: translateY(-800px);
transform: translateY(-800px); } }
@keyframes vex-dropout {
0% {
-webkit-transform: translateY(0);
transform: translateY(0); }
100% {
-webkit-transform: translateY(-800px);
transform: translateY(-800px); } }
@-webkit-keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
@keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
.vex.vex-theme-top.vex-closing .vex-content {
-webkit-animation: vex-dropout .5s forwards;
animation: vex-dropout .5s forwards; }
.vex.vex-theme-top .vex-content {
-webkit-animation: vex-dropin .5s;
animation: vex-dropin .5s; }
.vex.vex-theme-top .vex-content {
border-radius: 0 0 5px 5px;
font-family: "Helvetica Neue", sans-serif;
background: #f0f0f0;
color: #444;
padding: 1em;
position: relative;
margin: 0 auto;
max-width: 100%;
width: 450px;
font-size: 1.1em;
line-height: 1.5em; }
.vex.vex-theme-top .vex-content h1, .vex.vex-theme-top .vex-content h2, .vex.vex-theme-top .vex-content h3, .vex.vex-theme-top .vex-content h4, .vex.vex-theme-top .vex-content h5, .vex.vex-theme-top .vex-content h6, .vex.vex-theme-top .vex-content p, .vex.vex-theme-top .vex-content ul, .vex.vex-theme-top .vex-content li {
color: inherit; }
.vex.vex-theme-top .vex-close {
border-radius: 5px;
position: absolute;
top: 0;
right: 0;
cursor: pointer; }
.vex.vex-theme-top .vex-close:before {
border-radius: 3px;
position: absolute;
content: "\00D7";
font-size: 26px;
font-weight: normal;
line-height: 31px;
height: 30px;
width: 30px;
text-align: center;
top: 3px;
right: 3px;
color: #bbb;
background: transparent; }
.vex.vex-theme-top .vex-close:hover:before, .vex.vex-theme-top .vex-close:active:before {
color: #777;
background: #e0e0e0; }
.vex.vex-theme-top .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em; }
.vex.vex-theme-top .vex-dialog-form .vex-dialog-input {
margin-bottom: 1em; }
.vex.vex-theme-top .vex-dialog-form .vex-dialog-input select, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="week"] {
border-radius: 3px;
background: #fff;
width: 100%;
padding: .25em .67em;
border: 0;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em; }
.vex.vex-theme-top .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-top .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
box-shadow: inset 0 0 0 2px #8dbdf1;
outline: none; }
.vex.vex-theme-top .vex-dialog-form .vex-dialog-buttons {
*zoom: 1; }
.vex.vex-theme-top .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both; }
.vex.vex-theme-top .vex-dialog-button {
border-radius: 3px;
border: 0;
float: right;
margin: 0 0 0 .5em;
font-family: inherit;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .8em;
line-height: 1em;
padding: .75em 2em; }
.vex.vex-theme-top .vex-dialog-button.vex-last {
margin-left: 0; }
.vex.vex-theme-top .vex-dialog-button:focus {
-webkit-animation: vex-pulse 1.1s infinite;
animation: vex-pulse 1.1s infinite;
outline: none; }
@media (max-width: 568px) {
.vex.vex-theme-top .vex-dialog-button:focus {
-webkit-animation: none;
animation: none; } }
.vex.vex-theme-top .vex-dialog-button.vex-dialog-button-primary {
background: #3288e6;
color: #fff; }
.vex.vex-theme-top .vex-dialog-button.vex-dialog-button-secondary {
background: #e0e0e0;
color: #777; }
.vex-loading-spinner.vex-theme-top {
box-shadow: 0 0 0 0.5em #f0f0f0, 0 0 1px 0.5em rgba(0, 0, 0, 0.3);
border-radius: 100%;
background: #f0f0f0;
border: .2em solid transparent;
border-top-color: #bbb;
top: -1.1em;
bottom: auto; }

View File

@@ -0,0 +1,110 @@
@-webkit-keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
@keyframes vex-pulse {
0% {
box-shadow: inset 0 0 0 300px transparent; }
70% {
box-shadow: inset 0 0 0 300px rgba(255, 255, 255, 0.25); }
100% {
box-shadow: inset 0 0 0 300px transparent; } }
.vex.vex-theme-wireframe {
padding-top: 160px;
padding-bottom: 160px; }
.vex.vex-theme-wireframe .vex-overlay {
background: rgba(255, 255, 255, 0.4); }
.vex.vex-theme-wireframe .vex-content {
font-family: "Helvetica Neue", sans-serif;
background: #fff;
color: #000;
border: 2px solid #000;
padding: 2em;
position: relative;
margin: 0 auto;
max-width: 100%;
width: 400px;
font-size: 1.1em;
line-height: 1.5em; }
.vex.vex-theme-wireframe .vex-content h1, .vex.vex-theme-wireframe .vex-content h2, .vex.vex-theme-wireframe .vex-content h3, .vex.vex-theme-wireframe .vex-content h4, .vex.vex-theme-wireframe .vex-content h5, .vex.vex-theme-wireframe .vex-content h6, .vex.vex-theme-wireframe .vex-content p, .vex.vex-theme-wireframe .vex-content ul, .vex.vex-theme-wireframe .vex-content li {
color: inherit; }
.vex.vex-theme-wireframe .vex-close {
position: absolute;
top: 0;
right: 0;
cursor: pointer; }
.vex.vex-theme-wireframe .vex-close:before {
position: absolute;
content: "\00D7";
font-size: 40px;
font-weight: normal;
line-height: 80px;
height: 80px;
width: 80px;
text-align: center;
top: 3px;
right: 3px;
color: #000; }
.vex.vex-theme-wireframe .vex-close:hover:before, .vex.vex-theme-wireframe .vex-close:active:before {
color: #000; }
.vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-message {
margin-bottom: .5em; }
.vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input {
margin-bottom: 1em; }
.vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input select, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input textarea, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="date"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="datetime"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="datetime-local"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="email"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="month"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="number"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="password"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="search"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="tel"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="text"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="time"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="url"], .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="week"] {
background: #fff;
width: 100%;
padding: .25em .67em;
font-family: inherit;
font-weight: inherit;
font-size: inherit;
min-height: 2.5em;
margin: 0 0 .25em;
border: 2px solid #000; }
.vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input select:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input textarea:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="date"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="datetime"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="datetime-local"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="email"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="month"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="number"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="password"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="search"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="tel"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="text"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="time"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="url"]:focus, .vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-input input[type="week"]:focus {
border-style: dashed;
outline: none; }
.vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-buttons {
*zoom: 1; }
.vex.vex-theme-wireframe .vex-dialog-form .vex-dialog-buttons:after {
content: "";
display: table;
clear: both; }
.vex.vex-theme-wireframe .vex-dialog-button {
border-radius: 0;
border: 0;
float: right;
margin: 0 0 0 .5em;
font-family: inherit;
text-transform: uppercase;
letter-spacing: .1em;
font-size: .8em;
line-height: 1em;
padding: .75em 2em; }
.vex.vex-theme-wireframe .vex-dialog-button.vex-last {
margin-left: 0; }
.vex.vex-theme-wireframe .vex-dialog-button:focus {
-webkit-animation: vex-pulse 1.1s infinite;
animation: vex-pulse 1.1s infinite;
outline: none; }
@media (max-width: 568px) {
.vex.vex-theme-wireframe .vex-dialog-button:focus {
-webkit-animation: none;
animation: none; } }
.vex.vex-theme-wireframe .vex-dialog-button.vex-dialog-button-primary {
background: #000;
color: #fff;
border: 2px solid transparent; }
.vex.vex-theme-wireframe .vex-dialog-button.vex-dialog-button-secondary {
background: #fff;
color: #000;
border: 2px solid #000; }
.vex-loading-spinner.vex-theme-wireframe {
height: 2.5em;
width: 2.5em; }

View File

@@ -0,0 +1,117 @@
@-webkit-keyframes vex-fadein {
0% {
opacity: 0; }
100% {
opacity: 1; } }
@keyframes vex-fadein {
0% {
opacity: 0; }
100% {
opacity: 1; } }
@-webkit-keyframes vex-fadeout {
0% {
opacity: 1; }
100% {
opacity: 0; } }
@keyframes vex-fadeout {
0% {
opacity: 1; }
100% {
opacity: 0; } }
@-webkit-keyframes vex-rotation {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg); } }
@keyframes vex-rotation {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg); }
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg); } }
.vex, .vex *, .vex *:before, .vex *:after {
-moz-box-sizing: border-box;
box-sizing: border-box; }
.vex {
position: fixed;
overflow: auto;
-webkit-overflow-scrolling: touch;
z-index: 1111;
top: 0;
right: 0;
bottom: 0;
left: 0; }
.vex-scrollbar-measure {
position: absolute;
top: -9999px;
width: 50px;
height: 50px;
overflow: scroll; }
.vex-overlay {
-webkit-animation: vex-fadein .5s;
animation: vex-fadein .5s;
position: fixed;
z-index: 1111;
background: rgba(0, 0, 0, 0.4);
top: 0;
right: 0;
bottom: 0;
left: 0; }
.vex-overlay.vex-closing {
-webkit-animation: vex-fadeout .5s forwards;
animation: vex-fadeout .5s forwards; }
.vex-content {
-webkit-animation: vex-fadein .5s;
animation: vex-fadein .5s;
background: #fff; }
.vex.vex-closing .vex-content {
-webkit-animation: vex-fadeout .5s forwards;
animation: vex-fadeout .5s forwards; }
.vex-close:before {
font-family: Arial, sans-serif;
content: "\00D7"; }
.vex-dialog-form {
margin: 0; }
.vex-dialog-button {
text-rendering: optimizeLegibility;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
cursor: pointer;
-webkit-tap-highlight-color: transparent; }
.vex-loading-spinner {
-webkit-animation: vex-rotation .7s linear infinite;
animation: vex-rotation .7s linear infinite;
box-shadow: 0 0 1em rgba(0, 0, 0, 0.1);
position: fixed;
z-index: 1112;
margin: auto;
top: 0;
right: 0;
bottom: 0;
left: 0;
height: 2em;
width: 2em;
background: #fff; }
body.vex-open {
overflow: hidden; }

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,754 @@
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.vex = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*
* classList.js: Cross-browser full element.classList implementation.
* 2014-07-23
*
* By Eli Grey, http://eligrey.com
* Public Domain.
* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
*/
/*global self, document, DOMException */
/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/
/* Copied from MDN:
* https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
*/
if ("document" in window.self) {
// Full polyfill for browsers with no classList support
// Including IE < Edge missing SVGElement.classList
if (!("classList" in document.createElement("_"))
|| document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg","g"))) {
(function (view) {
"use strict";
if (!('Element' in view)) return;
var
classListProp = "classList"
, protoProp = "prototype"
, elemCtrProto = view.Element[protoProp]
, objCtr = Object
, strTrim = String[protoProp].trim || function () {
return this.replace(/^\s+|\s+$/g, "");
}
, arrIndexOf = Array[protoProp].indexOf || function (item) {
var
i = 0
, len = this.length
;
for (; i < len; i++) {
if (i in this && this[i] === item) {
return i;
}
}
return -1;
}
// Vendors: please allow content code to instantiate DOMExceptions
, DOMEx = function (type, message) {
this.name = type;
this.code = DOMException[type];
this.message = message;
}
, checkTokenAndGetIndex = function (classList, token) {
if (token === "") {
throw new DOMEx(
"SYNTAX_ERR"
, "An invalid or illegal string was specified"
);
}
if (/\s/.test(token)) {
throw new DOMEx(
"INVALID_CHARACTER_ERR"
, "String contains an invalid character"
);
}
return arrIndexOf.call(classList, token);
}
, ClassList = function (elem) {
var
trimmedClasses = strTrim.call(elem.getAttribute("class") || "")
, classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
, i = 0
, len = classes.length
;
for (; i < len; i++) {
this.push(classes[i]);
}
this._updateClassName = function () {
elem.setAttribute("class", this.toString());
};
}
, classListProto = ClassList[protoProp] = []
, classListGetter = function () {
return new ClassList(this);
}
;
// Most DOMException implementations don't allow calling DOMException's toString()
// on non-DOMExceptions. Error's toString() is sufficient here.
DOMEx[protoProp] = Error[protoProp];
classListProto.item = function (i) {
return this[i] || null;
};
classListProto.contains = function (token) {
token += "";
return checkTokenAndGetIndex(this, token) !== -1;
};
classListProto.add = function () {
var
tokens = arguments
, i = 0
, l = tokens.length
, token
, updated = false
;
do {
token = tokens[i] + "";
if (checkTokenAndGetIndex(this, token) === -1) {
this.push(token);
updated = true;
}
}
while (++i < l);
if (updated) {
this._updateClassName();
}
};
classListProto.remove = function () {
var
tokens = arguments
, i = 0
, l = tokens.length
, token
, updated = false
, index
;
do {
token = tokens[i] + "";
index = checkTokenAndGetIndex(this, token);
while (index !== -1) {
this.splice(index, 1);
updated = true;
index = checkTokenAndGetIndex(this, token);
}
}
while (++i < l);
if (updated) {
this._updateClassName();
}
};
classListProto.toggle = function (token, force) {
token += "";
var
result = this.contains(token)
, method = result ?
force !== true && "remove"
:
force !== false && "add"
;
if (method) {
this[method](token);
}
if (force === true || force === false) {
return force;
} else {
return !result;
}
};
classListProto.toString = function () {
return this.join(" ");
};
if (objCtr.defineProperty) {
var classListPropDesc = {
get: classListGetter
, enumerable: true
, configurable: true
};
try {
objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
} catch (ex) { // IE 8 doesn't support enumerable:true
if (ex.number === -0x7FF5EC54) {
classListPropDesc.enumerable = false;
objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
}
}
} else if (objCtr[protoProp].__defineGetter__) {
elemCtrProto.__defineGetter__(classListProp, classListGetter);
}
}(window.self));
} else {
// There is full or partial native classList support, so just check if we need
// to normalize the add/remove and toggle APIs.
(function () {
"use strict";
var testElement = document.createElement("_");
testElement.classList.add("c1", "c2");
// Polyfill for IE 10/11 and Firefox <26, where classList.add and
// classList.remove exist but support only one argument at a time.
if (!testElement.classList.contains("c2")) {
var createMethod = function(method) {
var original = DOMTokenList.prototype[method];
DOMTokenList.prototype[method] = function(token) {
var i, len = arguments.length;
for (i = 0; i < len; i++) {
token = arguments[i];
original.call(this, token);
}
};
};
createMethod('add');
createMethod('remove');
}
testElement.classList.toggle("c3", false);
// Polyfill for IE 10 and Firefox <24, where classList.toggle does not
// support the second argument.
if (testElement.classList.contains("c3")) {
var _toggle = DOMTokenList.prototype.toggle;
DOMTokenList.prototype.toggle = function(token, force) {
if (1 in arguments && !this.contains(token) === !force) {
return force;
} else {
return _toggle.call(this, token);
}
};
}
testElement = null;
}());
}
}
},{}],2:[function(require,module,exports){
/**
* Expose `parse`.
*/
module.exports = parse;
/**
* Tests for browser support.
*/
var innerHTMLBug = false;
var bugTestDiv;
if (typeof document !== 'undefined') {
bugTestDiv = document.createElement('div');
// Setup
bugTestDiv.innerHTML = ' <link/><table></table><a href="/a">a</a><input type="checkbox"/>';
// Make sure that link elements get serialized correctly by innerHTML
// This requires a wrapper element in IE
innerHTMLBug = !bugTestDiv.getElementsByTagName('link').length;
bugTestDiv = undefined;
}
/**
* Wrap map from jquery.
*/
var map = {
legend: [1, '<fieldset>', '</fieldset>'],
tr: [2, '<table><tbody>', '</tbody></table>'],
col: [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
// for script/link/style tags to work in IE6-8, you have to wrap
// in a div with a non-whitespace character in front, ha!
_default: innerHTMLBug ? [1, 'X<div>', '</div>'] : [0, '', '']
};
map.td =
map.th = [3, '<table><tbody><tr>', '</tr></tbody></table>'];
map.option =
map.optgroup = [1, '<select multiple="multiple">', '</select>'];
map.thead =
map.tbody =
map.colgroup =
map.caption =
map.tfoot = [1, '<table>', '</table>'];
map.polyline =
map.ellipse =
map.polygon =
map.circle =
map.text =
map.line =
map.path =
map.rect =
map.g = [1, '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">','</svg>'];
/**
* Parse `html` and return a DOM Node instance, which could be a TextNode,
* HTML DOM Node of some kind (<div> for example), or a DocumentFragment
* instance, depending on the contents of the `html` string.
*
* @param {String} html - HTML string to "domify"
* @param {Document} doc - The `document` instance to create the Node for
* @return {DOMNode} the TextNode, DOM Node, or DocumentFragment instance
* @api private
*/
function parse(html, doc) {
if ('string' != typeof html) throw new TypeError('String expected');
// default to the global `document` object
if (!doc) doc = document;
// tag name
var m = /<([\w:]+)/.exec(html);
if (!m) return doc.createTextNode(html);
html = html.replace(/^\s+|\s+$/g, ''); // Remove leading/trailing whitespace
var tag = m[1];
// body support
if (tag == 'body') {
var el = doc.createElement('html');
el.innerHTML = html;
return el.removeChild(el.lastChild);
}
// wrap map
var wrap = map[tag] || map._default;
var depth = wrap[0];
var prefix = wrap[1];
var suffix = wrap[2];
var el = doc.createElement('div');
el.innerHTML = prefix + html + suffix;
while (depth--) el = el.lastChild;
// one element
if (el.firstChild == el.lastChild) {
return el.removeChild(el.firstChild);
}
// several elements
var fragment = doc.createDocumentFragment();
while (el.firstChild) {
fragment.appendChild(el.removeChild(el.firstChild));
}
return fragment;
}
},{}],3:[function(require,module,exports){
/**
* Code refactored from Mozilla Developer Network:
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
*/
'use strict';
function assign(target, firstSource) {
if (target === undefined || target === null) {
throw new TypeError('Cannot convert first argument to object');
}
var to = Object(target);
for (var i = 1; i < arguments.length; i++) {
var nextSource = arguments[i];
if (nextSource === undefined || nextSource === null) {
continue;
}
var keysArray = Object.keys(Object(nextSource));
for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
var nextKey = keysArray[nextIndex];
var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
if (desc !== undefined && desc.enumerable) {
to[nextKey] = nextSource[nextKey];
}
}
}
return to;
}
function polyfill() {
if (!Object.assign) {
Object.defineProperty(Object, 'assign', {
enumerable: false,
configurable: true,
writable: true,
value: assign
});
}
}
module.exports = {
assign: assign,
polyfill: polyfill
};
},{}],4:[function(require,module,exports){
// classList polyfill for old browsers
require('classlist-polyfill')
// Object.assign polyfill
require('es6-object-assign').polyfill()
// String to DOM function
var domify = require('domify')
// Use the DOM's HTML parsing to escape any dangerous strings
var escapeHtml = function escapeHtml (str) {
if (typeof str !== 'undefined') {
var div = document.createElement('div')
div.appendChild(document.createTextNode(str))
return div.innerHTML
} else {
return ''
}
}
// Utility function to add space-delimited class strings to a DOM element's classList
var addClasses = function addClasses (el, classStr) {
if (typeof classStr !== 'string' || classStr.length === 0) {
return
}
var classes = classStr.split(' ')
for (var i = 0; i < classes.length; i++) {
var className = classes[i]
if (className.length) {
el.classList.add(className)
}
}
}
// Detect CSS Animation End Support
// https://github.com/limonte/sweetalert2/blob/99bd539f85e15ac170f69d35001d12e092ef0054/src/utils/dom.js#L194
var animationEndEvent = (function detectAnimationEndEvent () {
var el = document.createElement('div')
var eventNames = {
'WebkitAnimation': 'webkitAnimationEnd',
'MozAnimation': 'animationend',
'OAnimation': 'oanimationend',
'msAnimation': 'MSAnimationEnd',
'animation': 'animationend'
}
for (var i in eventNames) {
if (el.style[i] !== undefined) {
return eventNames[i]
}
}
return false
})()
// vex base CSS classes
var baseClassNames = {
vex: 'vex',
content: 'vex-content',
overlay: 'vex-overlay',
close: 'vex-close',
closing: 'vex-closing',
open: 'vex-open'
}
// Private lookup table of all open vex objects, keyed by id
var vexes = {}
var globalId = 1
// Private boolean to assist the escapeButtonCloses option
var isEscapeActive = false
// vex itself is an object that exposes a simple API to open and close vex objects in various ways
var vex = {
open: function open (opts) {
// Check for usage of deprecated options, and log a warning
var warnDeprecated = function warnDeprecated (prop) {
console.warn('The "' + prop + '" property is deprecated in vex 3. Use CSS classes and the appropriate "ClassName" options, instead.')
console.warn('See http://github.hubspot.com/vex/api/advanced/#options')
}
if (opts.css) {
warnDeprecated('css')
}
if (opts.overlayCSS) {
warnDeprecated('overlayCSS')
}
if (opts.contentCSS) {
warnDeprecated('contentCSS')
}
if (opts.closeCSS) {
warnDeprecated('closeCSS')
}
// The dialog instance
var vexInstance = {}
// Set id
vexInstance.id = globalId++
// Store internally
vexes[vexInstance.id] = vexInstance
// Set state
vexInstance.isOpen = true
// Close function on the vex instance
// This is how all API functions should close individual vexes
vexInstance.close = function instanceClose () {
// Check state
if (!this.isOpen) {
return true
}
var options = this.options
// escapeButtonCloses is checked first
if (isEscapeActive && !options.escapeButtonCloses) {
return false
}
// Allow the user to validate any info or abort the close with the beforeClose callback
var shouldClose = (function shouldClose () {
// Call before close callback
if (options.beforeClose) {
return options.beforeClose.call(this)
}
// Otherwise indicate that it's ok to continue with close
return true
}.bind(this)())
// If beforeClose() fails, abort the close
if (shouldClose === false) {
return false
}
// Update state
this.isOpen = false
// Detect if the content el has any CSS animations defined
var style = window.getComputedStyle(this.contentEl)
function hasAnimationPre (prefix) {
return style.getPropertyValue(prefix + 'animation-name') !== 'none' && style.getPropertyValue(prefix + 'animation-duration') !== '0s'
}
var hasAnimation = hasAnimationPre('') || hasAnimationPre('-webkit-') || hasAnimationPre('-moz-') || hasAnimationPre('-o-')
// Define the function that will actually close the instance
var close = function close () {
if (!this.rootEl.parentNode) {
return
}
// Run once
this.rootEl.removeEventListener(animationEndEvent, close)
this.overlayEl.removeEventListener(animationEndEvent, close)
// Remove from lookup table (prevent memory leaks)
delete vexes[this.id]
// Remove the dialog from the DOM
this.rootEl.parentNode.removeChild(this.rootEl)
// Remove the overlay from the DOM
this.bodyEl.removeChild(this.overlayEl);
// Call after close callback
if (options.afterClose) {
options.afterClose.call(this)
}
// Remove styling from the body, if no more vexes are open
if (Object.keys(vexes).length === 0) {
document.body.classList.remove(baseClassNames.open)
}
}.bind(this)
// Close the vex
if (animationEndEvent && hasAnimation) {
// Setup the end event listener, to remove the el from the DOM
this.rootEl.addEventListener(animationEndEvent, close)
this.overlayEl.addEventListener(animationEndEvent, close)
// Add the closing class to the dialog, showing the close animation
this.rootEl.classList.add(baseClassNames.closing)
this.overlayEl.classList.add(baseClassNames.closing)
} else {
close()
}
return true
}
// Allow strings as content
if (typeof opts === 'string') {
opts = {
content: opts
}
}
// `content` is unsafe internally, so translate
// safe default: HTML-escape the content before passing it through
if (opts.unsafeContent && !opts.content) {
opts.content = opts.unsafeContent
} else if (opts.content) {
opts.content = escapeHtml(opts.content)
}
// Store options on instance for future reference
var options = vexInstance.options = Object.assign({}, vex.defaultOptions, opts)
// Get Body Element
var bodyEl = vexInstance.bodyEl = document.getElementsByTagName('body')[0];
// vex root
var rootEl = vexInstance.rootEl = document.createElement('div')
rootEl.classList.add(baseClassNames.vex)
addClasses(rootEl, options.className)
// Overlay
var overlayEl = vexInstance.overlayEl = document.createElement('div')
overlayEl.classList.add(baseClassNames.overlay)
addClasses(overlayEl, options.overlayClassName)
if (options.overlayClosesOnClick) {
rootEl.addEventListener('click', function overlayClickListener (e) {
if (e.target === rootEl) {
vexInstance.close()
}
})
}
bodyEl.appendChild(overlayEl)
// Content
var contentEl = vexInstance.contentEl = document.createElement('div')
contentEl.classList.add(baseClassNames.content)
addClasses(contentEl, options.contentClassName)
contentEl.appendChild(options.content instanceof window.Node ? options.content : domify(options.content))
rootEl.appendChild(contentEl)
// Close button
if (options.showCloseButton) {
var closeEl = vexInstance.closeEl = document.createElement('div')
closeEl.classList.add(baseClassNames.close)
addClasses(closeEl, options.closeClassName)
closeEl.addEventListener('click', vexInstance.close.bind(vexInstance))
contentEl.appendChild(closeEl)
}
// Add to DOM
document.querySelector(options.appendLocation).appendChild(rootEl)
// Call after open callback
if (options.afterOpen) {
options.afterOpen.call(vexInstance)
}
// Apply styling to the body
document.body.classList.add(baseClassNames.open)
// Return the created vex instance
return vexInstance
},
// A top-level vex.close function to close dialogs by reference or id
close: function close (vexOrId) {
var id
if (vexOrId.id) {
id = vexOrId.id
} else if (typeof vexOrId === 'string') {
id = vexOrId
} else {
throw new TypeError('close requires a vex object or id string')
}
if (!vexes[id]) {
return false
}
return vexes[id].close()
},
// Close the most recently created/opened vex
closeTop: function closeTop () {
var ids = Object.keys(vexes)
if (!ids.length) {
return false
}
return vexes[ids[ids.length - 1]].close()
},
// Close every vex!
closeAll: function closeAll () {
for (var id in vexes) {
this.close(id)
}
return true
},
// A getter for the internal lookup table
getAll: function getAll () {
return vexes
},
// A getter for the internal lookup table
getById: function getById (id) {
return vexes[id]
}
}
// Close top vex on escape
window.addEventListener('keyup', function vexKeyupListener (e) {
if (e.keyCode === 27) {
isEscapeActive = true
vex.closeTop()
isEscapeActive = false
}
})
// Close all vexes on history pop state (useful in single page apps)
window.addEventListener('popstate', function () {
if (vex.defaultOptions.closeAllOnPopState) {
vex.closeAll()
}
})
vex.defaultOptions = {
content: '',
showCloseButton: true,
escapeButtonCloses: true,
overlayClosesOnClick: true,
appendLocation: 'body',
className: '',
overlayClassName: '',
contentClassName: '',
closeClassName: '',
closeAllOnPopState: true
}
// TODO Loading symbols?
// Include escapeHtml function on the library object
Object.defineProperty(vex, '_escapeHtml', {
configurable: false,
enumerable: false,
writable: false,
value: escapeHtml
})
// Plugin system!
vex.registerPlugin = function registerPlugin (pluginFn, name) {
var plugin = pluginFn(vex)
var pluginName = name || plugin.name
if (vex[pluginName]) {
throw new Error('Plugin ' + name + ' is already registered.')
}
vex[pluginName] = plugin
}
module.exports = vex
},{"classlist-polyfill":1,"domify":2,"es6-object-assign":3}]},{},[4])(4)
});

File diff suppressed because one or more lines are too long