Update LuCI

This commit is contained in:
Matthias Schiffer 2014-09-09 19:49:44 +02:00
parent ebec39f468
commit bb6d0f1179
6 changed files with 1 additions and 333 deletions

View File

@ -15,4 +15,4 @@ PACKAGES_ROUTING_COMMIT=1a999ad02b49a5ca1315d7f21555039372a6e4d5
PACKAGES_ROUTING_BRANCH=for-14.07
PACKAGES_LUCI_REPO=git://git.openwrt.org/project/luci.git
PACKAGES_LUCI_COMMIT=834961d9f34f5282f98a480196924a42541d1474
PACKAGES_LUCI_COMMIT=108a146a38f3facc9bdfe1542e6144dc49a67317

View File

@ -1,106 +0,0 @@
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Fri, 16 May 2014 10:57:26 +0200
Subject: libs/web: rename template_parser field "mmap" to the more generic "data"
diff --git a/modules/base/src/template_parser.c b/modules/base/src/template_parser.c
index 6054451..fc8607b 100644
--- a/modules/base/src/template_parser.c
+++ b/modules/base/src/template_parser.c
@@ -82,15 +82,15 @@ struct template_parser * template_open(const char *file)
goto err;
parser->size = s.st_size;
- parser->mmap = mmap(NULL, parser->size, PROT_READ, MAP_PRIVATE,
+ parser->data = mmap(NULL, parser->size, PROT_READ, MAP_PRIVATE,
parser->fd, 0);
- if (parser->mmap != MAP_FAILED)
+ if (parser->data != MAP_FAILED)
{
- parser->off = parser->mmap;
+ parser->off = parser->data;
parser->cur_chunk.type = T_TYPE_INIT;
- parser->cur_chunk.s = parser->mmap;
- parser->cur_chunk.e = parser->mmap;
+ parser->cur_chunk.s = parser->data;
+ parser->cur_chunk.e = parser->data;
return parser;
}
@@ -108,8 +108,8 @@ void template_close(struct template_parser *parser)
if (parser->gc != NULL)
free(parser->gc);
- if ((parser->mmap != NULL) && (parser->mmap != MAP_FAILED))
- munmap(parser->mmap, parser->size);
+ if ((parser->data != NULL) && (parser->data != MAP_FAILED))
+ munmap(parser->data, parser->size);
if (parser->fd >= 0)
close(parser->fd);
@@ -121,7 +121,7 @@ void template_text(struct template_parser *parser, const char *e)
{
const char *s = parser->off;
- if (s < (parser->mmap + parser->size))
+ if (s < (parser->data + parser->size))
{
if (parser->strip_after)
{
@@ -291,7 +291,7 @@ template_format_chunk(struct template_parser *parser, size_t *sz)
const char *template_reader(lua_State *L, void *ud, size_t *sz)
{
struct template_parser *parser = ud;
- int rem = parser->size - (parser->off - parser->mmap);
+ int rem = parser->size - (parser->off - parser->data);
char *tag;
parser->prv_chunk = parser->cur_chunk;
@@ -314,8 +314,8 @@ const char *template_reader(lua_State *L, void *ud, size_t *sz)
}
else
{
- template_text(parser, parser->mmap + parser->size);
- parser->off = parser->mmap + parser->size;
+ template_text(parser, parser->data + parser->size);
+ parser->off = parser->data + parser->size;
}
}
@@ -331,7 +331,7 @@ const char *template_reader(lua_State *L, void *ud, size_t *sz)
else
{
/* unexpected EOF */
- template_code(parser, parser->mmap + parser->size);
+ template_code(parser, parser->data + parser->size);
*sz = 1;
return "\033";
@@ -366,12 +366,12 @@ int template_error(lua_State *L, struct template_parser *parser)
if (strfind((char *)err, strlen(err), "'char(27)'", 10) != NULL)
{
- off = parser->mmap + parser->size;
+ off = parser->data + parser->size;
err = "'%>' expected before end of file";
chunkline = 0;
}
- for (ptr = parser->mmap; ptr < off; ptr++)
+ for (ptr = parser->data; ptr < off; ptr++)
if (*ptr == '\n')
line++;
diff --git a/modules/base/src/template_parser.h b/modules/base/src/template_parser.h
index d1c6062..ad03cbc 100644
--- a/modules/base/src/template_parser.h
+++ b/modules/base/src/template_parser.h
@@ -58,7 +58,7 @@ struct template_chunk {
struct template_parser {
int fd;
uint32_t size;
- char *mmap;
+ char *data;
char *off;
char *gc;
int line;

View File

@ -1,17 +0,0 @@
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Fri, 16 May 2014 11:29:22 +0200
Subject: libs/web: remove strange 'static' on variable declaration
diff --git a/modules/base/src/template_parser.c b/modules/base/src/template_parser.c
index fc8607b..1aa5131 100644
--- a/modules/base/src/template_parser.c
+++ b/modules/base/src/template_parser.c
@@ -66,7 +66,7 @@ static char *strfind(char *haystack, int hslen, const char *needle, int ndlen)
struct template_parser * template_open(const char *file)
{
struct stat s;
- static struct template_parser *parser;
+ struct template_parser *parser;
if (!(parser = malloc(sizeof(*parser))))
goto err;

View File

@ -1,142 +0,0 @@
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Fri, 16 May 2014 11:37:21 +0200
Subject: libs/web: add support for string templates to the template parser
diff --git a/modules/base/src/template_lualib.c b/modules/base/src/template_lualib.c
index 0d43641..1035611 100644
--- a/modules/base/src/template_lualib.c
+++ b/modules/base/src/template_lualib.c
@@ -18,10 +18,8 @@
#include "template_lualib.h"
-int template_L_parse(lua_State *L)
+static int template_L_do_parse(lua_State *L, struct template_parser *parser, const char *chunkname)
{
- const char *file = luaL_checkstring(L, 1);
- struct template_parser *parser = template_open(file);
int lua_status, rv;
if (!parser)
@@ -32,7 +30,7 @@ int template_L_parse(lua_State *L)
return 3;
}
- lua_status = lua_load(L, template_reader, parser, file);
+ lua_status = lua_load(L, template_reader, parser, chunkname);
if (lua_status == 0)
rv = 1;
@@ -44,6 +42,23 @@ int template_L_parse(lua_State *L)
return rv;
}
+int template_L_parse(lua_State *L)
+{
+ const char *file = luaL_checkstring(L, 1);
+ struct template_parser *parser = template_open(file);
+
+ return template_L_do_parse(L, parser, file);
+}
+
+int template_L_parse_string(lua_State *L)
+{
+ size_t len;
+ const char *str = luaL_checklstring(L, 1, &len);
+ struct template_parser *parser = template_string(str, len);
+
+ return template_L_do_parse(L, parser, "[string]");
+}
+
int template_L_utf8(lua_State *L)
{
size_t len = 0;
@@ -146,6 +161,7 @@ static int template_L_hash(lua_State *L) {
/* module table */
static const luaL_reg R[] = {
{ "parse", template_L_parse },
+ { "parse_string", template_L_parse_string },
{ "utf8", template_L_utf8 },
{ "pcdata", template_L_pcdata },
{ "striptags", template_L_striptags },
diff --git a/modules/base/src/template_parser.c b/modules/base/src/template_parser.c
index 1aa5131..c263fbf 100644
--- a/modules/base/src/template_parser.c
+++ b/modules/base/src/template_parser.c
@@ -100,6 +100,36 @@ err:
return NULL;
}
+struct template_parser * template_string(const char *str, uint32_t len)
+{
+ struct template_parser *parser;
+
+ if (!str) {
+ errno = EINVAL;
+ goto err;
+ }
+
+ if (!(parser = malloc(sizeof(*parser))))
+ goto err;
+
+ memset(parser, 0, sizeof(*parser));
+ parser->fd = -1;
+
+ parser->size = len;
+ parser->data = (char*)str;
+
+ parser->off = parser->data;
+ parser->cur_chunk.type = T_TYPE_INIT;
+ parser->cur_chunk.s = parser->data;
+ parser->cur_chunk.e = parser->data;
+
+ return parser;
+
+err:
+ template_close(parser);
+ return NULL;
+}
+
void template_close(struct template_parser *parser)
{
if (!parser)
@@ -108,11 +138,14 @@ void template_close(struct template_parser *parser)
if (parser->gc != NULL)
free(parser->gc);
- if ((parser->data != NULL) && (parser->data != MAP_FAILED))
- munmap(parser->data, parser->size);
+ /* if file is not set, we were parsing a string */
+ if (parser->file) {
+ if ((parser->data != NULL) && (parser->data != MAP_FAILED))
+ munmap(parser->data, parser->size);
- if (parser->fd >= 0)
- close(parser->fd);
+ if (parser->fd >= 0)
+ close(parser->fd);
+ }
free(parser);
}
@@ -376,7 +409,7 @@ int template_error(lua_State *L, struct template_parser *parser)
line++;
snprintf(msg, sizeof(msg), "Syntax error in %s:%d: %s",
- parser->file, line + chunkline, err ? err : "(unknown error)");
+ parser->file ? parser->file : "[string]", line + chunkline, err ? err : "(unknown error)");
lua_pushnil(L);
lua_pushinteger(L, line + chunkline);
diff --git a/modules/base/src/template_parser.h b/modules/base/src/template_parser.h
index ad03cbc..a3200a2 100644
--- a/modules/base/src/template_parser.h
+++ b/modules/base/src/template_parser.h
@@ -71,6 +71,7 @@ struct template_parser {
};
struct template_parser * template_open(const char *file);
+struct template_parser * template_string(const char *str, uint32_t len);
void template_close(struct template_parser *parser);
const char *template_reader(lua_State *L, void *ud, size_t *sz);

View File

@ -1,67 +0,0 @@
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Fri, 16 May 2014 11:48:42 +0200
Subject: libs/web: add support for string templates to luci.template module
diff --git a/modules/base/luasrc/template.lua b/modules/base/luasrc/template.lua
index 72127d1..ea01d3c 100644
--- a/modules/base/luasrc/template.lua
+++ b/modules/base/luasrc/template.lua
@@ -50,6 +50,13 @@ function render(name, scope)
return Template(name):render(scope or getfenv(2))
end
+--- Render a template from a string.
+-- @param template Template string
+-- @param scope Scope to assign to template (optional)
+function render_string(template, scope)
+ return Template(nil, template):render(scope or getfenv(2))
+end
+
-- Template class
Template = util.class()
@@ -59,11 +66,14 @@ Template.cache = setmetatable({}, {__mode = "v"})
-- Constructor - Reads and compiles the template on-demand
-function Template.__init__(self, name)
+function Template.__init__(self, name, template)
+ if name then
+ self.template = self.cache[name]
+ self.name = name
+ else
+ self.name = "[string]"
+ end
- self.template = self.cache[name]
- self.name = name
-
-- Create a new namespace for this template
self.viewns = context.viewns
@@ -72,16 +82,22 @@ function Template.__init__(self, name)
-- Compile template
local err
- local sourcefile = viewdir .. "/" .. name .. ".htm"
+ local sourcefile
- self.template, _, err = tparser.parse(sourcefile)
+ if name then
+ sourcefile = viewdir .. "/" .. name .. ".htm"
+ self.template, _, err = tparser.parse(sourcefile)
+ else
+ sourcefile = "[string]"
+ self.template, _, err = tparser.parse_string(template)
+ end
-- If we have no valid template throw error, otherwise cache the template
if not self.template then
error("Failed to load template '" .. name .. "'.\n" ..
"Error while parsing template '" .. sourcefile .. "':\n" ..
(err or "Unknown syntax error"))
- else
+ elseif name then
self.cache[name] = self.template
end
end