From 30e3d9b315164804de9738efebf4d6aaaad50197 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Thu, 31 Dec 2009 14:14:17 +0000 Subject: Lua libraries for standard functions moved out of acf-core 0.9.0 --- html.lua | 262 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 html.lua (limited to 'html.lua') diff --git a/html.lua b/html.lua new file mode 100644 index 0000000..33d6d71 --- /dev/null +++ b/html.lua @@ -0,0 +1,262 @@ +--[[ lowlevel html functions + Written for Alpine Configuration Framework (ACF) -- see www.alpinelinux.org + Copyright (C) 2007 Nathan Angelacos + Licensed under the terms of GPL2 +]]-- +module (..., package.seeall) + +--[[ Cookie functions ]]------------------------------------------------------ +cookie={} + +-- Set a cookie - returns a string suitable for setting a cookie +-- if the value is the boolean "false", then set the cookie to expire +cookie.set = function ( name, value, path ) + local expires = "" + if name == nil then + return ("") + end + if value == false then + expires = 'expires=Thu Jan 1 00:00:00 EST 1970' + value = "" + end + if path == nil then + path = "/" + end + return (string.format('Set-Cookie: %s=%s; path=%s; %s\n', html_escape(tostring(name)), + html_escape(tostring(value)), html_escape(path), html_escape(expires))) +end + + +-- wrapper function to clear a cookie +cookie.unset = function ( name, path) + return cookie.set (name, false, path) +end + + + +-- escape unsafe html characters +function html_escape (text ) + text = text or "" + local str = string.gsub (text, "&", "&" ) + str = string.gsub (str, "<", "<" ) + str = string.gsub (str, ">", ">" ) + str = string.gsub (str, "'", "'" ) + return (string.gsub (str, '"', """ )) +end + +-- return a name,value pair as a string. +local nv_pair = function ( name, value) + if ( name == nil ) then + return ( value or "" ) + end + + if ( type(value) == "boolean" ) then + value = tostring(value) + end + + if ( value == nil ) then + return ( "" ) + else + return (string.format (' %s="%s" ', html_escape(name) , html_escape(value) )) + end +end + + +--[[ + each of these functions take a table that has an associative array of + the values we might care about: + + value -- this is the value in the form element, or the selected element + name -- this is the name of the element + cols, rows + class + id + etc. +]]-- + +local generic_input = function ( field_type, v ) + if type(v.value) == "table" then + ret = {} + local vals = v.value + for n, val in ipairs(vals) do + v.value = val + table.insert(ret, generic_input(field_type, v)) + end + v.value = vals + return table.concat(ret) + end + if ( field_type == nil ) then + return nil + end + + local str = string.format ( '" ) +end + + +--[[ Form functions ]]------------------------------------------------------ +-- These expect something like a cfe to work (see mvc.lua) + +form = {} +form.text = function ( v ) + return generic_input ( "text", v ) +end + + +form.longtext = function ( v ) + local str = "" .. html_escape(v.value) .. "" ) +end + + +function form.password ( v ) + return generic_input ( "password", v ) +end + +function form.hidden ( v ) + return generic_input ( "hidden", v ) +end + + +function form.submit ( v ) + return generic_input ( "submit", v ) +end + + +function form.action (v) + return generic_input ("submit", v) +end + +function form.file ( v ) + return generic_input ( "file", v ) +end + +function form.image ( v ) + return generic_input ( "image", v ) +end + + +-- v.value is the selected item (or an array if multiple) +-- v.option is an array of valid options +-- NOTE use of value and values (plural) +function form.select ( v ) + if ( v.name == nil ) then + return nil + end + local str = "" + -- now the options + local reverseval = {} + if type(v.value) == "table" then + for x,val in ipairs(v.value) do + reverseval[val]=x + end + end + local selected = false + for i, k in ipairs ( v.option ) do + local val = k + local txt = nil + if type(val) == "table" then + txt=val[1] + val=val[0] + end + str = str .. "" + end + if not selected then + str = str .. '' + end + str = str .. "" + return (str) +end + +function form.checkbox ( v ) + return generic_input ( "checkbox", v ) +end + + +-- NOTE: VALUE of a form is a table containing the form elements ... +function form.start ( v) + if ( v.action == nil ) then + return nil + end + + local method = v.method or "get" + return ( string.format ( + '
', + nv_pair ( "class", html_escape(v.class) ), + nv_pair ( "method", html_escape(v.method) ), + nv_pair ( "action", html_escape(v.action) ) + ) ) +end + +function form.stop ( ) + return ("
") +end + +-- For "h1, h2, p," etc +-- WARNING - Text is printed verbatim - you may want to +-- wrap the text in html_escape +function entity (tag, text, class, id) + return ( string.format ( + "<%s%s%s>%s", + html_escape(tag), + nv_pair ("class", class), + nv_pair("id", id), html_escape(text), html_escape(tag)) + ) +end + + +function link ( v ) + if ( v.value == nil ) then + return nil + end + local str = nv_pair ( "href", v.value ) + for i,k in ipairs( { "class", "id" }) do + str = str .. nv_pair ( k, v[k] ) + end + + return ( "" .. html_escape(v.label) .. "" ) +end -- cgit v1.2.3