Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
rjs_json_form
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Jérome Perrin
rjs_json_form
Commits
f8b40a42
Commit
f8b40a42
authored
Feb 23, 2018
by
Boris Kocherov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
initial add
@rafael
Rafael Monnerat work
parents
Changes
5
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
558 additions
and
0 deletions
+558
-0
gadget_erp5_page_slap_load_schema.html
gadget_erp5_page_slap_load_schema.html
+23
-0
gadget_erp5_page_slap_load_schema.js
gadget_erp5_page_slap_load_schema.js
+280
-0
gadget_erp5_page_slap_parameter_form.css
gadget_erp5_page_slap_parameter_form.css
+203
-0
gadget_erp5_page_slap_parameter_form.html
gadget_erp5_page_slap_parameter_form.html
+52
-0
gadget_erp5_page_slap_parameter_form.js
gadget_erp5_page_slap_parameter_form.js
+0
-0
No files found.
gadget_erp5_page_slap_load_schema.html
0 → 100644
View file @
f8b40a42
<!DOCTYPE html>
<html
manifest=
"gadget_erp5.appcache"
>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1"
>
<title>
ERP5
</title>
<link
rel=
"shortcut icon"
href=
"favicon.ico"
>
<script
src=
"rsvp.js"
type=
"text/javascript"
></script>
<script
src=
"renderjs.js"
type=
"text/javascript"
></script>
<script
src=
"URI.js"
type=
"text/javascript"
></script>
<script
src=
"jquery.js"
type=
"text/javascript"
></script>
<script
src=
"tv4.min.js"
type=
"text/javascript"
></script>
<script
src=
"URI.js"
type=
"text/javascript"
></script>
<script
src=
"jio.js"
type=
"text/javascript"
></script>
<script
src=
"gadget_erp5_page_slap_load_schema.js"
type=
"text/javascript"
></script>
</head>
<body>
<div
/>
</body>
</html>
\ No newline at end of file
gadget_erp5_page_slap_load_schema.js
0 → 100644
View file @
f8b40a42
/*jslint nomen: true, maxlen: 200, indent: 2*/
/*global window, rJS, console, RSVP, jQuery, jIO, tv4, URI, JSON, $ */
(
function
(
window
,
rJS
,
$
,
RSVP
)
{
"
use strict
"
;
var
gk
=
rJS
(
window
);
function
getJSON
(
url
)
{
var
protocol
=
URI
(
url
).
protocol
();
if
(
protocol
===
"
http
"
||
protocol
===
"
https
"
)
{
if
(
URI
(
window
.
location
).
protocol
()
!==
protocol
)
{
throw
new
Error
(
"
You cannot mixed http and https calls
"
);
}
}
return
RSVP
.
Queue
()
.
push
(
function
()
{
return
jIO
.
util
.
ajax
({
url
:
url
})
.
then
(
function
(
evt
)
{
return
evt
.
target
.
responseText
;
});
});
}
function
resolveLocalReference
(
ref
,
schema
)
{
// 2 here is for #/
var
i
,
ref_path
=
ref
.
substr
(
2
,
ref
.
length
),
parts
=
ref_path
.
split
(
"
/
"
);
if
(
parts
.
length
===
1
&&
parts
[
0
]
===
""
)
{
// It was uses #/ to reference the entire json so just return it.
return
schema
;
}
for
(
i
=
0
;
i
<
parts
.
length
;
i
+=
1
)
{
schema
=
schema
[
parts
[
i
]];
}
return
schema
;
}
function
resolveReference
(
partial_schema
,
schema
,
base_url
)
{
var
parts
,
external_schema
,
ref
=
partial_schema
.
$ref
;
if
(
ref
===
undefined
)
{
return
RSVP
.
Queue
().
push
(
function
()
{
return
partial_schema
;
});
}
if
(
ref
.
substr
(
0
,
1
)
===
"
#
"
)
{
return
RSVP
.
Queue
().
push
(
function
()
{
return
resolveLocalReference
(
ref
,
schema
);
});
}
return
RSVP
.
Queue
().
push
(
function
()
{
if
(
URI
(
ref
).
protocol
()
===
""
)
{
if
(
base_url
!==
undefined
)
{
ref
=
base_url
+
"
/
"
+
ref
;
}
}
return
getJSON
(
ref
);
})
.
push
(
function
(
json
)
{
external_schema
=
JSON
.
parse
(
json
);
parts
=
ref
.
split
(
"
#
"
);
ref
=
"
#
"
+
parts
[
1
];
return
resolveLocalReference
(
ref
,
external_schema
);
});
}
function
clone
(
obj
)
{
return
JSON
.
parse
(
JSON
.
stringify
(
obj
));
}
// Inspired from https://github.com/nexedi/dream/blob/master/dream/platform/src/jsplumb/jsplumb.js#L398
function
expandSchema
(
json_schema
,
full_schema
,
base_url
)
{
var
i
,
expanded_json_schema
=
clone
(
json_schema
)
||
{};
if
(
!
expanded_json_schema
.
properties
)
{
expanded_json_schema
.
properties
=
{};
}
return
RSVP
.
Queue
().
push
(
function
()
{
if
(
json_schema
.
$ref
)
{
return
resolveReference
(
json_schema
,
full_schema
,
base_url
)
.
push
(
function
(
remote_schema
)
{
return
expandSchema
(
remote_schema
,
full_schema
,
base_url
);
}).
push
(
function
(
referencedx
)
{
$
.
extend
(
expanded_json_schema
,
referencedx
);
delete
expanded_json_schema
.
$ref
;
return
true
;
});
}
return
true
;
}).
push
(
function
()
{
var
property
,
queue
=
RSVP
.
Queue
();
function
wrapperResolveReference
(
p
)
{
return
resolveReference
(
json_schema
.
properties
[
p
],
full_schema
,
base_url
).
push
(
function
(
external_schema
)
{
// console.log(p);
return
expandSchema
(
external_schema
,
full_schema
,
base_url
)
.
push
(
function
(
referencedx
)
{
$
.
extend
(
expanded_json_schema
.
properties
[
p
],
referencedx
);
if
(
json_schema
.
properties
[
p
].
$ref
)
{
delete
expanded_json_schema
.
properties
[
p
].
$ref
;
}
return
referencedx
;
});
});
}
// expand ref in properties
for
(
property
in
json_schema
.
properties
)
{
if
(
json_schema
.
properties
.
hasOwnProperty
(
property
))
{
queue
.
push
(
wrapperResolveReference
.
bind
(
this
,
property
)
);
}
}
return
queue
;
})
.
push
(
function
()
{
var
zqueue
=
RSVP
.
Queue
();
function
wrapperExpandSchema
(
p
)
{
return
expandSchema
(
json_schema
.
allOf
[
p
],
full_schema
,
base_url
).
push
(
function
(
referencedx
)
{
if
(
referencedx
.
properties
)
{
$
.
extend
(
expanded_json_schema
.
properties
,
referencedx
.
properties
);
delete
referencedx
.
properties
;
}
$
.
extend
(
expanded_json_schema
,
referencedx
);
});
}
if
(
json_schema
.
allOf
)
{
for
(
i
=
0
;
i
<
json_schema
.
allOf
.
length
;
i
+=
1
)
{
zqueue
.
push
(
wrapperExpandSchema
.
bind
(
this
,
i
));
}
}
return
zqueue
;
})
.
push
(
function
()
{
if
(
expanded_json_schema
.
allOf
)
{
delete
expanded_json_schema
.
allOf
;
}
if
(
expanded_json_schema
.
$ref
)
{
delete
expanded_json_schema
.
$ref
;
}
// console.log(expanded_json_schema);
return
clone
(
expanded_json_schema
);
});
}
function
getMetaJSONSchema
()
{
return
getJSON
(
"
slapos_load_meta_schema.json
"
);
}
function
validateJSONSchema
(
json
,
base_url
)
{
return
getMetaJSONSchema
()
.
push
(
function
(
meta_schema
)
{
if
(
!
tv4
.
validate
(
json
,
meta_schema
))
{
throw
new
Error
(
"
Non valid JSON schema
"
+
json
);
}
return
JSON
.
parse
(
json
);
})
.
push
(
function
(
schema
)
{
return
expandSchema
(
schema
,
schema
,
base_url
);
});
}
gk
.
declareMethod
(
"
loadJSONSchema
"
,
function
(
url
)
{
return
getJSON
(
url
)
.
push
(
function
(
json
)
{
var
base_url
,
url_uri
;
url_uri
=
URI
(
url
);
base_url
=
url_uri
.
path
().
split
(
"
/
"
);
base_url
.
pop
();
base_url
=
url
.
split
(
url_uri
.
path
())[
0
]
+
base_url
.
join
(
"
/
"
);
return
validateJSONSchema
(
json
,
base_url
);
});
})
.
declareMethod
(
"
loadSoftwareJSON
"
,
function
(
url
)
{
return
getJSON
(
url
)
.
push
(
function
(
json
)
{
return
JSON
.
parse
(
json
);
});
})
.
declareMethod
(
"
validateJSONForSoftwareType
"
,
function
(
schema_url
,
software_type
,
generated_json
)
{
return
getJSON
(
schema_url
)
.
push
(
function
(
json
)
{
return
JSON
.
parse
(
json
);
})
.
push
(
function
(
json_object
)
{
var
parameter_schema_url
,
st
,
base_url
,
url_uri
=
URI
(
schema_url
);
for
(
st
in
json_object
[
"
software-type
"
])
{
if
(
json_object
[
"
software-type
"
].
hasOwnProperty
(
st
))
{
if
(
st
===
software_type
)
{
parameter_schema_url
=
json_object
[
"
software-type
"
][
st
].
request
;
}
}
}
if
(
URI
(
parameter_schema_url
).
protocol
()
===
""
)
{
base_url
=
url_uri
.
path
().
split
(
"
/
"
);
base_url
.
pop
();
base_url
=
schema_url
.
split
(
url_uri
.
path
())[
0
]
+
base_url
.
join
(
"
/
"
);
if
(
base_url
!==
undefined
)
{
parameter_schema_url
=
base_url
+
"
/
"
+
parameter_schema_url
;
}
}
return
getJSON
(
parameter_schema_url
)
.
push
(
function
(
json
)
{
var
schema
=
JSON
.
parse
(
json
);
return
expandSchema
(
schema
,
schema
,
base_url
)
.
push
(
function
(
loaded_json
)
{
return
tv4
.
validateMultiple
(
generated_json
,
loaded_json
);
});
});
});
})
.
declareMethod
(
"
validateJSON
"
,
function
(
schema_url
,
generated_json
)
{
return
getJSON
(
schema_url
)
.
push
(
function
(
json
)
{
var
base_url
,
url_uri
=
URI
(
schema_url
),
schema
=
JSON
.
parse
(
json
);
base_url
=
url_uri
.
path
().
split
(
"
/
"
);
base_url
.
pop
();
base_url
=
schema_url
.
split
(
url_uri
.
path
())[
0
]
+
base_url
.
join
(
"
/
"
);
return
expandSchema
(
schema
,
schema
,
base_url
)
.
push
(
function
(
loaded_schema
)
{
return
tv4
.
validateMultiple
(
generated_json
,
loaded_schema
);
});
});
});
}(
window
,
rJS
,
$
,
RSVP
));
\ No newline at end of file
gadget_erp5_page_slap_parameter_form.css
0 → 100644
View file @
f8b40a42
div
.subfield
{
margin-left
:
15px
;
}
fieldset
>
.subfield
{
padding-left
:
0
}
.subfield
{
padding-left
:
20px
;
}
label
.slapos-parameter-dict-key
::before
{
content
:
"\25BC Parameter Entry: "
;
}
label
.slapos-parameter-dict-key-colapse
::before
{
content
:
"\25BA Parameter Entry: "
;
}
label
.slapos-parameter-dict-key
{
text-transform
:
capitalize
;
/* display: block !important; */
width
:
99%
;
padding
:
5px
;
font-size
:
110%
;
line-height
:
20px
;
color
:
rgb
(
93
,
128
,
125
)
!important
;
cursor
:
pointer
;
}
div
.slapos-parameter-dict-key
{
margin-top
:
10px
;
background
:
rgb
(
239
,
252
,
249
);
border
:
1px
solid
rgb
(
233
,
247
,
253
);
padding
:
5px
;
}
div
.slapos-parameter-dict-key
.subfield
:last-child
{
padding
:
5px
5px
10px
20px
;
}
#software-type
{
padding
:
10px
0
0
;}
#software-type
.field
[
title
=
'serialisation_type'
]
.input
{
padding-top
:
0
;
}
.subfield
,
#software-type
.input
{
padding-top
:
10px
;
}
.subfield
label
,
#software-type
label
{
display
:
inline-block
;
margin-bottom
:
1px
;
color
:
rgb
(
124
,
134
,
149
)
}
fieldset
>
.subfield
>
label
{
font-size
:
113%
;
color
:
rgb
(
112
,
125
,
136
);
}
.subfield
span
{
font-weight
:
normal
;
font-style
:
italic
;
padding-left
:
7px
;
color
:
rgb
(
94
,
127
,
141
)
}
.subfield
select
{
margin-bottom
:
10px
;}
.subfield
textarea
{
width
:
250px
;
height
:
60px
;}
.subfield
.error
{
color
:
#E82525
;
font-weight
:
700
;
}
.subfield
input
{
font-size
:
100%
;
width
:
240px
;
}
.input
button
{
margin-left
:
10px
;}
.add-sub-form
{
background
:
#3498db
;
background-image
:
-webkit-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
-moz-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
-ms-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
-o-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
linear-gradient
(
to
bottom
,
#3498db
,
#2980b9
);
-webkit-border-radius
:
4
;
-moz-border-radius
:
4
;
border-radius
:
4px
;
border
:
1px
solid
#3498db
;
color
:
#ffffff
;
font-size
:
15px
;
font-weight
:
bold
;
padding
:
6px
20px
;
text-decoration
:
none
;
cursor
:
pointer
;
}
.add-sub-form
:hover
{
background
:
#3cb0fd
;
background-image
:
-webkit-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
-moz-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
-ms-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
-o-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
linear-gradient
(
to
bottom
,
#3cb0fd
,
#3498db
);
text-decoration
:
none
;
}
.bt_close
,
.subfield
.slapos-parameter-dict-key
span
.bt_close
{
padding
:
0
6px
;
display
:
block
;
float
:
right
;
text-overflow
:
clip
;
white-space
:
nowrap
;
overflow
:
hidden
;
font-size
:
1.5em
;
border-radius
:
2px
;
}
.bt_close
:hover
{
background
:
#81afab
;
color
:
#fff
;
}
.hs-short-title
{
margin-left
:
6px
;
padding-bottom
:
10px
;
font-size
:
12px
;
font-weight
:
normal
;
display
:
inline-block
;
}
button
.hidden-button
{
display
:
none
;
}
.listbox-parameters
a
{
word-wrap
:
break-word
;
max-width
:
400px
;
display
:
inline-block
;
word-break
:
keep-all
;
}
.non-editable
>
div
.input
{
border
:
1px
solid
rgb
(
201
,
201
,
201
);
padding
:
5px
;
background
:
white
;
font-weight
:
normal
;
margin
:
5px
0
10px
;
max-height
:
250px
;
width
:
80%
;}
.subfield
{
padding-left
:
20px
;
}
label
.slapos-parameter-dict-key
::before
{
content
:
"Parameter Entry: "
;
}
label
.slapos-parameter-dict-key
{
font-color
:
"red"
;
}
div
.slapos-parameter-dict-key
{
margin-top
:
10px
;
margin-left
:
6px
;
}
.subfield
{
padding-top
:
3px
;
}
textarea
.slapos-parameter
{
width
:
400px
;
height
:
100px
;
}
button
.hidden-button
{
display
:
none
;
}
.add-sub-form
{
background
:
#3498db
;
background-image
:
-webkit-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
-moz-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
-ms-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
-o-linear-gradient
(
top
,
#3498db
,
#2980b9
);
background-image
:
linear-gradient
(
to
bottom
,
#3498db
,
#2980b9
);
-webkit-border-radius
:
28
;
-moz-border-radius
:
28
;
border-radius
:
28px
;
font-family
:
Arial
;
color
:
#ffffff
;
font-size
:
12px
;
padding
:
5px
20px
5px
20px
;
text-decoration
:
none
;
}
.add-sub-form
:hover
{
background
:
#3cb0fd
;
background-image
:
-webkit-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
-moz-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
-ms-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
-o-linear-gradient
(
top
,
#3cb0fd
,
#3498db
);
background-image
:
linear-gradient
(
to
bottom
,
#3cb0fd
,
#3498db
);
text-decoration
:
none
;
}
\ No newline at end of file
gadget_erp5_page_slap_parameter_form.html
0 → 100644
View file @
f8b40a42
<!DOCTYPE html>
<html
manifest=
"gadget_erp5.appcache"
>
<head>
<meta
charset=
"utf-8"
>
<meta
name=
"viewport"
content=
"width=device-width, initial-scale=1"
>
<title>
ERP5
</title>
<link
rel=
"shortcut icon"
href=
"favicon.ico"
>
<script
src=
"rsvp.js"
type=
"text/javascript"
></script>
<script
src=
"renderjs.js"
type=
"text/javascript"
></script>
<script
src=
"URI.js"
type=
"text/javascript"
></script>
<script
src=
"jquery.js"
type=
"text/javascript"
></script>
<script
src=
"vkbeautify.js"
type=
"text/javascript"
></script>
<script
src=
"gadget_erp5_page_slap_parameter_form.js"
type=
"text/javascript"
></script>
<link
href=
"gadget_erp5_page_slap_parameter_form.css"
rel=
"stylesheet"
type=
"text/css"
/>
</head>
<body>
<div>
<fieldset
id=
"software-type"
>
<div
class=
"field"
title=
"software_type"
>
<label>
Software Type
</label>
<div
class=
"input"
>
<select
size=
"1"
name=
"software_type"
class=
"slapos-software-type"
>
</select>
</div>
</div>
<div
class=
"field"
title=
"serialisation_type"
>
<div
class=
"input"
>
<input
type=
hidden
name=
"serialisation_type"
class=
"slapos-serialisation-type"
></input>
</div>
</div>
</div>
<div
class=
"field"
title=
"hide_show_button"
>
<div
class=
"input"
>
<button
type=
"button"
class=
"slapos-show-form hidden-button"
>
Show Parameter Form
</button>
<button
type=
"button"
class=
"slapos-show-raw-parameter"
>
Show Parameter XML
</button>
</div>
</div>
</fieldset>
<fieldset
id=
"parameter-main"
>
</fieldset>
<fieldset
id=
"parameter-optional"
>
</fieldset>
<fieldset
id=
"parameter-xml"
>
<input
type=
hidden
name=
"parameter_hash"
class=
"parameter_hash_output"
></input>
<input
type=
hidden
name=
"shared"
class=
"parameter_shared"
></input>
</fieldset>
</div>
<div
class=
"loadschema"
data-gadget-url=
"gadget_erp5_page_slap_load_schema.html"
data-gadget-scope=
"loadschema"
>
</div>
</body>
</html>
\ No newline at end of file
gadget_erp5_page_slap_parameter_form.js
0 → 100644
View file @
f8b40a42
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment