From 47fe74b443e12f24cc3ac43f5769a574c05a5851 Mon Sep 17 00:00:00 2001 From: Satinder Grewal Date: Thu, 10 Nov 2016 20:21:43 +1300 Subject: [PATCH] Transaction history of public address shows on dashboard now --- assets/global/js/components/nprogress.min.js | 6 + assets/global/vendor/nprogress/nprogress.js | 476 ++++++++++++++++++ .../global/vendor/nprogress/nprogress.min.css | 1 + assets/scripts/kmd_wallet_dashboard.js | 103 +++- index.html | 176 ++++--- 5 files changed, 661 insertions(+), 101 deletions(-) create mode 100755 assets/global/js/components/nprogress.min.js create mode 100755 assets/global/vendor/nprogress/nprogress.js create mode 100755 assets/global/vendor/nprogress/nprogress.min.css diff --git a/assets/global/js/components/nprogress.min.js b/assets/global/js/components/nprogress.min.js new file mode 100755 index 0000000..f161781 --- /dev/null +++ b/assets/global/js/components/nprogress.min.js @@ -0,0 +1,6 @@ +/*! + * remark (http://getbootstrapadmin.com/remark) + * Copyright 2016 amazingsurge + * Licensed under the Themeforest Standard Licenses + */ +$.components.register("nprogress",{mode:"init",defaults:{minimum:.15,trickleRate:.07,trickleSpeed:360,showSpinner:!1,template:'
'},init:function(){if("undefined"!=typeof NProgress){var defaults=$.components.getDefaults("nprogress");NProgress.configure(defaults)}}}); \ No newline at end of file diff --git a/assets/global/vendor/nprogress/nprogress.js b/assets/global/vendor/nprogress/nprogress.js new file mode 100755 index 0000000..b23b300 --- /dev/null +++ b/assets/global/vendor/nprogress/nprogress.js @@ -0,0 +1,476 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +;(function(root, factory) { + + if (typeof define === 'function' && define.amd) { + define(factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.NProgress = factory(); + } + +})(this, function() { + var NProgress = {}; + + NProgress.version = '0.2.0'; + + var Settings = NProgress.settings = { + minimum: 0.08, + easing: 'ease', + positionUsing: '', + speed: 200, + trickle: true, + trickleRate: 0.02, + trickleSpeed: 800, + showSpinner: true, + barSelector: '[role="bar"]', + spinnerSelector: '[role="spinner"]', + parent: 'body', + template: '
' + }; + + /** + * Updates configuration. + * + * NProgress.configure({ + * minimum: 0.1 + * }); + */ + NProgress.configure = function(options) { + var key, value; + for (key in options) { + value = options[key]; + if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value; + } + + return this; + }; + + /** + * Last number. + */ + + NProgress.status = null; + + /** + * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`. + * + * NProgress.set(0.4); + * NProgress.set(1.0); + */ + + NProgress.set = function(n) { + var started = NProgress.isStarted(); + + n = clamp(n, Settings.minimum, 1); + NProgress.status = (n === 1 ? null : n); + + var progress = NProgress.render(!started), + bar = progress.querySelector(Settings.barSelector), + speed = Settings.speed, + ease = Settings.easing; + + progress.offsetWidth; /* Repaint */ + + queue(function(next) { + // Set positionUsing if it hasn't already been set + if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); + + // Add transition + css(bar, barPositionCSS(n, speed, ease)); + + if (n === 1) { + // Fade out + css(progress, { + transition: 'none', + opacity: 1 + }); + progress.offsetWidth; /* Repaint */ + + setTimeout(function() { + css(progress, { + transition: 'all ' + speed + 'ms linear', + opacity: 0 + }); + setTimeout(function() { + NProgress.remove(); + next(); + }, speed); + }, speed); + } else { + setTimeout(next, speed); + } + }); + + return this; + }; + + NProgress.isStarted = function() { + return typeof NProgress.status === 'number'; + }; + + /** + * Shows the progress bar. + * This is the same as setting the status to 0%, except that it doesn't go backwards. + * + * NProgress.start(); + * + */ + NProgress.start = function() { + if (!NProgress.status) NProgress.set(0); + + var work = function() { + setTimeout(function() { + if (!NProgress.status) return; + NProgress.trickle(); + work(); + }, Settings.trickleSpeed); + }; + + if (Settings.trickle) work(); + + return this; + }; + + /** + * Hides the progress bar. + * This is the *sort of* the same as setting the status to 100%, with the + * difference being `done()` makes some placebo effect of some realistic motion. + * + * NProgress.done(); + * + * If `true` is passed, it will show the progress bar even if its hidden. + * + * NProgress.done(true); + */ + + NProgress.done = function(force) { + if (!force && !NProgress.status) return this; + + return NProgress.inc(0.3 + 0.5 * Math.random()).set(1); + }; + + /** + * Increments by a random amount. + */ + + NProgress.inc = function(amount) { + var n = NProgress.status; + + if (!n) { + return NProgress.start(); + } else { + if (typeof amount !== 'number') { + amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95); + } + + n = clamp(n + amount, 0, 0.994); + return NProgress.set(n); + } + }; + + NProgress.trickle = function() { + return NProgress.inc(Math.random() * Settings.trickleRate); + }; + + /** + * Waits for all supplied jQuery promises and + * increases the progress as the promises resolve. + * + * @param $promise jQUery Promise + */ + (function() { + var initial = 0, current = 0; + + NProgress.promise = function($promise) { + if (!$promise || $promise.state() === "resolved") { + return this; + } + + if (current === 0) { + NProgress.start(); + } + + initial++; + current++; + + $promise.always(function() { + current--; + if (current === 0) { + initial = 0; + NProgress.done(); + } else { + NProgress.set((initial - current) / initial); + } + }); + + return this; + }; + + })(); + + /** + * (Internal) renders the progress bar markup based on the `template` + * setting. + */ + + NProgress.render = function(fromStart) { + if (NProgress.isRendered()) return document.getElementById('nprogress'); + + addClass(document.documentElement, 'nprogress-busy'); + + var progress = document.createElement('div'); + progress.id = 'nprogress'; + progress.innerHTML = Settings.template; + + var bar = progress.querySelector(Settings.barSelector), + perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0), + parent = document.querySelector(Settings.parent), + spinner; + + css(bar, { + transition: 'all 0 linear', + transform: 'translate3d(' + perc + '%,0,0)' + }); + + if (!Settings.showSpinner) { + spinner = progress.querySelector(Settings.spinnerSelector); + spinner && removeElement(spinner); + } + + if (parent != document.body) { + addClass(parent, 'nprogress-custom-parent'); + } + + parent.appendChild(progress); + return progress; + }; + + /** + * Removes the element. Opposite of render(). + */ + + NProgress.remove = function() { + removeClass(document.documentElement, 'nprogress-busy'); + removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent'); + var progress = document.getElementById('nprogress'); + progress && removeElement(progress); + }; + + /** + * Checks if the progress bar is rendered. + */ + + NProgress.isRendered = function() { + return !!document.getElementById('nprogress'); + }; + + /** + * Determine which positioning CSS rule to use. + */ + + NProgress.getPositioningCSS = function() { + // Sniff on document.body.style + var bodyStyle = document.body.style; + + // Sniff prefixes + var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' : + ('MozTransform' in bodyStyle) ? 'Moz' : + ('msTransform' in bodyStyle) ? 'ms' : + ('OTransform' in bodyStyle) ? 'O' : ''; + + if (vendorPrefix + 'Perspective' in bodyStyle) { + // Modern browsers with 3D support, e.g. Webkit, IE10 + return 'translate3d'; + } else if (vendorPrefix + 'Transform' in bodyStyle) { + // Browsers without 3D support, e.g. IE9 + return 'translate'; + } else { + // Browsers without translate() support, e.g. IE7-8 + return 'margin'; + } + }; + + /** + * Helpers + */ + + function clamp(n, min, max) { + if (n < min) return min; + if (n > max) return max; + return n; + } + + /** + * (Internal) converts a percentage (`0..1`) to a bar translateX + * percentage (`-100%..0%`). + */ + + function toBarPerc(n) { + return (-1 + n) * 100; + } + + + /** + * (Internal) returns the correct CSS for changing the bar's + * position given an n percentage, and speed and ease from Settings + */ + + function barPositionCSS(n, speed, ease) { + var barCSS; + + if (Settings.positionUsing === 'translate3d') { + barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' }; + } else if (Settings.positionUsing === 'translate') { + barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' }; + } else { + barCSS = { 'margin-left': toBarPerc(n)+'%' }; + } + + barCSS.transition = 'all '+speed+'ms '+ease; + + return barCSS; + } + + /** + * (Internal) Queues a function to be executed. + */ + + var queue = (function() { + var pending = []; + + function next() { + var fn = pending.shift(); + if (fn) { + fn(next); + } + } + + return function(fn) { + pending.push(fn); + if (pending.length == 1) next(); + }; + })(); + + /** + * (Internal) Applies css properties to an element, similar to the jQuery + * css method. + * + * While this helper does assist with vendor prefixed property names, it + * does not perform any manipulation of values prior to setting styles. + */ + + var css = (function() { + var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ], + cssProps = {}; + + function camelCase(string) { + return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) { + return letter.toUpperCase(); + }); + } + + function getVendorProp(name) { + var style = document.body.style; + if (name in style) return name; + + var i = cssPrefixes.length, + capName = name.charAt(0).toUpperCase() + name.slice(1), + vendorName; + while (i--) { + vendorName = cssPrefixes[i] + capName; + if (vendorName in style) return vendorName; + } + + return name; + } + + function getStyleProp(name) { + name = camelCase(name); + return cssProps[name] || (cssProps[name] = getVendorProp(name)); + } + + function applyCss(element, prop, value) { + prop = getStyleProp(prop); + element.style[prop] = value; + } + + return function(element, properties) { + var args = arguments, + prop, + value; + + if (args.length == 2) { + for (prop in properties) { + value = properties[prop]; + if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value); + } + } else { + applyCss(element, args[1], args[2]); + } + } + })(); + + /** + * (Internal) Determines if an element or space separated list of class names contains a class name. + */ + + function hasClass(element, name) { + var list = typeof element == 'string' ? element : classList(element); + return list.indexOf(' ' + name + ' ') >= 0; + } + + /** + * (Internal) Adds a class to an element. + */ + + function addClass(element, name) { + var oldList = classList(element), + newList = oldList + name; + + if (hasClass(oldList, name)) return; + + // Trim the opening space. + element.className = newList.substring(1); + } + + /** + * (Internal) Removes a class from an element. + */ + + function removeClass(element, name) { + var oldList = classList(element), + newList; + + if (!hasClass(element, name)) return; + + // Replace the class name. + newList = oldList.replace(' ' + name + ' ', ' '); + + // Trim the opening and closing spaces. + element.className = newList.substring(1, newList.length - 1); + } + + /** + * (Internal) Gets a space separated list of the class names on the element. + * The list is wrapped with a single space on each end to facilitate finding + * matches within the list. + */ + + function classList(element) { + return (' ' + (element.className || '') + ' ').replace(/\s+/gi, ' '); + } + + /** + * (Internal) Removes an element from the DOM. + */ + + function removeElement(element) { + element && element.parentNode && element.parentNode.removeChild(element); + } + + return NProgress; +}); + diff --git a/assets/global/vendor/nprogress/nprogress.min.css b/assets/global/vendor/nprogress/nprogress.min.css new file mode 100755 index 0000000..2aeaec2 --- /dev/null +++ b/assets/global/vendor/nprogress/nprogress.min.css @@ -0,0 +1 @@ +#nprogress{pointer-events:none}#nprogress .bar{position:fixed;top:0;left:0;z-index:9999;width:100%;height:5px;background:#3f51b5}#nprogress .spinner{position:fixed;top:15px;right:15px;z-index:9999;display:block}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border:solid 2px transparent;border-top-color:#3f51b5;border-left-color:#3f51b5;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;-o-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{position:relative;overflow:hidden}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(360deg)}}@-o-keyframes nprogress-spinner{0%{-o-transform:rotate(0);transform:rotate(0)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}#nprogress .bar.nprogress-bar-header{top:66px}.site-navbar-small #nprogress .bar.nprogress-bar-header{top:60px}#nprogress .bar.nprogress-bar-bottom{top:auto;bottom:0}#nprogress .nprogress-bar-primary{background-color:#3f51b5}#nprogress .nprogress-bar-success{background-color:#4caf50}#nprogress .nprogress-bar-info{background-color:#00bcd4}#nprogress .nprogress-bar-warning{background-color:#ff9800}#nprogress .nprogress-bar-danger{background-color:#f44336}#nprogress .nprogress-bar-dark{background-color:#616161}#nprogress .nprogress-bar-light{background-color:#bdbdbd} \ No newline at end of file diff --git a/assets/scripts/kmd_wallet_dashboard.js b/assets/scripts/kmd_wallet_dashboard.js index e767a62..244d962 100644 --- a/assets/scripts/kmd_wallet_dashboard.js +++ b/assets/scripts/kmd_wallet_dashboard.js @@ -7,9 +7,9 @@ var KMDWalletDashboard = function() { $('#kmd_wallet_dashoard_section').show(); $('#kmd_wallet_dashboardinfo').show(); $('#kmd_wallet_send').hide(); + $('#kmd_wallet_settings').hide(); getTotalKMDBalance(); - getKMDWalletInfo(); - getKMDInfo(); + KMDfillTxHistoryT(); }); } @@ -17,30 +17,31 @@ var KMDWalletDashboard = function() { var handle_KMD_Send = function() { $('#btn_kmd_wallet_send').click(function() { + //console.log('kmd wallet send button clicked...'); var tmpoptions = ''; $('#kmd_wallet_dashboardinfo').hide(); $('#kmd_wallet_send').show(); + $('#kmd_wallet_settings').hide(); var kmd_addr_list_with_balance = KMDlistunspentT(); //console.log(kmd_addr_list_with_balance); tmpoptions += ''; $.each(kmd_addr_list_with_balance, function(index) { - tmpoptions += ''; + tmpoptions += ''; $('#kmd_wallet_send_from').html(tmpoptions); }); var kmd_z_addr_list_with_balance = KMDListaddrZ(); //console.log(kmd_z_addr_list_with_balance); $.each(kmd_z_addr_list_with_balance, function(index) { - tmpoptions += ''; + tmpoptions += ''; $('#kmd_wallet_send_from').html(tmpoptions); }); $('.showkmdwalletaddrs').selectpicker({ style: 'btn-info' }); - KMDfillTxHistoryT(); }); $('.showkmdwalletaddrs').on('change', function(){ @@ -82,11 +83,35 @@ var KMDWalletDashboard = function() { });*/ } + var KMDGetTXIDdetails = function() { + + $('#kmd-txid-details-btn').click(function() { + //console.log('kmd-txid-details-btn button clicked!..'); + console.log($(this).data('txid-type')); + console.log($(this).data('txid')); + }); + }; + + var KMDWalletSettings = function() { + $('#btn_kmd_wallet_settings').click(function() { + console.log('wallet settings button clicked...'); + $('#kmd_wallet_dashboardinfo').hide(); + $('#kmd_wallet_dashoard_section').hide(); + $('#kmd_wallet_send').hide(); + $('#kmd_wallet_settings').show(); + getKMDWalletInfo(); + getKMDInfo(); + }); + }; + return { //main function to initiate the module init: function() { handle_KMD_Dashboard(); + KMDfillTxHistoryT(); + KMDGetTXIDdetails(); handle_KMD_Send(); + KMDWalletSettings(); RunInitFunctions(); } }; @@ -100,8 +125,7 @@ jQuery(document).ready(function() { function RunInitFunctions() { getTotalKMDBalance(); - getKMDWalletInfo(); - getKMDInfo(); + KMDfillTxHistoryT(); } function getTotalKMDBalance() { @@ -256,6 +280,11 @@ function getKMDInfo() { function KMDlistunspentT() { + NProgress.done(true); + NProgress.configure({ + template: '
' + }); + NProgress.start(); var result = []; var ajax_data = {"agent":"komodo","method":"passthru","function":"listunspent","hex":""} @@ -301,6 +330,7 @@ function KMDlistunspentT() { } }); //console.log(result); + NProgress.done(); return result; } @@ -380,6 +410,11 @@ function KMDListaddrZ() { function KMDGetPublicTransactions() { + NProgress.done(true); + NProgress.configure({ + template: '
' + }); + NProgress.start(); var result = []; var ajax_data = {"agent":"komodo","method":"passthru","function":"listtransactions","hex":""} @@ -396,14 +431,29 @@ function KMDGetPublicTransactions() { //console.log(AjaxOutputData); $.each(AjaxOutputData, function(index, value) { - console.log(value); + //console.log(value); + + var tmp_category = ''; var tmp_addr = AjaxOutputData[index].address; if(!("address" in AjaxOutputData[index])) { - tmp_addr = '(Z Address not listed by wallet!)' + tmp_addr = ' Z Address not listed by wallet!' + } + var tmp_secondsToString = secondsToString(AjaxOutputData[index].time) + + if ( AjaxOutputData[index].category == 'send' ) { + tmp_category = ' OUT'; + } + if ( AjaxOutputData[index].category == 'receive' ) { + tmp_category = ' IN'; } - console.log(tmp_addr); + if ( AjaxOutputData[index].category == 'generate' ) { + tmp_category = ' Mined'; + }if ( AjaxOutputData[index].category == 'immature' ) { + tmp_category = ' Immature'; + } + //console.log(tmp_addr); //tmplisttransactions = {"type":"public","category": AjaxOutputData[index].category,"confirmations": AjaxOutputData[index].confirmations,"amount": AjaxOutputData[index].amount,"time": AjaxOutputData[index].time,"address": AjaxOutputData[index].address,"txid": AjaxOutputData[index].txid} - tmplisttransactions = ["public",AjaxOutputData[index].category,AjaxOutputData[index].confirmations,AjaxOutputData[index].amount,AjaxOutputData[index].time,tmp_addr,AjaxOutputData[index].txid] + tmplisttransactions = [' public',tmp_category,AjaxOutputData[index].confirmations,AjaxOutputData[index].amount,tmp_secondsToString,tmp_addr,''] //console.log(tmplisttransactions); result.push(tmplisttransactions); }); @@ -419,16 +469,33 @@ function KMDGetPublicTransactions() { } }); //console.log(result); + NProgress.done(); return result; } function KMDfillTxHistoryT() { + NProgress.done(true); + NProgress.configure({ + template: '
' + }); + NProgress.start(); var txhistorydata = KMDGetPublicTransactions(); - console.log(txhistorydata); - $('#kmd-tx-history-tbl').DataTable( { data: txhistorydata, - "order": [[ 4, "desc" ]], - select: true, - paging: true, - searching: true - } ); + //console.log(txhistorydata); + if ( $.fn.dataTable.isDataTable( '#kmd-tx-history-tbl' ) ) { + $('#kmd-tx-history-tbl').DataTable( { data: txhistorydata, + "order": [[ 4, "desc" ]], + select: true, + retrieve: true + }); + } + else { + $('#kmd-tx-history-tbl').DataTable( { data: txhistorydata, + "order": [[ 4, "desc" ]], + select: true, + retrieve: true, + paging: true, + searching: true + }); + } + NProgress.done(); } \ No newline at end of file diff --git a/index.html b/index.html index b3d043c..4c11ecc 100755 --- a/index.html +++ b/index.html @@ -32,6 +32,7 @@ + @@ -381,7 +382,7 @@
  • Transactions
  • PAX
  • -
  • Settings
  • +
  • Settings
  • @@ -676,55 +677,47 @@ @@ -776,47 +769,62 @@ - -
    -
    -

    - Transactions History -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    TypeCategoryConfirmationsAmountTimeAddressTx Detail
    TypeCategoryConfirmationsAmountTimeAddressTx Detail
    -
    -
    - + + @@ -1084,6 +1092,7 @@ + @@ -1103,6 +1112,7 @@ +