//EXAMPLE
//helper function to get URL parameters.
var urlParams;
(window.onpopstate = function () {
var match,
pl = /\+/g, // Regex for replacing addition symbol with a space
search = /([^&=]+)=?([^&]*)/g,
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
query = window.location.search.substring(1);
urlParams = {};
while (match = search.exec(query))
urlParams[decode(match[1])] = decode(match[2]);
})();
/*------------------*/
var config;
if("config" in urlParams) {
config = urlParams['config'];
} else {
var config = 'reactor_config.json'; //random default
}
$.ajax({
url: config,
dataType: 'json',
cache: false,
error: function(data) {
console.log(data);
},
success: function(data) {
//map through multiple contracts (this includes multiple ones in 1 file + different files).
//console.log(data);
var total_compiled = {};
var addresses = {};
var templates = {};
var options = {};
Object.keys(data["contracts"]).map(function(contract_name) { //iterate through multiple contracts based on keys
$.ajax({
//fetch .sol and compile it, adding compiled result & its specified address to separate dictionaries
//3 parts: the compiled code from .sols. The address mapping. The templates.
url: data["contracts"][contract_name].path,
dataType: 'text',
cache: false,
async: false,
success: function(contract) {
/*
This is slightly "hacky". If one file has multiple contracts, it returns one dictionary.
This concatenates them in the scenario where there are multiple files as well.
*/
compiled = web3.eth.compile.solidity(contract);
Object.keys(compiled).map(function(compiled_contract_name) {
if(total_compiled.hasOwnProperty(compiled_contract_name) == false) { //not yet inserted
addresses[compiled_contract_name] = data["contracts"][compiled_contract_name].address; //not sure why I've been doing [] & . notation here.
templates[compiled_contract_name] = data["contracts"][compiled_contract_name].template;
options[compiled_contract_name] = {"template_overlay": data["contracts"][compiled_contract_name].template_overlay};
}
});
$.extend(total_compiled, compiled);
}
});
});
console.log(total_compiled);
console.log(addresses);
console.log(templates);
console.log(options);
$.ajax({
url: "../config.json",
dataType: 'json',
cache: false,
})
.done(function(data) {
React.render(, document.getElementById('top'));
React.render(, document.getElementById('contracts'));
});
}
});