diff --git a/Basalt/libraries/xmlParser.lua b/Basalt/libraries/xmlParser.lua index 9c13752..e8dbe10 100644 --- a/Basalt/libraries/xmlParser.lua +++ b/Basalt/libraries/xmlParser.lua @@ -1,8 +1,8 @@ local XMLNode = { new = function(name) return { - value = nil, name = name, + value = nil, children = {}, attributes = {}, diff --git a/Basalt/plugins/advancedBackground.lua b/Basalt/plugins/advancedBackground.lua index 1eff6dd..c848e20 100644 --- a/Basalt/plugins/advancedBackground.lua +++ b/Basalt/plugins/advancedBackground.lua @@ -28,9 +28,9 @@ return { return bgSymbolColor end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("background-symbol", data)~=nil)then self:setBackgroundSymbol(XMLParser.xmlValue("background-symbol", data), XMLParser.xmlValue("background-symbol-color", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("background-symbol", node)~=nil)then self:setBackgroundSymbol(XMLParser.xmlValue("background-symbol", node), XMLParser.xmlValue("background-symbol-color", node)) end return self end, diff --git a/Basalt/plugins/animations.lua b/Basalt/plugins/animations.lua index 2897c88..7cb27cd 100644 --- a/Basalt/plugins/animations.lua +++ b/Basalt/plugins/animations.lua @@ -338,11 +338,11 @@ return { end end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateX", data), XMLParser.xmlValue("animateY", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) - local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateW", data), XMLParser.xmlValue("animateH", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) - local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateXOffset", data), XMLParser.xmlValue("animateYOffset", data), XMLParser.xmlValue("animateDuration", data), XMLParser.xmlValue("animateTimeOffset", data), XMLParser.xmlValue("animateMode", data) + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + local animX, animY, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateX", node), XMLParser.xmlValue("animateY", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) + local animW, animH, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateW", node), XMLParser.xmlValue("animateH", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) + local animXOffset, animYOffset, animateDuration, animeteTimeOffset, animateMode = XMLParser.xmlValue("animateXOffset", node), XMLParser.xmlValue("animateYOffset", node), XMLParser.xmlValue("animateDuration", node), XMLParser.xmlValue("animateTimeOffset", node), XMLParser.xmlValue("animateMode", node) if(animX~=nil and animY~=nil)then self:animatePosition(animX, animY, animateDuration, animeteTimeOffset, animateMode) end diff --git a/Basalt/plugins/bigfonts.lua b/Basalt/plugins/bigfonts.lua index a1086ee..a9a9a68 100644 --- a/Basalt/plugins/bigfonts.lua +++ b/Basalt/plugins/bigfonts.lua @@ -195,9 +195,9 @@ return { end end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("fontSize", data)~=nil)then self:setFontSize(XMLParser.xmlValue("fontSize", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("fontSize", node)~=nil)then self:setFontSize(XMLParser.xmlValue("fontSize", node)) end return self end, diff --git a/Basalt/plugins/border.lua b/Basalt/plugins/border.lua index 6f4f093..7315fae 100644 --- a/Basalt/plugins/border.lua +++ b/Basalt/plugins/border.lua @@ -81,19 +81,19 @@ return { end) end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data) + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node) local borders = {} - if(XMLParser.xmlValue("border", data)~=nil)then - borders["top"] = colors[XMLParser.xmlValue("border", data)] - borders["bottom"] = colors[XMLParser.xmlValue("border", data)] - borders["left"] = colors[XMLParser.xmlValue("border", data)] - borders["right"] = colors[XMLParser.xmlValue("border", data)] + if(XMLParser.xmlValue("border", node)~=nil)then + borders["top"] = colors[XMLParser.xmlValue("border", node)] + borders["bottom"] = colors[XMLParser.xmlValue("border", node)] + borders["left"] = colors[XMLParser.xmlValue("border", node)] + borders["right"] = colors[XMLParser.xmlValue("border", node)] end - if(XMLParser.xmlValue("borderTop", data)~=nil)then borders["top"] = colors[XMLParser.xmlValue("borderTop", data)] end - if(XMLParser.xmlValue("borderBottom", data)~=nil)then borders["bottom"] = colors[XMLParser.xmlValue("borderBottom", data)] end - if(XMLParser.xmlValue("borderLeft", data)~=nil)then borders["left"] = colors[XMLParser.xmlValue("borderLeft", data)] end - if(XMLParser.xmlValue("borderRight", data)~=nil)then borders["right"] = colors[XMLParser.xmlValue("borderRight", data)] end + if(XMLParser.xmlValue("borderTop", node)~=nil)then borders["top"] = colors[XMLParser.xmlValue("borderTop", node)] end + if(XMLParser.xmlValue("borderBottom", node)~=nil)then borders["bottom"] = colors[XMLParser.xmlValue("borderBottom", node)] end + if(XMLParser.xmlValue("borderLeft", node)~=nil)then borders["left"] = colors[XMLParser.xmlValue("borderLeft", node)] end + if(XMLParser.xmlValue("borderRight", node)~=nil)then borders["right"] = colors[XMLParser.xmlValue("borderRight", node)] end self:setBorder(borders["top"], borders["bottom"], borders["left"], borders["right"]) return self end diff --git a/Basalt/plugins/reactive.lua b/Basalt/plugins/reactive.lua index 9d46051..c093233 100644 --- a/Basalt/plugins/reactive.lua +++ b/Basalt/plugins/reactive.lua @@ -2,34 +2,30 @@ local XMLParser = require("xmlParser") local utils = require("utils") local uuid = utils.uuid -local function maybeExecuteScript(data, renderContext) - local script = XMLParser.xmlValue('script', data) - if (script ~= nil) then - load(script, nil, "t", renderContext.env)() +local function maybeExecuteScript(nodeTree, renderContext) + for _, node in ipairs(nodeTree.children) do + if (node.name == "script") then + return load(node.value, nil, "t", renderContext.env)() + end end end -local function registerFunctionEvent(self, data, event, renderContext) +local function registerFunctionEvent(self, event, script, renderContext) local eventEnv = renderContext.env - if(data:sub(1,1)=="$")then - local data = data:sub(2) - event(self, self:getBasalt().getVariable(data)) - else - event(self, function(...) - eventEnv.event = {...} - local success, msg = pcall(load(data, nil, "t", eventEnv)) - if not success then - error("XML Error: "..msg) - end - end) - end + event(self, function(...) + eventEnv.event = {...} + local success, msg = pcall(load(script, nil, "t", eventEnv)) + if not success then + error("XML Error: "..msg) + end + end) end -local function registerFunctionEvents(self, data, events, renderContext) +local function registerFunctionEvents(self, node, events, renderContext) for _, event in pairs(events) do - local expression = data.attributes[event] + local expression = node.attributes[event] if (expression ~= nil) then - registerFunctionEvent(self, expression .. "()", self[event], renderContext) + registerFunctionEvent(self, self[event], expression .. "()", renderContext) end end end @@ -114,16 +110,16 @@ return { VisualObject = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) + setValuesByXMLData = function(self, node, renderContext) renderContext.env[self:getName()] = self - for attribute, expression in pairs(data.attributes) do + for attribute, expression in pairs(node.attributes) do local update = function() local value = load("return " .. expression, nil, "t", renderContext.env)() self:setProperty(attribute, value) end basalt.effect(update) end - registerFunctionEvents(self, data, { + registerFunctionEvents(self, node, { "onClick", "onClickUp", "onHover", @@ -148,9 +144,9 @@ return { ChangeableObject = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - registerFunctionEvent(self, data, { + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + registerFunctionEvent(self, node, { "onChange" }, renderContext) return self @@ -162,9 +158,9 @@ return { Container = function(base, basalt) local lastXMLReferences = {} - local function xmlDefaultValues(data, obj, renderContext) + local function xmlDefaultValues(node, obj, renderContext) if (obj~=nil) then - obj:setValuesByXMLData(data, renderContext) + obj:setValuesByXMLData(node, renderContext) end end @@ -198,13 +194,13 @@ return { end local object = { - setValuesByXMLData = function(self, data, renderContext) + setValuesByXMLData = function(self, node, renderContext) lastXMLReferences = {} - base.setValuesByXMLData(self, data, renderContext) + base.setValuesByXMLData(self, node, renderContext) local _OBJECTS = basalt.getObjects() - for _, childNode in pairs(data.children) do + for _, childNode in pairs(node.children) do local tagName = childNode.name if (tagName ~= "animation") then local layout = renderContext.env[tagName] @@ -218,7 +214,7 @@ return { end end - addXMLObjectType(data["animation"], self.addAnimation, self, renderContext) + addXMLObjectType(node["animation"], self.addAnimation, self, renderContext) return self end, @@ -228,11 +224,11 @@ return { renderContext.env = _ENV renderContext.env.props = props local f = fs.open(path, "r") - local data = XMLParser.parseText(f.readAll()) + local nodeTree = XMLParser.parseText(f.readAll()) f.close() lastXMLReferences = {} - maybeExecuteScript(data, renderContext) - self:setValuesByXMLData(data, renderContext) + maybeExecuteScript(nodeTree, renderContext) + self:setValuesByXMLData(nodeTree, renderContext) end return self end, @@ -246,17 +242,17 @@ return { Textfield = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["lines"]~=nil)then - local l = data["lines"]["line"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["lines"]~=nil)then + local l = node["lines"]["line"] if(l.attributes~=nil)then l = {l} end for _,v in pairs(l)do self:addLine(v.value) end end - if(data["keywords"]~=nil)then - for k,v in pairs(data["keywords"])do + if(node["keywords"]~=nil)then + for k,v in pairs(node["keywords"])do if(colors[k]~=nil)then local entry = v if(entry.attributes~=nil)then entry = {entry} end @@ -272,10 +268,10 @@ return { end end end - if(data["rules"]~=nil)then - if(data["rules"]["rule"]~=nil)then - local tab = data["rules"]["rule"] - if(data["rules"]["rule"].attributes~=nil)then tab = {data["rules"]["rule"]} end + if(node["rules"]~=nil)then + if(node["rules"]["rule"]~=nil)then + local tab = node["rules"]["rule"] + if(node["rules"]["rule"].attributes~=nil)then tab = {node["rules"]["rule"]} end for k,v in pairs(tab)do if(XMLParser.xmlValue("pattern", v)~=nil)then @@ -292,8 +288,8 @@ return { Thread = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - local script = XMLParser.xmlValue("start", data)~=nil + setValuesByXMLData = function(self, node, renderContext) + local script = XMLParser.xmlValue("start", node)~=nil if(script~=nil)then local f = load(script, nil, "t", renderContext.env) self:start(f) @@ -306,9 +302,9 @@ return { Timer = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - registerFunctionEvents(self, data, { + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + registerFunctionEvents(self, node, { "onCall" }, renderContext) return self @@ -319,10 +315,10 @@ return { List = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["item"]~=nil)then - local tab = data["item"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["item"]~=nil)then + local tab = node["item"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do if(self:getType()~="Radio")then @@ -338,8 +334,8 @@ return { Dropdown = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) return self end, } @@ -348,10 +344,10 @@ return { Radio = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["item"]~=nil)then - local tab = data["item"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["item"]~=nil)then + local tab = node["item"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do self:addItem(XMLParser.xmlValue("text", v), XMLParser.xmlValue("x", v), XMLParser.xmlValue("y", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) @@ -365,10 +361,10 @@ return { Graph = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - if(data["item"]~=nil)then - local tab = data["item"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + if(node["item"]~=nil)then + local tab = node["item"] if(tab.attributes~=nil)then tab = {tab} end for _,_ in pairs(tab)do self:addDataPoint(XMLParser.xmlValue("value")) @@ -382,11 +378,11 @@ return { Treeview = function(base, basalt) local object = { - setValuesByXMLData = function(self, data, renderContext) - base.setValuesByXMLData(self, data, renderContext) - local function addNode(node, data) - if(data["node"]~=nil)then - local tab = data["node"] + setValuesByXMLData = function(self, node, renderContext) + base.setValuesByXMLData(self, node, renderContext) + local function addNode(node, node) + if(node["node"]~=nil)then + local tab = node["node"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do local n = node:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) @@ -394,8 +390,8 @@ return { end end end - if(data["node"]~=nil)then - local tab = data["node"] + if(node["node"]~=nil)then + local tab = node["node"] if(tab.attributes~=nil)then tab = {tab} end for _,v in pairs(tab)do local n = self:addNode(XMLParser.xmlValue("text", v), colors[XMLParser.xmlValue("bg", v)], colors[XMLParser.xmlValue("fg", v)]) diff --git a/Basalt/plugins/shadow.lua b/Basalt/plugins/shadow.lua index 483a14b..9965893 100644 --- a/Basalt/plugins/shadow.lua +++ b/Basalt/plugins/shadow.lua @@ -30,9 +30,9 @@ return { end) end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("shadow", data)~=nil)then self:setShadow(XMLParser.xmlValue("shadow", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("shadow", node)~=nil)then self:setShadow(XMLParser.xmlValue("shadow", node)) end return self end } diff --git a/Basalt/plugins/textures.lua b/Basalt/plugins/textures.lua index 76d8678..0a1f51a 100644 --- a/Basalt/plugins/textures.lua +++ b/Basalt/plugins/textures.lua @@ -109,11 +109,11 @@ return { self:setDrawState("texture-base", false) end, - setValuesByXMLData = function(self, data, scripts) - base.setValuesByXMLData(self, data, scripts) - if(XMLParser.xmlValue("texture", data)~=nil)then self:addTexture(XMLParser.xmlValue("texture", data), XMLParser.xmlValue("animate", data)) end - if(XMLParser.xmlValue("textureMode", data)~=nil)then self:setTextureMode(XMLParser.xmlValue("textureMode", data)) end - if(XMLParser.xmlValue("infinitePlay", data)~=nil)then self:setInfinitePlay(XMLParser.xmlValue("infinitePlay", data)) end + setValuesByXMLData = function(self, node, scripts) + base.setValuesByXMLData(self, node, scripts) + if(XMLParser.xmlValue("texture", node)~=nil)then self:addTexture(XMLParser.xmlValue("texture", node), XMLParser.xmlValue("animate", node)) end + if(XMLParser.xmlValue("textureMode", node)~=nil)then self:setTextureMode(XMLParser.xmlValue("textureMode", node)) end + if(XMLParser.xmlValue("infinitePlay", node)~=nil)then self:setInfinitePlay(XMLParser.xmlValue("infinitePlay", node)) end return self end }