Files
Aurora.3/code/modules/vueui/var_monitor.dm
Karolis 4065e29e86 Vue.js UI implementation (#4868)
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.
2018-08-04 20:19:29 +03:00

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