Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
C
caosdb-webui
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
caosdb
Software
caosdb-webui
Commits
f5fc1634
Verified
Commit
f5fc1634
authored
4 years ago
by
Timm Fitschen
Browse files
Options
Downloads
Patches
Plain Diff
DOC: more code documentation
parent
85aa58b8
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!37
prepare release v0.3.1
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/core/js/form_elements.js
+126
-9
126 additions, 9 deletions
src/core/js/form_elements.js
with
126 additions
and
9 deletions
src/core/js/form_elements.js
+
126
−
9
View file @
f5fc1634
...
@@ -85,13 +85,15 @@ var form_elements = new function () {
...
@@ -85,13 +85,15 @@ var form_elements = new function () {
* The configuration for double, integer, date input elements.
* The configuration for double, integer, date input elements.
*
*
* There are specializations of this configuration object. See
* There are specializations of this configuration object. See
* {@link ReferenceDropDownConfig}
* {@link ReferenceDropDownConfig}
, {@link RangeFieldConfig}.
*
*
* @typedef {object} FieldConfig
* @typedef {object} FieldConfig
*
* @property {string} name
* @property {string} name
* @property {string} type
* @property {string} type
* @property {string} label
* @property {string} label
* @see {@link ReferenceDropDownConfig}
* @see {@link ReferenceDropDownConfig}
* @see {@link RangeFieldConfig}
*/
*/
this
.
version
=
"
0.1
"
;
this
.
version
=
"
0.1
"
;
...
@@ -117,7 +119,7 @@ var form_elements = new function () {
...
@@ -117,7 +119,7 @@ var form_elements = new function () {
this
.
get_cache_value
=
function
(
field
)
{
this
.
get_cache_value
=
function
(
field
)
{
var
ret
=
$
(
field
)
var
ret
=
$
(
field
)
.
find
(
"
:input
"
)
.
find
(
"
:input
"
)
.
val
()
.
val
()
;
if
(
!
ret
)
{
if
(
!
ret
)
{
return
null
;
return
null
;
}
else
{
}
else
{
...
@@ -297,6 +299,14 @@ var form_elements = new function () {
...
@@ -297,6 +299,14 @@ var form_elements = new function () {
return
form_elements
.
_make_option
(
entity_id
,
desc
);
return
form_elements
.
_make_option
(
entity_id
,
desc
);
}
}
/**
* Return an `option` element for a `select`.
*
* @param {string} value - the actual value of the option element.
* @param {string} label - the string which is shown for this option in the
* drop-down menu of the select input.
* @return {HTMLElement}
*/
this
.
_make_option
=
function
(
value
,
label
)
{
this
.
_make_option
=
function
(
value
,
label
)
{
const
opt_str
=
'
<option value="
'
+
value
+
'
">
'
+
label
+
const
opt_str
=
'
<option value="
'
+
value
+
'
">
'
+
label
+
"
</option>
"
;
"
</option>
"
;
...
@@ -350,6 +360,16 @@ var form_elements = new function () {
...
@@ -350,6 +360,16 @@ var form_elements = new function () {
return
ret
[
0
];
return
ret
[
0
];
}
}
/**
* Return a new select element.
*
* This function is mainly used by other factory functions, e.g. {@link
* make_reference_select} and {@link make_select_input}.
*
* @param {boolean} multiple - the `multiple` attribute of the select element.
* @param {string} name - the name of the select element.
* @return {HTMLElement}
*/
this
.
_make_select
=
function
(
multiple
,
name
)
{
this
.
_make_select
=
function
(
multiple
,
name
)
{
const
ret
=
$
(
`<select class="selectpicker form-control" name="
${
name
}
" title="Nothing selected"/>`
);
const
ret
=
$
(
`<select class="selectpicker form-control" name="
${
name
}
" title="Nothing selected"/>`
);
if
(
typeof
name
!==
"
undefined
"
)
{
if
(
typeof
name
!==
"
undefined
"
)
{
...
@@ -409,10 +429,23 @@ var form_elements = new function () {
...
@@ -409,10 +429,23 @@ var form_elements = new function () {
return
result
;
return
result
;
}
}
/**
* Call a server-side script with the content a the given form and
* return the results.
*
* Note that the form should be one generated by this form_elements
* module. Otherwise it cannot be guaranteed that the form will be
* serialized (to json) correctly.
*
* @param {string} script - the path of the script
* @param {HTMLElements} form - a form generated by this module.
* @return {ScriptingResult} the results of the call.
*/
this
.
_run_script
=
async
function
(
script
,
form
)
{
this
.
_run_script
=
async
function
(
script
,
form
)
{
const
form_objects
=
form_elements
.
form_to_object
(
form
[
0
]);
const
form_objects
=
form_elements
.
form_to_object
(
form
[
0
]);
const
json_str
=
JSON
.
stringify
(
form_objects
[
0
]);
const
json_str
=
JSON
.
stringify
(
form_objects
[
0
]);
// append non-file form fields to the request
const
params
=
{
const
params
=
{
"
-p0
"
:
{
"
-p0
"
:
{
"
filename
"
:
"
form.json
"
,
"
filename
"
:
"
form.json
"
,
...
@@ -422,6 +455,7 @@ var form_elements = new function () {
...
@@ -422,6 +455,7 @@ var form_elements = new function () {
}
}
};
};
// append files to the request
const
files
=
form_objects
[
1
];
const
files
=
form_objects
[
1
];
for
(
let
i
=
0
;
i
<
files
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
files
.
length
;
i
++
)
{
params
[
`file_
${
i
}
`
]
=
{
params
[
`file_
${
i
}
`
]
=
{
...
@@ -446,7 +480,8 @@ var form_elements = new function () {
...
@@ -446,7 +480,8 @@ var form_elements = new function () {
*/
*/
/**
/**
* Bla, TODO
* Convert the reponse of a server-side scripting call into a {@link
* ScriptingResult} object.
*
*
* @param {XMLDocument} result
* @param {XMLDocument} result
* @return {ScriptingResult}
* @return {ScriptingResult}
...
@@ -598,9 +633,20 @@ var form_elements = new function () {
...
@@ -598,9 +633,20 @@ var form_elements = new function () {
}
}
/**
/**
* generate a java script object representation of a form
* Generate a java script object representation of a form and extract the
* files from the form.
*
* The property names (aka keys) are the names of the form fields and
* subforms. The values are single strings or arrays of strings. If the
* field was had a file-type input, the value is a string identifying the
* file blob which belongs to this key.
*
*
* @function
* Subforms lead to nested objects of the same structure.
*
* @param {HTMLElement} form - a form generated by this module.
* @return {object[]} - an array of length 2. The first element is an
* object representing the fields of the form. The second contains a
* list of file blobs resulting from file inputs in the form.
*/
*/
this
.
form_to_object
=
function
(
form
)
{
this
.
form_to_object
=
function
(
form
)
{
this
.
logger
.
trace
(
"
entity form_to_json
"
,
form
);
this
.
logger
.
trace
(
"
entity form_to_json
"
,
form
);
...
@@ -635,12 +681,15 @@ var form_elements = new function () {
...
@@ -635,12 +681,15 @@ var form_elements = new function () {
var
fileList
=
child
.
files
;
var
fileList
=
child
.
files
;
if
(
fileList
.
length
>
0
)
{
if
(
fileList
.
length
>
0
)
{
for
(
let
i
=
0
;
i
<
fileList
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
fileList
.
length
;
i
++
)
{
// generate an identifyer for the file(s) of this input
value
=
name
+
"
_
"
+
fileList
[
i
].
name
;
value
=
name
+
"
_
"
+
fileList
[
i
].
name
;
if
(
typeof
data
[
name
]
===
"
undefined
"
)
{
if
(
typeof
data
[
name
]
===
"
undefined
"
)
{
// first and possibly only value
data
[
name
]
=
value
data
[
name
]
=
value
}
else
if
(
Array
.
isArray
(
data
[
name
]))
{
}
else
if
(
Array
.
isArray
(
data
[
name
]))
{
data
[
name
].
push
(
value
);
data
[
name
].
push
(
value
);
}
else
{
}
else
{
// there is a value present yet - convert to array.
data
[
name
]
=
[
data
[
name
],
value
]
data
[
name
]
=
[
data
[
name
],
value
]
}
}
files
.
push
({
files
.
push
({
...
@@ -693,6 +742,16 @@ var form_elements = new function () {
...
@@ -693,6 +742,16 @@ var form_elements = new function () {
}
}
/**
/**
* Return a new form field (or a subform).
*
* This function is intended to be called by make_form and recursively by
* other make_* functions which create subforms or other deeper structured
* form fields.
*
* This function also configures the caching, whether a form field is
* 'required' or not, and the help for each field.
*
* @param {FieldConfig} config - the configuration of the form field
* @return {HTMLElement}
* @return {HTMLElement}
*/
*/
this
.
make_form_field
=
function
(
config
)
{
this
.
make_form_field
=
function
(
config
)
{
...
@@ -834,6 +893,17 @@ var form_elements = new function () {
...
@@ -834,6 +893,17 @@ var form_elements = new function () {
}
}
/**
/**
* @typedef {object} SubFormConfig
*
* @augments FieldConfig
* @property {FieldConfig[]} fields - array of fields. The order is the
* order in which they appear in the resulting subform.
*/
/**
* Return a new subform.
*
* @param {SubFormConfig} config - the configuration of the subform.
* @return {HTMLElement}
* @return {HTMLElement}
*/
*/
this
.
make_subform
=
function
(
config
)
{
this
.
make_subform
=
function
(
config
)
{
...
@@ -1159,11 +1229,24 @@ var form_elements = new function () {
...
@@ -1159,11 +1229,24 @@ var form_elements = new function () {
}
}
/**
/**
* @typedef {object} RangeFieldConfig
*
* @augments FieldConfig
* @property {FieldConfig} from - the start point of the range. This is
* usually an integer or double input field.
* @property {FieldConfig] to - the end point of the range. This is
* usually an integer or a double input field.
*/
/**
* Return a new form field representing a range of numbers.
*
* @param {RangeFieldConfig} config
* @return {HTMLElement}
* @return {HTMLElement}
*/
*/
this
.
make_range_input
=
function
(
config
)
{
this
.
make_range_input
=
function
(
config
)
{
// TODO
// TODO
// 1. wrapp both inputs to separate it from the label into a container
// 1. wrapp both inputs to separate it from the label into a container
// 2. make two rows for each input
// 2. make two rows for each input
// 3. make inline-block for all included elements
// 3. make inline-block for all included elements
...
@@ -1218,6 +1301,9 @@ var form_elements = new function () {
...
@@ -1218,6 +1301,9 @@ var form_elements = new function () {
}
}
/**
/**
* Return a new date field.
*
* @param {FieldConfig} config
* @return {HTMLElement}
* @return {HTMLElement}
*/
*/
this
.
make_date_input
=
function
(
config
)
{
this
.
make_date_input
=
function
(
config
)
{
...
@@ -1225,6 +1311,9 @@ var form_elements = new function () {
...
@@ -1225,6 +1311,9 @@ var form_elements = new function () {
}
}
/**
/**
* Return a new text field.
*
* @param {FieldConfig} config
* @return {HTMLElement}
* @return {HTMLElement}
*/
*/
this
.
make_text_input
=
function
(
config
)
{
this
.
make_text_input
=
function
(
config
)
{
...
@@ -1237,7 +1326,7 @@ var form_elements = new function () {
...
@@ -1237,7 +1326,7 @@ var form_elements = new function () {
*
*
* `config.type` is set to "number" and overrides any other type.
* `config.type` is set to "number" and overrides any other type.
*
*
* @param {
form_elements.input_c
onfig} config.
* @param {
FieldC
onfig} config.
* @returns {HTMLElement} a double form field.
* @returns {HTMLElement} a double form field.
*/
*/
this
.
make_double_input
=
function
(
config
)
{
this
.
make_double_input
=
function
(
config
)
{
...
@@ -1255,7 +1344,7 @@ var form_elements = new function () {
...
@@ -1255,7 +1344,7 @@ var form_elements = new function () {
*
*
* `config.type` is set to "number" and overrides any other type.
* `config.type` is set to "number" and overrides any other type.
*
*
* @param {
form_elements.input_c
onfig} config.
* @param {
FieldC
onfig} config.
* @returns {HTMLElement} an integer form field.
* @returns {HTMLElement} an integer form field.
*/
*/
this
.
make_integer_input
=
function
(
config
)
{
this
.
make_integer_input
=
function
(
config
)
{
...
@@ -1271,6 +1360,18 @@ var form_elements = new function () {
...
@@ -1271,6 +1360,18 @@ var form_elements = new function () {
}
}
/**
/**
* @typedef {object} FileFieldConfig
*
* @augments FieldConfig
* @property {boolean} [multiple=false] - whether to accept multiple files.
* @property {string} [accept] - a comma separated list of file extensions
* which are accepted (exclusively).
*/
/**
* Return a new form field for a file upload.
*
* @param {FileFieldConfig} config - configuration for this form field.
* @return {HTMLElement}
* @return {HTMLElement}
*/
*/
this
.
make_file_input
=
function
(
config
)
{
this
.
make_file_input
=
function
(
config
)
{
...
@@ -1290,10 +1391,26 @@ var form_elements = new function () {
...
@@ -1290,10 +1391,26 @@ var form_elements = new function () {
return
ret
;
return
ret
;
}
}
/**
* @typedef {object} SelectOptionConfig
*
* @property {string} value - the value of the select option.
* @property {string} [label] - a visible representation (think:
* description) of the value of the select option. defaults to the
* value itself.
*/
/**
* @typedef {object} SelectFieldConfig
*
* @augments {FieldConfig}
* @property {SelectOptionConfig} - options
*/
/**
/**
* Return a select field.
* Return a select field.
*
*
* @param {
form_elements.input_c
onfig} config
* @param {
SelectFieldC
onfig} config
* @returns {HTMLElement} a select field.
* @returns {HTMLElement} a select field.
*/
*/
this
.
make_select_input
=
function
(
config
)
{
this
.
make_select_input
=
function
(
config
)
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment