// Continue in a callback, so that there's not a stale download
// link hanging around while we process.
- setTimeout(function(the_this) { (function() {
+ setTimeout(function() {
// Get params from form
- var params = [];
+ var params = {};
for (var i = 0; i < this.user_params.length; i++) {
var as_string = this.form.elements["param"+i].value;
var as_num = +as_string;
- params[i] = isNaN(as_num) ? as_string : as_num;
+ params[this.user_params[i][0]] = isNaN(as_num) ? as_string : as_num;
}
- this.points = this.user_function.apply(null, params);
+ this.points = this.user_function.call(null, params);
this.validate(this.points);
this.ui.appendChild(download_link);
setTimeout(function() { download_link.setAttribute("style", "-webkit-transition: background-color 0.4s; -moz-transition: background-color 0.4s; -o-transition: background-color 0.4s; -ms-transition: background-color 0.4s; transition: background-color 0.4s; background-color: inherit"); }, 0);
- }).call(the_this); }, 0, this); // (We were in a callback this whole time, remember?)
+ }.bind(this), 0); // (We were in a callback this whole time, remember?)
},
framework: function (f, params) {
this.user_function = f;
tr = document.createElement("tr");
table.appendChild(tr);
var td = document.createElement("td");
- td.appendChild(document.createTextNode(params[i][0]));
+ var description;
+ if (params[i].length > 2) {
+ description = params[i][2];
+ } else {
+ description = params[i][0];
+ description = description[0].toUpperCase() + description.substr(1);
+ description = description.replace(/_(.)/g, function(_, c) {
+ return " " + c.toUpperCase();
+ });
+ description = description.replace("Num ", "Number of ");
+ }
+ td.appendChild(document.createTextNode(description));
tr.appendChild(td);
td = document.createElement("td");
var input = document.createElement("input");