| rev | 
   line source | 
| 
jbe/bsw@0
 | 
     1 --[[--
 | 
| 
jbe/bsw@0
 | 
     2 ui.link{
 | 
| 
jbe/bsw@0
 | 
     3   external  = external,   -- external URL
 | 
| 
jbe/bsw@0
 | 
     4   static    = static,     -- URL relative to the static file directory
 | 
| 
jbe/bsw@0
 | 
     5   module    = module,     -- module name
 | 
| 
jbe/bsw@0
 | 
     6   view      = view,       -- view name
 | 
| 
jbe/bsw@0
 | 
     7   action    = action,     -- action name
 | 
| 
jbe@53
 | 
     8   attr      = attr,       -- for views: table of HTML attributes
 | 
| 
jbe@53
 | 
     9   a_attr    = a_attr,     -- for actions: table of HTML attributes for the "a" tag
 | 
| 
jbe@53
 | 
    10   form_attr = form_attr,  -- for actions: table of HTML attributes for the "form" tag
 | 
| 
jbe/bsw@0
 | 
    11   id        = id,         -- optional id to be passed to the view or action to select a particular data record
 | 
| 
jbe/bsw@0
 | 
    12   params    = params,     -- optional parameters to be passed to the view or action
 | 
| 
jbe/bsw@0
 | 
    13   routing   = routing,    -- optional routing information for action links, as described for ui.form{...}
 | 
| 
jbe@79
 | 
    14   anchor    = anchor,     -- for views: anchor in destination URL
 | 
| 
jbe/bsw@0
 | 
    15   text      = text,       -- link text
 | 
| 
jbe/bsw@11
 | 
    16   content   = content,    -- link content (overrides link text, except for submit buttons for action calls without JavaScript)
 | 
| 
jbe@12
 | 
    17   partial   = {           -- parameters for partial loading, see below
 | 
| 
jbe/bsw@11
 | 
    18     module = module,
 | 
| 
jbe/bsw@11
 | 
    19     view   = view,
 | 
| 
jbe/bsw@11
 | 
    20     id     = id,
 | 
| 
jbe@12
 | 
    21     params = params,
 | 
| 
jbe@12
 | 
    22     target = target
 | 
| 
jbe/bsw@11
 | 
    23   }
 | 
| 
jbe/bsw@0
 | 
    24 }
 | 
| 
jbe/bsw@0
 | 
    25 
 | 
| 
jbe/bsw@0
 | 
    26 This function inserts a link into the active slot. It may be either an internal application link ('module' given and 'view' or 'action' given), or a link to an external web page ('external' given), or a link to a file in the static file directory of the application ('static' given).
 | 
| 
jbe/bsw@0
 | 
    27 
 | 
| 
jbe@12
 | 
    28 When passing a table as "partial" argument, AND if partial loading has been enabled by calling ui.enable_partial_loading(), then ui._partial_load_js is
 | 
| 
jbe@12
 | 
    29 used to create an onclick event (onsubmit event for action links). The
 | 
| 
jbe@12
 | 
    30 "partial" setting table is passed to ui._partial_load_js as first argument.
 | 
| 
jbe@12
 | 
    31 See ui._partial_load_js(...) for further documentation.
 | 
| 
jbe@12
 | 
    32 
 | 
| 
jbe/bsw@0
 | 
    33 --]]--
 | 
| 
jbe/bsw@0
 | 
    34 
 | 
| 
jbe/bsw@0
 | 
    35 function ui.link(args)
 | 
| 
jbe/bsw@0
 | 
    36   local args = args or {}
 | 
| 
jbe/bsw@4
 | 
    37   local content = args.content or args.text
 | 
| 
jbe/bsw@0
 | 
    38   assert(content, "ui.link{...} needs a text.")
 | 
| 
jbe/bsw@0
 | 
    39   local function wrapped_content()
 | 
| 
jbe/bsw@11
 | 
    40     if args.image then
 | 
| 
jbe/bsw@11
 | 
    41       ui.image(args.image)
 | 
| 
jbe/bsw@11
 | 
    42     end
 | 
| 
jbe/bsw@0
 | 
    43     if type(content) == "function" then
 | 
| 
jbe/bsw@0
 | 
    44       content()
 | 
| 
jbe/bsw@0
 | 
    45     else
 | 
| 
jbe/bsw@0
 | 
    46       slot.put(encode.html(content))
 | 
| 
jbe/bsw@0
 | 
    47     end
 | 
| 
jbe/bsw@0
 | 
    48   end
 | 
| 
jbe/bsw@0
 | 
    49   if args.action then
 | 
| 
jbe/bsw@0
 | 
    50     local form_attr   = table.new(args.form_attr)
 | 
| 
jbe/bsw@0
 | 
    51     local form_id
 | 
| 
jbe/bsw@0
 | 
    52     if form_attr.id then
 | 
| 
jbe/bsw@0
 | 
    53       form_id = form_attr.id
 | 
| 
jbe/bsw@0
 | 
    54     else
 | 
