webmcp
annotate framework/env/ui/_partial_load_js.lua @ 12:f3d3203cd2e4
Documentation for partial loading added
NOTE: Previous changeset d76a8857ba62 also modified behaviour of ui.script: Scripts containing "]]>" are now rejected to avoid ambiguities
NOTE: Previous changeset d76a8857ba62 also modified behaviour of ui.script: Scripts containing "]]>" are now rejected to avoid ambiguities
author | jbe |
---|---|
date | Fri Feb 19 16:43:29 2010 +0100 (2010-02-19) |
parents | d76a8857ba62 |
children |
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 |