mg.write("HTTP/1.0 200 OK\r\n") mg.write("Content-Type: text/html\r\n") mg.write("\r\n") mg.write([[ CivetWeb Lua test page2

This is Lua script example 2, served by the CivetWeb web server, version ]] .. mg.version .. [[.

The following features are available:

\n"); -- Current date/time mg.write("\n
\n") mg.write("

Today is " .. os.date("%A") .. "

\n"); -- Request content mg.write("\n
\n") l = mg.request_info.content_length if l then mg.write("

Content-Length = "..l..":
\n

\n")
  mg.write(mg.read())
  mg.write("\n
\n

\n") else mg.write("

no request content available for " .. mg.request_info.request_method .. " method

\n") end -- Directory listing mg.write("\n
\n") mg.write("

\n"); if not lfs then mg.write("lfs not available\n") else mg.write("Files in " .. lfs.currentdir()) mg.write("\n

\n") mg.write(string.format("\n", cnt)) end mg.write("

\n") function htmlEsc(txt) s = txt:gsub("%&", "&") s = s:gsub("%<", "<") s = s:gsub("%>", ">") return (s) end function printTable(tab, indent) indent = indent or 0 for k,v in pairs(tab) do if (type(v)=="table") then mg.write(string.rep(" ", indent) .. tostring(k) .. ":\n") printTable(v, indent + 1) else mg.write(string.rep(" ", indent) .. tostring(k) .. "\t" .. tostring(v) .. "\n") end end end -- xml test if (xml) then mg.write("\n
\n") mg.write("

xml2lua:
\n

\n");
xmlstr = [[sub1valsubsubval]]
xmlev = xml.eval(xmlstr)
mg.write(htmlEsc(xmlstr))
mg.write("\n-->\n")
mg.write(type(xmlev) .. ":\n")
mg.write(printTable(xmlev, 1))
mg.write("
\n

\n") mg.write("

lua2xml:
\n

\n");
mg.write(htmlEsc(xml.str(xmlev, 1, "xml")))
mg.write("
\n

\n") mg.write("

lua2xml:
\n

\n");
mg.write(htmlEsc(xml.str(demo_data_for_xml, 1, "xml")))
mg.write("
\n

\n") end -- json test current_script_path = mg.script_name:match("(.*[%/%\\]).*%.lua") script_search_path = current_script_path .. "?.lua" package.path = script_search_path .. ";" .. package.path json = require "json" mg.write("\n
\n") mg.write("

json2lua:
\n

\n");
-- JSON example from https://en.wikipedia.org/wiki/JSON#Example
jsonstr = [[{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 27,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    },
    {
      "type": "mobile",
      "number": "123 456-7890"
    }
  ],
  "children": [],
  "spouse": null
}]]
jsonev = json.decode(jsonstr)
mg.write(htmlEsc(jsonstr))
mg.write("\n-->\n")
mg.write(type(jsonev) .. ":\n")
mg.write(printTable(jsonev, 1))
mg.write("
\n

\n") mg.write("

lua2json:
\n

\n");
mg.write(htmlEsc(json.encode(jsonev)))
mg.write("
\n

\n") mg.write("

lua2json:
\n

\n");
mg.write(htmlEsc(json.encode(demo_data_for_json)))
mg.write("
\n

\n") if mg.request_info.query_string then qtab = mg.split_form_data(mg.request_info.query_string) mg.write("

\nSplit form test:
\n"); mg.write("\n"); mg.write("\n"); mg.write("\n"); mg.write("\n"); mg.write("\n"); mg.write("\n"); for n,t in pairs(qtab) do mg.write("\n"); mg.write("\n"); mg.write("\n"); mg.write("\n"); mg.write("\n"); end mg.write("
#namevalue
" .. n .. "" .. tostring(t.name) .. "" .. tostring(t.value) .. "
\n"); mg.write("

\n"); end -- Test timer from Lua background script mg.write("\n
\n") mg.write("

\nLua shared.timer "); if (shared and shared.timer) then mg.write(tostring(shared.timer)) mg.write([[ ]]) else mg.write("not available") end mg.write("\n

\n") -- Next section ... mg.write("\n
\n") mg.write([[ ]])