Merge branch 'master' of https://github.com/Pyroxenium/Basalt
This commit is contained in:
@@ -167,7 +167,7 @@ local function registerFunctionEvent(self, data, event, renderContext)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local effectStack = {}
|
local currentEffect = nil
|
||||||
|
|
||||||
local clearEffectDependencies = function(effect)
|
local clearEffectDependencies = function(effect)
|
||||||
for _, dependency in ipairs(effect.dependencies) do
|
for _, dependency in ipairs(effect.dependencies) do
|
||||||
@@ -186,15 +186,14 @@ return {
|
|||||||
reactive = function(initialValue)
|
reactive = function(initialValue)
|
||||||
local value = initialValue
|
local value = initialValue
|
||||||
local observerEffects = {}
|
local observerEffects = {}
|
||||||
local getter = function()
|
local get = function()
|
||||||
local invokingEffect = effectStack[#effectStack]
|
if (currentEffect ~= nil) then
|
||||||
if (invokingEffect ~= nil) then
|
table.insert(observerEffects, currentEffect)
|
||||||
table.insert(observerEffects, invokingEffect)
|
table.insert(currentEffect.dependencies, observerEffects)
|
||||||
table.insert(invokingEffect.dependencies, observerEffects)
|
|
||||||
end
|
end
|
||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
local setter = function(newValue)
|
local set = function(newValue)
|
||||||
value = newValue
|
value = newValue
|
||||||
local observerEffectsCopy = {}
|
local observerEffectsCopy = {}
|
||||||
for index, effect in ipairs(observerEffects) do
|
for index, effect in ipairs(observerEffects) do
|
||||||
@@ -204,16 +203,25 @@ return {
|
|||||||
effect.execute()
|
effect.execute()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return getter, setter
|
return get, set
|
||||||
|
end,
|
||||||
|
|
||||||
|
untracked = function(getter)
|
||||||
|
local prevEffect = currentEffect
|
||||||
|
currentEffect = nil
|
||||||
|
local value = getter()
|
||||||
|
currentEffect = prevEffect
|
||||||
|
return value
|
||||||
end,
|
end,
|
||||||
|
|
||||||
effect = function(effectFn)
|
effect = function(effectFn)
|
||||||
local effect = {dependencies = {}}
|
local effect = {dependencies = {}}
|
||||||
local execute = function()
|
local execute = function()
|
||||||
clearEffectDependencies(effect)
|
clearEffectDependencies(effect)
|
||||||
table.insert(effectStack, effect)
|
local prevEffect = currentEffect
|
||||||
|
currentEffect = effect
|
||||||
effectFn()
|
effectFn()
|
||||||
table.remove(effectStack)
|
currentEffect = prevEffect
|
||||||
end
|
end
|
||||||
effect.execute = execute
|
effect.execute = execute
|
||||||
effect.execute()
|
effect.execute()
|
||||||
@@ -317,20 +325,22 @@ return {
|
|||||||
return object
|
return object
|
||||||
end,
|
end,
|
||||||
|
|
||||||
BaseFrame = function(base, basalt)
|
Container = function(base, basalt)
|
||||||
local lastXMLReferences = {}
|
local lastXMLReferences = {}
|
||||||
|
|
||||||
local function xmlDefaultValues(data, obj, renderContext)
|
local function xmlDefaultValues(data, obj, renderContext)
|
||||||
if(obj~=nil)then
|
if (obj~=nil) then
|
||||||
obj:setValuesByXMLData(data, renderContext)
|
obj:setValuesByXMLData(data, renderContext)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function addXMLObjectType(tab, f, self, renderContext)
|
local function addXMLObjectType(node, addFn, self, renderContext)
|
||||||
if(tab~=nil)then
|
if (node ~= nil) then
|
||||||
if(tab.properties~=nil)then tab = {tab} end
|
if (node.properties ~= nil) then
|
||||||
for _,v in pairs(tab)do
|
node = {node}
|
||||||
local obj = f(self, v["@id"] or uuid())
|
end
|
||||||
|
for _, v in pairs(node) do
|
||||||
|
local obj = addFn(self, v["@id"] or uuid())
|
||||||
lastXMLReferences[obj:getName()] = obj
|
lastXMLReferences[obj:getName()] = obj
|
||||||
xmlDefaultValues(v, obj, renderContext)
|
xmlDefaultValues(v, obj, renderContext)
|
||||||
end
|
end
|
||||||
@@ -338,33 +348,20 @@ return {
|
|||||||
end
|
end
|
||||||
|
|
||||||
local object = {
|
local object = {
|
||||||
updateValue = function(self, name, value)
|
|
||||||
if (value == nil) then return end
|
|
||||||
base.updateValue(self, name, value)
|
|
||||||
local _, yOffset = self:getOffset()
|
|
||||||
if (name == "layout") then
|
|
||||||
self:setLayout(value)
|
|
||||||
elseif (name == "xOffset") then
|
|
||||||
self:setOffset(value, yOffset)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
|
|
||||||
setValuesByXMLData = function(self, data, renderContext)
|
setValuesByXMLData = function(self, data, renderContext)
|
||||||
lastXMLReferences = {}
|
lastXMLReferences = {}
|
||||||
base.setValuesByXMLData(self, data, renderContext)
|
base.setValuesByXMLData(self, data, renderContext)
|
||||||
self:updateSpecifiedValuesByXMLData(data, {
|
|
||||||
"layout",
|
|
||||||
"xOffset"
|
|
||||||
})
|
|
||||||
|
|
||||||
local objectList = data:children()
|
local children = data:children()
|
||||||
local _OBJECTS = basalt.getObjects()
|
local _OBJECTS = basalt.getObjects()
|
||||||
|
|
||||||
for _,v in pairs(objectList)do
|
for _, childNode in pairs(children) do
|
||||||
if(v.___name~="animation")then
|
local tagName = childNode.___name
|
||||||
local name = v.___name:gsub("^%l", string.upper)
|
if (tagName ~= "animation") then
|
||||||
if(_OBJECTS[name]~=nil)then
|
local objectKey = tagName:gsub("^%l", string.upper)
|
||||||
addXMLObjectType(v, self["add"..name], self, renderContext)
|
if (_OBJECTS[objectKey] ~= nil) then
|
||||||
|
local addFn = self["add" .. objectKey]
|
||||||
|
addXMLObjectType(childNode, addFn, self, renderContext)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -373,10 +370,6 @@ return {
|
|||||||
return self
|
return self
|
||||||
end,
|
end,
|
||||||
|
|
||||||
getXMLElements = function(self)
|
|
||||||
return lastXMLReferences
|
|
||||||
end,
|
|
||||||
|
|
||||||
loadLayout = function(self, path, props)
|
loadLayout = function(self, path, props)
|
||||||
if(fs.exists(path))then
|
if(fs.exists(path))then
|
||||||
local renderContext = {}
|
local renderContext = {}
|
||||||
@@ -392,30 +385,39 @@ return {
|
|||||||
return self
|
return self
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
getXMLElements = function(self)
|
||||||
|
return lastXMLReferences
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
return object
|
||||||
|
end,
|
||||||
|
|
||||||
|
BaseFrame = function(base, basalt)
|
||||||
|
local object = {
|
||||||
|
updateValue = function(self, name, value)
|
||||||
|
if (value == nil) then return end
|
||||||
|
base.updateValue(self, name, value)
|
||||||
|
local _, yOffset = self:getOffset()
|
||||||
|
if (name == "layout") then
|
||||||
|
self:setLayout(value)
|
||||||
|
elseif (name == "xOffset") then
|
||||||
|
self:setOffset(value, yOffset)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
|
||||||
|
setValuesByXMLData = function(self, data, renderContext)
|
||||||
|
base.setValuesByXMLData(self, data, renderContext)
|
||||||
|
self:updateSpecifiedValuesByXMLData(data, {
|
||||||
|
"layout",
|
||||||
|
"xOffset"
|
||||||
|
})
|
||||||
|
return self
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
return object
|
return object
|
||||||
end,
|
end,
|
||||||
|
|
||||||
Frame = function(base, basalt)
|
Frame = function(base, basalt)
|
||||||
local lastXMLReferences = {}
|
|
||||||
|
|
||||||
local function xmlDefaultValues(data, obj, renderContext)
|
|
||||||
if(obj~=nil)then
|
|
||||||
obj:setValuesByXMLData(data, renderContext)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function addXMLObjectType(tab, f, self, renderContext)
|
|
||||||
if(tab~=nil)then
|
|
||||||
if(tab.properties~=nil)then tab = {tab} end
|
|
||||||
for _,v in pairs(tab)do
|
|
||||||
local obj = f(self, v["@id"] or uuid())
|
|
||||||
lastXMLReferences[obj:getName()] = obj
|
|
||||||
xmlDefaultValues(v, obj, renderContext)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local object = {
|
local object = {
|
||||||
updateValue = function(self, name, value)
|
updateValue = function(self, name, value)
|
||||||
if (value == nil) then return end
|
if (value == nil) then return end
|
||||||
@@ -437,39 +439,6 @@ return {
|
|||||||
"xOffset",
|
"xOffset",
|
||||||
"yOffset"
|
"yOffset"
|
||||||
})
|
})
|
||||||
|
|
||||||
local objectList = data:children()
|
|
||||||
local _OBJECTS = basalt.getObjects()
|
|
||||||
|
|
||||||
for _,v in pairs(objectList)do
|
|
||||||
if(v.___name~="animation")then
|
|
||||||
local name = v.___name:gsub("^%l", string.upper)
|
|
||||||
if(_OBJECTS[name]~=nil)then
|
|
||||||
addXMLObjectType(v, self["add"..name], self, renderContext)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
addXMLObjectType(data["animation"], self.addAnimation, self, renderContext)
|
|
||||||
return self
|
|
||||||
end,
|
|
||||||
|
|
||||||
getXMLElements = function(self)
|
|
||||||
return lastXMLReferences
|
|
||||||
end,
|
|
||||||
|
|
||||||
loadLayout = function(self, path, props)
|
|
||||||
if(fs.exists(path))then
|
|
||||||
local renderContext = {}
|
|
||||||
renderContext.env = _ENV
|
|
||||||
renderContext.env.props = props
|
|
||||||
local f = fs.open(path, "r")
|
|
||||||
local data = XmlParser:ParseXmlText(f.readAll())
|
|
||||||
f.close()
|
|
||||||
lastXMLReferences = {}
|
|
||||||
maybeExecuteScript(data, renderContext)
|
|
||||||
self:setValuesByXMLData(data, renderContext)
|
|
||||||
end
|
|
||||||
return self
|
return self
|
||||||
end,
|
end,
|
||||||
}
|
}
|
||||||
@@ -509,7 +478,6 @@ return {
|
|||||||
Button = function(base, basalt)
|
Button = function(base, basalt)
|
||||||
local object = {
|
local object = {
|
||||||
updateValue = function(self, name, value)
|
updateValue = function(self, name, value)
|
||||||
basalt.log("Updating value, " .. name .. " = " .. value)
|
|
||||||
if (value == nil) then return end
|
if (value == nil) then return end
|
||||||
base.updateValue(self, name, value)
|
base.updateValue(self, name, value)
|
||||||
if (name == "text") then
|
if (name == "text") then
|
||||||
|
|||||||
Reference in New Issue
Block a user