mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-19 22:51:20 +00:00
This UI is going to be more integrated with BYOND host objects. It's update principal is very different from nanoui's. It is based around state that is being synchronized with server and client (browser). Such synchronization has it's problems, like it can't handle rapid changes, what could cause client and server to become out of sync and client state to be discard.
66 lines
2.0 KiB
Plaintext
66 lines
2.0 KiB
Plaintext
/proc/vueui_monitor_factory(source, data, datum/callback/cbSan, datum/callback/cbComp)
|
|
if (cbComp)
|
|
return new /datum/vueui_var_holder/comparator_based(source, data, cbSan, cbComp)
|
|
else
|
|
return new /datum/vueui_var_holder(source, data, cbSan)
|
|
|
|
/datum/vueui_var_monitor
|
|
var/subject_type
|
|
var/datum/vueui_var_holder/list/var_holders
|
|
|
|
/datum/vueui_var_monitor/New()
|
|
var_holders = list()
|
|
populate_var_holders()
|
|
|
|
/datum/vueui_var_monitor/proc/populate_var_holders()
|
|
CRASH("Var holder - [type] - does not have a populate_var_holders override.")
|
|
|
|
/datum/vueui_var_monitor/proc/watch_var(source, data, datum/callback/cbSan, datum/callback/cbComp)
|
|
var_holders += vueui_monitor_factory(source, data, cbSan, cbComp)
|
|
|
|
/datum/vueui_var_monitor/proc/update_data(datum/ui_source, list/data, mob/user, datum/vueui/ui)
|
|
var/modified = FALSE
|
|
for (var/_iter in var_holders)
|
|
var/datum/vueui_var_holder/VH = _iter
|
|
|
|
if (VH.need_to_replace(ui_source.vars[VH.source_key], data[VH.data_key], user, ui))
|
|
modified = TRUE
|
|
if (VH.sanitizer)
|
|
data[VH.data_key] = VH.sanitizer.Invoke(ui_source.vars[VH.source_key], data[VH.data_key], user, ui)
|
|
else
|
|
data[VH.data_key] = ui_source.vars[VH.source_key]
|
|
|
|
if (modified)
|
|
return data
|
|
else
|
|
return null
|
|
|
|
/datum/vueui_var_holder
|
|
var/source_key
|
|
var/data_key
|
|
var/datum/callback/sanitizer
|
|
|
|
/datum/vueui_var_holder/New(source, data, datum/callback/cbSan)
|
|
source_key = source
|
|
data_key = data
|
|
|
|
sanitizer = cbSan
|
|
|
|
/datum/vueui_var_holder/proc/need_to_replace(source, item)
|
|
return source != item
|
|
|
|
/datum/vueui_var_holder/comparator_based
|
|
var/datum/callback/comparator
|
|
|
|
/datum/vueui_var_holder/comparator_based/New(source, data, datum/callback/cbSan, datum/callback/cbComp)
|
|
..()
|
|
|
|
comparator = cbComp
|
|
|
|
/datum/vueui_var_holder/comparator_based/need_to_replace(source, item, mob/user, datum/vueui/ui)
|
|
return comparator.Invoke(source, item, user, ui)
|
|
|
|
// Transform functions.
|
|
// Do not override.
|
|
/datum/vueui_var_monitor/proc/transform_to_boolean(invert, source, current)
|
|
return !!source ^ invert |