From f96de2586a80eb94060fbeef5d92703bd6db7a4b Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Tue, 11 Nov 2008 18:55:07 +0000 Subject: [PATCH] Implemented dispatching tree modifiers --- libs/web/luasrc/dispatcher.lua | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 2323cf8d2..b48b58487 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -354,9 +354,11 @@ function createtree() local ctx = context local tree = {nodes={}} + local modi = {} ctx.treecache = setmetatable({}, {__mode="v"}) ctx.tree = tree + ctx.modifiers = modi -- Load default translation require "luci.i18n".loadc("default") @@ -369,9 +371,30 @@ function createtree() v() end + local function modisort(a,b) + return modi[a].order < modi[b].order + end + + for _, v in util.spairs(modi, modisort) do + scope._NAME = v.module + setfenv(v.func, scope) + v.func() + end + return tree end +--- Register a tree modifier. +-- @param func Modifier function +-- @param order Modifier order value (optional) +function modifier(func, order) + context.modifiers[#context.modifiers+1] = { + func = func, + order = order or 0, + module = getfenv(2)._NAME + } +end + --- Clone a node of the dispatching tree to another position. -- @param path Virtual path destination -- @param clone Virtual path source -- 2.11.0