diff --git a/modules/ui/resources-editor.js b/modules/ui/resources-editor.js
index fb60e075..840d15b1 100644
--- a/modules/ui/resources-editor.js
+++ b/modules/ui/resources-editor.js
@@ -63,15 +63,20 @@ function editResources() {
if (bonus === 'cavalry') return ``;
}
- body.addEventListener("click", function(ev) {
- const el = ev.target, cl = el.classList, line = el.parentNode, i = +line.dataset.id;
+ body.addEventListener("click", function (ev) {
+ const el = ev.target,
+ cl = el.classList,
+ line = el.parentNode,
+ i = +line.dataset.id;
const resource = Resources.get(+line.dataset.id);
if (cl.contains("resourceCategory")) return changeCategory(resource, line, el);
if (cl.contains("resourceModel")) return changeModel(resource, line, el);
});
- body.addEventListener("change", function(ev) {
- const el = ev.target, cl = el.classList, line = el.parentNode;
+ body.addEventListener("change", function (ev) {
+ const el = ev.target,
+ cl = el.classList,
+ line = el.parentNode;
const resource = Resources.get(+line.dataset.id);
if (cl.contains("resourceName")) return changeName(resource, el.value, line);
});
@@ -484,10 +489,17 @@ function editResources() {
`;
- $("#alert").dialog({resizable: false, title: "Change category",
+ $("#alert").dialog({
+ resizable: false,
+ title: "Change category",
buttons: {
- Cancel: function() {$(this).dialog("close");},
- Apply: function() {applyChanges(); $(this).dialog("close");}
+ Cancel: function () {
+ $(this).dialog("close");
+ },
+ Apply: function () {
+ applyChanges();
+ $(this).dialog("close");
+ }
}
});
@@ -502,20 +514,26 @@ function editResources() {
function changeModel(resource, line, el) {
const defaultModels = Resources.defaultModels;
const model = line.dataset.model;
- const modelOptions = Object.keys(defaultModels).map(m => ``).join("");
+ const modelOptions = Object.keys(defaultModels).sort().map(m => ``).join("");
const wikiURL = "https://github.com/Azgaar/Fantasy-Map-Generator/wiki/Resources:-spread-functions";
+ const onSelect = "resouceModelFunction.innerHTML = Resources.defaultModels[this.value] || ' '; resouceModelCustomName.value = ''; resouceModelCustomFunction.value = ''";
alertMessage.innerHTML = `
@@ -523,23 +541,29 @@ function editResources() {
`;
- $("#alert").dialog({resizable: false, title: "Change spread model",
+ $("#alert").dialog({
+ resizable: false,
+ title: "Change spread model",
buttons: {
Help: () => openURL(wikiURL),
- Cancel: function() {$(this).dialog("close");},
- Apply: function() {applyChanges(this);}
+ Cancel: function () {
+ $(this).dialog("close");
+ },
+ Apply: function () {
+ applyChanges(this);
+ }
}
});
@@ -548,17 +572,29 @@ function editResources() {
const customFn = document.getElementById("resouceModelCustomFunction").value;
const message = document.getElementById("resourceModelMessage");
- if (customName && !customFn) return message.innerHTML = "Error. Custom model function is required";
- if (!customName && customFn) return message.innerHTML = "Error. Custom model name is required";
+ if (customName && !customFn) return (message.innerHTML = "Error. Custom model function is required");
+ if (!customName && customFn) return (message.innerHTML = "Error. Custom model name is required");
message.innerHTML = "";
if (customName && customFn) {
+ try {
+ const allMethods = "{" + Object.keys(Resources.methods).join(", ") + "}";
+ const fn = new Function(allMethods, "return " + customFn);
+ fn({...Resources.methods});
+ } catch (err) {
+ message.innerHTML = "Error. " + err.message || err;
+ return;
+ }
+
resource.model = line.dataset.model = el.innerHTML = customName;
resource.custom = customFn;
+ $(dialog).dialog("close");
return;
}
const model = document.getElementById("resouceModelSelect").value;
+ if (!model) return (message.innerHTML = "Error. Model is not set");
+
resource.model = line.dataset.model = el.innerHTML = model;
$(dialog).dialog("close");
}
@@ -568,14 +604,14 @@ function editResources() {
const circle = this.querySelector("circle");
const resource = Resources.get(+this.parentNode.dataset.id);
- const callback = function(fill) {
+ const callback = function (fill) {
const stroke = Resources.getStroke(fill);
circle.setAttribute("fill", fill);
circle.setAttribute("stroke", stroke);
resource.color = fill;
resource.stroke = stroke;
goods.selectAll(`circle[data-i='${resource.i}']`).attr("fill", fill).attr("stroke", stroke);
- }
+ };
openPicker(resource.color, callback, {allowHatching: false});
}