webmcp
annotate framework/env/encode/url.lua @ 11:d76a8857ba62
Added ui.partial and other functions, which allow partial content replacement using XMLHttpRequests; Image support for ui.link
Also includes following changes:
- Fix for rocketcgi library to accept POST data content-types, which contain additional charset information.
- Support arrays passed as params to encode.url (only for keys ending with "[]")
- Version information changed to "1.0.7"
Documentation for added functions is not yet complete.
Also includes following changes:
- Fix for rocketcgi library to accept POST data content-types, which contain additional charset information.
- Support arrays passed as params to encode.url (only for keys ending with "[]")
- Version information changed to "1.0.7"
Documentation for added functions is not yet complete.
author | jbe/bsw |
---|---|
date | Fri Feb 12 18:40:22 2010 +0100 (2010-02-12) |
parents | 9fdfb27f8e67 |
children | 3a6962b9121c |
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@11 | 84 -- TODO: better way to detect arrays? |
jbe/bsw@11 | 85 if string.match(key, "%[%]$") then |
jbe/bsw@11 | 86 for idx, entry in ipairs(value) do |
jbe/bsw@11 | 87 add(encode.url_part(key), "=", encode.url_part(entry), "&") |
jbe/bsw@11 | 88 end |
jbe/bsw@11 | 89 else |
jbe/bsw@11 | 90 add(encode.url_part(key), "=", encode.url_part(value), "&") |
jbe/bsw@11 | 91 end |
jbe/bsw@0 | 92 end |
jbe/bsw@0 | 93 result[#result] = nil -- remove last '&' or '?' |
jbe/bsw@0 | 94 end |
jbe/bsw@0 | 95 return table.concat(result) |
jbe/bsw@0 | 96 end |