diff --git a/index.html b/index.html old mode 100644 new mode 100755 index a817cd4..9ea235b --- a/index.html +++ b/index.html @@ -3,36 +3,42 @@ Dash Governance Tools - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/js/formHandler.js b/js/formHandler.js new file mode 100755 index 0000000..47ef5bc --- /dev/null +++ b/js/formHandler.js @@ -0,0 +1,23 @@ +function setFormEditable(edit) { + $('.createProposal input').each(function() { + $(this).attr("disabled", edit); + }); + $('.createProposal select').each(function() { + $(this).attr("disabled", edit); + }); + + if (edit === true) { + $('#btnPrepare').addClass('hidden'); + $('#btnEdit').removeClass('hidden'); + $('#btnNew').removeClass('hidden'); + } else { + $('#btnPrepare').removeClass('hidden'); + $('#btnEdit').addClass('hidden'); + $('#btnNew').addClass('hidden'); + } +} + +var copyToClipboard = function(id) { + document.getElementById(id).select(); + document.execCommand('copy'); +}; \ No newline at end of file diff --git a/js/paymentCycle.js b/js/paymentCycle.js new file mode 100755 index 0000000..577d259 --- /dev/null +++ b/js/paymentCycle.js @@ -0,0 +1,158 @@ +/*** + * Payment Cycle Generator + * + * @param gov + * @constructor + */ +function PaymentCycle(gov) { + var self = this; + + this.network = gov.network; + this.paymentCycle = 16616; // mainnet + this.budgetCycles = 24; + + if (this.network == 'testnet') this.paymentCycle = 24; + if (this.network == 'testnet') this.budgetCycles = 96; + + this.blockHeight = null; + + this.Messages = { + paymentCycle: { + months: "Months", + month: "Month", + days: "Days", + day: "Day", + hours: "Hours", + hour: "Hour", + minutes: "Minutes", + minute: "Minute", + seconds: "Seconds", + second: "Second" + } + }; + + this.getInfo(function(err,res) { + console.log("current blockheight: " + res.info.blocks); + + self.blockHeight = res.info.blocks; + }); +} + +PaymentCycle.prototype.getNextSuperblock = function(block) { + return (Math.floor((block/this.paymentCycle)) * this.paymentCycle + this.paymentCycle); +}; + +PaymentCycle.prototype.getBlockTimestamp = function(block) { + var blocks = block - this.blockHeight; + var now = Math.floor(Date.now()); + + return (now + (blocks * (155 * 1000))); // 155 seconds per block x 1000 = ms per block +}; + +PaymentCycle.prototype.getTimeDifference = function(opts, start, end) { + + var precision = opts.precision; + + var millisec = end - start; + + var seconds = (millisec / 1000).toFixed(precision); + + var minutes = (millisec / (1000 * 60)).toFixed(precision); + + var hours = (millisec / (1000 * 60 * 60)).toFixed(precision); + + var days = (millisec / (1000 * 60 * 60 * 24)).toFixed(precision); + + var months = (millisec / (1000 * 60 * 60 * 24 * 30)).toFixed(precision); + + if (seconds < 60) { + if (seconds <= 1) return seconds + " " + this.Messages.paymentCycle.second; // singular + return seconds + " " + this.Messages.paymentCycle.seconds; + } else if (minutes < 60) { + if (minutes <= 1) return minutes + " " + this.Messages.paymentCycle.minute; // singular + return minutes + " " + this.Messages.paymentCycle.minutes; + } else if (hours < 24) { + if (hours <= 1) return hours + " " + this.Messages.paymentCycle.hour; // singular + return hours + " " + this.Messages.paymentCycle.hours; + } else if (days < 30) { + if (days <= 1) return days + " " + this.Messages.paymentCycle.day; // singular + return days + " " + this.Messages.paymentCycle.days; + } else { + if (months <= 1) return months + " " + this.Messages.paymentCycle.month; // singular + return months + " " + this.Messages.paymentCycle.months; + } +}; + +PaymentCycle.prototype.updateDropdowns = function() { + var self = this; + + var blockHeight = this.blockHeight; + + var startDate = []; + var endDate = []; + + for (i = 0; i < this.budgetCycles + 1; i++) { + + var superblock = this.getNextSuperblock(blockHeight); + var timestamp = this.getBlockTimestamp(superblock); + + var label = new Date(timestamp).toLocaleDateString(); + if (this.network == 'testnet') label = new Date(timestamp).toLocaleString(); + + var superblockDate = { + superblock: superblock, + timestamp: timestamp, + label: label + }; + startDate.push(superblockDate); + endDate.push(superblockDate); + + blockHeight = superblock; + + } + + endDate.shift(); // remove first element of endDate + startDate.pop(); // remove last element of startDate to keep length even + + var now = Math.floor(Date.now()); + + var opts = { + precision: 2 + }; // 2 unit of precision for eta formatting + + // calculate the amount of time between start and stop, show: e.g. 5 Months or 5 Hours + + var start_epoch = $("#start_epoch"); + start_epoch.find('option').remove(); + $.each(startDate, function(index) { + + var eta = self.getTimeDifference(opts, now, this.timestamp); + var time = this.timestamp - now; + var option = $("