webmcp

annotate framework/env/ui/script.lua @ 10:e017c47d43b5

Modified encode.json to avoid special CDATA sequences in output
author jbe
date Wed Feb 03 00:57:18 2010 +0100 (2010-02-03)
parents 64f4540ce88c
children d76a8857ba62
rev   line source
jbe/bsw@0 1 --[[--
jbe/bsw@0 2 ui.script{
jbe/bsw@0 3 noscript_attr = noscript_attr, -- HTML attributes for noscript tag
jbe/bsw@0 4 noscript = noscript, -- string or function for noscript content
jbe/bsw@0 5 attr = attr, -- extra HTML attributes for script tag
jbe/bsw@0 6 type = type, -- type of script, defaults to "text/javascript"
jbe/bsw@0 7 script = script, -- string or function for script content
jbe/bsw@0 8 }
jbe/bsw@0 9
jbe/bsw@9 10 This function is used to insert a script into the active slot.
jbe/bsw@0 11
jbe@10 12 WARNING: The given script MUST NOT include two closing square brackets directly followed by a greater-than sign, unless the output is interpreted strictly as XHTML. For string literals this is ensured automatically, if being encoded with encode.json{...}.
jbe@10 13
jbe/bsw@0 14 --]]--
jbe/bsw@0 15
jbe/bsw@0 16 function ui.script(args)
jbe/bsw@0 17 local args = args or {}
jbe/bsw@0 18 local noscript_attr = args.noscript_attr
jbe/bsw@0 19 local noscript = args.noscript
jbe/bsw@0 20 local attr = table.new(args.attr)
jbe/bsw@0 21 attr.type = attr.type or args.type or "text/javascript"
jbe/bsw@0 22 local script = args.script
jbe/bsw@4 23 if args.external then
jbe/bsw@4 24 attr.src = encode.url{ external = args.external }
jbe/bsw@4 25 elseif args.static then
jbe/bsw@4 26 attr.src = encode.url{ static = args.static }
jbe/bsw@4 27 end
jbe/bsw@0 28 if noscript then
jbe/bsw@0 29 ui.tag{ tag = "noscript", attr = attr, content = noscript }
jbe/bsw@0 30 end
jbe/bsw@4 31 if attr.src then
jbe/bsw@4 32 ui.tag{ tag = "script", attr = attr, content = "" }
jbe/bsw@4 33 elseif script then
jbe/bsw@9 34 ui.tag{
jbe/bsw@9 35 tag = "script",
jbe/bsw@9 36 attr = attr,
jbe/bsw@9 37 content = function()
jbe/bsw@9 38 slot.put("/* <![CDATA[ */")
jbe/bsw@9 39 local script_string
jbe/bsw@9 40 if type(script) == "function" then
jbe/bsw@9 41 script_string = slot.use_temporary(script)
jbe/bsw@9 42 else
jbe/bsw@9 43 script_string = script
jbe/bsw@9 44 end
jbe/bsw@9 45 -- Using double parenthesis in following command is important
jbe/bsw@9 46 slot.put((string.gsub(script_string, "]]>", "]]]]><![CDATA[>")))
jbe/bsw@9 47 slot.put("/* ]]> */")
jbe/bsw@9 48 end
jbe/bsw@9 49 }
jbe/bsw@0 50 end
jbe/bsw@0 51 end

Impressum / About Us