Added support for per dispatching node theme control
[project/luci.git] / libs / web / luasrc / dispatcher.lua
index 236bc9c..a54685f 100644 (file)
@@ -161,8 +161,20 @@ function dispatch(request)
        end
 
        -- Init template engine
-       if not track.notemplate then
+       if (c and c.index) or not track.notemplate then
                local tpl = require("luci.template")
+               local media = track.mediaurlbase or luci.config.main.mediaurlbase
+               if not pcall(tpl.Template, "themes/%s/header" % fs.basename(media)) then
+                       media = nil
+                       for name, theme in pairs(luci.config.themes) do
+                               if name:sub(1,1) ~= "." and pcall(tpl.Template,
+                                "themes/%s/header" % fs.basename(theme)) then
+                                       media = theme
+                               end
+                       end
+                       assert(media, "No valid theme found")
+               end
+
                local viewns = setmetatable({}, {__index=_G})
                tpl.context.viewns = viewns
                viewns.write       = luci.http.write
@@ -170,7 +182,8 @@ function dispatch(request)
                viewns.translate   = function(...) return require("luci.i18n").translate(...) end
                viewns.striptags   = util.striptags
                viewns.controller  = luci.http.getenv("SCRIPT_NAME")
-               viewns.media       = luci.config.main.mediaurlbase
+               viewns.media       = media
+               viewns.theme       = fs.basename(media)
                viewns.resource    = luci.config.main.resourcebase
                viewns.REQUEST_URI = (luci.http.getenv("SCRIPT_NAME") or "") .. (luci.http.getenv("PATH_INFO") or "")
        end
@@ -219,9 +232,20 @@ function dispatch(request)
                luci.sys.process.setuser(track.setuser)
        end
 
-       if c and type(c.target) == "function" then
-               context.dispatched = c
+       if c and (c.index or type(c.target) == "function") then
+               ctx.dispatched = c
+               ctx.requested = ctx.requested or ctx.dispatched
+       end
 
+       if c and c.index then
+               local tpl = require "luci.template"
+
+               if util.copcall(tpl.render, "indexer", {}) then
+                       return true
+               end
+       end
+
+       if c and type(c.target) == "function" then
                util.copcall(function()
                        local oldenv = getfenv(c.target)
                        local module = require(c.module)