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
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Leo Le Bouter
erp5
Commits
bd9625c6
Commit
bd9625c6
authored
Jan 23, 2018
by
Romain Courteaud
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[erp5_web_renderjs_ui] Dialog: move code outside rjs method
parent
77a88301
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
212 additions
and
222 deletions
+212
-222
bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.js
...Item/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.js
+210
-220
bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.xml
...tem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.xml
+2
-2
No files found.
bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.js
View file @
bd9625c6
...
@@ -10,6 +10,215 @@
...
@@ -10,6 +10,215 @@
return
[
obj
];
return
[
obj
];
}
}
function
submitDialog
(
gadget
)
{
var
form_gadget
=
gadget
,
action
=
form_gadget
.
state
.
erp5_document
.
_embedded
.
_view
.
_actions
.
put
,
form_id
=
form_gadget
.
state
.
erp5_document
.
_embedded
.
_view
.
form_id
,
redirect_to_parent
;
return
form_gadget
.
notifySubmitting
()
.
push
(
function
()
{
return
form_gadget
.
getDeclaredGadget
(
"
erp5_form
"
);
})
.
push
(
function
(
erp5_form
)
{
return
erp5_form
.
getContent
();
})
.
push
(
function
(
content_dict
)
{
var
data
=
{},
key
;
data
[
form_id
.
key
]
=
form_id
[
'
default
'
];
// XXX Hardcoded
data
.
dialog_id
=
form_id
[
'
default
'
];
data
.
dialog_method
=
action
.
action
;
//XXX hack for redirect, difined in form
redirect_to_parent
=
content_dict
.
field_your_redirect_to_parent
;
for
(
key
in
content_dict
)
{
if
(
content_dict
.
hasOwnProperty
(
key
))
{
data
[
key
]
=
content_dict
[
key
];
}
}
return
form_gadget
.
jio_putAttachment
(
form_gadget
.
state
.
jio_key
,
action
.
href
,
data
);
})
.
push
(
function
(
attachment
)
{
if
(
attachment
.
target
.
response
.
type
===
"
application/json
"
)
{
// successful form save returns simple redirect and answer as JSON
// validation errors are handled in failure branch on bottom
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
jIO
.
util
.
readBlobAsText
(
attachment
.
target
.
response
);
})
.
push
(
function
(
response_text
)
{
var
response
=
JSON
.
parse
(
response_text
.
target
.
result
);
return
form_gadget
.
notifySubmitted
({
"
message
"
:
response
.
portal_status_message
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
// here we figure out where to go after form submit - indicated
// by X-Location HTTP header placed by Base_redirect script
var
jio_key
=
new
URI
(
attachment
.
target
.
getResponseHeader
(
"
X-Location
"
)
).
segment
(
2
),
splitted_jio_key_list
,
splitted_current_jio_key_list
,
command
,
i
;
if
(
redirect_to_parent
)
{
return
form_gadget
.
redirect
({
command
:
'
history_previous
'
});
}
if
(
form_gadget
.
state
.
jio_key
===
jio_key
)
{
// don't update navigation history when not really redirecting
return
form_gadget
.
redirect
({
command
:
'
change
'
,
options
:
{
"
jio_key
"
:
jio_key
,
"
view
"
:
"
view
"
,
"
page
"
:
undefined
// do not mingle with editable because it isn't necessary
}
});
}
// Check if the redirection goes to a same parent's subdocument.
// In this case, do not add current document to the history
// example: when cloning, do not keep the original document in history
splitted_jio_key_list
=
jio_key
.
split
(
'
/
'
);
splitted_current_jio_key_list
=
form_gadget
.
state
.
jio_key
.
split
(
'
/
'
);
command
=
'
display_with_history
'
;
if
(
splitted_jio_key_list
.
length
===
splitted_current_jio_key_list
.
length
)
{
for
(
i
=
0
;
i
<
splitted_jio_key_list
.
length
-
1
;
i
+=
1
)
{
if
(
splitted_jio_key_list
[
i
]
!==
splitted_current_jio_key_list
[
i
])
{
command
=
'
push_history
'
;
}
}
}
else
{
command
=
'
push_history
'
;
}
// forced document change thus we update history
return
form_gadget
.
redirect
({
command
:
command
,
options
:
{
"
jio_key
"
:
jio_key
// do not mingle with editable because it isn't necessary
}
});
});
}
if
(
attachment
.
target
.
response
.
type
===
"
application/hal+json
"
)
{
// we have received a view definition thus we need to redirect
// this will happen only in report/export when "Format" is unspecified
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
form_gadget
.
notifySubmitted
({
"
message
"
:
"
Data received
"
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
return
jIO
.
util
.
readBlobAsText
(
attachment
.
target
.
response
);
})
.
push
(
function
(
response_text
)
{
return
form_gadget
.
updateForm
(
JSON
.
parse
(
response_text
.
target
.
result
));
});
}
// response status > 200 (e.g. 202 "Accepted" or 204 "No Content")
// mean sucessful execution of an action but does not carry any data
// XMLHttpRequest automatically inserts Content-Type="text/xml" thus
// we cannot test based on that
if
(
attachment
.
target
.
response
.
size
===
0
&&
attachment
.
target
.
status
>
200
&&
attachment
.
target
.
status
<
400
)
{
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
form_gadget
.
notifySubmitted
({
"
message
"
:
"
Action succeeded
"
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
if
(
redirect_to_parent
)
{
return
form_gadget
.
redirect
({
command
:
'
history_previous
'
});
}
return
form_gadget
.
redirect
({
command
:
'
change
'
,
options
:
{
"
jio_key
"
:
form_gadget
.
state
.
jio_key
,
"
view
"
:
"
view
"
,
"
page
"
:
undefined
// do not mingle with editable because it isn't necessary
}
});
});
}
// any other attachment type we force to download because it is most
// likely product of export/report (thus PDF, ODT ...)
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
form_gadget
.
notifySubmitted
({
"
message
"
:
"
Data received
"
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
return
form_gadget
.
forceDownload
(
attachment
);
});
})
.
push
(
undefined
,
function
(
error
)
{
if
(
error
.
target
!==
undefined
)
{
var
error_text
=
'
Encountered an unknown error. Try to resubmit
'
,
promise
;
// if we know what the error was, try to precise it for the user
if
(
error
.
target
.
status
===
400
)
{
error_text
=
'
Input data has errors
'
;
}
else
if
(
error
.
target
.
status
===
403
)
{
error_text
=
'
You do not have the permissions to edit the object
'
;
}
else
if
(
error
.
target
.
status
===
0
)
{
error_text
=
'
Document was not saved! Resubmit when you are online or the document accessible
'
;
}
// display translated error_text to user
promise
=
form_gadget
.
notifySubmitted
()
.
push
(
function
()
{
return
form_gadget
.
translate
(
error_text
);
})
.
push
(
function
(
message
)
{
return
form_gadget
.
notifyChange
({
"
message
"
:
message
+
'
.
'
,
"
status
"
:
"
error
"
});
});
// if server validation of form data failed (indicated by response code 400)
// we parse out field errors and display them to the user
if
(
error
.
target
.
status
===
400
)
{
promise
.
push
(
function
()
{
// when the server-side validation returns the error description
if
(
error
.
target
.
responseType
===
"
blob
"
)
{
return
jIO
.
util
.
readBlobAsText
(
error
.
target
.
response
);
}
// otherwise return (most-likely) textual response of the server
return
{
target
:
{
result
:
error
.
target
.
response
}};
})
.
push
(
function
(
event
)
{
return
form_gadget
.
displayFormulatorValidationError
(
JSON
.
parse
(
event
.
target
.
result
));
});
}
return
promise
;
}
throw
error
;
});
}
rJS
(
window
)
rJS
(
window
)
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
...
@@ -174,226 +383,7 @@
...
@@ -174,226 +383,7 @@
})
})
.
onEvent
(
'
submit
'
,
function
()
{
.
onEvent
(
'
submit
'
,
function
()
{
var
form_gadget
=
this
,
return
submitDialog
(
this
);
action
=
this
.
state
.
erp5_document
.
_embedded
.
_view
.
_actions
.
put
,
form_id
=
this
.
state
.
erp5_document
.
_embedded
.
_view
.
form_id
,
redirect_to_parent
;
return
form_gadget
.
notifySubmitting
()
.
push
(
function
()
{
return
form_gadget
.
getDeclaredGadget
(
"
erp5_form
"
);
})
.
push
(
function
(
erp5_form
)
{
return
erp5_form
.
getContent
();
})
.
push
(
function
(
content_dict
)
{
var
data
=
{},
key
;
data
[
form_id
.
key
]
=
form_id
[
'
default
'
];
// XXX Hardcoded
data
.
dialog_id
=
form_id
[
'
default
'
];
data
.
dialog_method
=
action
.
action
;
//XXX hack for redirect, difined in form
redirect_to_parent
=
content_dict
.
field_your_redirect_to_parent
;
for
(
key
in
content_dict
)
{
if
(
content_dict
.
hasOwnProperty
(
key
))
{
data
[
key
]
=
content_dict
[
key
];
}
}
return
form_gadget
.
jio_putAttachment
(
form_gadget
.
state
.
jio_key
,
action
.
href
,
data
);
})
.
push
(
function
(
attachment
)
{
if
(
attachment
.
target
.
response
.
type
===
"
application/json
"
)
{
// successful form save returns simple redirect and answer as JSON
// validation errors are handled in failure branch on bottom
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
jIO
.
util
.
readBlobAsText
(
attachment
.
target
.
response
);
})
.
push
(
function
(
response_text
)
{
var
response
=
JSON
.
parse
(
response_text
.
target
.
result
);
return
form_gadget
.
notifySubmitted
({
"
message
"
:
response
.
portal_status_message
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
// here we figure out where to go after form submit - indicated
// by X-Location HTTP header placed by Base_redirect script
var
jio_key
=
new
URI
(
attachment
.
target
.
getResponseHeader
(
"
X-Location
"
)
).
segment
(
2
),
splitted_jio_key_list
,
splitted_current_jio_key_list
,
command
,
i
;
if
(
redirect_to_parent
)
{
return
form_gadget
.
redirect
({
command
:
'
history_previous
'
});
}
if
(
form_gadget
.
state
.
jio_key
===
jio_key
)
{
// don't update navigation history when not really redirecting
return
form_gadget
.
redirect
({
command
:
'
change
'
,
options
:
{
"
jio_key
"
:
jio_key
,
"
view
"
:
"
view
"
,
"
page
"
:
undefined
// do not mingle with editable because it isn't necessary
}
});
}
// Check if the redirection goes to a same parent's subdocument.
// In this case, do not add current document to the history
// example: when cloning, do not keep the original document in history
splitted_jio_key_list
=
jio_key
.
split
(
'
/
'
);
splitted_current_jio_key_list
=
form_gadget
.
state
.
jio_key
.
split
(
'
/
'
);
command
=
'
display_with_history
'
;
if
(
splitted_jio_key_list
.
length
===
splitted_current_jio_key_list
.
length
)
{
for
(
i
=
0
;
i
<
splitted_jio_key_list
.
length
-
1
;
i
+=
1
)
{
if
(
splitted_jio_key_list
[
i
]
!==
splitted_current_jio_key_list
[
i
])
{
command
=
'
push_history
'
;
}
}
}
else
{
command
=
'
push_history
'
;
}
// forced document change thus we update history
return
form_gadget
.
redirect
({
command
:
command
,
options
:
{
"
jio_key
"
:
jio_key
// do not mingle with editable because it isn't necessary
}
});
});
}
if
(
attachment
.
target
.
response
.
type
===
"
application/hal+json
"
)
{
// we have received a view definition thus we need to redirect
// this will happen only in report/export when "Format" is unspecified
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
form_gadget
.
notifySubmitted
({
"
message
"
:
"
Data received
"
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
return
jIO
.
util
.
readBlobAsText
(
attachment
.
target
.
response
);
})
.
push
(
function
(
response_text
)
{
return
form_gadget
.
updateForm
(
JSON
.
parse
(
response_text
.
target
.
result
));
});
}
// response status > 200 (e.g. 202 "Accepted" or 204 "No Content")
// mean sucessful execution of an action but does not carry any data
// XMLHttpRequest automatically inserts Content-Type="text/xml" thus
// we cannot test based on that
if
(
attachment
.
target
.
response
.
size
===
0
&&
attachment
.
target
.
status
>
200
&&
attachment
.
target
.
status
<
400
)
{
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
form_gadget
.
notifySubmitted
({
"
message
"
:
"
Action succeeded
"
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
if
(
redirect_to_parent
)
{
return
form_gadget
.
redirect
({
command
:
'
history_previous
'
});
}
return
form_gadget
.
redirect
({
command
:
'
change
'
,
options
:
{
"
jio_key
"
:
form_gadget
.
state
.
jio_key
,
"
view
"
:
"
view
"
,
"
page
"
:
undefined
// do not mingle with editable because it isn't necessary
}
});
});
}
// any other attachment type we force to download because it is most
// likely product of export/report (thus PDF, ODT ...)
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
return
form_gadget
.
notifySubmitted
({
"
message
"
:
"
Data received
"
,
"
status
"
:
"
success
"
});
})
.
push
(
function
()
{
return
form_gadget
.
forceDownload
(
attachment
);
});
})
.
push
(
undefined
,
function
(
error
)
{
if
(
error
.
target
!==
undefined
)
{
var
error_text
=
'
Encountered an unknown error. Try to resubmit
'
,
promise_queue
=
new
RSVP
.
Queue
();
// if we know what the error was, try to precise it for the user
if
(
error
.
target
.
status
===
400
)
{
error_text
=
'
Input data has errors
'
;
}
else
if
(
error
.
target
.
status
===
403
)
{
error_text
=
'
You do not have the permissions to edit the object
'
;
}
else
if
(
error
.
target
.
status
===
0
)
{
error_text
=
'
Document was not saved! Resubmit when you are online or the document accessible
'
;
}
else
if
(
error
.
target
.
status
===
500
&&
error
.
target
.
response
.
type
===
"
application/json
"
)
{
promise_queue
.
push
(
function
()
{
return
jIO
.
util
.
readBlobAsText
(
error
.
target
.
response
);
})
.
push
(
function
(
response_text
)
{
var
response
=
JSON
.
parse
(
response_text
.
target
.
result
);
error_text
=
response
.
portal_status_message
;
});
}
// display translated error_text to user
promise_queue
.
push
(
function
()
{
return
form_gadget
.
notifySubmitted
();
})
.
push
(
function
()
{
return
form_gadget
.
translate
(
error_text
);
})
.
push
(
function
(
message
)
{
return
form_gadget
.
notifyChange
({
"
message
"
:
message
+
'
.
'
,
"
status
"
:
"
error
"
});
});
// if server validation of form data failed (indicated by response code 400)
// we parse out field errors and display them to the user
if
(
error
.
target
.
status
===
400
)
{
promise_queue
.
push
(
function
()
{
// when the server-side validation returns the error description
if
(
error
.
target
.
responseType
===
"
blob
"
)
{
return
jIO
.
util
.
readBlobAsText
(
error
.
target
.
response
);
}
// otherwise return (most-likely) textual response of the server
return
{
target
:
{
result
:
error
.
target
.
response
}};
})
.
push
(
function
(
event
)
{
return
form_gadget
.
displayFormulatorValidationError
(
JSON
.
parse
(
event
.
target
.
result
));
});
}
return
promise_queue
;
}
throw
error
;
});
},
false
,
true
);
},
false
,
true
);
...
...
bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.xml
View file @
bd9625c6
...
@@ -230,7 +230,7 @@
...
@@ -230,7 +230,7 @@
</item>
</item>
<item>
<item>
<key>
<string>
serial
</string>
</key>
<key>
<string>
serial
</string>
</key>
<value>
<string>
96
4.3910.33744.24644
</string>
</value>
<value>
<string>
96
5.670.53338.41130
</string>
</value>
</item>
</item>
<item>
<item>
<key>
<string>
state
</string>
</key>
<key>
<string>
state
</string>
</key>
...
@@ -248,7 +248,7 @@
...
@@ -248,7 +248,7 @@
</tuple>
</tuple>
<state>
<state>
<tuple>
<tuple>
<float>
1516
350278.01
</float>
<float>
1516
725149.52
</float>
<string>
UTC
</string>
<string>
UTC
</string>
</tuple>
</tuple>
</state>
</state>
...
...
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