Commit fc29eb28 authored by Rafael Monnerat's avatar Rafael Monnerat

Fixup Parameter form (float) and add testing gadget

See merge request nexedi/slapos.core!384
parents 2e5320ef 5a773e1b
...@@ -9,6 +9,7 @@ url_list = [ ...@@ -9,6 +9,7 @@ url_list = [
"gadget_erp5_page_map.css", "gadget_erp5_page_map.css",
"gadget_erp5_page_map.html", "gadget_erp5_page_map.html",
"gadget_erp5_page_map.js", "gadget_erp5_page_map.js",
"gadget_slapos_login_page.css",
"gadget_erp5_page_slap_accept_upgrade_decision.html", "gadget_erp5_page_slap_accept_upgrade_decision.html",
"gadget_erp5_page_slap_accept_upgrade_decision.js", "gadget_erp5_page_slap_accept_upgrade_decision.js",
"gadget_erp5_page_slap_add_compute_node.html", "gadget_erp5_page_slap_add_compute_node.html",
...@@ -216,7 +217,9 @@ url_list = [ ...@@ -216,7 +217,9 @@ url_list = [
"slapos_load_meta_schema_xml.json", "slapos_load_meta_schema_xml.json",
"slapos_load_meta_schema_json_in_xml.json", "slapos_load_meta_schema_json_in_xml.json",
"gadget_erp5_page_slap_language_view.js", "gadget_erp5_page_slap_language_view.js",
"gadget_erp5_page_slap_language_view.html" "gadget_erp5_page_slap_language_view.html",
"gadget_erp5_page_slap_test_parameter_form.js",
"gadget_erp5_page_slap_test_parameter_form.html"
] ]
return url_list return url_list
...@@ -45,19 +45,28 @@ ...@@ -45,19 +45,28 @@
value: "", value: "",
selected: (default_value === undefined) selected: (default_value === undefined)
})], })],
option_index; option_index,
data_format = "string";
if (json_field.type === "integer" || json_field.type === "number") {
data_format = "number";
}
for (option_index in json_field['enum']) { for (option_index in json_field['enum']) {
if (json_field['enum'].hasOwnProperty(option_index)) { if (json_field['enum'].hasOwnProperty(option_index)) {
option_list.push(domsugar('option', { option_list.push(domsugar('option', {
value: json_field['enum'][option_index], value: json_field['enum'][option_index],
text: json_field['enum'][option_index], text: json_field['enum'][option_index],
selected: (json_field['enum'][option_index] === default_value) "data-format": data_format,
selected: (
json_field['enum'][option_index].toString() === default_value
)
})); }));
} }
} }
return domsugar('select', { return domsugar('select', {
size: 1 size: 1,
"data-format": data_format
}, option_list); }, option_list);
} }
...@@ -105,7 +114,6 @@ ...@@ -105,7 +114,6 @@
} }
function render_field(json_field, default_value) { function render_field(json_field, default_value) {
if (json_field['enum'] !== undefined) { if (json_field['enum'] !== undefined) {
return render_selection(json_field, default_value); return render_selection(json_field, default_value);
} }
...@@ -133,27 +141,24 @@ ...@@ -133,27 +141,24 @@
return render_textarea(json_field, default_value, "string"); return render_textarea(json_field, default_value, "string");
} }
var value, var domsugar_input_dict = {};
type;
if (default_value !== undefined) { if (default_value !== undefined) {
value = default_value; domsugar_input_dict.value = default_value;
} }
if (json_field.type === "integer") { if (json_field.type === "integer") {
type = "number"; domsugar_input_dict.type = "number";
} else if (json_field.type === "number") { } else if (json_field.type === "number") {
type = "number"; domsugar_input_dict.type = "number";
domsugar_input_dict.step = "any";
} else if (json_field.type === "hidden") { } else if (json_field.type === "hidden") {
type = "hidden"; domsugar_input_dict.type = "hidden";
} else { } else {
type = "text"; domsugar_input_dict.type = "text";
} }
return domsugar('input', { return domsugar('input', domsugar_input_dict);
value: value,
type: type
});
} }
function render_subform(json_field, default_dict, root, path, restricted) { function render_subform(json_field, default_dict, root, path, restricted) {
...@@ -333,17 +338,27 @@ ...@@ -333,17 +338,27 @@
$(element.querySelectorAll(".slapos-parameter")).each(function (key, input) { $(element.querySelectorAll(".slapos-parameter")).each(function (key, input) {
if (input.value !== "") { if (input.value !== "") {
if (input.type === 'number') { if (input.type === 'number') {
json_dict[input.name] = parseInt(input.value, 10); json_dict[input.name] = parseFloat(input.value);
} else if (input.value === "true") { } else if (input.value === "true") {
json_dict[input.name] = true; json_dict[input.name] = true;
} else if (input.value === "false") { } else if (input.value === "false") {
json_dict[input.name] = false; json_dict[input.name] = false;
} else if (input.tagName === "TEXTAREA") { } else if (input.tagName === "TEXTAREA") {
if (input["data-format"] === "string") { if (input.getAttribute("data-format") === "string") {
json_dict[input.name] = input.value; json_dict[input.name] = input.value;
} else { } else {
json_dict[input.name] = input.value.split('\n'); json_dict[input.name] = input.value.split('\n');
} }
} else if (input.tagName === "SELECT") {
if (input.getAttribute("data-format") === "number") {
json_dict[input.name] = parseFloat(input.value);
} else if (input.getAttribute("data-format") === "integer") {
// Don't use parseInt since it will round the value, modifing the
// use input. So we keep it the value.
json_dict[input.name] = parseFloat(input.value);
} else {
json_dict[input.name] = input.value;
}
} else { } else {
json_dict[input.name] = input.value; json_dict[input.name] = input.value;
} }
......
...@@ -280,7 +280,7 @@ ...@@ -280,7 +280,7 @@
</item> </item>
<item> <item>
<key> <string>serial</string> </key> <key> <string>serial</string> </key>
<value> <string>1000.2322.46712.16657</string> </value> <value> <string>1000.3907.45649.58794</string> </value>
</item> </item>
<item> <item>
<key> <string>state</string> </key> <key> <string>state</string> </key>
...@@ -298,7 +298,7 @@ ...@@ -298,7 +298,7 @@
</tuple> </tuple>
<state> <state>
<tuple> <tuple>
<float>1651775757.92</float> <float>1651866969.39</float>
<string>UTC</string> <string>UTC</string>
</tuple> </tuple>
</state> </state>
......
<!DOCTYPE html>
<html>
<!--
data-i18n=Title
data-i18n=Instance Parameter
-->
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<title>Site List</title>
<!-- renderjs -->
<script src="rsvp.js" type="text/javascript"></script>
<script src="renderjs.js" type="text/javascript"></script>
<!-- custom script -->
<script src="gadget_erp5_page_slap_test_parameter_form.js" type="text/javascript"></script>
</head>
<body>
<form class="save_form ui-body-c" novalidate>
<button type="submit" class="ui-btn ui-btn-b ui-btn-inline
ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button>
<div data-gadget-url="gadget_erp5_form.html"
data-gadget-scope="form_view"
data-gadget-sandbox="public">
</div>
</form>
</body>
</html>
/*global window, rJS, RSVP, btoa */
/*jslint nomen: true, indent: 2, maxerr: 3, sub:true */
(function (window, rJS, RSVP) {
"use strict";
rJS(window)
/////////////////////////////////////////////////////////////////
// Acquired methods
/////////////////////////////////////////////////////////////////
.declareAcquiredMethod("updateHeader", "updateHeader")
.declareAcquiredMethod("updatePanel", "updatePanel")
.declareAcquiredMethod("getSetting", "getSetting")
.declareAcquiredMethod("getUrlFor", "getUrlFor")
.declareAcquiredMethod("redirect", "redirect")
.declareAcquiredMethod("jio_post", "jio_post")
.declareAcquiredMethod("jio_get", "jio_get")
.declareAcquiredMethod("jio_putAttachment", "jio_putAttachment")
.declareAcquiredMethod("notifySubmitting", "notifySubmitting")
.declareAcquiredMethod("notifySubmitted", 'notifySubmitted')
.declareAcquiredMethod("getTranslationList", "getTranslationList")
/////////////////////////////////////////////////////////////////
// declared methods
/////////////////////////////////////////////////////////////////
.allowPublicAcquisition('notifySubmit', function () {
return this.triggerSubmit();
})
.onEvent('submit', function () {
var gadget = this;
return gadget.notifySubmitting()
.push(function () {
return gadget.getDeclaredGadget('form_view');
})
.push(function (form_gadget) {
return form_gadget.checkValidity()
.push(function (is_valid) {
if (!is_valid) {
return null;
}
return form_gadget.getContent();
});
})
.push(function (doc) {
if (doc === null) {
return gadget.notifySubmitted({message: "Doc is empty", status: 'error'});
}
return gadget.getSetting("hateoas_url")
.push(function () {
return gadget.notifySubmitted({message: "All is fine, we reseted your form.", status: 'success'})
.push(function () {
return gadget.redirect({"command": "change",
"options": {"url_string": doc.url_string,
"parameter_output": doc.text_content}});
});
}, function (error) {
if (error.target.status === 409) {
return gadget.notifySubmitted({message: "Error 409", status: 'error'});
}
if (error.target.status === 400) {
return gadget.notifySubmitted({message: "Error 400", status: 'error'});
}
});
});
})
.declareMethod("triggerSubmit", function () {
return this.element.querySelector('button[type="submit"]').click();
})
.declareMethod("render", function (options) {
var gadget = this;
if (options.url_string === undefined) {
options.url_string = "";
}
return new RSVP.Queue()
.push(function () {
return RSVP.all([
gadget.getDeclaredGadget('form_view')
]);
})
.push(function (result) {
var parameter_hash,
parameter_dict,
default_url;
if (options.url_string === "") {
default_url = "https://lab.nexedi.com/rafael/testing-slapos-schemas/raw/master/software/simpledemo/software.cfg"
} else {
default_url = options.url_string
}
if (options.parameter_output === undefined) {
parameter_hash = btoa('<?xml version="1.0" encoding="utf-8" ?><instance></instance>');
} else {
parameter_hash = btoa(options.parameter_output);
}
parameter_dict = {
'parameter' : {
'json_url': options.url_string.split('?')[0] + ".json",
'parameter_hash': parameter_hash,
'restricted_softwaretype': false
}
};
return result[0].render({
erp5_document: {
"_embedded": {"_view": {
"my_url_string": {
"description": "Software Release Url",
"title": "Software Release URL",
"default": default_url,
"css_class": "",
"required": 1,
"editable": options.url_string === "",
"key": "url_string",
"hidden": 0,
"type": "StringField"
},
"your_text_content": {
"description": "",
"title": "Parameters",
"default": parameter_dict,
"css_class": "",
"required": 1,
"editable": options.url_string !== "",
"url": "gadget_erp5_page_slap_parameter_form.html",
"sandbox": "",
"key": "text_content",
"hidden": options.url_string === "",
"type": "GadgetField"
},
"your_parameter_output": {
"description": "",
"title": "Parameters Output",
"default": options.parameter_output,
"css_class": "",
"required": 0,
"editable": 0,
"sandbox": "",
"key": "parameter_output",
"hidden": options.parameter_output === undefined,
"type": "TextAreaField"
}
}},
"_links": {
"type": {
// form_list display portal_type in header
name: ""
}
}
},
form_definition: {
group_list: [[
"center",
[["my_url_string"], ["your_parameter_output"], ["your_text_content"]]
]]
}
})
.push(function () {
return gadget.updateHeader({
page_title: "Parameter testing page",
submit_action: true
});
});
});
});
}(window, rJS, RSVP));
\ No newline at end of file
...@@ -214,6 +214,8 @@ web_page_module/rjs_slapos_load_meta_schema_xml_in_json_json ...@@ -214,6 +214,8 @@ web_page_module/rjs_slapos_load_meta_schema_xml_in_json_json
web_page_module/rjs_slapos_load_meta_schema_xml_json web_page_module/rjs_slapos_load_meta_schema_xml_json
web_page_module/rjs_slapos_load_software_schema_json web_page_module/rjs_slapos_load_software_schema_json
web_page_module/rjs_gadget_slapos_login_page_css web_page_module/rjs_gadget_slapos_login_page_css
web_page_module/rjs_gadget_erp5_page_slap_test_parameter_form_js
web_page_module/rjs_gadget_erp5_page_slap_test_parameter_form_html
web_page_module/rjs_tv4_min_js web_page_module/rjs_tv4_min_js
web_page_module/rjs_vkbeautify_js web_page_module/rjs_vkbeautify_js
web_site_module/hostingjs web_site_module/hostingjs
......
...@@ -89,6 +89,8 @@ web_page_module/rjs_gadget_erp5_page_slap_organisation_view_html ...@@ -89,6 +89,8 @@ web_page_module/rjs_gadget_erp5_page_slap_organisation_view_html
web_page_module/rjs_gadget_erp5_page_slap_organisation_view_js web_page_module/rjs_gadget_erp5_page_slap_organisation_view_js
web_page_module/rjs_gadget_erp5_page_slap_parameter_form_css web_page_module/rjs_gadget_erp5_page_slap_parameter_form_css
web_page_module/rjs_gadget_erp5_page_slap_parameter_form_html web_page_module/rjs_gadget_erp5_page_slap_parameter_form_html
web_page_module/rjs_gadget_erp5_page_slap_parameter_form_html
web_page_module/rjs_gadget_erp5_page_slap_parameter_form_js
web_page_module/rjs_gadget_erp5_page_slap_parameter_form_js web_page_module/rjs_gadget_erp5_page_slap_parameter_form_js
web_page_module/rjs_gadget_erp5_page_slap_parameter_form_zh_html web_page_module/rjs_gadget_erp5_page_slap_parameter_form_zh_html
web_page_module/rjs_gadget_erp5_page_slap_payment_result_html web_page_module/rjs_gadget_erp5_page_slap_payment_result_html
...@@ -140,6 +142,8 @@ web_page_module/rjs_gadget_erp5_page_slap_start_instance_tree_js ...@@ -140,6 +142,8 @@ web_page_module/rjs_gadget_erp5_page_slap_start_instance_tree_js
web_page_module/rjs_gadget_erp5_page_slap_stop_instance_tree_html web_page_module/rjs_gadget_erp5_page_slap_stop_instance_tree_html
web_page_module/rjs_gadget_erp5_page_slap_stop_instance_tree_js web_page_module/rjs_gadget_erp5_page_slap_stop_instance_tree_js
web_page_module/rjs_gadget_erp5_page_slap_support_request_view_html web_page_module/rjs_gadget_erp5_page_slap_support_request_view_html
web_page_module/rjs_gadget_erp5_page_slap_test_parameter_form_html
web_page_module/rjs_gadget_erp5_page_slap_test_parameter_form_js
web_page_module/rjs_gadget_erp5_page_slap_ticket_list_html web_page_module/rjs_gadget_erp5_page_slap_ticket_list_html
web_page_module/rjs_gadget_erp5_page_slap_ticket_list_js web_page_module/rjs_gadget_erp5_page_slap_ticket_list_js
web_page_module/rjs_gadget_erp5_page_slap_ticket_view_js web_page_module/rjs_gadget_erp5_page_slap_ticket_view_js
......
...@@ -152,23 +152,6 @@ ...@@ -152,23 +152,6 @@
<td>//input[@name="//kvm-partition-dict/KVM-CLUSTER-INSTANCE-0/disk-size"]</td> <td>//input[@name="//kvm-partition-dict/KVM-CLUSTER-INSTANCE-0/disk-size"]</td>
<td>10</td> <td>10</td>
</tr> </tr>
<tr>
<td>waitForElementPresent</td>
<td>//select[@name="//kvm-partition-dict/KVM-CLUSTER-INSTANCE-0/boot-image-url-select"]</td>
<td></td>
</tr>
<tr>
<td>assertElementPresent</td>
<td>//select[@name="//kvm-partition-dict/KVM-CLUSTER-INSTANCE-0/boot-image-url-select"]</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>//select[@name="//kvm-partition-dict/KVM-CLUSTER-INSTANCE-0/boot-image-url-select"]</td>
<td>Debian Buster 10.5 netinst x86_64</td>
</tr>
<tr> <tr>
<td>waitForElementPresent</td> <td>waitForElementPresent</td>
<td>//input[@name="ADD//kvm-partition-dict"]</td> <td>//input[@name="ADD//kvm-partition-dict"]</td>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment