webmcp
annotate framework/env/encode/url.lua @ 2:72860d232f32
Version 1.0.2
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
Fixed bug with explicit garbage collection (requests > 256kB caused an error)
Views prefixed with an underscore can't be called externally
ui.paginate now displays the last page, if the selected page number is too high.
author | jbe/bsw |
---|---|
date | Thu Dec 10 12:00:00 2009 +0100 (2009-12-10) |
parents | 9fdfb27f8e67 |
children | d76a8857ba62 |
rev | line source |
---|---|
jbe/bsw@0 | 1 --[[-- |
jbe/bsw@0 | 2 url_string = -- a string containing an URL |
jbe/bsw@0 | 3 encode.url{ |
jbe/bsw@0 | 4 external = external, -- external URL (instead of specifying base, module, etc. below) |
jbe/bsw@0 | 5 base = base, -- optional string containing a base URL of a WebMCP application |
jbe/bsw@0 | 6 static = static, -- an URL relative to the static file directory |
jbe/bsw@0 | 7 module = module, -- a module name of the WebMCP application |
jbe/bsw@0 | 8 view = view, -- a view name of the WebMCP application |
jbe/bsw@0 | 9 action = action, -- an action name of the WebMCP application |
jbe/bsw@0 | 10 id = id, -- optional id to be passed to the view or action to select a particular data record |
jbe/bsw@0 | 11 params = params -- optional parameters to be passed to the view or action |
jbe/bsw@0 | 12 } |
jbe/bsw@0 | 13 |
jbe/bsw@0 | 14 This function creates URLs to external locations, to static files within the WebMCP application or to a certain view or action inside a module. |
jbe/bsw@0 | 15 |
jbe/bsw@0 | 16 --]]-- |
jbe/bsw@0 | 17 |
jbe/bsw@0 | 18 function encode.url(args) |
jbe/bsw@0 | 19 local external = args.external |
jbe/bsw@0 | 20 local base = args.base or request.get_relative_baseurl() |
jbe/bsw@0 | 21 local static = args.static |
jbe/bsw@0 | 22 local module = args.module |
jbe/bsw@0 | 23 local view = args.view |
jbe/bsw@0 | 24 local action = args.action |
jbe/bsw@0 | 25 local id = args.id |
jbe/bsw@0 | 26 local params = args.params or {} |
jbe/bsw@0 | 27 local result = {} |
jbe/bsw@0 | 28 local id_as_param = false |
jbe/bsw@0 | 29 local function add(...) |
jbe/bsw@0 | 30 for i = 1, math.huge do |
jbe/bsw@0 | 31 local v = select(i, ...) |
jbe/bsw@0 | 32 if v == nil then break end |
jbe/bsw@0 | 33 result[#result+1] = v |
jbe/bsw@0 | 34 end |
jbe/bsw@0 | 35 end |
jbe/bsw@0 | 36 if external then |
jbe/bsw@0 | 37 add(external) |
jbe/bsw@0 | 38 else |
jbe/bsw@0 | 39 add(base) |
jbe/bsw@0 | 40 if not string.find(base, "/$") then |
jbe/bsw@0 | 41 add("/") |
jbe/bsw@0 | 42 end |
jbe/bsw@0 | 43 if static then |
jbe/bsw@0 | 44 add("static/") |
jbe/bsw@0 | 45 add(static) |
jbe/bsw@0 | 46 elseif module or view or action or id then |
jbe/bsw@0 | 47 assert(module, "Module not specified.") |
jbe/bsw@0 | 48 add(encode.url_part(module), "/") |
jbe/bsw@0 | 49 if view and not action then |
jbe/bsw@0 | 50 local view_base, view_suffix = string.match( |
jbe/bsw@0 | 51 view, |
jbe/bsw@0 | 52 "^([^.]*)(.*)$" |
jbe/bsw@0 | 53 ) |
jbe/bsw@0 | 54 add(encode.url_part(view_base)) |
jbe/bsw@0 | 55 if args.id then |
jbe/bsw@0 | 56 add("/", encode.url_part(id)) |
jbe/bsw@0 | 57 end |
jbe/bsw@0 | 58 if view_suffix == "" then |
jbe/bsw@0 | 59 add(".html") |
jbe/bsw@0 | 60 else |
jbe/bsw@0 | 61 add(view_suffix) -- view_suffix includes dot as first character |
jbe/bsw@0 | 62 end |
jbe/bsw@0 | 63 elseif action and not view then |
jbe/bsw@0 | 64 add(encode.url_part(action)) |
jbe/bsw@0 | 65 id_as_param = true |
jbe/bsw@0 | 66 elseif view and action then |
jbe/bsw@0 | 67 error("Both a view and an action was specified.") |
jbe/bsw@0 | 68 end |
jbe/bsw@0 | 69 end |
jbe/bsw@0 | 70 do |
jbe/bsw@0 | 71 local new_params = request.get_perm_params() |
jbe/bsw@0 | 72 for key, value in pairs(params) do |
jbe/bsw@0 | 73 new_params[key] = value |
jbe/bsw@0 | 74 end |
jbe/bsw@0 | 75 params = new_params |
jbe/bsw@0 | 76 end |
jbe/bsw@0 | 77 end |
jbe/bsw@0 | 78 if next(params) ~= nil or (id and id_as_param) then |
jbe/bsw@0 | 79 add("?") |
jbe/bsw@0 | 80 if id and id_as_param then |
jbe/bsw@0 | 81 add("_webmcp_id=", encode.url_part(id), "&") |
jbe/bsw@0 | 82 end |
jbe/bsw@0 | 83 for key, value in pairs(params) do |
jbe/bsw@0 | 84 add(encode.url_part(key), "=", encode.url_part(value), "&") |
jbe/bsw@0 | 85 end |
jbe/bsw@0 | 86 result[#result] = nil -- remove last '&' or '?' |
jbe/bsw@0 | 87 end |
jbe/bsw@0 | 88 return table.concat(result) |
jbe/bsw@0 | 89 end |