| 
jbe/bsw@0
 | 
    55       form_id = ui.create_unique_id()
 | 
| 
jbe/bsw@0
 | 
    56     end
 | 
| 
jbe/bsw@0
 | 
    57     local quoted_form_id = encode.json(form_id)
 | 
| 
jbe/bsw@0
 | 
    58     form_attr.id      = form_id
 | 
| 
jbe/bsw@0
 | 
    59     local a_attr      = table.new(args.attr)
 | 
| 
jbe/bsw@0
 | 
    60     a_attr.href       = "#"
 | 
| 
jbe/bsw@0
 | 
    61     a_attr.onclick    =
 | 
| 
jbe@52
 | 
    62       "var f = document.getElementById(" .. quoted_form_id .. "); if (! f.onsubmit || f.onsubmit() != false) { f.submit() }; return false;"
 | 
| 
jbe/bsw@0
 | 
    63     ui.form{
 | 
| 
jbe/bsw@0
 | 
    64       external = args.external,
 | 
| 
jbe/bsw@0
 | 
    65       module   = args.module or request.get_module(),
 | 
| 
jbe/bsw@0
 | 
    66       action   = args.action,
 | 
| 
jbe/bsw@0
 | 
    67       id       = args.id,
 | 
| 
jbe/bsw@0
 | 
    68       params   = args.params,
 | 
| 
jbe/bsw@0
 | 
    69       routing  = args.routing,
 | 
| 
jbe/bsw@11
 | 
    70       partial  = args.partial,
 | 
| 
jbe/bsw@0
 | 
    71       attr     = form_attr,
 | 
| 
jbe/bsw@0
 | 
    72       content  = function()
 | 
| 
jbe/bsw@0
 | 
    73         ui.submit{ text = args.text, attr = args.submit_attr }
 | 
| 
jbe/bsw@0
 | 
    74       end
 | 
| 
jbe/bsw@0
 | 
    75     }
 | 
| 
jbe/bsw@0
 | 
    76     ui.script{
 | 
| 
jbe/bsw@0
 | 
    77       type = "text/javascript",
 | 
| 
jbe/bsw@0
 | 
    78       script = (
 | 
| 
jbe/bsw@0
 | 
    79         "document.getElementById(" ..
 | 
| 
jbe/bsw@0
 | 
    80         quoted_form_id ..
 | 
| 
jbe/bsw@0
 | 
    81         ").style.display = 'none'; document.write(" ..
 | 
| 
jbe/bsw@0
 | 
    82         encode.json(
 | 
| 
jbe/bsw@0
 | 
    83           slot.use_temporary(
 | 
| 
jbe/bsw@0
 | 
    84             function()
 | 
| 
jbe/bsw@0
 | 
    85               ui.tag{
 | 
| 
jbe/bsw@0
 | 
    86                 tag     = "a",
 | 
| 
jbe/bsw@0
 | 
    87                 attr    = a_attr,
 | 
| 
jbe/bsw@0
 | 
    88                 content = wrapped_content
 | 
| 
jbe/bsw@0
 | 
    89               }
 | 
| 
jbe/bsw@0
 | 
    90             end
 | 
| 
jbe/bsw@0
 | 
    91           )
 | 
| 
jbe/bsw@0
 | 
    92         ) ..
 | 
| 
jbe/bsw@0
 | 
    93         ");"
 | 
| 
jbe/bsw@0
 | 
    94       )
 | 
| 
jbe/bsw@0
 | 
    95     }
 | 
| 
jbe/bsw@0
 | 
    96   else
 | 
| 
jbe/bsw@0
 | 
    97     -- TODO: support content function
 | 
| 
jbe/bsw@0
 | 
    98     local a_attr = table.new(args.attr)
 | 
| 
jbe/bsw@0
 | 
    99     a_attr.href = encode.url{
 | 
| 
jbe/bsw@0
 | 
   100       external  = args.external,
 | 
| 
jbe/bsw@0
 | 
   101       static    = args.static,
 | 
| 
jbe/bsw@0
 | 
   102       module    = args.module or request.get_module(),
 | 
| 
jbe/bsw@0
 | 
   103       view      = args.view,
 | 
| 
jbe/bsw@0
 | 
   104       id        = args.id,
 | 
| 
jbe/bsw@0
 | 
   105       params    = args.params,
 | 
| 
jbe@79
 | 
   106       anchor    = args.anchor
 | 
| 
jbe/bsw@0
 | 
   107     }
 | 
| 
jbe/bsw@11
 | 
   108     if ui.is_partial_loading_enabled() and args.partial then
 | 
| 
jbe/bsw@11
 | 
   109       a_attr.onclick = ui._partial_load_js(args.partial)
 | 
| 
jbe/bsw@11
 | 
   110     end
 | 
| 
jbe/bsw@0
 | 
   111     return ui.tag{ tag  = "a", attr = a_attr, content = wrapped_content }
 | 
| 
jbe/bsw@0
 | 
   112   end
 | 
| 
jbe/bsw@0
 | 
   113 end
 |