v1.1.3
added search result to history made async function parallel
This commit is contained in:
parent
e9df99692b
commit
776f05a318
19
css/main.css
19
css/main.css
@ -71,7 +71,7 @@ button {
|
||||
text-transform: uppercase;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.06em;
|
||||
background: transparent;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
padding: 0.6rem 1rem;
|
||||
color: var(--primary-color);
|
||||
@ -511,7 +511,7 @@ ul .balance:last-of-type {
|
||||
display: grid;
|
||||
-ms-grid-columns: 1fr 1fr;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-template-areas: 'token token'
'total wallet'
'contract contract';
|
||||
grid-template-areas: 'token token' 'total wallet' 'contract contract';
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
@ -614,7 +614,7 @@ ul .balance:last-of-type {
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 0.5rem 0;
|
||||
padding: 0 0 1rem 0;
|
||||
-webkit-animation: fade 0.3s;
|
||||
animation: fade 0.3s;
|
||||
}
|
||||
@ -721,7 +721,7 @@ p {
|
||||
|
||||
.status.closed {
|
||||
background: rgba(var(--foreground), 1);
|
||||
border: solid 1px rgba(var(--text), 0.1);
|
||||
border: solid 1px rgba(var(--text), 0.2);
|
||||
}
|
||||
|
||||
#transaction_page .grid-2 {
|
||||
@ -755,8 +755,6 @@ p {
|
||||
margin-right: 1rem;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
white-space: nowrap;
|
||||
border-bottom: transparent;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.tabs .tab:last-of-type {
|
||||
@ -769,8 +767,9 @@ p {
|
||||
|
||||
.tabs .line {
|
||||
position: absolute;
|
||||
height: 0.1rem;
|
||||
height: 0.1em;
|
||||
background: rgba(var(--text), 1);
|
||||
width: 1px;
|
||||
bottom: 0;
|
||||
-webkit-transition: width 0.4s, -webkit-transform 0.4s;
|
||||
transition: width 0.4s, -webkit-transform 0.4s;
|
||||
@ -958,7 +957,7 @@ p {
|
||||
grid-template-columns: min-content 1fr;
|
||||
-ms-grid-rows: auto 1fr;
|
||||
grid-template-rows: auto 1fr;
|
||||
grid-template-areas: '. info '
'. info';
|
||||
grid-template-areas: '. info ' '. info';
|
||||
}
|
||||
.transaction .contract-type {
|
||||
-ms-flex-item-align: start;
|
||||
@ -981,7 +980,7 @@ p {
|
||||
gap: 0 1.5rem;
|
||||
-ms-grid-columns: 40% 60%;
|
||||
grid-template-columns: 40% 60%;
|
||||
grid-template-areas: 'header header'
'. .';
|
||||
grid-template-areas: 'header header' '. .';
|
||||
}
|
||||
#transaction_page .grid-2 {
|
||||
-ms-grid-row: 1;
|
||||
@ -991,7 +990,7 @@ p {
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1366px) {
|
||||
@media only screen and (min-width: 1280px) {
|
||||
.margin, .page {
|
||||
margin: 0 16vw;
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -50,7 +50,7 @@ button{
|
||||
text-transform: uppercase;
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.06em;
|
||||
background: transparent;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
padding: 0.6rem 1rem;
|
||||
color: var(--primary-color);
|
||||
@ -173,6 +173,7 @@ ul{
|
||||
.card{
|
||||
padding: 2rem 1.5rem;
|
||||
border-radius: 0.5rem;
|
||||
//border: solid 1px rgba(var(--text), 0.16);
|
||||
background: rgba(var(--text), 0.06);
|
||||
margin: 1.5rem 0;
|
||||
h4{
|
||||
@ -230,6 +231,7 @@ ul{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
//text-align: center;
|
||||
h1{
|
||||
align-self: flex-start;
|
||||
margin-top: 2rem;
|
||||
@ -341,6 +343,9 @@ ul{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 1.5rem;
|
||||
//border-radius: 0.5rem;
|
||||
//background: rgba(var(--text), 0.1);
|
||||
//border: 1px solid rgba(var(--text), 0.2);
|
||||
border-left: 0.1rem solid rgba(var(--text), 0.2);
|
||||
.label{
|
||||
margin-top: auto;
|
||||
@ -399,7 +404,7 @@ ul{
|
||||
}
|
||||
}
|
||||
.page{
|
||||
padding: 0.5rem 0;
|
||||
padding: 0 0 1rem 0;
|
||||
animation: fade 0.3s;
|
||||
h3.heading{
|
||||
text-transform: capitalize;
|
||||
@ -477,7 +482,7 @@ p{
|
||||
}
|
||||
&.closed{
|
||||
background: rgba(var(--foreground), 1);
|
||||
border: solid 1px rgba(var(--text), 0.1);
|
||||
border: solid 1px rgba(var(--text), 0.2);
|
||||
}
|
||||
}
|
||||
#transaction_page{
|
||||
@ -505,8 +510,6 @@ p{
|
||||
margin-right: 1rem;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
white-space: nowrap;
|
||||
border-bottom: transparent;
|
||||
text-transform: capitalize;
|
||||
&:last-of-type{
|
||||
margin-right: 0;
|
||||
}
|
||||
@ -516,8 +519,9 @@ p{
|
||||
}
|
||||
.line{
|
||||
position: absolute;
|
||||
height: 0.1rem;
|
||||
height: 0.1em;
|
||||
background: rgba(var(--text), 1);
|
||||
width: 1px;
|
||||
bottom: 0;
|
||||
transition: transform 0.4s, width 0.4s;
|
||||
}
|
||||
@ -553,6 +557,7 @@ p{
|
||||
.transaction{
|
||||
padding: 1.5rem;
|
||||
border-radius: 0.5rem;
|
||||
//border: solid 1px rgba(var(--text), 0.1);
|
||||
background: rgba(var(--text), 0.06);
|
||||
h4{
|
||||
font-weight: 500;
|
||||
@ -677,7 +682,7 @@ p{
|
||||
}
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width: 1366px){
|
||||
@media only screen and (min-width: 1280px){
|
||||
.margin, .page{
|
||||
margin: 0 16vw;
|
||||
}
|
||||
|
||||
562
index.html
562
index.html
@ -8,12 +8,6 @@
|
||||
<link rel="stylesheet" href="css/main.css" />
|
||||
</head>
|
||||
|
||||
<!-- Set urls for token and flo Apis -->
|
||||
<script>
|
||||
window.tokenapiUrl = 'https://ranchimallflo.duckdns.org'
|
||||
window.floapiUrl = 'https://flosight.duckdns.org'
|
||||
</script>
|
||||
|
||||
<body data-theme="dark">
|
||||
<div id="loader_page" class="hide-completely">
|
||||
<svg id="loader" class="icon" viewBox="0 0 64 64">
|
||||
@ -50,6 +44,7 @@
|
||||
|
||||
</div> -->
|
||||
</main>
|
||||
|
||||
<script>
|
||||
let frag = document.createDocumentFragment();
|
||||
const create = {
|
||||
@ -99,8 +94,9 @@
|
||||
<circle cx="25.34" cy="25.34" r="24.84"/>
|
||||
<line x1="63.65" y1="63.65" x2="42.91" y2="42.91"/>
|
||||
</svg>
|
||||
<input type="search" placeholder="Search">
|
||||
<input id='main-search-text' type="search" placeholder="Search">
|
||||
</label>
|
||||
<div id="suggetions"></div>
|
||||
</div>
|
||||
<div id="highlights">
|
||||
<div class="highlight-item">
|
||||
@ -499,18 +495,31 @@
|
||||
removePage(currentPage);
|
||||
|
||||
if (pageId === "address_page") {
|
||||
let addressInfo = await getAddressInfo(field);
|
||||
/*let addressInfo = await getAddressInfo(field);
|
||||
let addressBalance = await getAddressBalance(field);
|
||||
let addressTxs = await getAddressTxs(field);
|
||||
pageContainer.append(create.addressPage(addressBalance))
|
||||
let addressTxs = await getAddressTxs(field);*/
|
||||
let [addressInfo, addressBalance, addressTxs] = await Promise.all([getAddressInfo(field), getAddressBalance(field), getAddressTxs(field)])
|
||||
console.log(addressInfo, addressBalance, addressTxs)
|
||||
pageContainer.append(create.addressPage({balance: addressBalance, address: field}))
|
||||
pageTitle.textContent = 'Address'
|
||||
loading()
|
||||
}
|
||||
|
||||
if (pageId === "token_page") {
|
||||
let tokenInfo = await getTokenInfo(field);
|
||||
//console.time('data')
|
||||
//console.timeLog('data')
|
||||
/*let tokenInfo = await getTokenInfo(field);
|
||||
let tokenBalances = await getTokenBalances(field);
|
||||
let tokenTransactions = await getTokenTransactions(field);
|
||||
let tokenTransactions = await getTokenTransactions(field);*/
|
||||
let [tokenInfo, tokenBalances, tokenTransactions] = await Promise.all([getTokenInfo(field), getTokenBalances(field), getTokenTransactions(field)])
|
||||
//console.timeEnd('data')
|
||||
|
||||
/*for(bal in tokenBalances){
|
||||
console.log(bal, tokenBalances[bal])
|
||||
}
|
||||
for(tx in tokenTransactions){
|
||||
console.log(tx, tokenTransactions[tx])
|
||||
}*/
|
||||
pageContainer.append(create.tokenPage(tokenInfo));
|
||||
pageTitle.textContent = "Token";
|
||||
loading()
|
||||
@ -551,9 +560,17 @@
|
||||
if (pageId === "homepage") {
|
||||
// banner
|
||||
pageHeader.classList.add("hide-completely");
|
||||
let data = await getBannerData();
|
||||
let [data, latestTxs, latestBlocks] = await Promise.all([getBannerData(), getLatestTxs(), getLatestBlocks()])
|
||||
pageContainer.append(create.homepage(data));
|
||||
loading()
|
||||
loading();
|
||||
|
||||
// add event listener to input dialog box
|
||||
document.getElementById("main-search-text").addEventListener("keydown", function (e) {
|
||||
if (e.key === 'Enter') { //checks whether the pressed key is "Enter"
|
||||
processNavbarSearch();
|
||||
}
|
||||
});
|
||||
|
||||
let themeToggler = document.getElementById("theme_toggle"),
|
||||
body = document.querySelector("body");
|
||||
if (localStorage.theme === "dark") {
|
||||
@ -578,20 +595,16 @@
|
||||
localStorage.setItem("theme", "light");
|
||||
}
|
||||
});
|
||||
// Latest transactions
|
||||
let latestTxs = await getLatestTxs();
|
||||
|
||||
for (let i = 0; i < latestTxs.length; i++) {
|
||||
if (latestTxs[i]["type"] == "tokentransfer") {
|
||||
frag.append(create.tokenTransferCard(latestTxs[i]));
|
||||
} else if (latestTxs[i]["type"] == "contracttransfer") {
|
||||
frag.append(create.contractTransferCard(latestTxs[i]));
|
||||
}
|
||||
}
|
||||
latestTxs.forEach(tx => {
|
||||
if (tx["type"] == "tokentransfer")
|
||||
frag.append(create.tokenTransferCard(tx))
|
||||
else if (tx["type"] == "contracttransfer")
|
||||
frag.append(create.contractTransferCard(tx));
|
||||
})
|
||||
document.getElementById("top_transaction_container").append(frag);
|
||||
|
||||
// todo - add latest blocks
|
||||
let latestBlocks = await getLatestBlocks();
|
||||
} else pageHeader.classList.remove("hide-completely");
|
||||
|
||||
if (pageId === "viewallblocks") {
|
||||
@ -633,8 +646,8 @@
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
if (e.target.closest(".token") && prevField !== e.target.textContent) {
|
||||
render("token_page", e.target.textContent);
|
||||
appState = { page: "token_page", thisField: e.target.textContent };
|
||||
render("token_page", e.target.textContent.toLowerCase());
|
||||
appState = { page: "token_page", thisField: e.target.textContent};
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
if (e.target.closest(".hash") && prevField !== e.target.textContent) {
|
||||
@ -1001,25 +1014,16 @@
|
||||
});
|
||||
}
|
||||
|
||||
function getTokenBalances(tokenName) {
|
||||
fetch(`${tokenapiUrl}/api/v1.0/getTokenBalances?token=` + tokenName)
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (responseJson) {
|
||||
//
|
||||
});
|
||||
|
||||
async function getTokenBalances(tokenName) {
|
||||
const responce = await fetch(`${tokenapiUrl}/api/v1.0/getTokenBalances?token=` + tokenName),
|
||||
messeges = await responce.json()
|
||||
return messeges.balances
|
||||
}
|
||||
|
||||
function getTokenTransactions(tokenName) {
|
||||
fetch(`${tokenapiUrl}/api/v1.0/getTokenTransactions?token=` + tokenName)
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (responseJson) {
|
||||
//
|
||||
});
|
||||
async function getTokenTransactions(tokenName) {
|
||||
const responce = await fetch(`${tokenapiUrl}/api/v1.0/getTokenTransactions?token=` + tokenName),
|
||||
transactions = await responce.json()
|
||||
return transactions.transactions
|
||||
|
||||
}
|
||||
|
||||
@ -1203,16 +1207,10 @@
|
||||
});
|
||||
}
|
||||
|
||||
function getAddressBalance(floAddress) {
|
||||
return fetch(
|
||||
`${floapiUrl}/api/addr/${floAddress}/balance`
|
||||
)
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (addressBalance) {
|
||||
return addressBalance;
|
||||
});
|
||||
async function getAddressBalance(floAddress) {
|
||||
const responce = await fetch(`${floapiUrl}/api/addr/${floAddress}/balance`),
|
||||
balance = await responce.json()
|
||||
return balance;
|
||||
}
|
||||
|
||||
function getAddressTxs(floAddress) {
|
||||
@ -1261,6 +1259,464 @@
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<!-- Set urls for token and flo Apis -->
|
||||
<script>
|
||||
window.tokenapiUrl = 'https://ranchimallflo.duckdns.org'
|
||||
window.floapiUrl = 'https://flosight.duckdns.org'
|
||||
</script>
|
||||
|
||||
<!-- Flex search content -->
|
||||
<script>
|
||||
/*
|
||||
FlexSearch v0.6.22
|
||||
Copyright 2019 Nextapps GmbH
|
||||
Author: Thomas Wilkerling
|
||||
Released under the Apache 2.0 Licence
|
||||
https://github.com/nextapps-de/flexsearch
|
||||
*/
|
||||
//FlexSearch min mode
|
||||
DEBUG = true;
|
||||
'use strict'; (function (I, R, v) { let K; (K = v.define) && K.amd ? K([], function () { return R }) : (K = v.modules) ? K[I.toLowerCase()] = R : "object" === typeof exports ? module.exports = R : v[I] = R })("FlexSearch", function ma(I) {
|
||||
function v(a, b) { const c = b ? b.id : a && a.id; this.id = c || 0 === c ? c : na++; this.init(a, b); fa(this, "index", function () { return this.a ? Object.keys(this.a.index[this.a.keys[0]].c) : Object.keys(this.c) }); fa(this, "length", function () { return this.index.length }) } function K(a, b, c, d) {
|
||||
this.u !== this.g && (this.o = this.o.concat(c), this.u++,
|
||||
d && this.o.length >= d && (this.u = this.g), this.u === this.g && (this.cache && this.l.set(b, this.o), this.F && this.F(this.o))); return this
|
||||
} function S(a) { const b = B(); for (const c in a) if (a.hasOwnProperty(c)) { const d = a[c]; b[c] = E(d) ? d.slice(0) : J(d) ? S(d) : d } return b } function W(a, b) { const c = a.length, d = O(b), e = []; for (let f = 0, g = 0; f < c; f++) { const h = a[f]; if (d && b(h) || !d && !b[h]) e[g++] = h } return e } function P(a, b, c, d, e, f, g, h, l, m) {
|
||||
c = ha(c, g ? 0 : e, h, f, b, l, m); let n; h && (h = c.page, n = c.next, c = c.result); if (g) b = this.where(g, null, e, c); else {
|
||||
b =
|
||||
c; c = this.h; e = b.length; f = Array(e); for (g = 0; g < e; g++)f[g] = c[b[g]]; b = f
|
||||
} c = b; d && (O(d) || (L = d.split(":"), 1 < L.length ? d = oa : (L = L[0], d = pa)), c.sort(d)); c = T(h, n, c); this.cache && this.l.set(a, c); return c
|
||||
} function fa(a, b, c) { Object.defineProperty(a, b, { get: c }) } function q(a) { return new RegExp(a, "g") } function Q(a, b) { for (let c = 0; c < b.length; c += 2)a = a.replace(b[c], b[c + 1]); return a } function V(a, b, c, d, e, f, g, h) {
|
||||
if (b[c]) return b[c]; e = e ? (h - (g || h / 1.5)) * f + (g || h / 1.5) * e : f; b[c] = e; e >= g && (a = a[h - (e + .5 >> 0)], a = a[c] || (a[c] = []), a[a.length] =
|
||||
d); return e
|
||||
} function ba(a, b) { if (a) { const c = Object.keys(a); for (let d = 0, e = c.length; d < e; d++) { const f = c[d], g = a[f]; if (g) for (let h = 0, l = g.length; h < l; h++)if (g[h] === b) { 1 === l ? delete a[f] : g.splice(h, 1); break } else J(g[h]) && ba(g[h], b) } } } function ca(a) { let b = "", c = ""; var d = ""; for (let e = 0; e < a.length; e++) { const f = a[e]; if (f !== c) if (e && "h" === f) { if (d = "a" === d || "e" === d || "i" === d || "o" === d || "u" === d || "y" === d, ("a" === c || "e" === c || "i" === c || "o" === c || "u" === c || "y" === c) && d || " " === c) b += f } else b += f; d = e === a.length - 1 ? "" : a[e + 1]; c = f } return b }
|
||||
function qa(a, b) { a = a.length - b.length; return 0 > a ? 1 : a ? -1 : 0 } function pa(a, b) { a = a[L]; b = b[L]; return a < b ? -1 : a > b ? 1 : 0 } function oa(a, b) { const c = L.length; for (let d = 0; d < c; d++)a = a[L[d]], b = b[L[d]]; return a < b ? -1 : a > b ? 1 : 0 } function T(a, b, c) { return a ? { page: a, next: b ? "" + b : null, result: c } : c } function ha(a, b, c, d, e, f, g) {
|
||||
let h, l = []; if (!0 === c) { c = "0"; var m = "" } else m = c && c.split(":"); const n = a.length; if (1 < n) {
|
||||
const y = B(), r = []; let w, x; var p = 0, k; let G; var u = !0; let C, D = 0, N, da, X, ea; m && (2 === m.length ? (X = m, m = !1) : m = ea = parseInt(m[0], 10));
|
||||
if (g) { for (w = B(); p < n; p++)if ("not" === e[p]) for (x = a[p], G = x.length, k = 0; k < G; k++)w["@" + x[k]] = 1; else da = p + 1; if (H(da)) return T(c, h, l); p = 0 } else N = M(e) && e; let Y; for (; p < n; p++) {
|
||||
const ra = p === (da || n) - 1; if (!N || !p) if ((k = N || e && e[p]) && "and" !== k) if ("or" === k) Y = !1; else continue; else Y = f = !0; x = a[p]; if (G = x.length) {
|
||||
if (u) if (C) { var t = C.length; for (k = 0; k < t; k++) { u = C[k]; var A = "@" + u; g && w[A] || (y[A] = 1, f || (l[D++] = u)) } C = null; u = !1 } else { C = x; continue } A = !1; for (k = 0; k < G; k++) {
|
||||
t = x[k]; var z = "@" + t; const Z = f ? y[z] || 0 : p; if (!(!Z && !d || g && w[z] || !f &&
|
||||
y[z])) if (Z === p) { if (ra) { if (!ea || --ea < D) if (l[D++] = t, b && D === b) return T(c, D + (m || 0), l) } else y[z] = p + 1; A = !0 } else d && (z = r[Z] || (r[Z] = []), z[z.length] = t)
|
||||
} if (Y && !A && !d) break
|
||||
} else if (Y && !d) return T(c, h, x)
|
||||
} if (C) if (p = C.length, g) for (k = m ? parseInt(m, 10) : 0; k < p; k++)a = C[k], w["@" + a] || (l[D++] = a); else l = C; if (d) for (D = l.length, X ? (p = parseInt(X[0], 10) + 1, k = parseInt(X[1], 10) + 1) : (p = r.length, k = 0); p--;)if (t = r[p]) { for (G = t.length; k < G; k++)if (d = t[k], !g || !w["@" + d]) if (l[D++] = d, b && D === b) return T(c, p + ":" + k, l); k = 0 }
|
||||
} else !n || e && "not" === e[0] ||
|
||||
(l = a[0], m && (m = parseInt(m[0], 10))); b && (g = l.length, m && m > g && (m = 0), m = m || 0, h = m + b, h < g ? l = l.slice(m, h) : (h = 0, m && (l = l.slice(m)))); return T(c, h, l)
|
||||
} function M(a) { return "string" === typeof a } function E(a) { return a.constructor === Array } function O(a) { return "function" === typeof a } function J(a) { return "object" === typeof a } function H(a) { return "undefined" === typeof a } function ia(a) { const b = Array(a); for (let c = 0; c < a; c++)b[c] = B(); return b } function B() { return Object.create(null) } function sa() {
|
||||
let a, b; self.onmessage = function (c) {
|
||||
if (c =
|
||||
c.data) if (c.search) { const d = b.search(c.content, c.threshold ? { limit: c.limit, threshold: c.threshold, where: c.where } : c.limit); self.postMessage({ id: a, content: c.content, limit: c.limit, result: d }) } else c.add ? b.add(c.id, c.content) : c.update ? b.update(c.id, c.content) : c.remove ? b.remove(c.id) : c.clear ? b.clear() : c.info ? (c = b.info(), c.worker = a, console.log(c)) : c.register && (a = c.id, c.options.cache = !1, c.options.async = !1, c.options.worker = !1, b = (new Function(c.register.substring(c.register.indexOf("{") + 1, c.register.lastIndexOf("}"))))(),
|
||||
b = new b(c.options))
|
||||
}
|
||||
} function ta(a, b, c, d) { a = I("flexsearch", "id" + a, sa, function (f) { (f = f.data) && f.result && d(f.id, f.content, f.result, f.limit, f.where, f.cursor, f.suggest) }, b); const e = ma.toString(); c.id = b; a.postMessage({ register: e, options: c, id: b }); return a } const F = { encode: "icase", f: "forward", split: /\W+/, cache: !1, async: !1, g: !1, D: !1, a: !1, b: 9, threshold: 0, depth: 0 }, ja = {
|
||||
memory: { encode: "extra", f: "strict", threshold: 0, b: 1 }, speed: { encode: "icase", f: "strict", threshold: 1, b: 3, depth: 2 }, match: {
|
||||
encode: "extra", f: "full", threshold: 1,
|
||||
b: 3
|
||||
}, score: { encode: "extra", f: "strict", threshold: 1, b: 9, depth: 4 }, balance: { encode: "balance", f: "strict", threshold: 0, b: 3, depth: 3 }, fast: { encode: "icase", f: "strict", threshold: 8, b: 9, depth: 1 }
|
||||
}, aa = []; let na = 0; const ka = {}, la = {}; v.create = function (a, b) { return new v(a, b) }; v.registerMatcher = function (a) { for (const b in a) a.hasOwnProperty(b) && aa.push(q(b), a[b]); return this }; v.registerEncoder = function (a, b) { U[a] = b.bind(U); return this }; v.registerLanguage = function (a, b) { ka[a] = b.filter; la[a] = b.stemmer; return this }; v.encode =
|
||||
function (a, b) { return U[a](b) }; v.prototype.init = function (a, b) {
|
||||
this.v = []; if (b) { var c = b.preset; a = b } else a || (a = F), c = a.preset; b = {}; M(a) ? (b = ja[a], a = {}) : c && (b = ja[c]); if (c = a.worker) if ("undefined" === typeof Worker) a.worker = !1, this.m = null; else { var d = parseInt(c, 10) || 4; this.C = -1; this.u = 0; this.o = []; this.F = null; this.m = Array(d); for (var e = 0; e < d; e++)this.m[e] = ta(this.id, e, a, K.bind(this)) } this.f = a.tokenize || b.f || this.f || F.f; this.split = a.split || this.split || F.split; this.D = a.rtl || this.D || F.D; this.async = "undefined" === typeof Promise ||
|
||||
H(c = a.async) ? this.async || F.async : c; this.g = H(c = a.worker) ? this.g || F.g : c; this.threshold = H(c = a.threshold) ? b.threshold || this.threshold || F.threshold : c; this.b = H(c = a.resolution) ? c = b.b || this.b || F.b : c; c <= this.threshold && (this.b = this.threshold + 1); this.depth = "strict" !== this.f || H(c = a.depth) ? b.depth || this.depth || F.depth : c; this.w = (c = H(c = a.encode) ? b.encode || F.encode : c) && U[c] && U[c].bind(U) || (O(c) ? c : this.w || !1); (c = a.matcher) && this.addMatcher(c); if (c = (b = a.lang) || a.filter) {
|
||||
M(c) && (c = ka[c]); if (E(c)) {
|
||||
d = this.w; e = B(); for (var f =
|
||||
0; f < c.length; f++) { var g = d ? d(c[f]) : c[f]; e[g] = 1 } c = e
|
||||
} this.filter = c
|
||||
} if (c = b || a.stemmer) { var h; b = M(c) ? la[c] : c; d = this.w; e = []; for (h in b) b.hasOwnProperty(h) && (f = d ? d(h) : h, e.push(q(f + "($|\\W)"), d ? d(b[h]) : b[h])); this.stemmer = h = e } this.a = e = (c = a.doc) ? S(c) : this.a || F.a; this.j = ia(this.b - (this.threshold || 0)); this.i = B(); this.c = B(); if (e) {
|
||||
this.h = B(); a.doc = null; h = e.index = {}; b = e.keys = []; d = e.field; f = e.tag; E(e.id) || (e.id = e.id.split(":")); if (f) {
|
||||
this.G = B(); g = B(); if (d) if (M(d)) g[d] = a; else if (E(d)) for (let l = 0; l < d.length; l++)g[d[l]] =
|
||||
a; else J(d) && (g = d); E(f) || (e.tag = f = [f]); for (d = 0; d < f.length; d++)this.G[f[d]] = B(); this.I = f; d = g
|
||||
} if (d) { let l; E(d) || (J(d) ? (l = d, e.field = d = Object.keys(d)) : e.field = d = [d]); for (e = 0; e < d.length; e++)f = d[e], E(f) || (l && (a = l[f]), b[e] = f, d[e] = f.split(":")), h[f] = new v(a), h[f].h = this.h }
|
||||
} this.B = !0; this.l = (this.cache = c = H(c = a.cache) ? this.cache || F.cache : c) ? new ua(c) : !1; return this
|
||||
}; v.prototype.encode = function (a) {
|
||||
a && aa.length && (a = Q(a, aa)); a && this.v.length && (a = Q(a, this.v)); a && this.w && (a = this.w(a)); a && this.stemmer && (a = Q(a, this.stemmer));
|
||||
return a
|
||||
}; v.prototype.addMatcher = function (a) { const b = this.v; for (const c in a) a.hasOwnProperty(c) && b.push(q(c), a[c]); return this }; v.prototype.add = function (a, b, c, d, e) {
|
||||
if (this.a && J(a)) return this.A("add", a, b); if (b && M(b) && (a || 0 === a)) {
|
||||
var f = "@" + a; if (this.c[f] && !d) return this.update(a, b); if (this.g) return ++this.C >= this.m.length && (this.C = 0), this.m[this.C].postMessage({ add: !0, id: a, content: b }), this.c[f] = "" + this.C, c && c(), this; if (!e) {
|
||||
if (this.async && "function" !== typeof importScripts) {
|
||||
let r = this; f = new Promise(function (w) {
|
||||
setTimeout(function () {
|
||||
r.add(a,
|
||||
b, null, d, !0); r = null; w()
|
||||
})
|
||||
}); if (c) f.then(c); else return f; return this
|
||||
} if (c) return this.add(a, b, null, d, !0), c(), this
|
||||
} b = this.encode(b); if (!b.length) return this; c = this.f; e = O(c) ? c(b) : b.split(this.split); this.filter && (e = W(e, this.filter)); const p = B(); p._ctx = B(); const k = e.length, u = this.threshold, t = this.depth, A = this.b, z = this.j, y = this.D; for (let r = 0; r < k; r++) {
|
||||
var g = e[r]; if (g) {
|
||||
var h = g.length, l = (y ? r + 1 : k - r) / k, m = ""; switch (c) {
|
||||
case "reverse": case "both": for (var n = h; --n;)m = g[n] + m, V(z, p, m, a, y ? 1 : (h - n) / h, l, u, A - 1); m = "";
|
||||
case "forward": for (n = 0; n < h; n++)m += g[n], V(z, p, m, a, y ? (n + 1) / h : 1, l, u, A - 1); break; case "full": for (n = 0; n < h; n++) { const w = (y ? n + 1 : h - n) / h; for (let x = h; x > n; x--)m = g.substring(n, x), V(z, p, m, a, w, l, u, A - 1) } break; default: if (h = V(z, p, g, a, 1, l, u, A - 1), t && 1 < k && h >= u) for (h = p._ctx[g] || (p._ctx[g] = B()), g = this.i[g] || (this.i[g] = ia(A - (u || 0))), l = r - t, m = r + t + 1, 0 > l && (l = 0), m > k && (m = k); l < m; l++)l !== r && V(g, h, e[l], a, 0, A - (l < r ? r - l : l - r), u, A - 1)
|
||||
}
|
||||
}
|
||||
} this.c[f] = 1; this.B = !1
|
||||
} return this
|
||||
}; v.prototype.A = function (a, b, c) {
|
||||
if (E(b)) for (let l = 0, m = b.length; l < m; l++) {
|
||||
if (l ===
|
||||
m - 1) return this.A(a, b[l], c); this.A(a, b[l])
|
||||
} else {
|
||||
const l = this.a.index, m = this.a.keys; var d = this.a.tag, e = this.a.id; let n; let p; for (var f = 0; f < e.length; f++)n = (n || b)[e[f]]; if (d) { for (e = 0; e < d.length; e++) { var g = d[e]; var h = g.split(":"); for (f = 0; f < h.length; f++)p = (p || b)[h[f]]; p = "@" + p } h = this.G[g]; h = h[p] || (h[p] = []) } if ("remove" === a) { delete this.h[n]; for (let k = 0, u = m.length; k < u; k++) { if (k === u - 1) return l[m[k]].remove(n, c), this; l[m[k]].remove(n) } } e = this.a.field; h && (h[h.length] = b); this.h[n] = b; for (let k = 0, u = e.length; k <
|
||||
u; k++) { d = e[k]; let t; for (g = 0; g < d.length; g++)t = (t || b)[d[g]]; d = l[m[k]]; g = "add" === a ? d.add : d.update; k === u - 1 ? g.call(d, n, t, c) : g.call(d, n, t) }
|
||||
} return this
|
||||
}; v.prototype.update = function (a, b, c) { if (this.a && J(a)) return this.A("update", a, b); this.c["@" + a] && M(b) && (this.remove(a), this.add(a, b, c, !0)); return this }; v.prototype.remove = function (a, b, c) {
|
||||
if (this.a && J(a)) return this.A("remove", a, b); var d = "@" + a; if (this.c[d]) {
|
||||
if (this.g) return this.m[this.c[d]].postMessage({ remove: !0, id: a }), delete this.c[d], b && b(), this; if (!c) {
|
||||
if (this.async &&
|
||||
"function" !== typeof importScripts) { let e = this; d = new Promise(function (f) { setTimeout(function () { e.remove(a, null, !0); e = null; f() }) }); if (b) d.then(b); else return d; return this } if (b) return this.remove(a, null, !0), b(), this
|
||||
} for (b = 0; b < this.b - (this.threshold || 0); b++)ba(this.j[b], a); this.depth && ba(this.i, a); delete this.c[d]; this.B = !1
|
||||
} return this
|
||||
}; let L; v.prototype.search = function (a, b, c, d) {
|
||||
if (J(b)) { if (E(b)) for (var e = 0; e < b.length; e++)b[e].query = a; else b.query = a; a = b; b = 1E3 } else b && O(b) ? (c = b, b = 1E3) : b || 0 === b || (b = 1E3);
|
||||
let f = [], g = a; let h, l, m; if (J(a) && !E(a)) { c || (c = a.callback) && (g.callback = null); l = a.sort; h = a.page; b = a.limit; var n = a.threshold; m = a.suggest; a = a.query } if (this.a) {
|
||||
n = this.a.index; const y = g.where; var p = g.bool || "or", k = g.field; let r = p; let w, x; if (k) E(k) || (k = [k]); else if (E(g)) { var u = g; k = []; r = []; for (var t = 0; t < g.length; t++)d = g[t], e = d.bool || p, k[t] = d.field, r[t] = e, "not" === e ? w = !0 : "and" === e && (x = !0) } else k = this.a.keys; p = k.length; for (t = 0; t < p; t++)u && (g = u[t]), h && !M(g) && (g.page = null, g.limit = 0), f[t] = n[k[t]].search(g, 0); if (this.g) {
|
||||
this.F =
|
||||
c; this.u = 0; this.o = []; for (n = 0; n < this.g; n++)this.m[n].postMessage({ search: !0, limit: b, content: g }); return
|
||||
} if (c) return c(P.call(this, a, r, f, l, b, m, y, h, x, w)); if (this.async) { const G = this; return new Promise(function (C) { Promise.all(f).then(function (D) { C(P.call(G, a, r, D, l, b, m, y, h, x, w)) }) }) } return P.call(this, a, r, f, l, b, m, y, h, x, w)
|
||||
} n || (n = this.threshold || 0); if (!d) {
|
||||
if (this.async && "function" !== typeof importScripts) {
|
||||
let y = this; n = new Promise(function (r) { setTimeout(function () { r(y.search(g, b, null, !0)); y = null }) }); if (c) n.then(c);
|
||||
else return n; return this
|
||||
} if (c) return c(this.search(g, b, null, !0)), this
|
||||
} if (!a || !M(a)) return f; g = a; if (this.cache) if (this.B) { if (c = this.l.get(a)) return c } else this.l.clear(), this.B = !0; g = this.encode(g); if (!g.length) return f; c = this.f; c = O(c) ? c(g) : g.split(this.split); this.filter && (c = W(c, this.filter)); u = c.length; d = !0; e = []; const A = B(); let z = 0; 1 < u && (this.depth && "strict" === this.f ? p = !0 : c.sort(qa)); if (!p || (t = this.i)) {
|
||||
const y = this.b; for (; z < u; z++) {
|
||||
let r = c[z]; if (r) {
|
||||
if (p) {
|
||||
if (!k) if (t[r]) k = r, A[r] = 1; else if (!m) return f;
|
||||
if (m && z === u - 1 && !e.length) p = !1, r = k || r, A[r] = 0; else if (!k) continue
|
||||
} if (!A[r]) { const w = []; let x = !1, G = 0; const C = p ? t[k] : this.j; if (C) { let D; for (let N = 0; N < y - n; N++)if (D = C[N] && C[N][r]) w[G++] = D, x = !0 } if (x) k = r, e[e.length] = 1 < G ? w.concat.apply([], w) : w[0]; else if (!m) { d = !1; break } A[r] = 1 }
|
||||
}
|
||||
}
|
||||
} else d = !1; d && (f = ha(e, b, h, m)); this.cache && this.l.set(a, f); return f
|
||||
}; v.prototype.find = function (a, b) { return this.where(a, b, 1)[0] || null }; v.prototype.where = function (a, b, c, d) {
|
||||
const e = this.h, f = []; let g = 0; let h; var l; let m; if (J(a)) {
|
||||
c || (c =
|
||||
b); var n = Object.keys(a); var p = n.length; h = !1; if (1 === p && "id" === n[0]) return [e[a.id]]; if ((l = this.I) && !d) for (var k = 0; k < l.length; k++) { var u = l[k], t = a[u]; if (!H(t)) { m = this.G[u]["@" + t]; if (0 === --p) return m; n.splice(n.indexOf(u), 1); delete a[u]; break } } l = Array(p); for (k = 0; k < p; k++)l[k] = n[k].split(":")
|
||||
} else { if (O(a)) { b = d || Object.keys(e); c = b.length; for (n = 0; n < c; n++)p = e[b[n]], a(p) && (f[g++] = p); return f } if (H(b)) return [e[a]]; if ("id" === a) return [e[b]]; n = [a]; p = 1; l = [a.split(":")]; h = !0 } d = m || d || Object.keys(e); k = d.length; for (u =
|
||||
0; u < k; u++) { t = m ? d[u] : e[d[u]]; let A = !0; for (let z = 0; z < p; z++) { h || (b = a[n[z]]); const y = l[z], r = y.length; let w = t; if (1 < r) for (let x = 0; x < r; x++)w = w[y[x]]; else w = w[y[0]]; if (w !== b) { A = !1; break } } if (A && (f[g++] = t, c && g === c)) break } return f
|
||||
}; v.prototype.info = function () {
|
||||
if (this.g) for (let a = 0; a < this.g; a++)this.m[a].postMessage({ info: !0, id: this.id }); else return {
|
||||
id: this.id, items: this.length, cache: this.cache && this.cache.s ? this.cache.s.length : !1, matcher: aa.length + (this.v ? this.v.length : 0), worker: this.g, threshold: this.threshold,
|
||||
depth: this.depth, resolution: this.b, contextual: this.depth && "strict" === this.f
|
||||
}
|
||||
}; v.prototype.clear = function () { return this.destroy().init() }; v.prototype.destroy = function () { this.cache && (this.l.clear(), this.l = null); this.j = this.i = this.c = null; if (this.a) { const a = this.a.keys; for (let b = 0; b < a.length; b++)this.a.index[a[b]].destroy(); this.a = this.h = null } return this }; v.prototype.export = function () {
|
||||
let a; if (this.a) {
|
||||
const b = this.a.keys; a = Array(b.length + 1); let c = 0; for (; c < b.length; c++) {
|
||||
const d = this.a.index[b[c]]; a[c] =
|
||||
[d.j, d.i, Object.keys(d.c)]
|
||||
} a[c] = this.h
|
||||
} else a = [this.j, this.i, Object.keys(this.c)]; return JSON.stringify(a)
|
||||
}; v.prototype.import = function (a) { a = JSON.parse(a); const b = B(); if (this.a) { var c = this.a.keys, d = c.length, e = a[0][2]; for (var f = 0; f < e.length; f++)b[e[f]] = 1; for (e = 0; e < d; e++)f = this.a.index[c[e]], f.j = a[e][0], f.i = a[e][1], f.c = b, f.h = a[d]; this.h = a[d] } else { c = a[2]; for (d = 0; d < c.length; d++)b[c[d]] = 1; this.j = a[0]; this.i = a[1]; this.c = b } }; const U = {
|
||||
icase: function (a) { return a.toLowerCase() }, simple: function () {
|
||||
const a = [q("[\u00e0\u00e1\u00e2\u00e3\u00e4\u00e5]"),
|
||||
"a", q("[\u00e8\u00e9\u00ea\u00eb]"), "e", q("[\u00ec\u00ed\u00ee\u00ef]"), "i", q("[\u00f2\u00f3\u00f4\u00f5\u00f6\u0151]"), "o", q("[\u00f9\u00fa\u00fb\u00fc\u0171]"), "u", q("[\u00fd\u0177\u00ff]"), "y", q("\u00f1"), "n", q("[\u00e7c]"), "k", q("\u00df"), "s", q(" & "), " and ", q("[-/]"), " ", q("[^a-z0-9 ]"), "", q("\\s+"), " "]; return function (b) { b = Q(b.toLowerCase(), a); return " " === b ? "" : b }
|
||||
}(), advanced: function () {
|
||||
const a = [q("ae"), "a", q("ai"), "ei", q("ay"), "ei", q("ey"), "ei", q("oe"), "o", q("ue"), "u", q("ie"), "i", q("sz"),
|
||||
"s", q("zs"), "s", q("sh"), "s", q("ck"), "k", q("cc"), "k", q("th"), "t", q("dt"), "t", q("ph"), "f", q("pf"), "f", q("ou"), "o", q("uo"), "u"]; return function (b, c) { if (!b) return b; b = this.simple(b); 2 < b.length && (b = Q(b, a)); c || 1 < b.length && (b = ca(b)); return b }
|
||||
}(), extra: function () {
|
||||
const a = [q("p"), "b", q("z"), "s", q("[cgq]"), "k", q("n"), "m", q("d"), "t", q("[vw]"), "f", q("[aeiouy]"), ""]; return function (b) {
|
||||
if (!b) return b; b = this.advanced(b, !0); if (1 < b.length) {
|
||||
b = b.split(" "); for (let c = 0; c < b.length; c++) {
|
||||
const d = b[c]; 1 < d.length && (b[c] =
|
||||
d[0] + Q(d.substring(1), a))
|
||||
} b = b.join(" "); b = ca(b)
|
||||
} return b
|
||||
}
|
||||
}(), balance: function () { const a = [q("[-/]"), " ", q("[^a-z0-9 ]"), "", q("\\s+"), " "]; return function (b) { return ca(Q(b.toLowerCase(), a)) } }()
|
||||
}, ua = function () {
|
||||
function a(b) { this.clear(); this.H = !0 !== b && b } a.prototype.clear = function () { this.cache = B(); this.count = B(); this.index = B(); this.s = [] }; a.prototype.set = function (b, c) {
|
||||
if (this.H && H(this.cache[b])) {
|
||||
let d = this.s.length; if (d === this.H) { d--; const e = this.s[d]; delete this.cache[e]; delete this.count[e]; delete this.index[e] } this.index[b] =
|
||||
d; this.s[d] = b; this.count[b] = -1; this.cache[b] = c; this.get(b)
|
||||
} else this.cache[b] = c
|
||||
}; a.prototype.get = function (b) { const c = this.cache[b]; if (this.H && c) { var d = ++this.count[b]; const f = this.index; let g = f[b]; if (0 < g) { const h = this.s; for (var e = g; this.count[h[--g]] <= d && -1 !== g;); g++; if (g !== e) { for (d = e; d > g; d--)e = h[d - 1], h[d] = e, f[e] = d; h[g] = b; f[b] = g } } } return c }; return a
|
||||
}(); return v
|
||||
}(function () {
|
||||
const I = {}, R = "undefined" !== typeof Blob && "undefined" !== typeof URL && URL.createObjectURL; return function (v, K, S, W, P) {
|
||||
S = R ? URL.createObjectURL(new Blob(["(" +
|
||||
S.toString() + ")()"], { type: "text/javascript" })) : v + ".min.js"; v += "-" + K; I[v] || (I[v] = []); I[v][P] = new Worker(S); I[v][P].onmessage = W; return I[v][P]
|
||||
}
|
||||
}()), this);
|
||||
</script>
|
||||
|
||||
<!-- Navbar functionality -->
|
||||
<script>
|
||||
|
||||
// THIS TAG CONTAINS CODE REQUIRED FOR THE NAVBAR TO FUNCTION
|
||||
function returnHexaNumber(s) {
|
||||
var regExp = /^[-+]?[0-9A-Fa-f]+\.?[0-9A-Fa-f]*?$/;
|
||||
return (typeof s === 'string' && regExp.test(s));
|
||||
}
|
||||
|
||||
function isInt(n) {
|
||||
return Number(n) === n && n % 1 === 0;
|
||||
}
|
||||
|
||||
function isFloat(n) {
|
||||
return Number(n) === n && n % 1 !== 0;
|
||||
}
|
||||
|
||||
function splitContractNameAddress(value, index) {
|
||||
var tempArray = [];
|
||||
tempArray[0] = value.substring(0, index);
|
||||
tempArray[1] = value.substring(index + 1);
|
||||
return tempArray
|
||||
}
|
||||
|
||||
function categoriseText(text, inputElement) {
|
||||
|
||||
if (!isNaN(text) && isInt(Number(text))) {
|
||||
//console.log('this is a block number');
|
||||
inputElement.value = '';
|
||||
render("block_page", text);
|
||||
appState = {
|
||||
page: "block_page",
|
||||
thisField: text,
|
||||
}
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
else if (typeof (text) == 'string') {
|
||||
if (text.length == 34 && text[0] == 'F') {
|
||||
//console.log('data entered in a FLO address');
|
||||
inputElement.value = '';
|
||||
render("address_page", text)
|
||||
appState = {
|
||||
page: "address_page",
|
||||
thisField: text,
|
||||
}
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
else if (window.ranchimallflo.tokenlist.includes(text)) {
|
||||
//console.log('data entered is a token name');
|
||||
inputElement.value = '';
|
||||
render("token_page", text)
|
||||
appState = {
|
||||
page: "token_page",
|
||||
thisField: text,
|
||||
}
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
else if (window.ranchimallflo.smartcontractnamelist.includes(text)) {
|
||||
//console.log('data entered is a smart contract name');
|
||||
for (var i = 0; i < window.ranchimallflo.smartcontractnameaddresslist.length; i++) {
|
||||
|
||||
var contractSplit = splitContractNameAddress(window.ranchimallflo.smartcontractnameaddresslist[i], window.ranchimallflo.smartcontractnameaddresslist[i].lastIndexOf('-'));
|
||||
|
||||
if (window.ranchimallflo.smartcontractnamelist.includes(text)) {
|
||||
inputElement.value = '';
|
||||
render("address_page", contract={name:'',
|
||||
address: ''})
|
||||
appState = {
|
||||
page: "address_page",
|
||||
thisField: text,
|
||||
}
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (text.length == 64 && returnHexaNumber(text)) {
|
||||
|
||||
fetch(`${window.tokenapiUrl}/api/v1.0/categoriseString/` + text)
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (myJson) {
|
||||
if (myJson['type'] == 'transaction') {
|
||||
//console.log('data entered is a transaction hash');
|
||||
inputElement.value = '';
|
||||
render("transaction_page", text);
|
||||
appState = {
|
||||
page: "transaction_page",
|
||||
thisField: text,
|
||||
}
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
else if (myJson['type'] == 'block') {
|
||||
//console.log('data entered is a block hash');
|
||||
inputElement.value = '';
|
||||
render("block_page", text)
|
||||
appState = {
|
||||
page: "block_page",
|
||||
thisField: text,
|
||||
}
|
||||
history.pushState(appState, null, null)
|
||||
}
|
||||
else {
|
||||
//console.log('data entered is noise');
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
else {
|
||||
//console.log('data entered is noise')
|
||||
}
|
||||
|
||||
//document.getElementById('main-search-text').value = '';
|
||||
}
|
||||
}
|
||||
|
||||
function processNavbarSearch() {
|
||||
userinput = document.getElementById('main-search-text');
|
||||
console.log(userinput.value);
|
||||
|
||||
if (userinput.value != '') {
|
||||
categoriseText(userinput.value, userinput);
|
||||
}
|
||||
}
|
||||
|
||||
function runScriptJs() {
|
||||
var $cell = $('.card');
|
||||
|
||||
//open and close card when clicked on card
|
||||
$cell.find('.js-expander').click(function () {
|
||||
|
||||
var $thisCell = $(this).closest('.card');
|
||||
|
||||
if ($thisCell.hasClass('is-collapsed')) {
|
||||
$cell.not($thisCell).removeClass('is-expanded').addClass('is-collapsed').addClass('is-inactive');
|
||||
$thisCell.removeClass('is-collapsed').addClass('is-expanded');
|
||||
|
||||
if ($cell.not($thisCell).hasClass('is-inactive')) {
|
||||
//do nothing
|
||||
} else {
|
||||
$cell.not($thisCell).addClass('is-inactive');
|
||||
}
|
||||
|
||||
} else {
|
||||
$thisCell.removeClass('is-expanded').addClass('is-collapsed');
|
||||
$cell.not($thisCell).removeClass('is-inactive');
|
||||
}
|
||||
});
|
||||
|
||||
//close card when click on cross
|
||||
$cell.find('.js-collapser').click(function () {
|
||||
|
||||
var $thisCell = $(this).closest('.card');
|
||||
|
||||
$thisCell.removeClass('is-expanded').addClass('is-collapsed');
|
||||
$cell.not($thisCell).removeClass('is-inactive');
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// First load
|
||||
// console.log('Cursor right before the first fetch call');
|
||||
|
||||
// loading of global variables which contains name of all tokens and smart contracts
|
||||
|
||||
var data = [];
|
||||
fetch(`${window.tokenapiUrl}/api/v1.0/getTokenSmartContractList`)
|
||||
.then(function (response) {
|
||||
return response.json();
|
||||
})
|
||||
.then(function (myJson) {
|
||||
|
||||
//console.log('first line of the fetch result');
|
||||
|
||||
window.ranchimallflo = {};
|
||||
ranchimallflo.tokenlist = myJson['tokens'];
|
||||
ranchimallflo.smartcontractlist = myJson['smartContracts'];
|
||||
ranchimallflo.smartcontractnamelist = [];
|
||||
ranchimallflo.smartcontractnameaddresslist = [];
|
||||
//console.log(ranchimallflo.smartcontractlist.length);
|
||||
for (var i = 0; i < ranchimallflo.smartcontractlist.length; i++) {
|
||||
//ranchimallflo.smartcontractnamelist.append(ranchimallflo.smartcontractlist[i]['contractName']);
|
||||
data.push(ranchimallflo.smartcontractlist[i]['contractName']);
|
||||
ranchimallflo.smartcontractnamelist.push(ranchimallflo.smartcontractlist[i]['contractName']);
|
||||
ranchimallflo.smartcontractnameaddresslist.push(ranchimallflo.smartcontractlist[i]['contractName'] + '-' + ranchimallflo.smartcontractlist[i]['contractAddress']);
|
||||
|
||||
}
|
||||
|
||||
for (var i = 0; i < ranchimallflo.tokenlist.length; i++) {
|
||||
//ranchimallflo.smartcontractnamelist.append(ranchimallflo.smartcontractlist[i]['contractName']);
|
||||
data.push(ranchimallflo.tokenlist[i]);
|
||||
}
|
||||
|
||||
var index = new FlexSearch({
|
||||
|
||||
encode: "advanced",
|
||||
tokenize: "reverse",
|
||||
suggest: true
|
||||
});
|
||||
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
index.add(i, data[i]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
var suggestions = document.getElementById("suggestions");
|
||||
var autocomplete = document.getElementById("autocomplete");
|
||||
var userinput = document.getElementById("userinput");
|
||||
|
||||
//userinput.addEventListener("input", show_results, true);
|
||||
//userinput.addEventListener("keyup", accept_autocomplete, true);
|
||||
//suggestions.addEventListener("click", accept_suggestion, true);
|
||||
|
||||
function show_results() {
|
||||
|
||||
var value = this.value;
|
||||
var results = index.search(value, 25);
|
||||
var entry, childs = suggestions.childNodes;
|
||||
var i = 0, len = results.length;
|
||||
|
||||
for (; i < len; i++) {
|
||||
|
||||
entry = childs[i];
|
||||
|
||||
if (!entry) {
|
||||
|
||||
entry = document.createElement("div");
|
||||
suggestions.appendChild(entry);
|
||||
}
|
||||
|
||||
entry.textContent = data[results[i]];
|
||||
}
|
||||
|
||||
while (childs.length > len) {
|
||||
|
||||
suggestions.removeChild(childs[i])
|
||||
}
|
||||
|
||||
var first_result = data[results[0]];
|
||||
var match = first_result && first_result.toLowerCase().indexOf(value.toLowerCase());
|
||||
|
||||
if (first_result && (match !== -1)) {
|
||||
|
||||
autocomplete.value = value + first_result.substring(match + value.length);
|
||||
autocomplete.current = first_result;
|
||||
}
|
||||
else {
|
||||
|
||||
autocomplete.value = autocomplete.current = value;
|
||||
}
|
||||
}
|
||||
|
||||
function accept_autocomplete(event) {
|
||||
|
||||
if ((event || window.event).keyCode === 13) {
|
||||
|
||||
this.value = autocomplete.value = autocomplete.current;
|
||||
}
|
||||
}
|
||||
|
||||
function accept_suggestion(event) {
|
||||
|
||||
var target = (event || window.event).target;
|
||||
|
||||
userinput.value = autocomplete.value = target.textContent;
|
||||
|
||||
while (suggestions.lastChild) {
|
||||
suggestions.removeChild(suggestions.lastChild);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Loading…
Reference in New Issue
Block a user