From 8b9f4fd702bd4be9710ca1f781977a6c0a26f9b8 Mon Sep 17 00:00:00 2001 From: andri lim Date: Mon, 11 Mar 2019 10:49:36 +0700 Subject: [PATCH] add pagination to premix report page --- premix/assets/js/index.js | 138 +++++++++++++++++--------- premix/assets/js/jquery.paging.min.js | 14 +++ premix/index.html | 5 + 3 files changed, 112 insertions(+), 45 deletions(-) create mode 100644 premix/assets/js/jquery.paging.min.js diff --git a/premix/assets/js/index.js b/premix/assets/js/index.js index b72e53c5f..e0c20f99d 100644 --- a/premix/assets/js/index.js +++ b/premix/assets/js/index.js @@ -176,57 +176,105 @@ function opCodeRenderer(txId, nimbus, geth) { } txId = parseInt(txId); - var ncs = deepCopy(nimbus.txTraces[txId].structLogs); - var gcs = deepCopy(geth.txTraces[txId].structLogs); - var sideBar = $('#opCodeSideBar').empty(); $('#opCodeTitle').text(`Tx #${(txId+1)}`); + const numRows = Math.max(nimbus.txTraces[txId].structLogs.length, geth.txTraces[txId].structLogs.length); - function fillEmptyOp(a, b) { - function emptyOp() { - return {op: '', pc: '', gas: '', gasCost: '', depth: '', - storage:{}, memory: [], stack: []}; - } + if(numRows == 0) { + $('#opCodeContainer').empty(); + $('#paging').empty(); + $('#opCodeSideBar').empty(); + return; + } - if(a.length > b.length) { - for(var i in a) { - if(b[i] === undefined) { - b[i] = emptyOp(); + $("#paging").paging(numRows, { + format: '[< (qq -) nnncnnn (- pp) >]', + perpage: 500, + lapping: 1, + page: 1, + onSelect: function (page) { + const data = this.slice; + const start = data[0]; + const stop = data[1]; + + var ncs = deepCopy(nimbus.txTraces[txId].structLogs.slice(start, stop)); + var gcs = deepCopy(geth.txTraces[txId].structLogs.slice(start, stop)); + var sideBar = $('#opCodeSideBar').empty(); + + function fillEmptyOp(a, b) { + function emptyOp() { + return {op: '', pc: '', gas: '', gasCost: '', depth: '', + storage:{}, memory: [], stack: []}; + } + + if(a.length > b.length) { + for(var i in a) { + if(b[i] === undefined) { + b[i] = emptyOp(); + } + } } } + + fillEmptyOp(ncs, gcs); + fillEmptyOp(gcs, ncs); + + for(var i in ncs) { + fillEmptyField(ncs[i], gcs[i]); + if(parseInt(i) > 0) { + moveStack(ncs, gcs, i); + } + } + + for(var i in ncs) { + let pc = ncs[i].pc == '' ? gcs[i].pc : ncs[i].pc; + let op = ncs[i].op == '' ? gcs[i].op : ncs[i].op; + if(!analyze(ncs[i], gcs[i])) { + var nav = $(`
  • ${pc + ' ' + op}
  • `).appendTo(sideBar); + } else { + var nav = $(`
  • ${pc + ' ' + op}
  • `).appendTo(sideBar); + } + nav.children('a').click(function(ev) { + let idx = this.rel; + $('#opCodeSideBar li').removeClass('uk-active'); + $(this).parent().addClass('uk-active'); + renderTrace('tx', ncs[idx], gcs[idx]); + }); + } + + if(ncs.length > 0) { + renderTrace("tx", ncs[0], gcs[0]); + } else { + $('#opCodeContainer').empty(); + } + + }, + onFormat: function (type) { + switch (type) { + case 'block': // n and c + if (this.value == this.page) { + return '
  • ' + this.value + '
  • '; + } else { + return '
  • ' + this.value + '
  • '; + } + case 'next': // > + return '
  • '; + case 'prev': // < + return '
  • '; + case 'first': // [ + return '
  • first
  • '; + case 'last': // ] + return '
  • last
  • '; + case "leap": + return " "; + case 'fill': + return '
  • ...
  • '; + case 'left': + return '
  • ' + this.value + '
  • '; + case 'right': + return '
  • ' + this.value + '
  • '; + } } - } - - fillEmptyOp(ncs, gcs); - fillEmptyOp(gcs, ncs); - - for(var i in ncs) { - fillEmptyField(ncs[i], gcs[i]); - if(parseInt(i) > 0) { - moveStack(ncs, gcs, i); - } - } - - for(var i in ncs) { - let pc = ncs[i].pc == '' ? gcs[i].pc : ncs[i].pc; - let op = ncs[i].op == '' ? gcs[i].op : ncs[i].op; - if(!analyze(ncs[i], gcs[i])) { - var nav = $(`
  • ${pc + ' ' + op}
  • `).appendTo(sideBar); - } else { - var nav = $(`
  • ${pc + ' ' + op}
  • `).appendTo(sideBar); - } - nav.children('a').click(function(ev) { - let idx = this.rel; - $('#opCodeSideBar li').removeClass('uk-active'); - $(this).parent().addClass('uk-active'); - renderTrace('tx', ncs[idx], gcs[idx]); - }); - } - - if(ncs.length > 0) { - renderTrace("tx", ncs[0], gcs[0]); - } else { - $('#opCodeContainer').empty(); - } + }); windowResize(); } diff --git a/premix/assets/js/jquery.paging.min.js b/premix/assets/js/jquery.paging.min.js new file mode 100644 index 000000000..da169cb26 --- /dev/null +++ b/premix/assets/js/jquery.paging.min.js @@ -0,0 +1,14 @@ +/* +jQuery paging plugin v1.3.0 23/06/2014 +http://www.xarg.org/2011/09/jquery-pagination-revised/ + +Copyright (c) 2011, Robert Eisele (robert@xarg.org) +Dual licensed under the MIT or GPL Version 2 licenses. +*/ +(function(n,v,r){n.fn.paging=function(z,A){var t=this,b={setOptions:function(a){b.a=n.extend(b.a||{lapping:0,perpage:10,page:1,refresh:{interval:10,url:null},format:"",lock:!1,circular:!1,onClick:null,onFormat:function(){},onSelect:function(){return!0},onRefresh:function(){}},a||{});b.a.lapping|=0;b.a.perpage|=0;null!==b.a.page&&(b.a.page|=0);1>b.a.perpage&&(b.a.perpage=10);b.interval&&v.clearInterval(b.interval);b.a.refresh.url&&(b.interval=v.setInterval(function(){n.ajax({url:b.a.refresh.url,success:function(a){if("string"=== +typeof a)try{a=n.parseJSON(a)}catch(m){return}b.a.onRefresh(a)}})},1E3*b.a.refresh.interval));b.format=function(a){for(var b=0,f=0,h=1,g={g:[],i:0,h:0,b:5,current:3,l:0,m:0},c,p=/[*<>pq\[\]().-]|[nc]+!?/g,n={"[":"first","]":"last","<":"prev",">":"next",q:"left",p:"right","-":"fill",".":"leap"},e={};c=p.exec(a);)c=""+c,r===n[c]?"("===c?f=++b:")"===c?f=0:h&&("*"===c?(g.i=1,g.h=0):(g.i=0,g.h="!"===c.charAt(c.length-1),g.b=c.length-g.h,(g.current=1+c.indexOf("c"))||(g.current=1+g.b>>1)),g.g.push({f:"block", +j:0,c:0}),h=0):(g.g.push({f:n[c],j:f,c:r===e[c]?e[c]=1:++e[c]}),"q"===c?++g.m:"p"===c&&++g.l);return g}(b.a.format);return b},setNumber:function(a){b.s=r===a||0>a?-1:a;return b},setPage:function(a){function w(a,b,c){c=""+a.onFormat.call(b,c);p=b.value?p+c.replace(/m?(c=m=-1,h=Math.max(1,a-e.current+1-q),g=h+e.b):(c=1+Math.ceil((m-f.perpage)/(f.perpage-q)),a=Math.max(1,Math.min(0>a?1+c+a:a,c)),e.i?(h=1,g=1+c,e.current=a,e.b=c):(h=Math.max(1,Math.min(a-e.current,c-e.b)+1),g=e.h?h+e.b:Math.min(h+e.b,1+c)));for(;u--;){k=0;l=e.g[u];switch(l.f){case "left":k=l.c>l.j&1;switch(l.f){case "block":for(;hm,d.first=1===h,d.last=h===c&&0m)?d.value=1+a:(d.value=c,d.active=k&&am)?d.value=1+a:(d.value=Math.min(1+a,c),d.active=k&&a + @@ -71,6 +72,10 @@
    +
    +
      +
    +