Layout Props #68

Merged
thesabinelim merged 1 commits from props into master 2023-05-13 03:43:12 +08:00
2 changed files with 29 additions and 16 deletions

View File

@@ -2,19 +2,21 @@ local tHex = require("tHex")
local sub,find,reverse,rep,insert,len = string.sub,string.find,string.reverse,string.rep,table.insert,string.len
local function splitString(str, delimiter)
local result = {}
local results = {}
local nResults = 1
if str == "" or delimiter == "" then
return result
return results
end
local start = 1
local delim_start, delim_end = find(str, delimiter, start)
while delim_start do
insert(result, sub(str, start, delim_start - 1))
insert(results, sub(str, start, delim_start - 1))
nResults = nResults + 1
start = delim_end + 1
delim_start, delim_end = find(str, delimiter, start)
end
insert(result, sub(str, start))
return result
insert(results, sub(str, start))
return results, nResults
end
local function removeTags(input)

View File

@@ -205,17 +205,26 @@ return {
setValuesByXMLData = function(self, data, scripts)
scripts.env[self:getName()] = self
for k,v in pairs(data:reactiveProperties()) do
local sharedVariable = string.sub(v, 8, -1)
local sharedObservers = scripts.env.sharedObservers
if (sharedObservers[sharedVariable]) == nil then
sharedObservers[sharedVariable] = {}
local parts, nParts = utils.splitString(v, "%.")
if (nParts ~= 2) then
return
end
table.insert(
sharedObservers[sharedVariable],
function(val)
self:updateValue(k, val)
local tableName = parts[1]
local entryName = parts[2]
if (tableName == "props") then
self:updateValue(k, scripts.env.props[entryName])
elseif (tableName == "shared") then
local sharedObservers = scripts.env.sharedObservers
if (sharedObservers[entryName]) == nil then
sharedObservers[entryName] = {}
end
)
table.insert(
sharedObservers[entryName],
function(val)
self:updateValue(k, val)
end
)
end
end
self:updateSpecifiedValuesByXMLData(data, {
@@ -332,11 +341,12 @@ return {
return lastXMLReferences
end,
loadLayout = function(self, path)
loadLayout = function(self, path, props)
if(fs.exists(path))then
local scripts = {}
scripts.env = _ENV
scripts.env.basalt = basalt
scripts.env.props = props
scripts.env.shared = {}
scripts.env.sharedObservers = {}
local shared = {}
@@ -430,12 +440,13 @@ return {
return lastXMLReferences
end,
loadLayout = function(self, path)
loadLayout = function(self, path, props)
if(fs.exists(path))then
local scripts = {}
scripts.env = _ENV
scripts.env.basalt = basalt
scripts.env.main = self
scripts.env.props = props
scripts.env.shared = {}
scripts.env.sharedObservers = {}
local shared = {}