Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
erp5
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Romain Courteaud
erp5
Commits
23ab2c80
Commit
23ab2c80
authored
Jan 04, 2019
by
Boris Kocherov
Committed by
Romain Courteaud
Apr 24, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[erp5_json_form] update from
https://lab.nexedi.com/bk/rjs_json_form
parent
6a6b4d52
Changes
2
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
234 additions
and
101 deletions
+234
-101
bt5/erp5_json_form/SkinTemplateItem/portal_skins/erp5_json_form/jsonform.gadget.js.js
...ateItem/portal_skins/erp5_json_form/jsonform.gadget.js.js
+59
-30
bt5/erp5_json_form/SkinTemplateItem/portal_skins/erp5_json_form/jsonform/gadget_json_generated_form_child.js.js
...json_form/jsonform/gadget_json_generated_form_child.js.js
+175
-71
No files found.
bt5/erp5_json_form/SkinTemplateItem/portal_skins/erp5_json_form/jsonform.gadget.js.js
View file @
23ab2c80
...
...
@@ -245,18 +245,19 @@
return
new
URL
(
mapped_url
+
hash
);
}
function
loadJSONSchema
(
g
,
$ref
,
path
)
{
function
loadJSONSchema
(
g
,
$ref
,
schema_path
,
path
)
{
var
protocol
,
abs_url
,
url
,
download_url
,
hash
,
external_reference
=
false
,
queue
;
// XXX need use `id` property
if
(
!
path
)
{
path
=
"
/
"
;
if
(
!
schema_
path
)
{
schema_
path
=
"
/
"
;
}
abs_url
=
convertUrlToAbsolute
(
g
,
path
,
decodeURI
(
$ref
),
window
.
location
);
abs_url
=
convertUrlToAbsolute
(
g
,
schema_
path
,
decodeURI
(
$ref
),
window
.
location
);
url
=
map_url
(
g
,
abs_url
);
abs_url
=
abs_url
.
href
;
protocol
=
url
.
protocol
;
...
...
@@ -271,9 +272,10 @@
hash
=
url
.
hash
;
url
=
url
.
href
;
if
(
download_url
.
startsWith
(
"
urn:jio:
"
))
{
external_reference
=
true
;
queue
=
RSVP
.
Queue
()
.
push
(
function
()
{
return
g
.
resolveExternalReference
(
download_url
);
return
g
.
resolveExternalReference
(
download_url
,
schema_path
,
path
);
});
}
else
{
queue
=
RSVP
.
Queue
()
...
...
@@ -283,7 +285,7 @@
}
return
queue
.
push
(
function
(
json
)
{
if
(
checkHardCircular
(
g
,
path
,
url
))
{
if
(
checkHardCircular
(
g
,
schema_
path
,
url
))
{
throw
new
Error
(
"
Circular reference detected
"
);
}
return
resolveLocalReference
(
json
,
hash
);
...
...
@@ -292,7 +294,7 @@
// XXX it will be great to have ability convert json_pointers(hash)
// in line numbers for pointed to line in rich editors.
// we can use https://github.com/vtrushin/json-to-ast for it
var
url_from_pointed
=
convertToRealWorldSchemaPath
(
g
,
path
),
var
url_from_pointed
=
convertToRealWorldSchemaPath
(
g
,
schema_
path
),
schema_a
=
document
.
createElement
(
"
a
"
),
pointed_a
=
document
.
createElement
(
"
a
"
);
schema_a
.
setAttribute
(
"
href
"
,
download_url
);
...
...
@@ -300,7 +302,7 @@
pointed_a
.
setAttribute
(
"
href
"
,
url_from_pointed
);
pointed_a
.
text
=
(
new
URLwithJio
(
url_from_pointed
)).
pathname
;
g
.
props
.
schema_resolve_errors
[
url_from_pointed
]
=
{
schemaPath
:
path
,
schemaPath
:
schema_
path
,
message
:
[
document
.
createTextNode
(
"
schema error:
"
),
document
.
createTextNode
(
err
.
message
),
...
...
@@ -312,7 +314,6 @@
return
null
;
// schema part can't be null
})
.
push
(
function
(
schema_part
)
{
// console.log(path);
if
(
schema_part
===
null
)
{
// if resolving schema part contain errors
// use {} as failback
...
...
@@ -320,16 +321,17 @@
}
else
{
// save map url only for correctly resolved schema
// otherwise we have issue in convertToRealWorldSchemaPath
if
(
!
g
.
props
.
hasOwnProperty
(
path
))
{
g
.
props
.
schema_map
[
path
]
=
abs_url
;
if
(
!
g
.
props
.
hasOwnProperty
(
schema_
path
))
{
g
.
props
.
schema_map
[
schema_
path
]
=
abs_url
;
}
}
schemaPushSchemaPart
(
g
.
props
.
schema
,
path
,
JSON
.
parse
(
JSON
.
stringify
(
schema_part
)));
schemaPushSchemaPart
(
g
.
props
.
schema
,
schema_
path
,
JSON
.
parse
(
JSON
.
stringify
(
schema_part
)));
// console.log(g.props.schema[""]);
return
expandSchema
(
g
,
schema_part
,
path
,
$ref
);
return
expandSchema
(
g
,
schema_part
,
schema_path
,
path
,
$ref
);
})
.
push
(
function
(
schema_arr
)
{
checkAndMarkSoftCircular
(
g
,
schema_arr
,
path
,
url
);
checkAndMarkSoftCircular
(
g
,
schema_arr
,
schema_path
,
url
);
schema_arr
.
external_reference
=
external_reference
;
return
schema_arr
;
});
}
...
...
@@ -495,13 +497,13 @@
return
x
;
}
function
allOf
(
g
,
schema_array
,
schema_path
,
base_schema
)
{
function
allOf
(
g
,
schema_array
,
schema_path
,
path
,
base_schema
)
{
return
RSVP
.
Queue
()
.
push
(
function
()
{
var
i
,
arr
=
[];
for
(
i
=
0
;
i
<
schema_array
.
length
;
i
+=
1
)
{
arr
.
push
(
expandSchema
(
g
,
schema_array
[
i
],
schema_path
+
'
/
'
+
i
.
toString
()));
arr
.
push
(
expandSchema
(
g
,
schema_array
[
i
],
schema_path
+
'
/
'
+
i
.
toString
()
,
path
));
}
return
RSVP
.
all
(
arr
);
})
...
...
@@ -535,13 +537,13 @@
});
}
function
anyOf
(
g
,
schema_array
,
schema_path
,
base_schema
)
{
function
anyOf
(
g
,
schema_array
,
schema_path
,
path
,
base_schema
)
{
return
RSVP
.
Queue
()
.
push
(
function
()
{
var
i
,
arr
=
[];
for
(
i
=
0
;
i
<
schema_array
.
length
;
i
+=
1
)
{
arr
.
push
(
expandSchema
(
g
,
schema_array
[
i
],
schema_path
+
'
/
'
+
i
.
toString
()));
arr
.
push
(
expandSchema
(
g
,
schema_array
[
i
],
schema_path
+
'
/
'
+
i
.
toString
()
,
path
));
}
return
RSVP
.
all
(
arr
);
})
...
...
@@ -569,7 +571,7 @@
});
}
expandSchema
=
function
(
g
,
schema
,
schema_path
,
ref
)
{
expandSchema
=
function
(
g
,
schema
,
schema_path
,
path
,
ref
)
{
// XXX `if then else` construction can be simplify to
// anyOf(allOf(if_schema, then_schema), else_schema)
// and realized by existed rails
...
...
@@ -578,16 +580,16 @@
schema
=
true
;
}
if
(
schema
.
anyOf
!==
undefined
)
{
return
anyOf
(
g
,
schema
.
anyOf
,
schema_path
+
'
/anyOf
'
,
schema
);
return
anyOf
(
g
,
schema
.
anyOf
,
schema_path
+
'
/anyOf
'
,
path
,
schema
);
}
if
(
schema
.
oneOf
!==
undefined
)
{
return
anyOf
(
g
,
schema
.
oneOf
,
schema_path
+
'
/oneOf
'
,
schema
);
return
anyOf
(
g
,
schema
.
oneOf
,
schema_path
+
'
/oneOf
'
,
path
,
schema
);
}
if
(
schema
.
allOf
!==
undefined
)
{
return
allOf
(
g
,
schema
.
allOf
,
schema_path
+
'
/allOf
'
,
schema
);
return
allOf
(
g
,
schema
.
allOf
,
schema_path
+
'
/allOf
'
,
path
,
schema
);
}
if
(
schema
.
$ref
)
{
return
loadJSONSchema
(
g
,
schema
.
$ref
,
schema_path
);
return
loadJSONSchema
(
g
,
schema
.
$ref
,
schema_path
,
path
);
}
if
(
schema
.
definitions
)
{
var
key
,
...
...
@@ -635,7 +637,7 @@
return
schema_arr
;
}
function
expandSchemaForField
(
g
,
schema
,
schema_path
,
for_required
)
{
function
expandSchemaForField
(
g
,
schema
,
schema_path
,
path
,
for_required
)
{
var
required_stack
,
prev_field_path
;
if
(
for_required
)
{
...
...
@@ -645,10 +647,27 @@
required_stack
=
[];
}
g
.
props
.
schema_required_urls
[
schema_path
]
=
required_stack
;
return
expandSchema
(
g
,
schema
,
schema_path
)
return
expandSchema
(
g
,
schema
,
schema_path
,
path
)
.
push
(
schema_arr_marker
);
}
function
convertOnMultiLevel
(
d
,
key
)
{
var
ii
,
kk
,
key_list
=
key
.
split
(
"
/
"
);
for
(
ii
=
1
;
ii
<
key_list
.
length
;
ii
+=
1
)
{
kk
=
decodeJsonPointer
(
key_list
[
ii
]);
if
(
ii
===
key_list
.
length
-
1
)
{
return
d
[
kk
];
}
else
{
if
(
!
d
.
hasOwnProperty
(
kk
))
{
return
;
}
d
=
d
[
kk
];
}
}
}
rJS
(
window
)
.
ready
(
function
()
{
var
g
=
this
;
...
...
@@ -657,15 +676,18 @@
})
.
declareAcquiredMethod
(
"
resolveExternalReference
"
,
"
resolveExternalReference
"
)
.
declareAcquiredMethod
(
"
notifyChange
"
,
"
notifyChange
"
)
.
allowPublicAcquisition
(
"
rootNotifyChange
"
,
function
()
{
.
allowPublicAcquisition
(
"
rootNotifyChange
"
,
function
(
arr
,
scope
)
{
this
.
props
.
changed
=
true
;
return
this
.
notifyChange
();
return
this
.
notifyChange
(
arr
[
0
],
scope
);
})
.
declareAcquiredMethod
(
"
notifyValid
"
,
"
notifyValid
"
)
.
declareAcquiredMethod
(
"
notifyInvalid
"
,
"
notifyInvalid
"
)
.
allowPublicAcquisition
(
"
checkValidity
"
,
function
(
arr
)
{
return
this
.
checkValidity
(
arr
[
0
]);
})
.
declareMethod
(
'
getGadgetByPath
'
,
function
(
path
)
{
return
this
.
props
.
form_gadget
.
getGadgetByPath
(
path
||
"
/
"
);
})
.
declareMethod
(
'
checkValidity
'
,
function
(
json_document
)
{
// XXX need use local schema and local json document
// in every subgadget to take into account user anyOf choice
...
...
@@ -783,6 +805,10 @@
});
})
.
allowPublicAcquisition
(
'
parentGetJsonPath
'
,
function
(
arr
,
scope
)
{
return
""
;
})
.
declareMethod
(
'
render
'
,
function
(
options
)
{
var
z
=
{
saveOrigValue
:
options
.
saveOrigValue
,
...
...
@@ -871,7 +897,7 @@
g
.
props
.
schema_map
[
"
/
"
]
=
schema_url
;
g
.
props
.
schemas
[
schema_url
]
=
URL
.
createObjectURL
(
new
Blob
([
g
.
state
.
schema
],
{
type
:
'
application/json
'
}));
queue
=
expandSchemaForField
(
g
,
schema
,
"
/
"
,
true
);
queue
=
expandSchemaForField
(
g
,
schema
,
"
/
"
,
"
/
"
.
true
);
}
else
{
schema_url
=
g
.
state
.
schema_url
||
(
json_document
&&
json_document
.
$schema
);
...
...
@@ -913,7 +939,7 @@
});
})
.
allowPublicAcquisition
(
"
expandSchema
"
,
function
(
arr
)
{
return
expandSchemaForField
(
this
,
arr
[
0
],
arr
[
1
],
arr
[
2
]);
return
expandSchemaForField
(
this
,
arr
[
0
],
arr
[
1
],
arr
[
2
]
,
arr
[
3
]
);
})
.
onLoop
(
function
()
{
var
gadget
=
this
;
...
...
@@ -925,7 +951,7 @@
}
},
500
)
.
declareMethod
(
'
getContent
'
,
function
()
{
.
declareMethod
(
'
getContent
'
,
function
(
sub_path
)
{
var
g
=
this
;
if
(
g
.
state
.
editable
)
{
return
g
.
props
.
form_gadget
.
getContent
()
...
...
@@ -935,6 +961,9 @@
// its parent call render with the same value
// (as ERP5 does in case of formulator error)
g
.
state
.
value
=
JSON
.
stringify
(
value
);
if
(
sub_path
)
{
value
=
convertOnMultiLevel
(
value
,
sub_path
);
}
if
(
g
.
state
.
key
)
{
var
form_data
=
{};
value
=
JSON
.
stringify
(
value
);
...
...
bt5/erp5_json_form/SkinTemplateItem/portal_skins/erp5_json_form/jsonform/gadget_json_generated_form_child.js.js
View file @
23ab2c80
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