mirror of
https://github.com/seigler/govobject-proposal
synced 2025-07-27 06:46:10 +00:00
* GovObject Proposal Form * update proposal_name --> name * jquery ui date picker * cleanup + copyToClipboard * remove websockets * aesthetic/UX changes * fix start/end epoch times * remove "dash-cli" prefix from gobject commands * bugfix: proposal name double-quote serialization * add .gitignore * Refactor UX * ProposalGenerator / UI Controller * Proposal form is disabled on create * bugfix: prepare command string * add proposal validation * refactor setFormEditable * simplify url regex * first commit with drop down list instead of datepicker for payment start & end dates * first commit with drop down list instead of datepicker for payment start & end dates * automatic default adjustment of end date to one month after start date whenever start date is changed * clean readme * added parameter bufferdays to easily change number of days before next superblock before we automatically select start date of next budget cycle * included dropdown lists to be uneditable/editable with the "Create Proposal"/"Edit Proposal"-buttons * replaced end date dropdown with a time span in month dropdown * adapted default superblock for start date dropdown * fill $("#time").val once again for the time parameter in gobject cmd * first code to check feeTxid of govobject prepare and count confirmations * first code to check feeTxid of govobject prepare and count confirmations * disable/enable fee Transaction input field * checking new block for feeTxid * listener for blocks and 6 confirmations * listener for blocks and 6 confirmations * listener for blocks and 6 confirmations * progress bar while waiting for fee tx confirmations * added error messages * Add epoch time to serialization and relax address validation (#4) - address validation is breaking in Ubuntu Firefox. disabled until future fix * bugfix: convert javascript time to unix time (/1000) * refactor: tx listener and superblock date selection fields (#6) * adds images, css dir, reformats proposal form * adds dash logo, styles header, sync with design * refactor start and end epoch calculation * refactor js dependencies * comment out social links for now, issue #8 * adds favicon * move proposol header and description to right side of form * include Roboto font * refactor js dependencies * refactor transaction listener * implements tabs as step progression * clean up tabs * progress buttons * progress bar * implement transaction listener progress bar * save progress on getting submit proposal command and progressing UI confirmations * confirmations counted, transitions to final step * fee transaction id appends to submit command, step four complete * implement network selector * bugfix: provider * adds css proposalBlock style to rest of steps, raises validation errors on step 2 while inputting txID * adds disconnect event for socket io * enables new and edit buttons, hides steps in progress if new proposal clicked * mainnet/testnet toggle is hidden upon clicking Create Proposal, reappeears upon New Proposal * calculate total proposal amount * bugfix and refactor total amount calculation * adjust payment cycle selectors * various adjustments * moves network toggle buttons, popup on tx errors (#16) * replace dash_logo, sharpen Governance Tools subtitle (#17) * moves network toggle buttons, popup on tx errors * replace dash_logo, sharpen Governance Tools subtitle * include proposal maturity constants * updated proposal validation * update bitcore-lib-dash to latest * adjust start_epoch and end_epoch calculation * various design / label improvements * add api prefix as parameter for socket.io * update DASH fee amount * update default network
129 lines
4.5 KiB
JavaScript
Executable file
129 lines
4.5 KiB
JavaScript
Executable file
function ProposalGenerator(gov) {
|
|
this._mode = 'proposal';
|
|
if(!gov.network) gov.network = 'livenet';
|
|
|
|
this.gov = gov;
|
|
|
|
// proposal basic fields
|
|
this.gov.name = $('#name').val();
|
|
this.gov.url = $('#url').val();
|
|
this.gov.payment_address = $('#payment_address').val();
|
|
this.gov.payment_amount = $('#payment_amount').val();
|
|
this.gov.start_epoch = $('#start_epoch').val();
|
|
this.gov.end_epoch = $('#end_epoch').val();
|
|
|
|
// hidden elements
|
|
this.gov.type = parseInt($('#type').val());
|
|
}
|
|
|
|
ProposalGenerator.prototype.validate = function() {
|
|
try {
|
|
var gov = this.gov.serialize();
|
|
}
|
|
catch (e) {
|
|
|
|
switch(e.message) {
|
|
|
|
case 'Invalid Name':
|
|
console.log("error: invalid name");
|
|
$('#name').addClass('validationError');
|
|
$('#name').val("Invalid name. Please enter a 40 character alphanumeric name without spaces.");
|
|
break;
|
|
|
|
case 'Invalid URL':
|
|
console.log("Error: invalid url");
|
|
$('#url').addClass('validationError');
|
|
$('#url').val("There is a formatting error in your URL. Did you forget the leading 'http://'?");
|
|
break;
|
|
|
|
case 'Invalid Payment Amount':
|
|
console.log("Error: invalid payment amount");
|
|
$('#payment_amount').addClass('validationError');
|
|
// $('#payment_amount').val("Invalid payment amount.");
|
|
break;
|
|
|
|
case 'Invalid Timespan':
|
|
console.log("Error: invalid timespan");
|
|
$('#start_epoch, #end_epoch').addClass('validationError');
|
|
break;
|
|
|
|
case 'Invalid Start Date':
|
|
console.log("Error: invalid start date");
|
|
$('#start_epoch').addClass('validationError');
|
|
break;
|
|
|
|
case 'Invalid End Date':
|
|
console.log("Error: invalid end date");
|
|
$('#end_epoch').addClass('validationError');
|
|
break;
|
|
|
|
case 'Invalid Address':
|
|
console.log("Error: invalid address");
|
|
$('#payment_address').addClass('validationError');
|
|
$('#payment_address').val("Invalid payment address.");
|
|
break;
|
|
|
|
default:
|
|
console.log(e);
|
|
break;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
ProposalGenerator.prototype.walletCommands = function() {
|
|
var gov = this.gov;
|
|
|
|
var prepCommand = "gobject prepare "+$('#parentHash').val() + " " + $('#revision').val() +" " + $('#time').val() +" " + gov.serialize();
|
|
console.log(prepCommand);
|
|
$("textarea#prepareProposal").val(prepCommand);
|
|
|
|
if(this._mode == 'proposal') {
|
|
setFormEditable(true);
|
|
|
|
$('.walletCommands#walletCommandsHeader').removeClass('hidden');
|
|
$('.walletCommands#walletCommandsPrepare').removeClass('hidden');
|
|
$('.walletCommands#walletCommandsTx').removeClass('hidden');
|
|
//$('.walletCommands#walletCommandsProgress').removeClass('hidden');
|
|
//$('.walletCommands#walletCommandsSubmit').removeClass('hidden');
|
|
|
|
this._mode = 'command';
|
|
}
|
|
};
|
|
|
|
ProposalGenerator.prototype.createProposal = function() {
|
|
$('#feeTxid').val("");
|
|
$('#submitProposal').val("");
|
|
|
|
if(this._mode == 'command') {
|
|
setFormEditable(false);
|
|
|
|
$('.walletCommands#walletCommandsHeader').addClass('hidden');
|
|
$('.walletCommands#walletCommandsPrepare').addClass('hidden');
|
|
$('.walletCommands#walletCommandsTx').addClass('hidden');
|
|
$('.walletCommands#walletCommandsProgress').addClass('hidden');
|
|
$('.walletCommands#walletCommandsSubmit').addClass('hidden');
|
|
|
|
this._mode = 'proposal';
|
|
}
|
|
};
|
|
|
|
ProposalGenerator.prototype.resetProposal = function() {
|
|
$('.createProposal input').each(function() {
|
|
$(this).val('');
|
|
});
|
|
$("#btnEdit").val('Edit Proposal');
|
|
$("#btnNew").val('New Proposal');
|
|
$("#btnPrepare").val('Create Proposal');
|
|
setFormEditable(false);
|
|
$('.walletCommands#walletCommandsHeader').addClass('hidden');
|
|
$('.walletCommands#walletCommandsPrepare').addClass('hidden');
|
|
$('.walletCommands#walletCommandsTx').addClass('hidden');
|
|
$('.walletCommands#walletCommandsProgress').addClass('hidden');
|
|
$('.walletCommands#walletCommandsSubmit').addClass('hidden');
|
|
|
|
this._mode = 'proposal';
|
|
};
|