rev |
line source |
jbe/bsw@11
|
1 --[[--
|
jbe@12
|
2 ui._partial_load_js(
|
jbe@12
|
3 {
|
jbe@12
|
4 module = module,
|
jbe@12
|
5 view = view,
|
jbe@12
|
6 id = id,
|
jbe@12
|
7 params = params,
|
jbe@12
|
8 target = target
|
jbe@12
|
9 },
|
jbe@12
|
10 mode = mode
|
jbe/bsw@11
|
11 }
|
jbe/bsw@11
|
12
|
jbe@12
|
13 This function is not supposed to be called directly, but only to be used by
|
jbe@12
|
14 ui.link{...} and ui.form{...}.
|
jbe@12
|
15
|
jbe@12
|
16 It returns a JavaScript which can be used for onclick or onsubmit
|
jbe@12
|
17 attributes in HTML to cause a partial load of contents. Behaviour differs
|
jbe@12
|
18 for the following cases:
|
jbe@12
|
19 a) module, view and target (and optionally id) are given as parameters
|
jbe@12
|
20 b) neither module, view, id, nor target are given as parameters
|
jbe@12
|
21
|
jbe@12
|
22 In case of a) the function will create a JavaScript which requests the
|
jbe@12
|
23 given view (optionally with the given id and params) as JSON data.
|
jbe@12
|
24
|
jbe@12
|
25 In case of b) the function will create a JavaScript requesting the view
|
jbe@12
|
26 specified by the next outer ui.partial{...} call as JSON data. Request
|
jbe@12
|
27 parameters specified by previous calls of add_partial_param_names({...})
|
jbe@12
|
28 are copied from the GET/POST parameters of the current request, while they
|
jbe@12
|
29 can be overwritten using the "params" argument to this function.
|
jbe/bsw@11
|
30
|
jbe@12
|
31 If there is no outer ui.partial{...} call in case b), then this function
|
jbe@12
|
32 returns nil.
|
jbe@12
|
33
|
jbe@12
|
34 The called URL contains "_webmcp_json_slots[]" as GET parameters to
|
jbe@12
|
35 indicate that slot contents should be returned as a JSON object, instead of
|
jbe@12
|
36 being inserted to a page layout.
|
jbe@12
|
37
|
jbe@12
|
38 TODO: Currently the slots requested are "default", "trace" and
|
jbe@12
|
39 "system_error". The target for the slot "default" is passed as argument to
|
jbe@12
|
40 this function or to ui.partial{...}. The targets for the slots "trace" and
|
jbe@12
|
41 "system_error" are "trace" and "system_error". This is hardcoded and should
|
jbe@12
|
42 be possible to change in future. The JavaScript will fail, if there are no
|
jbe@12
|
43 HTML elements with id's "trace" and "system_error".
|
jbe@12
|
44
|
jbe@12
|
45 A mode can be passed as second parameter to this function. When this mode
|
jbe@12
|
46 is "nil" or non existent, the function creates JavaScript code to be used
|
jbe@12
|
47 as onclick event for normal (GET) links. When mode is set to "form_normal"
|
jbe@12
|
48 or "form_action", the returned code can be used as onsubmit event of web
|
jbe@12
|
49 forms. "form_normal" is used when the form calls a view, "form_action" is
|
jbe@12
|
50 used when the form calls an action.
|
jbe/bsw@11
|
51
|
jbe/bsw@11
|
52 --]]--
|
jbe/bsw@11
|
53
|
jbe/bsw@11
|
54 function ui._partial_load_js(args, mode)
|
jbe/bsw@11
|
55 local args = args or {}
|
jbe/bsw@11
|
56 local module
|
jbe/bsw@11
|
57 local view
|
jbe/bsw@11
|
58 local id
|
jbe/bsw@11
|
59 local params = {}
|
jbe/bsw@11
|
60 local target
|
jbe/bsw@11
|
61 if args.view and args.target then
|
jbe/bsw@11
|
62 module = args.module
|
jbe/bsw@11
|
63 view = args.view
|
jbe/bsw@11
|
64 id = args.id
|
jbe/bsw@11
|
65 target = args.target
|
jbe/bsw@11
|
66 elseif not args.view and not args.target then
|
jbe/bsw@11
|
67 if not ui._partial_state then
|
jbe/bsw@11
|
68 return nil
|
jbe/bsw@11
|
69 end
|
jbe/bsw@11
|
70 module = ui._partial_state.module
|
jbe/bsw@11
|
71 view = ui._partial_state.view
|
jbe/bsw@11
|
72 id = ui._partial_state.id
|
jbe/bsw@11
|
73 target = ui._partial_state.target
|
jbe/bsw@11
|
74 else
|
jbe/bsw@11
|
75 error("Unexpected arguments passed to ui._partial_load_js{...}")
|
jbe/bsw@11
|
76 end
|
jbe/bsw@11
|
77
|
jbe/bsw@11
|
78 if ui._partial_state then
|
jbe@12
|
79 -- TODO: do this only if args.view and args.target are unset!?
|
jbe/bsw@11
|
80 if ui._partial_state.params then
|
jbe/bsw@11
|
81 for key, value in pairs(ui._partial_state.params) do
|
jbe/bsw@11
|
82 params[key] = value
|
jbe/bsw@11
|
83 end
|
jbe/bsw@11
|
84 end
|
jbe/bsw@11
|
85 for param_name, dummy in pairs(ui._partial_state.param_name_hash) do
|
jbe/bsw@11
|
86 params[param_name] = cgi.params[param_name]
|
jbe/bsw@11
|
87 end
|
jbe/bsw@11
|
88 end
|
jbe/bsw@11
|
89 if args.params then
|
jbe/bsw@11
|
90 for key, value in pairs(args.params) do
|
jbe/bsw@11
|
91 params[key] = value
|
jbe/bsw@11
|
92 end
|
jbe/bsw@11
|
93 end
|
jbe/bsw@11
|
94 local encoded_url = encode.json(
|
jbe/bsw@11
|
95 encode.url{
|
jbe/bsw@11
|
96 module = module,
|
jbe/bsw@11
|
97 view = view,
|
jbe/bsw@11
|
98 id = id,
|
jbe/bsw@11
|
99 params = params
|
jbe/bsw@11
|
100 }
|
jbe/bsw@11
|
101 )
|
jbe/bsw@11
|
102
|
jbe/bsw@11
|
103 if mode == "form_normal" then
|
jbe/bsw@11
|
104 -- NOTE: action in "action_mode" refers to WebMCP actions, while action
|
jbe/bsw@11
|
105 -- in "this.action" refers to the action attribute of HTML forms
|
jbe/bsw@11
|
106 slot.put('this.action = ', encoded_url, '; ')
|
jbe/bsw@11
|
107 end
|
jbe/bsw@11
|
108
|
jbe/bsw@11
|
109 return slot.use_temporary(function()
|
jbe/bsw@11
|
110 slot.put(
|
jbe/bsw@11
|
111 'partialMultiLoad({',
|
jbe/bsw@11
|
112 -- mapping:
|
jbe/bsw@11
|
113 '"trace": "trace", "system_error": "system_error", ',
|
jbe/bsw@11
|
114 encode.json(target), ': "default" }, ',
|
jbe/bsw@11
|
115 -- tempLoadingContents:
|
jbe/bsw@11
|
116 '{}, ',
|
jbe/bsw@11
|
117 -- failureContents:
|
jbe/bsw@11
|
118 '"error", ',
|
jbe/bsw@11
|
119 -- url:
|
jbe/bsw@11
|
120 (mode == "form_normal" or mode == "form_action") and (
|
jbe/bsw@11
|
121 'this'
|
jbe/bsw@11
|
122 ) or (
|
jbe/bsw@11
|
123 encoded_url
|
jbe/bsw@11
|
124 ), ', ',
|
jbe/bsw@11
|
125 -- urlParams:
|
jbe/bsw@11
|
126 '"_webmcp_json_slots[]=default&_webmcp_json_slots[]=trace&_webmcp_json_slots[]=system_error", ',
|
jbe/bsw@11
|
127 -- postParams:
|
jbe/bsw@11
|
128 '{}, ',
|
jbe/bsw@11
|
129 -- successHandler:
|
jbe/bsw@11
|
130 'function() {}, ',
|
jbe/bsw@11
|
131 -- failureHandler:
|
jbe/bsw@11
|
132 'function() {} ',
|
jbe/bsw@11
|
133 '); ',
|
jbe/bsw@11
|
134 'return false;'
|
jbe/bsw@11
|
135 )
|
jbe/bsw@11
|
136 end)
|
jbe/bsw@11
|
137 end
|