From 9648489a01da274a05b705d4a980f09614facdb5 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 25 Feb 2018 19:32:08 +0100 Subject: [PATCH] gluon-web: reorganize layout handling Also bring back gluon-web-theme's i18n strings. --- .../gluon/web/controller/admin/upgrade.lua | 31 ++++++---------- .../lib/gluon/web/view/model/wrapper.html | 2 +- .../gluon-web.js => gluon-web-model.js} | 0 .../{gluon-web.js => gluon-web-model.js} | 2 +- .../luasrc/usr/lib/lua/gluon/web/model.lua | 8 ++--- package/gluon-web-theme/Makefile | 9 ++--- .../view/{themes/gluon => theme}/layout.html | 4 +-- .../static/{gluon/cascade.css => gluon.css} | 0 package/gluon-web-theme/i18n/de.po | 20 +++++++++++ package/gluon-web-theme/i18n/fr.po | 19 ++++++++++ .../gluon-web-theme/i18n/gluon-web-theme.pot | 10 ++++++ .../sass/{cascade.scss => gluon.scss} | 2 +- .../files/lib/gluon/web/view/layout.html | 3 -- .../luasrc/lib/gluon/web/www/cgi-bin/gluon | 3 ++ .../usr/lib/lua/gluon/web/dispatcher.lua | 35 +++++++------------ .../luasrc/usr/lib/lua/gluon/web/template.lua | 17 +++++++++ 16 files changed, 105 insertions(+), 60 deletions(-) rename package/gluon-web-model/files/lib/gluon/web/www/static/{resources/gluon-web.js => gluon-web-model.js} (100%) rename package/gluon-web-model/javascript/{gluon-web.js => gluon-web-model.js} (98%) rename package/gluon-web-theme/files/lib/gluon/web/view/{themes/gluon => theme}/layout.html (95%) rename package/gluon-web-theme/files/lib/gluon/web/www/static/{gluon/cascade.css => gluon.css} (100%) create mode 100644 package/gluon-web-theme/i18n/de.po create mode 100644 package/gluon-web-theme/i18n/fr.po create mode 100644 package/gluon-web-theme/i18n/gluon-web-theme.pot rename package/gluon-web-theme/sass/{cascade.scss => gluon.scss} (98%) delete mode 100644 package/gluon-web/files/lib/gluon/web/view/layout.html diff --git a/package/gluon-web-admin/luasrc/lib/gluon/web/controller/admin/upgrade.lua b/package/gluon-web-admin/luasrc/lib/gluon/web/controller/admin/upgrade.lua index 6d8e1545..7c13377a 100644 --- a/package/gluon-web-admin/luasrc/lib/gluon/web/controller/admin/upgrade.lua +++ b/package/gluon-web-admin/luasrc/lib/gluon/web/controller/admin/upgrade.lua @@ -106,36 +106,27 @@ local function action_upgrade(http, renderer) fs.unlink(tmpfile) end - renderer.render("layout", { - content = "admin/upgrade", - env = { - bad_image = has_image and not has_support, - }, - pkg = 'gluon-web-admin', - }) + renderer.render_layout('admin/upgrade', { + bad_image = has_image and not has_support, + }, 'gluon-web-admin') -- Step 2: present uploaded file, show checksum, confirmation elseif step == 2 then - renderer.render("layout", { - content = "admin/upgrade_confirm", - env = { - checksum = image_checksum(tmpfile), - filesize = fs.stat(tmpfile).size, - flashsize = storage_size(), - keepconfig = (http:formvalue("keepcfg") == "1"), - }, - pkg = 'gluon-web-admin', - }) + renderer.render_layout('admin/upgrade_confirm', { + checksum = image_checksum(tmpfile), + filesize = fs.stat(tmpfile).size, + flashsize = storage_size(), + keepconfig = (http:formvalue("keepcfg") == "1"), + }, 'gluon-web-admin') + elseif step == 3 then if http:formvalue("keepcfg") == "1" then fork_exec("/sbin/sysupgrade", tmpfile) else fork_exec("/sbin/sysupgrade", "-n", tmpfile) end - renderer.render("layout", { - content = "admin/upgrade_reboot", + renderer.render_layout('admin/upgrade_reboot', nil, 'gluon-web-admin', { hidenav = true, - pkg = 'gluon-web-admin', }) end end diff --git a/package/gluon-web-model/files/lib/gluon/web/view/model/wrapper.html b/package/gluon-web-model/files/lib/gluon/web/view/model/wrapper.html index 2d0cfdd5..a49fe938 100644 --- a/package/gluon-web-model/files/lib/gluon/web/view/model/wrapper.html +++ b/package/gluon-web-model/files/lib/gluon/web/view/model/wrapper.html @@ -3,4 +3,4 @@ map:render(renderer) end %> - + diff --git a/package/gluon-web-model/files/lib/gluon/web/www/static/resources/gluon-web.js b/package/gluon-web-model/files/lib/gluon/web/www/static/gluon-web-model.js similarity index 100% rename from package/gluon-web-model/files/lib/gluon/web/www/static/resources/gluon-web.js rename to package/gluon-web-model/files/lib/gluon/web/www/static/gluon-web-model.js diff --git a/package/gluon-web-model/javascript/gluon-web.js b/package/gluon-web-model/javascript/gluon-web-model.js similarity index 98% rename from package/gluon-web-model/javascript/gluon-web.js rename to package/gluon-web-model/javascript/gluon-web-model.js index 57bbf379..c05a171e 100644 --- a/package/gluon-web-model/javascript/gluon-web.js +++ b/package/gluon-web-model/javascript/gluon-web-model.js @@ -13,7 +13,7 @@ /* Build using: - uglifyjs javascript/gluon-web.js -o files/lib/gluon/web/www/static/resources/gluon-web.js -c -m --support-ie8 + uglifyjs javascript/gluon-web-model.js -o files/lib/gluon/web/www/static/gluon-web-model.js -c -m --support-ie8 */ diff --git a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model.lua b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model.lua index 4914dee6..8c968dfe 100644 --- a/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model.lua +++ b/package/gluon-web-model/luasrc/usr/lib/lua/gluon/web/model.lua @@ -58,11 +58,9 @@ return function(config, http, renderer, name, pkg) hidenav = hidenav or map.hidenav end - renderer.render('layout', { - content = 'model/wrapper', - env = { - maps = maps, - }, + renderer.render_layout('model/wrapper', { + maps = maps, + }, nil, { hidenav = hidenav, }) end diff --git a/package/gluon-web-theme/Makefile b/package/gluon-web-theme/Makefile index 87e97bbf..2dd47ab7 100644 --- a/package/gluon-web-theme/Makefile +++ b/package/gluon-web-theme/Makefile @@ -11,26 +11,27 @@ PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) include ../gluon.mk +PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG) + define Package/gluon-web-theme SECTION:=gluon CATEGORY:=Gluon TITLE:=gluon-web theme - DEPENDS:=+gluon-core +gluon-web-model + DEPENDS:=+gluon-core +gluon-web endef define Build/Prepare mkdir -p $(PKG_BUILD_DIR) endef -define Build/Configure -endef - define Build/Compile + $(call GluonBuildI18N,gluon-web-theme,i18n) endef define Package/gluon-web-theme/install $(CP) ./files/* $(1)/ + $(call GluonInstallI18N,gluon-web-theme,$(1)) endef $(eval $(call BuildPackage,gluon-web-theme)) diff --git a/package/gluon-web-theme/files/lib/gluon/web/view/themes/gluon/layout.html b/package/gluon-web-theme/files/lib/gluon/web/view/theme/layout.html similarity index 95% rename from package/gluon-web-theme/files/lib/gluon/web/view/themes/gluon/layout.html rename to package/gluon-web-theme/files/lib/gluon/web/view/theme/layout.html index fb24b3a3..874419a7 100644 --- a/package/gluon-web-theme/files/lib/gluon/web/view/themes/gluon/layout.html +++ b/package/gluon-web-theme/files/lib/gluon/web/view/theme/layout.html @@ -100,7 +100,7 @@ You may obtain a copy of the License at - + <%| hostname .. ((rnode and rnode.title) and ' - ' .. title(rnode) or '') %> @@ -140,7 +140,7 @@ You may obtain a copy of the License at <% - ok, err = pcall(renderer.render, content, env, pkg) + ok, err = pcall(renderer.render, content, scope, pkg) if not ok then renderer.render('error/500', {message = err}, 'gluon-web') end diff --git a/package/gluon-web-theme/files/lib/gluon/web/www/static/gluon/cascade.css b/package/gluon-web-theme/files/lib/gluon/web/www/static/gluon.css similarity index 100% rename from package/gluon-web-theme/files/lib/gluon/web/www/static/gluon/cascade.css rename to package/gluon-web-theme/files/lib/gluon/web/www/static/gluon.css diff --git a/package/gluon-web-theme/i18n/de.po b/package/gluon-web-theme/i18n/de.po new file mode 100644 index 00000000..b18a346d --- /dev/null +++ b/package/gluon-web-theme/i18n/de.po @@ -0,0 +1,20 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-03-29 12:13+0200\n" +"Last-Translator: Matthias Schiffer \n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "JavaScript required!" +msgstr "JavaScript benötigt!" + +msgid "" +"You must enable JavaScript in your browser or the web interface will not " +"work properly." +msgstr "Bitte aktiviere JavaScript in deinem Browser, damit das Webinterface " +"korrekt funktionieren kann." diff --git a/package/gluon-web-theme/i18n/fr.po b/package/gluon-web-theme/i18n/fr.po new file mode 100644 index 00000000..95e73b1a --- /dev/null +++ b/package/gluon-web-theme/i18n/fr.po @@ -0,0 +1,19 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: 2013-12-22 17:11+0200\n" +"Last-Translator: goofy \n" +"Language-Team: French\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "JavaScript required!" +msgstr "" + +msgid "" +"You must enable JavaScript in your browser or the web interface will not " +"work properly." +msgstr "" diff --git a/package/gluon-web-theme/i18n/gluon-web-theme.pot b/package/gluon-web-theme/i18n/gluon-web-theme.pot new file mode 100644 index 00000000..1676d857 --- /dev/null +++ b/package/gluon-web-theme/i18n/gluon-web-theme.pot @@ -0,0 +1,10 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "JavaScript required!" +msgstr "" + +msgid "" +"You must enable JavaScript in your browser or the web interface will not " +"work properly." +msgstr "" diff --git a/package/gluon-web-theme/sass/cascade.scss b/package/gluon-web-theme/sass/gluon.scss similarity index 98% rename from package/gluon-web-theme/sass/cascade.scss rename to package/gluon-web-theme/sass/gluon.scss index 3acd9c83..be29c990 100644 --- a/package/gluon-web-theme/sass/cascade.scss +++ b/package/gluon-web-theme/sass/gluon.scss @@ -4,7 +4,7 @@ Use sass like this to update it: - sass --sourcemap=none -C -t compressed sass/cascade.scss files/lib/gluon/web/www/static/gluon/cascade.css + sass --sourcemap=none -C -t compressed sass/gluon.scss files/lib/gluon/web/www/static/gluon.css When commiting changes to this file make sure to commit the respective changes to the compilid version within the same commit! diff --git a/package/gluon-web/files/lib/gluon/web/view/layout.html b/package/gluon-web/files/lib/gluon/web/view/layout.html deleted file mode 100644 index 34f287c1..00000000 --- a/package/gluon-web/files/lib/gluon/web/view/layout.html +++ /dev/null @@ -1,3 +0,0 @@ -<% - include("themes/" .. theme .. "/layout") -%> diff --git a/package/gluon-web/luasrc/lib/gluon/web/www/cgi-bin/gluon b/package/gluon-web/luasrc/lib/gluon/web/www/cgi-bin/gluon index 9f8c41ab..cceb2a68 100755 --- a/package/gluon-web/luasrc/lib/gluon/web/www/cgi-bin/gluon +++ b/package/gluon-web/luasrc/lib/gluon/web/www/cgi-bin/gluon @@ -2,4 +2,7 @@ require 'gluon.web.cgi' { base_path = '/lib/gluon/web', + + layout_package = 'gluon-web-theme', + layout_template = 'theme/layout', } diff --git a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/dispatcher.lua b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/dispatcher.lua index 4acc2c6c..64449cd0 100644 --- a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/dispatcher.lua +++ b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/dispatcher.lua @@ -86,9 +86,6 @@ local function dispatch(config, http, request) write = function(...) return http:write(...) end, pcdata = util.pcdata, urlencode = proto.urlencode, - media = '/static/gluon', - theme = 'gluon', - resource = '/static/resources', attr = attr, url = function(path) return build_url(http, path) end, }, { __index = _G })) @@ -136,10 +133,10 @@ local function dispatch(config, http, request) end end, - template = function(view) + template = function(view, scope) local pkg = _pkg return function() - renderer.render("layout", {content = view, pkg = pkg}) + renderer.render_layout(view, scope, pkg) end end, @@ -178,15 +175,11 @@ local function dispatch(config, http, request) if not node or not node.target then http:status(404, "Not Found") - renderer.render("layout", { - content = "error/404", - env = { - message = - "No page is registered at '/" .. table.concat(request, "/") .. "'.\n" .. - "If this URL belongs to an extension, make sure it is properly installed.\n", - }, - pkg = 'gluon-web', - }) + renderer.render_layout("error/404", { + message = + "No page is registered at '/" .. table.concat(request, "/") .. "'.\n" .. + "If this URL belongs to an extension, make sure it is properly installed.\n", + }, 'gluon-web') return end @@ -195,15 +188,11 @@ local function dispatch(config, http, request) local ok, err = pcall(node.target) if not ok then http:status(500, "Internal Server Error") - renderer.render("layout", { - content = "error/500", - env = { - message = - "Failed to execute dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" .. - "The called action terminated with an exception:\n" .. tostring(err or "(unknown)"), - }, - pkg = 'gluon-web', - }) + renderer.render_layout("error/500", { + message = + "Failed to execute dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" .. + "The called action terminated with an exception:\n" .. tostring(err or "(unknown)"), + }, 'gluon-web') end end diff --git a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua index 0aea336d..84a9b5c1 100644 --- a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua +++ b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua @@ -64,6 +64,7 @@ return function(config, env) --- Render a certain template. -- @param name Template name -- @param scope Scope to assign to template (optional) + -- @param pkg i18n namespace package (optional) function ctx.render(name, scope, pkg) local sourcefile = viewdir .. name .. ".html" local template, _, err = tparser.parse(sourcefile) @@ -78,6 +79,7 @@ return function(config, env) --- Render a template from a string. -- @param template Template string -- @param scope Scope to assign to template (optional) + -- @param pkg i18n namespace package (optional) function ctx.render_string(str, scope, pkg) local template, _, err = tparser.parse_string(str) @@ -87,5 +89,20 @@ return function(config, env) render_template('(local)', template, scope, pkg) end + --- Render a template, wrapped in the configured layout. + -- @param name Template name + -- @param scope Scope to assign to template (optional) + -- @param pkg i18n namespace package (optional) + -- @param layout_scope Additional variables to pass to the layout template + function ctx.render_layout(name, scope, pkg, layout_scope) + ctx.render(config.layout_template, setmetatable({ + content = name, + scope = scope, + pkg = pkg, + }, { + __index = layout_scope + }), config.layout_package) + end + return ctx end