Merge pull request #5578 from Faerdan/dev

NanoUI Update
This commit is contained in:
Mloc
2014-07-14 23:35:49 +01:00
85 changed files with 2918 additions and 3775 deletions

View File

@@ -112,14 +112,14 @@
return return
/obj/machinery/atmospherics/omni/filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/atmospherics/omni/filter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
usr.set_machine(src) usr.set_machine(src)
var/list/data = new() var/list/data = new()
data = build_uidata() data = build_uidata()
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330) ui = new(user, src, ui_key, "omni_filter.tmpl", "Omni Filter Control", 330, 330)

View File

@@ -137,14 +137,14 @@
return 1 return 1
/obj/machinery/atmospherics/omni/mixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/atmospherics/omni/mixer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
usr.set_machine(src) usr.set_machine(src)
var/list/data = new() var/list/data = new()
data = build_uidata() data = build_uidata()
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330) ui = new(user, src, ui_key, "omni_mixer.tmpl", "Omni Mixer Control", 360, 330)

View File

@@ -30,7 +30,7 @@
ui_interact(user) ui_interact(user)
/obj/machinery/computer/engines/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/engines/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!linked) if(!linked)
return return
@@ -50,7 +50,7 @@
data["engines_info"] = enginfo data["engines_info"] = enginfo
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "engines_control.tmpl", "[linked.name] Engines Control", 380, 530) ui = new(user, src, ui_key, "engines_control.tmpl", "[linked.name] Engines Control", 380, 530)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -70,7 +70,7 @@
ui_interact(user) ui_interact(user)
/obj/machinery/computer/helm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/helm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!linked) if(!linked)
return return
@@ -101,7 +101,7 @@
data["locations"] = locations data["locations"] = locations
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "helm.tmpl", "[linked.name] Helm Control", 380, 530) ui = new(user, src, ui_key, "helm.tmpl", "[linked.name] Helm Control", 380, 530)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -44,7 +44,7 @@
var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag]
return shuttle && destination && get_dist(home, destination) <= shuttle.range return shuttle && destination && get_dist(home, destination) <= shuttle.range
/obj/machinery/computer/shuttle_control/explore/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/shuttle_control/explore/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag]
if (!istype(shuttle)) if (!istype(shuttle))
@@ -103,7 +103,7 @@
"can_force" = can_go && shuttle.can_force(), "can_force" = can_go && shuttle.can_force(),
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "shuttle_control_console_exploration.tmpl", "[shuttle_tag] Shuttle Control", 470, 310) ui = new(user, src, ui_key, "shuttle_control_console_exploration.tmpl", "[shuttle_tag] Shuttle Control", 470, 310)

View File

@@ -345,7 +345,7 @@
* *
* @return nothing * @return nothing
*/ */
/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/scan_consolenew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(user == connected.occupant || user.stat) if(user == connected.occupant || user.stat)
return return
@@ -425,7 +425,7 @@
data["beakerVolume"] += R.volume data["beakerVolume"] += R.volume
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -44,7 +44,7 @@
/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_hand(mob/user as mob) /obj/machinery/atmospherics/unary/cold_sink/freezer/attack_hand(mob/user as mob)
src.ui_interact(user) src.ui_interact(user)
/obj/machinery/atmospherics/unary/cold_sink/freezer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/atmospherics/unary/cold_sink/freezer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
// this is the data which will be sent to the ui // this is the data which will be sent to the ui
var/data[0] var/data[0]
data["on"] = on ? 1 : 0 data["on"] = on ? 1 : 0
@@ -62,7 +62,7 @@
data["gasTemperatureClass"] = temp_class data["gasTemperatureClass"] = temp_class
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -137,7 +137,7 @@
/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_hand(mob/user as mob) /obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_hand(mob/user as mob)
src.ui_interact(user) src.ui_interact(user)
/obj/machinery/atmospherics/unary/heat_reservoir/heater/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/atmospherics/unary/heat_reservoir/heater/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
// this is the data which will be sent to the ui // this is the data which will be sent to the ui
var/data[0] var/data[0]
data["on"] = on ? 1 : 0 data["on"] = on ? 1 : 0
@@ -153,7 +153,7 @@
data["gasTemperatureClass"] = temp_class data["gasTemperatureClass"] = temp_class
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -241,7 +241,7 @@ update_flag
/obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob) /obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob)
return src.ui_interact(user) return src.ui_interact(user)
/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if (src.destroyed) if (src.destroyed)
return return
@@ -261,7 +261,7 @@ update_flag
data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure())) data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure()))
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -80,7 +80,7 @@
if(stat & (NOPOWER|BROKEN)) return if(stat & (NOPOWER|BROKEN)) return
ui_interact(user) ui_interact(user)
/obj/machinery/computer/card/ui_interact(mob/user, ui_key="main", datum/nanoui/ui=null) /obj/machinery/computer/card/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src) user.set_machine(src)
var/data[0] var/data[0]
@@ -133,7 +133,7 @@
data["regions"] = regions data["regions"] = regions
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "identification_computer.tmpl", src.name, 600, 700) ui = new(user, src, ui_key, "identification_computer.tmpl", src.name, 600, 700)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -57,7 +57,7 @@
/obj/machinery/computer/crew/interact(mob/user) /obj/machinery/computer/crew/interact(mob/user)
ui_interact(user) ui_interact(user)
/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(stat & (BROKEN|NOPOWER)) if(stat & (BROKEN|NOPOWER))
return return
user.set_machine(src) user.set_machine(src)
@@ -97,7 +97,7 @@
data["crewmembers"] = crewmembers data["crewmembers"] = crewmembers
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui) if(!ui)
ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 600) ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 600)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -73,7 +73,7 @@
* *
* @return nothing * @return nothing
*/ */
/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(user == occupant || user.stat) if(user == occupant || user.stat)
return return
@@ -121,7 +121,7 @@
data["beakerVolume"] += R.volume data["beakerVolume"] += R.volume
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -17,7 +17,7 @@
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller
name = "Advanced Airlock Controller" name = "Advanced Airlock Controller"
/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
data = list( data = list(
@@ -29,7 +29,7 @@
"secure" = program.memory["secure"] "secure" = program.memory["secure"]
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "advanced_airlock_console.tmpl", name, 470, 290)
@@ -75,7 +75,7 @@
name = "Airlock Controller" name = "Airlock Controller"
tag_secure = 1 tag_secure = 1
/obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
data = list( data = list(
@@ -85,7 +85,7 @@
"processing" = program.memory["processing"], "processing" = program.memory["processing"],
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "simple_airlock_console.tmpl", name, 470, 290)
@@ -140,7 +140,7 @@
else else
icon_state = "access_control_off" icon_state = "access_control_off"
/obj/machinery/embedded_controller/radio/airlock/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/airlock/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
data = list( data = list(
@@ -149,7 +149,7 @@
"processing" = program.memory["processing"] "processing" = program.memory["processing"]
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220) ui = new(user, src, ui_key, "door_access_console.tmpl", name, 330, 220)

View File

@@ -11,7 +11,7 @@
docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program) docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program)
program = docking_program program = docking_program
/obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
data = list( data = list(
@@ -24,7 +24,7 @@
"override_enabled" = docking_program.override_enabled, "override_enabled" = docking_program.override_enabled,
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290)

View File

@@ -22,7 +22,7 @@
child_names[tags[i]] = names[i] child_names[tags[i]] = names[i]
/obj/machinery/embedded_controller/radio/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
var/list/airlocks[child_names.len] var/list/airlocks[child_names.len]
@@ -35,7 +35,7 @@
"airlocks" = airlocks, "airlocks" = airlocks,
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "multi_docking_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "multi_docking_console.tmpl", name, 470, 290)
@@ -60,7 +60,7 @@
airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src) airlock_program = new/datum/computer/file/embedded_program/airlock/multi_docking(src)
program = airlock_program program = airlock_program
/obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/airlock/docking_port_multi/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
data = list( data = list(
@@ -73,7 +73,7 @@
"override_enabled" = airlock_program.override_enabled, "override_enabled" = airlock_program.override_enabled,
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290)

View File

@@ -2,7 +2,7 @@
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod
var/datum/shuttle/ferry/escape_pod/pod var/datum/shuttle/ferry/escape_pod/pod
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
data = list( data = list(
@@ -14,7 +14,7 @@
"is_armed" = pod.arming_controller.armed, "is_armed" = pod.arming_controller.armed,
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "escape_pod_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "escape_pod_console.tmpl", name, 470, 290)
@@ -44,7 +44,7 @@
docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src) docking_program = new/datum/computer/file/embedded_program/docking/simple/escape_pod(src)
program = docking_program program = docking_program
/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
var/armed = null var/armed = null
@@ -58,7 +58,7 @@
"armed" = armed, "armed" = armed,
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "escape_pod_berth_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "escape_pod_berth_console.tmpl", name, 470, 290)

View File

@@ -9,7 +9,7 @@
docking_program = new/datum/computer/file/embedded_program/docking/simple(src) docking_program = new/datum/computer/file/embedded_program/docking/simple(src)
program = docking_program program = docking_program
/obj/machinery/embedded_controller/radio/simple_docking_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/embedded_controller/radio/simple_docking_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
data = list( data = list(
@@ -19,7 +19,7 @@
"door_lock" = docking_program.memory["door_status"]["lock"], "door_lock" = docking_program.memory["door_status"]["lock"],
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "simple_docking_console.tmpl", name, 470, 290) ui = new(user, src, ui_key, "simple_docking_console.tmpl", name, 470, 290)

View File

@@ -225,7 +225,7 @@
* SmartFridge Menu * SmartFridge Menu
********************/ ********************/
/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src) user.set_machine(src)
var/is_secure = istype(src,/obj/machinery/smartfridge/secure) var/is_secure = istype(src,/obj/machinery/smartfridge/secure)
@@ -269,7 +269,7 @@
if (vendor_wires.len > 0) if (vendor_wires.len > 0)
data["wires"] = vendor_wires data["wires"] = vendor_wires
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500) ui = new(user, src, ui_key, "smartfridge.tmpl", src.name, 400, 500)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -328,7 +328,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return return
/obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/item/device/pda/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
ui_tick++ ui_tick++
var/datum/nanoui/old_ui = nanomanager.get_open_ui(user, src, "main") var/datum/nanoui/old_ui = nanomanager.get_open_ui(user, src, "main")
var/auto_update = 1 var/auto_update = 1
@@ -462,7 +462,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
data["aircontents"] = list("reading" = 0) data["aircontents"] = list("reading" = 0)
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -67,7 +67,7 @@
/obj/item/device/transfer_valve/attack_self(mob/user as mob) /obj/item/device/transfer_valve/attack_self(mob/user as mob)
ui_interact(user) ui_interact(user)
/obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
// this is the data which will be sent to the ui // this is the data which will be sent to the ui
var/data[0] var/data[0]
@@ -77,7 +77,7 @@
data["valveOpen"] = valve_open ? 1 : 0 data["valveOpen"] = valve_open ? 1 : 0
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -340,7 +340,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
/* /*
NANO UI FOR UPLINK WOOP WOOP NANO UI FOR UPLINK WOOP WOOP
*/ */
/obj/item/device/uplink/hidden/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/item/device/uplink/hidden/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/title = "Syndicate Uplink" var/title = "Syndicate Uplink"
var/data[0] var/data[0]
@@ -349,7 +349,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid
data["welcome"] = welcome data["welcome"] = welcome
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -127,7 +127,7 @@
ui_interact(user) ui_interact(user)
/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/using_internal var/using_internal
if(istype(loc,/mob/living/carbon)) if(istype(loc,/mob/living/carbon))
@@ -150,7 +150,7 @@
data["maskConnected"] = 1 data["maskConnected"] = 1
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -59,7 +59,7 @@
if(stat & (NOPOWER|BROKEN)) return if(stat & (NOPOWER|BROKEN)) return
ui_interact(user) ui_interact(user)
/obj/machinery/account_database/ui_interact(mob/user, ui_key="main", datum/nanoui/ui=null) /obj/machinery/account_database/ui_interact(mob/user, ui_key="main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src) user.set_machine(src)
var/data[0] var/data[0]
@@ -105,7 +105,7 @@
if (accounts.len > 0) if (accounts.len > 0)
data["accounts"] = accounts data["accounts"] = accounts
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640) ui = new(user, src, ui_key, "accounts_terminal.tmpl", src.name, 400, 640)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -32,11 +32,12 @@
* *
* @param user /mob The mob who is interacting with this ui * @param user /mob The mob who is interacting with this ui
* @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
* @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui
* @param force_open boolean Force the UI to (re)open, even if it's already open
* *
* @return nothing * @return nothing
*/ */
/atom/movable/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /atom/movable/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
return return
// Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob // Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob

View File

@@ -39,19 +39,23 @@
* @param ui_key string A string key used for the ui * @param ui_key string A string key used for the ui
* @param ui /datum/nanoui An existing instance of the ui (can be null) * @param ui /datum/nanoui An existing instance of the ui (can be null)
* @param data list The data to be passed to the ui, if it exists * @param data list The data to be passed to the ui, if it exists
* @param force_open boolean The ui is being forced to (re)open, so close ui if it exists (instead of updating)
* *
* @return /nanoui Returns the found ui, for null if none exists * @return /nanoui Returns the found ui, for null if none exists
*/ */
/datum/nanomanager/proc/try_update_ui(var/mob/user, src_object, ui_key, var/datum/nanoui/ui, data) /datum/nanomanager/proc/try_update_ui(var/mob/user, src_object, ui_key, var/datum/nanoui/ui, data, var/force_open = 0)
if (isnull(ui)) // no ui has been passed, so we'll search for one if (isnull(ui)) // no ui has been passed, so we'll search for one
{ {
ui = get_open_ui(user, src_object, ui_key) ui = get_open_ui(user, src_object, ui_key)
} }
if (!isnull(ui)) if (!isnull(ui))
// The UI is already open so push the data to it // The UI is already open
ui.push_data(data) if (!force_open)
return ui ui.push_data(data)
return ui
else
//testing("nanomanager/try_update_ui mob [user.name] [src_object:name] [ui_key] [force_open] - forcing opening of ui")
ui.close()
return null return null
/** /**
@@ -66,14 +70,17 @@
/datum/nanomanager/proc/get_open_ui(var/mob/user, src_object, ui_key) /datum/nanomanager/proc/get_open_ui(var/mob/user, src_object, ui_key)
var/src_object_key = "\ref[src_object]" var/src_object_key = "\ref[src_object]"
if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
//testing("nanomanager/get_open_ui mob [user.name] [src_object:name] [ui_key] - there are no uis open")
return null return null
else if (isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list)) else if (isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list))
//testing("nanomanager/get_open_ui mob [user.name] [src_object:name] [ui_key] - there are no uis open for this object")
return null return null
for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key]) for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key])
if (ui.user == user) if (ui.user == user)
return ui return ui
//testing("nanomanager/get_open_ui mob [user.name] [src_object:name] [ui_key] - ui not found")
return null return null
/** /**
@@ -83,7 +90,7 @@
* *
* @return int The number of uis updated * @return int The number of uis updated
*/ */
/datum/nanomanager/proc/update_uis(src_object) /datum/nanomanager/proc/update_uis(src_object)
var/src_object_key = "\ref[src_object]" var/src_object_key = "\ref[src_object]"
if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
return 0 return 0
@@ -128,7 +135,8 @@
*/ */
/datum/nanomanager/proc/close_user_uis(var/mob/user, src_object = null, ui_key = null) /datum/nanomanager/proc/close_user_uis(var/mob/user, src_object = null, ui_key = null)
if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0)
return 0 // has no open uis //testing("nanomanager/close_user_uis mob [user.name] has no open uis")
return 0 // has no open uis
var/close_count = 0 var/close_count = 0
for (var/datum/nanoui/ui in user.open_uis) for (var/datum/nanoui/ui in user.open_uis)
@@ -136,6 +144,8 @@
ui.close() ui.close()
close_count++ close_count++
//testing("nanomanager/close_user_uis mob [user.name] closed [open_uis.len] of [close_count] uis")
return close_count return close_count
/** /**
@@ -157,6 +167,7 @@
var/list/uis = open_uis[src_object_key][ui.ui_key] var/list/uis = open_uis[src_object_key][ui.ui_key]
uis.Add(ui) uis.Add(ui)
processing_uis.Add(ui) processing_uis.Add(ui)
//testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [ui.user.open_uis.len] | uis [uis.len] | processing_uis [processing_uis.len]")
/** /**
* Remove a /nanoui ui from the list of open uis * Remove a /nanoui ui from the list of open uis
@@ -176,7 +187,11 @@
processing_uis.Remove(ui) processing_uis.Remove(ui)
ui.user.open_uis.Remove(ui) ui.user.open_uis.Remove(ui)
var/list/uis = open_uis[src_object_key][ui.ui_key] var/list/uis = open_uis[src_object_key][ui.ui_key]
return uis.Remove(ui) uis.Remove(ui)
//testing("nanomanager/ui_closed mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [ui.user.open_uis.len] | uis [uis.len] | processing_uis [processing_uis.len]")
return 1
/** /**
* This is called on user logout * This is called on user logout
@@ -189,6 +204,7 @@
// //
/datum/nanomanager/proc/user_logout(var/mob/user) /datum/nanomanager/proc/user_logout(var/mob/user)
//testing("nanomanager/user_logout user [user.name]")
return close_user_uis(user) return close_user_uis(user)
/** /**
@@ -201,7 +217,9 @@
* @return nothing * @return nothing
*/ */
/datum/nanomanager/proc/user_transferred(var/mob/oldMob, var/mob/newMob) /datum/nanomanager/proc/user_transferred(var/mob/oldMob, var/mob/newMob)
//testing("nanomanager/user_transferred from mob [oldMob.name] to mob [newMob.name]")
if (isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0) if (isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0)
//testing("nanomanager/user_transferred mob [oldMob.name] has no open uis")
return 0 // has no open uis return 0 // has no open uis
if (isnull(newMob.open_uis) || !istype(newMob.open_uis, /list)) if (isnull(newMob.open_uis) || !istype(newMob.open_uis, /list))

View File

@@ -41,6 +41,8 @@ nanoui is used to open and update nano browser uis
// the body content for this ui, do not change unless you know what you're doing // the body content for this ui, do not change unless you know what you're doing
// the #mainTemplate div will contain the compiled "main" template html // the #mainTemplate div will contain the compiled "main" template html
var/content = "<div id='mainTemplate'></div>" var/content = "<div id='mainTemplate'></div>"
// the title of this ui
var/state_key = "default"
// initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on) // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on)
var/list/initial_data[0] var/list/initial_data[0]
// set to 1 to update the ui automatically every master_controller tick // set to 1 to update the ui automatically every master_controller tick
@@ -86,14 +88,18 @@ nanoui is used to open and update nano browser uis
add_common_assets() add_common_assets()
/** /**
* Use this proc to add assets which are common to all nano uis * Use this proc to add assets which are common to (and required by) all nano uis
* *
* @return nothing * @return nothing
*/ */
/datum/nanoui/proc/add_common_assets() /datum/nanoui/proc/add_common_assets()
add_script("libraries.min.js") // The jQuery library add_script("libraries.min.js") // A JS file comprising of jQuery, doT.js and jQuery Timer libraries (compressed together)
add_script("nano_config.js") // The NanoConfig JS, this is used to store configuration values. add_script("nano_utility.js") // The NanoUtility JS, this is used to store utility functions.
add_script("nano_update.js") // The NanoUpdate JS, this is used to receive updates and apply them. add_script("nano_template.js") // The NanoTemplate JS, this is used to render templates.
add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state
add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from
add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState
add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all templates
add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all templates add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all templates
add_stylesheet("shared.css") // this CSS sheet is common to all UIs add_stylesheet("shared.css") // this CSS sheet is common to all UIs
add_stylesheet("icons.css") // this CSS sheet is common to all UIs add_stylesheet("icons.css") // this CSS sheet is common to all UIs
@@ -107,12 +113,15 @@ nanoui is used to open and update nano browser uis
* @return nothing * @return nothing
*/ */
/datum/nanoui/proc/set_status(state, push_update) /datum/nanoui/proc/set_status(state, push_update)
if (state != status) if (state != status) // Only update if it is different
status = state if (status == STATUS_DISABLED)
if (push_update || !status) status = state
push_data(list(), 1) // Update the UI, force the update in case the status is 0 if (push_update)
else update()
status = state else
status = state
if (push_update || status == 0)
push_data(null, 1) // Update the UI, force the update in case the status is 0, data is null so that previous data is used
/** /**
* Update the status (visibility) of this ui based on the user's status * Update the status (visibility) of this ui based on the user's status
@@ -121,7 +130,7 @@ nanoui is used to open and update nano browser uis
* *
* @return nothing * @return nothing
*/ */
/datum/nanoui/proc/update_status(push_update = 0) /datum/nanoui/proc/update_status(var/push_update = 0)
if (istype(user, /mob/living/silicon/ai)) if (istype(user, /mob/living/silicon/ai))
set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility) set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility)
else if (istype(user, /mob/living/silicon/robot)) else if (istype(user, /mob/living/silicon/robot))
@@ -169,21 +178,39 @@ nanoui is used to open and update nano browser uis
* @return nothing * @return nothing
*/ */
/datum/nanoui/proc/set_initial_data(list/data) /datum/nanoui/proc/set_initial_data(list/data)
initial_data = add_default_data(data) initial_data = data
/** /**
* Add default data to the data being sent to the ui. * Get config data to sent to the ui.
* *
* @param data /list The list of data to be modified * @return /list config data
*
* @return /list modified data
*/ */
/datum/nanoui/proc/add_default_data(list/data) /datum/nanoui/proc/get_config_data()
data["ui"] = list( var/list/config_data = list(
"title" = title,
"srcObject" = list("name" = src_object.name),
"stateKey" = state_key,
"status" = status, "status" = status,
"user" = list("name" = user.name) "user" = list("name" = user.name)
) )
return data return config_data
/**
* Get data to sent to the ui.
*
* @param data /list The list of general data for this ui (can be null to use previous data sent)
*
* @return /list data to send to the ui
*/
/datum/nanoui/proc/get_send_data(var/list/data)
var/list/config_data = get_config_data()
var/list/send_data = list("config" = config_data)
if (!isnull(data))
send_data["data"] = data
return send_data
/** /**
* Set the browser window options for this ui * Set the browser window options for this ui
@@ -239,7 +266,17 @@ nanoui is used to open and update nano browser uis
* @return nothing * @return nothing
*/ */
/datum/nanoui/proc/set_content(ncontent) /datum/nanoui/proc/set_content(ncontent)
content = ncontent content = ncontent
/**
* Set the state key for use in the frontend Javascript
*
* @param nstate_key string The new HTML content for this UI
*
* @return nothing
*/
/datum/nanoui/proc/set_state_key(nstate_key)
state_key = nstate_key
/** /**
* Set whether or not to use the "old" on close logic (mainly unset_machine()) * Set whether or not to use the "old" on close logic (mainly unset_machine())
@@ -273,9 +310,8 @@ nanoui is used to open and update nano browser uis
if (templatel_data.len > 0) if (templatel_data.len > 0)
template_data_json = list2json(templatel_data) template_data_json = list2json(templatel_data)
var/initial_data_json = "{}" // An empty JSON object var/list/send_data = get_send_data(initial_data)
if (initial_data.len > 0) var/initial_data_json = list2json(send_data)
initial_data_json = list2json(initial_data)
var/url_parameters_json = list2json(list("src" = "\ref[src]")) var/url_parameters_json = list2json(list("src" = "\ref[src]"))
@@ -286,11 +322,11 @@ nanoui is used to open and update nano browser uis
<script type='text/javascript'> <script type='text/javascript'>
function receiveUpdateData(jsonString) function receiveUpdateData(jsonString)
{ {
// We need both jQuery and NanoUpdate to be able to recieve data // We need both jQuery and NanoStateManager to be able to recieve data
// At the moment any data received before those libraries are loaded will be lost // At the moment any data received before those libraries are loaded will be lost
if (typeof NanoUpdate != 'undefined' && typeof jQuery != 'undefined') if (typeof NanoStateManager != 'undefined' && typeof jQuery != 'undefined')
{ {
NanoUpdate.receiveUpdateData(jsonString); NanoStateManager.receiveUpdateData(jsonString);
} }
} }
</script> </script>
@@ -300,7 +336,14 @@ nanoui is used to open and update nano browser uis
<div id='uiWrapper'> <div id='uiWrapper'>
[title ? "<div id='uiTitleWrapper'><div id='uiStatusIcon' class='icon24 uiStatusGood'></div><div id='uiTitle'>[title]</div><div id='uiTitleFluff'></div></div>" : ""] [title ? "<div id='uiTitleWrapper'><div id='uiStatusIcon' class='icon24 uiStatusGood'></div><div id='uiTitle'>[title]</div><div id='uiTitleFluff'></div></div>" : ""]
<div id='uiContent'> <div id='uiContent'>
<div id='uiNoJavaScript'>Initiating...</div> <div id='uiLoadingNotice'>Initiating...</div>
<noscript>
<div id='uiNoScript'>
<h2>JAVASCRIPT REQUIRED</h2>
<p>Your Internet Explorer's Javascript is disabled (or broken).<br/>
Enable Javascript and then open this UI again.</p>
</div>
</noscript>
"} "}
/** /**
@@ -377,9 +420,10 @@ nanoui is used to open and update nano browser uis
if (status == STATUS_DISABLED && !force_push) if (status == STATUS_DISABLED && !force_push)
return // Cannot update UI, no visibility return // Cannot update UI, no visibility
data = add_default_data(data) var/list/send_data = get_send_data(data)
//user << list2json(data) // used for debugging //user << list2json(data) // used for debugging
user << output(list2params(list(list2json(data))),"[window_id].browser:receiveUpdateData") user << output(list2params(list(list2json(send_data))),"[window_id].browser:receiveUpdateData")
/** /**
* This Topic() proc is called whenever a user clicks on a link within a Nano UI * This Topic() proc is called whenever a user clicks on a link within a Nano UI
@@ -410,7 +454,15 @@ nanoui is used to open and update nano browser uis
return return
if (status && (update || is_auto_updating)) if (status && (update || is_auto_updating))
src_object.ui_interact(user, ui_key, src) // Update the UI (update_status() is called whenever a UI is updated) update() // Update the UI (update_status() is called whenever a UI is updated)
else else
update_status(1) // Not updating UI, so lets check here if status has changed update_status(1) // Not updating UI, so lets check here if status has changed
/**
* Update the UI
*
* @return nothing
*/
/datum/nanoui/proc/update(var/force_open = 0)
src_object.ui_interact(user, ui_key, src, force_open)

View File

@@ -673,7 +673,7 @@
return return
// do APC interaction // do APC interaction
user.set_machine(src) //user.set_machine(src)
src.interact(user) src.interact(user)
/obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user) /obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user)
@@ -741,7 +741,7 @@
else else
return 0 // 0 = User is not a Malf AI return 0 // 0 = User is not a Malf AI
/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user) if(!user)
return return
@@ -752,7 +752,7 @@
"powerCellStatus" = cell ? cell.percent() : null, "powerCellStatus" = cell ? cell.percent() : null,
"chargeMode" = chargemode, "chargeMode" = chargemode,
"chargingStatus" = charging, "chargingStatus" = charging,
"totalLoad" = lastused_equip + lastused_light + lastused_environ, "totalLoad" = round(lastused_equip + lastused_light + lastused_environ),
"coverLocked" = coverlocked, "coverLocked" = coverlocked,
"siliconUser" = istype(user, /mob/living/silicon), "siliconUser" = istype(user, /mob/living/silicon),
"malfStatus" = get_malf_status(user), "malfStatus" = get_malf_status(user),
@@ -760,7 +760,7 @@
"powerChannels" = list( "powerChannels" = list(
list( list(
"title" = "Equipment", "title" = "Equipment",
"powerLoad" = lastused_equip, "powerLoad" = round(lastused_equip),
"status" = equipment, "status" = equipment,
"topicParams" = list( "topicParams" = list(
"auto" = list("eqp" = 3), "auto" = list("eqp" = 3),
@@ -770,7 +770,7 @@
), ),
list( list(
"title" = "Lighting", "title" = "Lighting",
"powerLoad" = lastused_light, "powerLoad" = round(lastused_light),
"status" = lighting, "status" = lighting,
"topicParams" = list( "topicParams" = list(
"auto" = list("lgt" = 3), "auto" = list("lgt" = 3),
@@ -780,7 +780,7 @@
), ),
list( list(
"title" = "Environment", "title" = "Environment",
"powerLoad" = lastused_environ, "powerLoad" = round(lastused_environ),
"status" = environ, "status" = environ,
"topicParams" = list( "topicParams" = list(
"auto" = list("env" = 3), "auto" = list("env" = 3),
@@ -792,7 +792,7 @@
) )
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
@@ -961,14 +961,14 @@
/obj/machinery/power/apc/Topic(href, href_list, var/usingUI = 1) /obj/machinery/power/apc/Topic(href, href_list, var/usingUI = 1)
if(!(isrobot(usr) && (href_list["apcwires"] || href_list["pulse"]))) if(!(isrobot(usr) && (href_list["apcwires"] || href_list["pulse"])))
if(!can_use(usr, 1)) if(!can_use(usr, 1))
return return 0
src.add_fingerprint(usr) src.add_fingerprint(usr)
if (href_list["apcwires"]) if (href_list["apcwires"])
var/t1 = text2num(href_list["apcwires"]) var/t1 = text2num(href_list["apcwires"])
if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) )) if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) ))
usr << "You need wirecutters!" usr << "You need wirecutters!"
return return 0
if (src.isWireColorCut(t1)) if (src.isWireColorCut(t1))
src.mend(t1) src.mend(t1)
else else
@@ -977,10 +977,10 @@
var/t1 = text2num(href_list["pulse"]) var/t1 = text2num(href_list["pulse"])
if (!istype(usr.get_active_hand(), /obj/item/device/multitool)) if (!istype(usr.get_active_hand(), /obj/item/device/multitool))
usr << "You need a multitool!" usr << "You need a multitool!"
return return 0
if (src.isWireColorCut(t1)) if (src.isWireColorCut(t1))
usr << "You can't pulse a cut wire." usr << "You can't pulse a cut wire."
return return 0
else else
src.pulse(t1) src.pulse(t1)
else if (href_list["lock"]) else if (href_list["lock"])
@@ -1027,11 +1027,11 @@
else if( href_list["close"] ) else if( href_list["close"] )
nanomanager.close_user_uis(usr, src) nanomanager.close_user_uis(usr, src)
return return 0
else if (href_list["close2"]) else if (href_list["close2"])
usr << browse(null, "window=apcwires") usr << browse(null, "window=apcwires")
return return 0
else if (href_list["overload"]) else if (href_list["overload"])
if( istype(usr, /mob/living/silicon) && !src.aidisabled ) if( istype(usr, /mob/living/silicon) && !src.aidisabled )
@@ -1042,7 +1042,7 @@
if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled ) if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled )
if (malfai.malfhacking) if (malfai.malfhacking)
malfai << "You are already hacking an APC." malfai << "You are already hacking an APC."
return return 0
malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process." malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
malfai.malfhack = src malfai.malfhack = src
malfai.malfhacking = 1 malfai.malfhacking = 1
@@ -1071,7 +1071,7 @@
if(usingUI) if(usingUI)
src.updateDialog() src.updateDialog()
return return 1
/*/obj/machinery/power/apc/proc/malfoccupy(var/mob/living/silicon/ai/malf) /*/obj/machinery/power/apc/proc/malfoccupy(var/mob/living/silicon/ai/malf)
if(!istype(malf)) if(!istype(malf))

View File

@@ -250,7 +250,7 @@
building_terminal = 0 building_terminal = 0
/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(stat & BROKEN) if(stat & BROKEN)
return return
@@ -269,7 +269,7 @@
data["outputLoad"] = round(loaddemand) data["outputLoad"] = round(loaddemand)
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -104,7 +104,7 @@
* *
* @return nothing * @return nothing
*/ */
/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null) /obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main",var/datum/nanoui/ui = null, var/force_open = 1)
if(broken_requirements.len) if(broken_requirements.len)
user << "<span class='warning'>[src] is broken. [broken_requirements[broken_requirements[1]]]</span>" user << "<span class='warning'>[src] is broken. [broken_requirements[broken_requirements[1]]]</span>"
return return
@@ -114,8 +114,8 @@
// this is the data which will be sent to the ui // this is the data which will be sent to the ui
var/data[0] var/data[0]
data["amount"] = amount data["amount"] = amount
data["energy"] = energy data["energy"] = round(energy)
data["maxEnergy"] = max_energy data["maxEnergy"] = round(max_energy)
data["isBeakerLoaded"] = beaker ? 1 : 0 data["isBeakerLoaded"] = beaker ? 1 : 0
data["glass"] = accept_glass data["glass"] = accept_glass
var beakerContents[0] var beakerContents[0]
@@ -141,7 +141,7 @@
data["chemicals"] = chemicals data["chemicals"] = chemicals
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -114,7 +114,7 @@
if(total_purity && fresh_coolant) if(total_purity && fresh_coolant)
coolant_purity = total_purity / fresh_coolant coolant_purity = total_purity / fresh_coolant
/obj/machinery/radiocarbon_spectrometer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/radiocarbon_spectrometer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(user.stat) if(user.stat)
return return
@@ -146,7 +146,7 @@
data["rad_shield_on"] = rad_shield data["rad_shield_on"] = rad_shield
// update the ui if it exists, returns null if no ui is passed/found // update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
// the ui does not exist, so we'll create a new() one // the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm

View File

@@ -18,7 +18,7 @@
ui_interact(user) ui_interact(user)
/obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag] var/datum/shuttle/ferry/shuttle = shuttle_controller.shuttles[shuttle_tag]
if (!istype(shuttle)) if (!istype(shuttle))
@@ -57,7 +57,7 @@
"can_force" = shuttle.can_force(), "can_force" = shuttle.can_force(),
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "shuttle_control_console.tmpl", "[shuttle_tag] Shuttle Control", 470, 310) ui = new(user, src, ui_key, "shuttle_control_console.tmpl", "[shuttle_tag] Shuttle Control", 470, 310)

View File

@@ -153,7 +153,7 @@
read_authorization(W) read_authorization(W)
..() ..()
/obj/machinery/computer/shuttle_control/emergency/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/shuttle_control/emergency/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0] var/data[0]
var/datum/shuttle/ferry/emergency/shuttle = shuttle_controller.shuttles[shuttle_tag] var/datum/shuttle/ferry/emergency/shuttle = shuttle_controller.shuttles[shuttle_tag]
if (!istype(shuttle)) if (!istype(shuttle))
@@ -211,7 +211,7 @@
"user" = debug? user : null, "user" = debug? user : null,
) )
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "escape_shuttle_control_console.tmpl", "Shuttle Control", 470, 420) ui = new(user, src, ui_key, "escape_shuttle_control_console.tmpl", "Shuttle Control", 470, 420)

View File

@@ -36,7 +36,7 @@
if(..()) return if(..()) return
ui_interact(user) ui_interact(user)
/obj/machinery/computer/centrifuge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/centrifuge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src) user.set_machine(src)
var/data[0] var/data[0]
@@ -70,7 +70,7 @@
data["antibodies"] = A && A.data["antibodies"] ? antigens2string(A.data["antibodies"]) : null data["antibodies"] = A && A.data["antibodies"] ? antigens2string(A.data["antibodies"]) : null
data["is_antibody_sample"] = 1 data["is_antibody_sample"] = 1
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "isolation_centrifuge.tmpl", src.name, 400, 500) ui = new(user, src, ui_key, "isolation_centrifuge.tmpl", src.name, 400, 500)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -43,7 +43,7 @@
if(..()) return if(..()) return
ui_interact(user) ui_interact(user)
/obj/machinery/computer/diseasesplicer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/computer/diseasesplicer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src) user.set_machine(src)
var/data[0] var/data[0]
@@ -81,7 +81,7 @@
else else
data["info"] = "No dish loaded." data["info"] = "No dish loaded."
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "disease_splicer.tmpl", src.name, 400, 600) ui = new(user, src, ui_key, "disease_splicer.tmpl", src.name, 400, 600)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -50,7 +50,7 @@
if(stat & (NOPOWER|BROKEN)) return if(stat & (NOPOWER|BROKEN)) return
ui_interact(user) ui_interact(user)
/obj/machinery/disease2/incubator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/disease2/incubator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src) user.set_machine(src)
var/data[0] var/data[0]
@@ -82,7 +82,7 @@
for (var/ID in virus) for (var/ID in virus)
data["blood_already_infected"] = virus[ID] data["blood_already_infected"] = virus[ID]
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "dish_incubator.tmpl", src.name, 400, 600) ui = new(user, src, ui_key, "dish_incubator.tmpl", src.name, 400, 600)
ui.set_initial_data(data) ui.set_initial_data(data)

View File

@@ -49,7 +49,7 @@
if(stat & (NOPOWER|BROKEN)) return if(stat & (NOPOWER|BROKEN)) return
ui_interact(user) ui_interact(user)
/obj/machinery/disease2/isolator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) /obj/machinery/disease2/isolator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src) user.set_machine(src)
var/data[0] var/data[0]
@@ -100,7 +100,7 @@
"name" = entry.fields["name"], \ "name" = entry.fields["name"], \
"description" = replacetext(desc, "\n", "")) "description" = replacetext(desc, "\n", ""))
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui) if (!ui)
ui = new(user, src, ui_key, "pathogenic_isolator.tmpl", src.name, 400, 500) ui = new(user, src, ui_key, "pathogenic_isolator.tmpl", src.name, 400, 500)
ui.set_initial_data(data) ui.set_initial_data(data)

4
nano/To BYOND Cache.bat Normal file
View File

@@ -0,0 +1,4 @@
copy css\* "%USERPROFILE%\Documents\BYOND\cache" /y
copy images\* "%USERPROFILE%\Documents\BYOND\cache" /y
copy js\* "%USERPROFILE%\Documents\BYOND\cache" /y
copy templates\* "%USERPROFILE%\Documents\BYOND\cache" /y

View File

@@ -149,7 +149,7 @@ h4 {
clear: both; clear: both;
padding: 8px; padding: 8px;
} }
#uiNoJavaScript { #uiLoadingNotice {
position: relative; position: relative;
background: url(uiNoticeBackground.jpg) 50% 50%; background: url(uiNoticeBackground.jpg) 50% 50%;
color: #000000; color: #000000;
@@ -159,6 +159,22 @@ h4 {
padding: 3px 4px 3px 4px; padding: 3px 4px 3px 4px;
margin: 4px 0 4px 0; margin: 4px 0 4px 0;
} }
#uiNoScript {
position: fixed;
top: 50%;
left: 50%;
margin: -60px 0 0 -150px;
width: 280px;
height: 120px;
background: #ffffff;
border: 2px solid #ff0000;
color: #000000;
font-size: 10px;
font-weight: bold;
z-index: 9999;
padding: 0px 10px;
text-align: center;
}
.white { .white {
color: white; color: white;
@@ -261,7 +277,6 @@ div.notice {
color: #e9c183; color: #e9c183;
} }
.itemContentWide { .itemContentWide {
float: left; float: left;
width: 79%; width: 79%;

File diff suppressed because one or more lines are too long

157
nano/js/libraries/2-doT.js Normal file
View File

@@ -0,0 +1,157 @@
(function () {
"use strict";
var doT = {
version: '1.0.1-nanoui',
templateSettings: {
evaluate: /\{\{([\s\S]+?)\}\}/g,
interpolate: /\{\{:([\s\S]+?)\}\}/g,
encode: /\{\{>([\s\S]+?)\}\}/g,
use: /\{\{#([\s\S]+?)\}\}/g,
define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,
conditional: /\{\{\/?if\s*([\s\S]*?)\s*\}\}/g,
conditionalElse: /\{\{else\s*([\s\S]*?)\s*\}\}/g,
iterate: /\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
props: /\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,
empty: /\{\{empty\}\}/g,
varname: 'data, config, helper',
strip: true,
append: true,
selfcontained: false
},
template: undefined, //fn, compile template
compile: undefined //fn, for express
}, global;
if (typeof module !== 'undefined' && module.exports) {
module.exports = doT;
} else if (typeof define === 'function' && define.amd) {
define(function () {
return doT;
});
} else {
global = (function () {
return this || (0, eval)('this');
}());
global.doT = doT;
}
function encodeHTMLSource() {
var encodeHTMLRules = { "&": "&#38;", "<": "&#60;", ">": "&#62;", '"': '&#34;', "'": '&#39;', "/": '&#47;' },
matchHTML = /&(?!#?\w+;)|<|>|"|'|\//g;
return function () {
return this ? this.replace(matchHTML, function (m) {
return encodeHTMLRules[m] || m;
}) : this;
};
}
String.prototype.encodeHTML = encodeHTMLSource();
var startend = {
append: { start: "'+(", end: ")+'", endencode: "||'').toString().encodeHTML()+'" },
split: { start: "';out+=(", end: ");out+='", endencode: "||'').toString().encodeHTML();out+='"}
}, skip = /$^/;
function resolveDefs(c, block, def) {
return ((typeof block === 'string') ? block : block.toString())
.replace(c.define || skip, function (m, code, assign, value) {
if (code.indexOf('def.') === 0) {
code = code.substring(4);
}
if (!(code in def)) {
if (assign === ':') {
if (c.defineParams) value.replace(c.defineParams, function (m, param, v) {
def[code] = {arg: param, text: v};
});
if (!(code in def)) def[code] = value;
} else {
new Function("def", "def['" + code + "']=" + value)(def);
}
}
return '';
})
.replace(c.use || skip, function (m, code) {
if (c.useParams) code = code.replace(c.useParams, function (m, s, d, param) {
if (def[d] && def[d].arg && param) {
var rw = (d + ":" + param).replace(/'|\\/g, '_');
def.__exp = def.__exp || {};
def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2");
return s + "def.__exp['" + rw + "']";
}
});
var v = new Function("def", "return " + code)(def);
return v ? resolveDefs(c, v, def) : v;
});
}
function unescape(code) {
return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, ' ');
}
doT.template = function (tmpl, c, def) {
c = c || doT.templateSettings;
var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0,
str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl;
str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, ' ')
.replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, '') : str)
.replace(/'|\\/g, '\\$&')
.replace(c.interpolate || skip, function (m, code) {
return cse.start + unescape(code) + cse.end;
})
.replace(c.encode || skip, function (m, code) {
needhtmlencode = true;
return cse.start + unescape(code) + cse.endencode;
})
.replace(c.conditional || skip, function (m, code) {
return (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='");
})
.replace(c.conditionalElse || skip, function (m, code) {
return (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='");
})
.replace(c.iterate || skip, function (m, iterate, vname, iname) {
if (!iterate) return "';} } out+='";
sid += 1;
vname = vname || "value";
iname = iname || "index";
iterate = unescape(iterate);
var arrayName = "arr" + sid;
return "';var " + arrayName + "=" + iterate + ";if(" + arrayName + " && " + arrayName + ".length > 0){var " + vname + "," + iname + "=-1,l" + sid + "=" + arrayName + ".length-1;while(" + iname + "<l" + sid + "){"
+ vname + "=" + arrayName + "[" + iname + "+=1];out+='";
})
.replace(c.props || skip, function (m, iterate, vname, iname) {
if (!iterate) return "';} } out+='";
sid += 1;
vname = vname || "value";
iname = iname || "key";
iterate = unescape(iterate);
var objectName = "arr" + sid;
return "';var " + objectName + "=" + iterate + ";if(" + objectName + " && Object.size(" + objectName + ") > 0){var " + vname + ";for( var " + iname + " in " + objectName + "){ if (!" + objectName + ".hasOwnProperty(" + iname + ")) continue; " + vname + "=" + objectName + "[" + iname + "];out+='";
})
.replace(c.empty || skip, function (m) {
return "';}}else{if(true){out+='"; // The "if(true)" condition is required to account for the for tag closing with two brackets
})
.replace(c.evaluate || skip, function (m, code) {
return "';" + unescape(code) + "out+='";
})
+ "';return out;")
.replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r')
.replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, '')
.replace(/(\s|;|\}|^|\{)out\+=''\+/g, '$1out+=');
if (needhtmlencode && c.selfcontained) {
str = "String.prototype.encodeHTML=(" + encodeHTMLSource.toString() + "());" + str;
}
try {
return new Function(c.varname, str);
} catch (e) {
if (typeof console !== 'undefined') console.log("Could not create a template function: " + str);
throw e;
}
};
doT.compile = function (tmpl, def) {
return doT.template(tmpl, null, def);
};
}());

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,85 @@
// NanoBaseCallbacks is where the base callbacks (common to all templates) are stored
NanoBaseCallbacks = function ()
{
// _canClick is used to disable clicks for a short period after each click (to avoid mis-clicks)
var _canClick = true;
var _baseBeforeUpdateCallbacks = {}
var _baseAfterUpdateCallbacks = {
// this callback is triggered after new data is processed
// it updates the status/visibility icon and adds click event handling to buttons/links
status: function (updateData) {
var uiStatusClass;
if (updateData['config']['status'] == 2)
{
uiStatusClass = 'icon24 uiStatusGood';
$('.linkActive').removeClass('inactive');
}
else if (updateData['config']['status'] == 1)
{
uiStatusClass = 'icon24 uiStatusAverage';
$('.linkActive').addClass('inactive');
}
else
{
uiStatusClass = 'icon24 uiStatusBad'
$('.linkActive').addClass('inactive');
}
$('#uiStatusIcon').attr('class', uiStatusClass);
$('.linkActive').stopTime('linkPending');
$('.linkActive').removeClass('linkPending');
$('.linkActive').off('click');
$('.linkActive').on('click', function (event) {
event.preventDefault();
var href = $(this).data('href');
if (href != null && _canClick)
{
_canClick = false;
$('body').oneTime(300, 'enableClick', function () {
_canClick = true;
});
if (updateData['config']['status'] == 2)
{
$(this).oneTime(300, 'linkPending', function () {
$(this).addClass('linkPending');
});
}
window.location.href = href;
}
});
}
};
return {
addCallbacks: function () {
NanoStateManager.addBeforeUpdateCallbacks(_baseBeforeUpdateCallbacks);
NanoStateManager.addAfterUpdateCallbacks(_baseAfterUpdateCallbacks);
},
removeCallbacks: function () {
for (var callbackKey in _baseBeforeUpdateCallbacks)
{
if (_baseBeforeUpdateCallbacks.hasOwnProperty(callbackKey))
{
NanoStateManager.removeBeforeUpdateCallback(callbackKey);
}
}
for (var callbackKey in _baseAfterUpdateCallbacks)
{
if (_baseAfterUpdateCallbacks.hasOwnProperty(callbackKey))
{
NanoStateManager.removeAfterUpdateCallback(callbackKey);
}
}
}
};
} ();

View File

@@ -1,21 +1,8 @@
// NanoBaseHelpers is where the base template helpers (common to all templates) are stored // NanoBaseHelpers is where the base template helpers (common to all templates) are stored
NanoBaseHelpers = function () NanoBaseHelpers = function ()
{ {
var _urlParameters = {}; // This is populated with the base url parameters (used by all links), which is probaby just the "src" parameter var _baseHelpers = {
// change ui styling to "syndicate mode"
var init = function ()
{
var body = $('body'); // We store data in the body tag, it's as good a place as any
_urlParameters = body.data('urlParameters');
initHelpers();
};
var initHelpers = function ()
{
$.views.helpers({
syndicateMode: function() { syndicateMode: function() {
$('body').css("background-color","#8f1414"); $('body').css("background-color","#8f1414");
$('body').css("background-image","url('uiBackground-Syndicate.png')"); $('body').css("background-image","url('uiBackground-Syndicate.png')");
@@ -26,9 +13,8 @@ NanoBaseHelpers = function ()
$('#uiTitleFluff').css("background-position","50% 50%"); $('#uiTitleFluff').css("background-position","50% 50%");
$('#uiTitleFluff').css("background-repeat", "no-repeat"); $('#uiTitleFluff').css("background-repeat", "no-repeat");
return ''; return '';
}, },
// Generate a Byond link // Generate a Byond link
link: function( text, icon, parameters, status, elementClass, elementId) { link: function( text, icon, parameters, status, elementClass, elementId) {
@@ -56,7 +42,7 @@ NanoBaseHelpers = function ()
return '<div unselectable="on" class="link ' + iconClass + ' ' + elementClass + ' ' + status + '" ' + elementIdHtml + '>' + iconHtml + text + '</div>'; return '<div unselectable="on" class="link ' + iconClass + ' ' + elementClass + ' ' + status + '" ' + elementIdHtml + '>' + iconHtml + text + '</div>';
} }
return '<div unselectable="on" class="link linkActive ' + iconClass + ' ' + elementClass + '" data-href="' + generateHref(parameters) + '" ' + elementIdHtml + '>' + iconHtml + text + '</div>'; return '<div unselectable="on" class="link linkActive ' + iconClass + ' ' + elementClass + '" data-href="' + NanoUtility.generateHref(parameters) + '" ' + elementIdHtml + '>' + iconHtml + text + '</div>';
}, },
// Round a number to the nearest integer // Round a number to the nearest integer
round: function(number) { round: function(number) {
@@ -91,12 +77,12 @@ NanoBaseHelpers = function ()
} }
return ''; return '';
}, },
formatNumber: function(x) { formatNumber: function(x) {
// From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript // From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript
var parts = x.toString().split("."); var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join("."); return parts.join(".");
}, },
// Display a bar. Used to show health, capacity, etc. // Display a bar. Used to show health, capacity, etc.
displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { displayBar: function(value, rangeMin, rangeMax, styleClass, showText) {
@@ -172,7 +158,7 @@ NanoBaseHelpers = function ()
status = 'selected'; status = 'selected';
} }
html += '<div class="link ' + status + ' dnaSubBlock" data-href="' + generateHref(parameters) + '" id="dnaBlock' + index + '">' + characters[index] + '</div>' html += '<div class="link ' + status + ' dnaSubBlock" data-href="' + NanoUtility.generateHref(parameters) + '" id="dnaBlock' + index + '">' + characters[index] + '</div>'
index++; index++;
if (index % blockSize == 0 && index < characters.length) if (index % blockSize == 0 && index < characters.length)
@@ -191,52 +177,26 @@ NanoBaseHelpers = function ()
return html; return html;
} }
}); };
};
// generate a Byond href, combines _urlParameters with parameters
var generateHref = function (parameters)
{
var queryString = '?';
for (var key in _urlParameters)
{
if (_urlParameters.hasOwnProperty(key))
{
if (queryString !== '?')
{
queryString += ';';
}
queryString += key + '=' + _urlParameters[key];
}
}
for (var key in parameters)
{
if (parameters.hasOwnProperty(key))
{
if (queryString !== '?')
{
queryString += ';';
}
queryString += key + '=' + parameters[key];
}
}
return queryString;
};
return { return {
init: function () addHelpers: function ()
{ {
init(); NanoTemplate.addHelpers(_baseHelpers);
},
removeHelpers: function ()
{
for (var helperKey in _baseHelpers)
{
if (_baseHelpers.hasOwnProperty(helperKey))
{
NanoTemplate.removeHelper(helperKey);
}
}
} }
}; };
} (); } ();
$(document).ready(function()
{
NanoBaseHelpers.init();
});

69
nano/js/nano_state.js Normal file
View File

@@ -0,0 +1,69 @@
// This is the base state class, it is not to be used directly
function NanoStateClass() {
/*if (typeof this.key != 'string' || !this.key.length)
{
alert('ERROR: Tried to create a state with an invalid state key: ' + this.key);
return;
}
this.key = this.key.toLowerCase();
NanoStateManager.addState(this);*/
}
NanoStateClass.prototype.key = null;
NanoStateClass.prototype.isCurrent = function () {
return NanoStateManager.getCurrentState() == this;
};
NanoStateClass.prototype.onAdd = function (previousState) {
// Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
NanoBaseCallbacks.addCallbacks();
NanoBaseHelpers.addHelpers();
};
NanoStateClass.prototype.onRemove = function (nextState) {
// Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
NanoBaseCallbacks.removeCallbacks();
NanoBaseHelpers.removeHelpers();
};
NanoStateClass.prototype.onBeforeUpdate = function (data) {
// Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
data = NanoStateManager.executeBeforeUpdateCallbacks(data);
return data; // Return data to continue, return false to prevent onUpdate and onAfterUpdate
};
NanoStateClass.prototype.onUpdate = function (data) {
// Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
try
{
$("#mainTemplate").html(NanoTemplate.parse('main', data)); // render the 'mail' template to the #mainTemplate div
}
catch(error)
{
alert('ERROR: An error occurred while rendering the UI: ' + error.message);
return;
}
};
NanoStateClass.prototype.onAfterUpdate = function (data) {
// Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
NanoStateManager.executeAfterUpdateCallbacks(data);
};
NanoStateClass.prototype.alertText = function (text) {
// Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function
alert(text);
};

View File

@@ -0,0 +1,14 @@
NanoStateDefaultClass.inheritsFrom(NanoStateClass);
var NanoStateDefault = new NanoStateDefaultClass();
function NanoStateDefaultClass() {
this.key = 'default';
//this.parent.constructor.call(this);
this.key = this.key.toLowerCase();
NanoStateManager.addState(this);
}

View File

@@ -0,0 +1,227 @@
// NanoStateManager handles data from the server and uses it to render templates
NanoStateManager = function ()
{
// _isInitialised is set to true when all of this ui's templates have been processed/rendered
var _isInitialised = false;
// the array of template names to use for this ui
var _templates = null;
// the data for this ui
var _data = null;
// new data which arrives before _isInitialised is true is stored here for processing later
var _earlyUpdateData = null;
// this is an array of callbacks which are called when new data arrives, before it is processed
var _beforeUpdateCallbacks = {};
// this is an array of callbacks which are called when new data arrives, before it is processed
var _afterUpdateCallbacks = {};
// this is an array of state objects, these can be used to provide custom javascript logic
var _states = {};
var _currentState = null;
// the init function is called when the ui has loaded
// this function sets up the templates and base functionality
var init = function ()
{
$('#uiLoadingNotice').html('Loading...');
// We store initialData and templateData in the body tag, it's as good a place as any
_data = $('body').data('initialData');
if (_data == null || !_data.hasOwnProperty('config') || !_data.hasOwnProperty('data'))
{
alert('Error: Initial data did not load correctly.');
}
var stateKey = 'default';
if (_data['config'].hasOwnProperty('stateKey') && _data['config']['stateKey'])
{
stateKey = _data['config']['stateKey'].toLowerCase();
}
NanoStateManager.setCurrentState(stateKey);
$(document).on('templatesLoaded', function () {
doUpdate(_data);
_isInitialised = true;
$('#uiLoadingNotice').hide();
});
};
// Receive update data from the server
var receiveUpdateData = function (jsonString)
{
var updateData;
try
{
// parse the JSON string from the server into a JSON object
updateData = jQuery.parseJSON(jsonString);
}
catch (error)
{
alert(error.Message);
return;
}
if (!updateData.hasOwnProperty('data'))
{
if (_data && _data.hasOwnProperty('data'))
{
updateData['data'] = _data['data'];
}
else
{
updateData['data'] = {};
}
}
if (_isInitialised) // all templates have been registered, so render them
{
doUpdate(updateData);
}
else
{
_data = updateData; // all templates have not been registered. We set _data directly here which will be applied after the template is loaded with the initial data
}
};
// This function does the update by calling the methods on the current state
var doUpdate = function (data)
{
if (_currentState == null)
{
return;
}
data = _currentState.onBeforeUpdate(data);
if (data === false)
{
alert('data is false, return');
return; // A beforeUpdateCallback returned a false value, this prevents the render from occuring
}
_data = data;
_currentState.onUpdate(_data);
_currentState.onAfterUpdate(_data);
};
// Execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing and potential modification
var executeCallbacks = function (callbacks, data)
{
for (var key in callbacks)
{
if (callbacks.hasOwnProperty(key) && jQuery.isFunction(callbacks[key]))
{
data = callbacks[key].call(this, data);
}
}
return data;
};
return {
init: function ()
{
init();
},
receiveUpdateData: function (jsonString)
{
receiveUpdateData(jsonString);
},
addBeforeUpdateCallback: function (key, callbackFunction)
{
_beforeUpdateCallbacks[key] = callbackFunction;
},
addBeforeUpdateCallbacks: function (callbacks) {
for (var callbackKey in callbacks) {
if (!callbacks.hasOwnProperty(callbackKey))
{
continue;
}
NanoStateManager.addBeforeUpdateCallback(callbackKey, callbacks[callbackKey]);
}
},
removeBeforeUpdateCallback: function (key)
{
if (_beforeUpdateCallbacks.hasOwnProperty(key))
{
delete _beforeUpdateCallbacks[key];
}
},
executeBeforeUpdateCallbacks: function (data) {
return executeCallbacks(_beforeUpdateCallbacks, data);
},
addAfterUpdateCallback: function (key, callbackFunction)
{
_afterUpdateCallbacks[key] = callbackFunction;
},
addAfterUpdateCallbacks: function (callbacks) {
for (var callbackKey in callbacks) {
if (!callbacks.hasOwnProperty(callbackKey))
{
continue;
}
NanoStateManager.addAfterUpdateCallback(callbackKey, callbacks[callbackKey]);
}
},
removeAfterUpdateCallback: function (key)
{
if (_afterUpdateCallbacks.hasOwnProperty(key))
{
delete _afterUpdateCallbacks[key];
}
},
executeAfterUpdateCallbacks: function (data) {
return executeCallbacks(_afterUpdateCallbacks, data);
},
addState: function (state)
{
if (!(state instanceof NanoStateClass))
{
alert('ERROR: Attempted to add a state which is not instanceof NanoStateClass');
return;
}
if (!state.key)
{
alert('ERROR: Attempted to add a state with an invalid stateKey');
return;
}
_states[state.key] = state;
},
setCurrentState: function (stateKey)
{
if (typeof stateKey == 'undefined' || !stateKey) {
alert('ERROR: No state key was passed!');
return false;
}
if (!_states.hasOwnProperty(stateKey))
{
alert('ERROR: Attempted to set a current state which does not exist: ' + stateKey);
return false;
}
var previousState = _currentState;
_currentState = _states[stateKey];
if (previousState != null) {
previousState.onRemove(_currentState);
}
_currentState.onAdd(previousState);
return true;
},
getCurrentState: function ()
{
return _currentState;
}
};
} ();

130
nano/js/nano_template.js Normal file
View File

@@ -0,0 +1,130 @@
var NanoTemplate = function () {
var _templates = {};
var _compiledTemplates = {};
var _helpers = {};
var init = function () {
// We store initialData and templateData in the body tag, it's as good a place as any
var templateData = $('body').data('templateData');
if (templateData == null)
{
alert('Error: Template data did not load correctly.');
}
// we count the number of templates for this ui so that we know when they've all been rendered
var templateCount = 0;
for (var key in templateData)
{
if (templateData.hasOwnProperty(key))
{
templateCount++;
}
}
if (!templateCount)
{
alert('ERROR: No templates listed!');
}
// load markup for each template and register it
for (var key in templateData)
{
if (!templateData.hasOwnProperty(key))
{
continue;
}
$.when($.ajax({
url: templateData[key],
cache: false,
dataType: 'text'
}))
.done(function(templateMarkup) {
//templateMarkup = templateMarkup.replace(/ +\) *\}\}/g, ')}}');
templateMarkup += '<div class="clearBoth"></div>';
try
{
NanoTemplate.addTemplate(key, templateMarkup)
templateCount--;
if (templateCount <= 0)
{
$(document).trigger('templatesLoaded');
}
}
catch(error)
{
alert('ERROR: An error occurred while loading the UI: ' + error.message);
return;
}
})
.fail(function () {
alert('ERROR: Loading template ' + key + '(' + templateData[key] + ') failed!');
});;
}
};
var compileTemplates = function () {
for (var key in _templates) {
try {
_compiledTemplates[key] = doT.template(_templates[key], null, _templates)
}
catch (error) {
alert(error);
}
}
};
return {
init: function () {
init();
},
addTemplate: function (key, templateString) {
_templates[key] = templateString;
},
parse: function (templateKey, data) {
if (!_compiledTemplates.hasOwnProperty(templateKey)) {
if (!_templates.hasOwnProperty(templateKey)) {
alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!');
return;
}
compileTemplates();
}
return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers);
},
addHelper: function (helperName, helperFunction) {
if (!jQuery.isFunction(helperFunction)) {
alert('NanoTemplate.addHelper failed to add ' + helperName + ' as it is not a function.');
return;
}
_helpers[helperName] = helperFunction;
},
addHelpers: function (helpers) {
for (var helperName in helpers) {
if (!helpers.hasOwnProperty(helperName))
{
continue;
}
NanoTemplate.addHelper(helperName, helpers[helperName]);
}
},
removeHelper: function (helperName) {
if (helpers.hasOwnProperty(helperName))
{
delete _helpers[helperName];
}
}
}
}();

View File

@@ -1,236 +0,0 @@
// NanoUpdate handles data from the server and uses it to render templates
NanoUpdate = function ()
{
// _isInitialised is set to true when all of this ui's templates have been processed/rendered
var _isInitialised = false;
// the array of template names to use for this ui
var _templates = null;
// the data for this ui
var _data = null;
// new data which arrives before _isInitialised is true is stored here for processing later
var _earlyUpdateData = null;
// this is an array of callbacks which are called when new data arrives, before it is processed
var _beforeUpdateCallbacks = [];
// this is an array of callbacks which are called when new data arrives, before it is processed
var _afterUpdateCallbacks = [];
// _canClick is used to disable clicks for a short period after each click (to avoid mis-clicks)
var _canClick = true;
// the init function is called when the ui has loaded
// this function sets up the templates and base functionality
var init = function ()
{
$('#uiNoJavaScript').html('Loading...');
// this callback is triggered after new data is processed
// it updates the status/visibility icon and adds click event handling to buttons/links
NanoUpdate.addAfterUpdateCallback(function (updateData) {
var uiStatusClass;
if (updateData['ui']['status'] == 2)
{
uiStatusClass = 'icon24 uiStatusGood';
$('.linkActive').removeClass('inactive');
}
else if (updateData['ui']['status'] == 1)
{
uiStatusClass = 'icon24 uiStatusAverage';
$('.linkActive').addClass('inactive');
}
else
{
uiStatusClass = 'icon24 uiStatusBad'
$('.linkActive').addClass('inactive');
}
$('#uiStatusIcon').attr('class', uiStatusClass);
$('.linkActive').stopTime('linkPending');
$('.linkActive').removeClass('linkPending');
$('.linkActive').off('click');
$('.linkActive').on('click', function (event) {
event.preventDefault();
var href = $(this).data('href');
if (href != null && _canClick)
{
_canClick = false;
$('body').oneTime(300, 'enableClick', function () {
_canClick = true;
});
if (updateData['ui']['status'] == 2)
{
$(this).oneTime(300, 'linkPending', function () {
$(this).addClass('linkPending');
});
}
window.location.href = href;
}
});
});
// We store initialData and templateData in the body tag, it's as good a place as any
var body = $('body');
var templateData = body.data('templateData');
var initialData = body.data('initialData');
if (templateData == null || !initialData == null)
{
alert('Error: Initial data did not load correctly.');
}
// we count the number of templates for this ui so that we know when they've all been rendered
var templateCount = 0;
for (var key in templateData)
{
if (templateData.hasOwnProperty(key))
{
templateCount++;
}
}
if (!templateCount)
{
alert('ERROR: No templates listed!');
}
// load markup for each template and register it
for (var key in templateData)
{
if (templateData.hasOwnProperty(key))
{
$.when($.get(templateData[key]))
.done(function(templateMarkup) {
if (_templates == null)
{
_templates = {};
}
templateMarkup = templateMarkup.replace(/ +\) *\}\}/g, ')}}');
templateMarkup += '<div class="clearBoth"></div>'
try
{
_templates[key] = $.templates(key, templateMarkup);
templateCount--;
if (templateCount <= 0)
{
if (_earlyUpdateData !== null) // Newer data has already arrived, so update
{
renderTemplates(_earlyUpdateData);
}
else
{
renderTemplates(initialData);
}
_isInitialised = true;
$('#uiNoJavaScript').hide();
}
executeCallbacks(_afterUpdateCallbacks, _data);
}
catch(error)
{
alert('ERROR: An error occurred while loading the UI: ' + error.message);
return;
}
});
}
}
};
// Receive update data from the server
var receiveUpdateData = function (jsonString)
{
var updateData;
try
{
// parse the JSON string from the server into a JSON object
updateData = jQuery.parseJSON(jsonString);
}
catch (error)
{
alert(error.Message);
return;
}
if (_isInitialised) // all templates have been registered, so render them
{
executeCallbacks(_beforeUpdateCallbacks, updateData);
renderTemplates(updateData);
executeCallbacks(_afterUpdateCallbacks, updateData);
}
else
{
_earlyUpdateData = updateData; // all templates have not been registered. We set _earlyUpdateData which will be applied after the template is loaded with the initial data
}
};
// This function renders the template with the latest data
// It has to be done recursively as each piece of data is observed individually and needs to be updated individually
var renderTemplates = function (data)
{
if (!_templates.hasOwnProperty("main"))
{
alert('Error: Main template not found.');
}
_data = data;
try
{
$("#mainTemplate").html(_templates["main"].render(_data));
}
catch(error)
{
alert('ERROR: An error occurred while rendering the UI: ' + error.message);
return;
}
};
// Execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing
var executeCallbacks = function (callbacks, updateData)
{
for (var index in callbacks)
{
callbacks[index].call(this, updateData);
}
return updateData;
};
return {
init: function ()
{
init();
},
isInitialised: function ()
{
return _isInitialised;
},
receiveUpdateData: function (jsonString)
{
receiveUpdateData(jsonString);
},
addBeforeUpdateCallback: function (callbackFunction)
{
_beforeUpdateCallbacks.push(callbackFunction);
},
addAfterUpdateCallback: function (callbackFunction)
{
_afterUpdateCallbacks.push(callbackFunction);
}
};
} ();
$(document).ready(function()
{
NanoUpdate.init();
});

View File

@@ -1,20 +1,61 @@
// NanoConfig is the place to store utility functions // NanoUtility is the place to store utility functions
var NanoConfig = function () var NanoUtility = function ()
{ {
return { var _urlParameters = {}; // This is populated with the base url parameters (used by all links), which is probaby just the "src" parameter
return {
init: function () init: function ()
{ {
if (typeof jQuery == 'undefined') { var body = $('body'); // We store data in the body tag, it's as good a place as any
alert('ERROR: jQuery failed to load!');
}
if (typeof $.views == 'undefined') {
alert('ERROR: JSRender failed to load!');
}
}
}
} ();
NanoConfig.init(); _urlParameters = body.data('urlParameters');
},
// generate a Byond href, combines _urlParameters with parameters
generateHref: function (parameters)
{
var queryString = '?';
for (var key in _urlParameters)
{
if (_urlParameters.hasOwnProperty(key))
{
if (queryString !== '?')
{
queryString += ';';
}
queryString += key + '=' + _urlParameters[key];
}
}
for (var key in parameters)
{
if (parameters.hasOwnProperty(key))
{
if (queryString !== '?')
{
queryString += ';';
}
queryString += key + '=' + parameters[key];
}
}
return queryString;
}
}
} ();
if (typeof jQuery == 'undefined') {
alert('ERROR: Javascript library failed to load!');
}
if (typeof doT == 'undefined') {
alert('ERROR: Template engine failed to load!');
}
// All scripts are initialised here, this allows control of init order
$(document).ready(function () {
NanoUtility.init();
NanoStateManager.init();
NanoTemplate.init();
});
if (!Array.prototype.indexOf) if (!Array.prototype.indexOf)
{ {
@@ -97,4 +138,11 @@ String.prototype.toTitleCase = function () {
$.ajaxSetup({ $.ajaxSetup({
cache: false cache: false
}); });
Function.prototype.inheritsFrom = function (parentClassOrObject) {
this.prototype = new parentClassOrObject;
this.prototype.constructor = this;
this.prototype.parent = parentClassOrObject.prototype;
return this;
};

View File

@@ -3,7 +3,7 @@
<b>Machine</b>: <b>Machine</b>:
</div> </div>
<div class="itemContent"> <div class="itemContent">
<span class="average">{{:machine_id}}</span> <span class="average">{{:data.machine_id}}</span>
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -11,25 +11,25 @@
<b>ID</b>: <b>ID</b>:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link(id_card, 'eject', {'choice' : "insert_card"}, null, id_inserted ? 'fixedLeftWidest' : 'fixedLeft')}} {{:helper.link(data.id_card, 'eject', {'choice' : "insert_card"}, null, data.id_inserted ? 'fixedLeftWidest' : 'fixedLeft')}}
</div> </div>
</div> </div>
{{if access_level > 0}} {{if data.access_level > 0}}
<div class='item'> <div class='item'>
<h2>Menu</h2> <h2>Menu</h2>
</div> </div>
{{:~link('Home', 'home', {'choice' : 'view_accounts_list'}, !creating_new_account && !detailed_account_view ? 'disabled' : null, 'fixedLeft')}} {{:helper.link('Home', 'home', {'choice' : 'view_accounts_list'}, !data.creating_new_account && !data.detailed_account_view ? 'disabled' : null, 'fixedLeft')}}
{{:~link('New Account', 'gear', {'choice' : 'create_account'}, creating_new_account ? 'disabled' : null, 'fixedLeft')}} {{:helper.link('New Account', 'gear', {'choice' : 'create_account'}, data.creating_new_account ? 'disabled' : null, 'fixedLeft')}}
{{:~link('Print', 'print', {'choice' : 'print'}, creating_new_account ? 'disabled' : null, 'fixedLeft')}} {{:helper.link('Print', 'print', {'choice' : 'print'}, data.creating_new_account ? 'disabled' : null, 'fixedLeft')}}
{{if creating_new_account}} {{if data.creating_new_account}}
<div class='item'> <div class='item'>
<h2>Create Account</h2> <h2>Create Account</h2>
</div> </div>
<form name='create_account' action='?src={{:src}}' method='get'> <form name='create_account' action='?src={{:data.src}}' method='get'>
<input type='hidden' name='src' value='{{:src}}'> <input type='hidden' name='src' value='{{:data.src}}'>
<input type='hidden' name='choice' value='finalise_create_account'> <input type='hidden' name='choice' value='finalise_create_account'>
<div class='item'> <div class='item'>
<div class='itemLabel'> <div class='itemLabel'>
@@ -52,7 +52,7 @@
</div> </div>
</form> </form>
{{else}} {{else}}
{{if detailed_account_view}} {{if data.detailed_account_view}}
<div class='item'> <div class='item'>
<h2>Account Details</h2> <h2>Account Details</h2>
</div> </div>
@@ -62,7 +62,7 @@
<span class='average'><b>Account Number</b>:</span> <span class='average'><b>Account Number</b>:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
#{{:account_number}} #{{:data.account_number}}
</div> </div>
</div> </div>
@@ -71,7 +71,7 @@
<span class='average'><b>Holder</b>:</span> <span class='average'><b>Holder</b>:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:owner_name}} {{:data.owner_name}}
</div> </div>
</div> </div>
@@ -80,7 +80,7 @@
<span class='average'><b>Balance</b>:</span> <span class='average'><b>Balance</b>:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
${{:~formatNumber(money)}} ${{:helper.formatNumber(money)}}
</div> </div>
</div> </div>
@@ -89,17 +89,17 @@
<span class='average'><b>Status</b>:</span> <span class='average'><b>Status</b>:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
<span class='{{: suspended ? "bad" : "good"}}'> <span class='{{:data.suspended ? "bad" : "good"}}'>
{{: suspended ? "Suspended" : "Active"}} {{:data.suspended ? "Suspended" : "Active"}}
</span> </span>
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
{{:~link(suspended ? "Unsuspend" : "Suspend", 'gear', {'choice' : 'toggle_suspension'})}} {{:helper.link(data.suspended ? "Unsuspend" : "Suspend", 'gear', {'choice' : 'toggle_suspension'})}}
</div> </div>
<div class="statusDisplay" style="overflow: auto;"> <div class="statusDisplay" style="overflow: auto;">
{{if transactions}} {{if data.transactions}}
<table style='width: 100%'> <table style='width: 100%'>
<thead> <thead>
<tr> <tr>
@@ -111,13 +111,13 @@
</th> </th>
</thead> </thead>
<tbody> <tbody>
{{for transactions}} {{for data.transactions}}
<tr> <tr>
<td>{{:date}} {{:time}}</td> <td>{{:value.date}} {{:value.time}}</td>
<td>{{:target_name}}</td> <td>{{:value.target_name}}</td>
<td>{{:purpose}}</td> <td>{{:value.purpose}}</td>
<td>{{:amount}}</td> <td>{{:value.amount}}</td>
<td>{{:source_terminal}}</td> <td>{{:value.source_terminal}}</td>
</tr> </tr>
{{/for}} {{/for}}
</tbody> </tbody>
@@ -126,7 +126,6 @@
<span class='alert'>This account has no financial transactions on record for today.</span> <span class='alert'>This account has no financial transactions on record for today.</span>
{{/if}} {{/if}}
</div> </div>
<div class='item'> <div class='item'>
<h2>CentCom Administrator</h2> <h2>CentCom Administrator</h2>
</div> </div>
@@ -134,15 +133,15 @@
<div class='fixedLeft'> <div class='fixedLeft'>
Payroll: Payroll:
</div> </div>
{{:~link('Revoke', 'transferthick-e-w', {'choice' : 'revoke_payroll'}, account_number == station_account_number ? 'disabled' : null, 'linkDanger')}} {{:helper.link('Revoke', 'transferthick-e-w', {'choice' : 'revoke_payroll'}, data.account_number == data.station_account_number ? 'disabled' : null, 'linkDanger')}}
</div> </div>
{{if access_level >= 2}} {{if data.access_level >= 2}}
<div class='item'> <div class='item'>
<div class='fixedLeft'> <div class='fixedLeft'>
Silent Fund Adjustment: Silent Fund Adjustment:
</div> </div>
{{:~link('Add', 'plus', {'choice' : 'add_funds'})}} {{:helper.link('Add', 'plus', {'choice' : 'add_funds'})}}
{{:~link('Remove', 'minus', {'choice' : 'remove_funds'})}} {{:helper.link('Remove', 'minus', {'choice' : 'remove_funds'})}}
</div> </div>
{{/if}} {{/if}}
{{else}} {{else}}
@@ -150,13 +149,13 @@
<div class='item'> <div class='item'>
<h2>NanoTrasen Accounts</h2> <h2>NanoTrasen Accounts</h2>
</div> </div>
{{if accounts}} {{if data.accounts}}
<table style="width: 100%"> <table style="width: 100%">
{{for accounts}} {{for data.accounts}}
<tr class='{{: suspended ? "bad" : ""}}'> <tr class='{{:value.suspended ? "bad" : ""}}'>
<td><b>{{:~link('#' + account_number, '', {'choice' : 'view_account_detail', 'account_index' : account_index})}}</b></td> <td><b>{{:helper.link('#' + value.account_number, '', {'choice' : 'view_account_detail', 'account_index' : value.account_index})}}</b></td>
<td>{{:owner_name}}</td> <td>{{:value.owner_name}}</td>
<td>{{:suspended}}</td> <td>{{:value.suspended}}</td>
</tr> </tr>
{{/for}} {{/for}}
</table> </table>

View File

@@ -4,9 +4,9 @@
External Pressure: External Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(external_pressure, 0, 200, external_pressure < 80 || external_pressure > 120 ? 'bad' : external_pressure < 95 || external_pressure > 110 ? 'average' : 'good')}} {{:helper.displayBar(data.external_pressure, 0, 200, (data.external_pressure < 80 || data.external_pressure > 120) ? 'bad' : (data.external_pressure < 95 || data.external_pressure > 110) ? 'average' : 'good')}}
<div class="statusValue"> <div class="statusValue">
{{:external_pressure}} kPa {{:data.external_pressure}} kPa
</div> </div>
</div> </div>
</div> </div>
@@ -15,9 +15,9 @@
Chamber Pressure: Chamber Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(chamber_pressure, 0, 200, chamber_pressure < 80 || chamber_pressure > 120 ? 'bad' : chamber_pressure < 95 || chamber_pressure > 110 ? 'average' : 'good')}} {{:helper.displayBar(data.chamber_pressure, 0, 200, (data.chamber_pressure < 80 || data.chamber_pressure > 120) ? 'bad' : (data.chamber_pressure < 95 || data.chamber_pressure > 110) ? 'average' : 'good')}}
<div class="statusValue"> <div class="statusValue">
{{:chamber_pressure}} kPa {{:data.chamber_pressure}} kPa
</div> </div>
</div> </div>
</div> </div>
@@ -26,9 +26,9 @@
Internal Pressure: Internal Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(internal_pressure, 0, 200, internal_pressure < 80 || internal_pressure > 120 ? 'bad' : internal_pressure < 95 || internal_pressure > 110 ? 'average' : 'good')}} {{:helper.displayBar(data.internal_pressure, 0, 200, (data.internal_pressure < 80 || data.internal_pressure > 120) ? 'bad' : (data.internal_pressure < 95 || data.internal_pressure > 110) ? 'average' : 'good')}}
<div class="statusValue"> <div class="statusValue">
{{:internal_pressure}} kPa {{:data.internal_pressure}} kPa
</div> </div>
</div> </div>
</div> </div>
@@ -36,25 +36,25 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item" style="width: auto; float: left"> <div class="item" style="width: auto; float: left">
<div class="itemContent"> <div class="itemContent">
{{:~link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, processing ? 'disabled' : null)}} {{:helper.link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, data.processing ? 'disabled' : null)}}
{{:~link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, processing ? 'disabled' : null)}} {{:helper.link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, data.processing ? 'disabled' : null)}}
</div> </div>
<div class="itemContent" style="padding-top: 2px"> <div class="itemContent" style="padding-top: 2px">
{{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, processing ? 'yellowBackground' : null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, data.processing ? 'yellowBackground' : null)}}
{{:~link('Force interior door', 'alert', {'command' : 'force_int'}, null, processing ? 'yellowBackground' : null)}} {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, null, data.processing ? 'yellowBackground' : null)}}
</div> </div>
</div> </div>
<div style="padding-left: 10px; width: 80px; float: left"> <div style="padding-left: 10px; width: 80px; float: left">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-bottom: 2px; width: auto"> <div class="itemContent" style="padding-bottom: 2px; width: auto">
{{:~link('Purge', 'refresh', {'command' : 'purge'}, processing ? 'disabled' : null, purge ? 'linkOn' : null)}} {{:helper.link('Purge', 'refresh', {'command' : 'purge'}, data.processing ? 'disabled' : null, data.purge ? 'linkOn' : null)}}
</div> </div>
<div class="itemContent" style="width: auto"> <div class="itemContent" style="width: auto">
{{:~link('Secure', secure ? 'locked' : 'unlocked', {'command' : 'secure'}, processing ? 'disabled' : null, secure ? 'linkOn' : null)}} {{:helper.link('Secure', data.secure ? 'locked' : 'unlocked', {'command' : 'secure'}, data.processing ? 'disabled' : null, data.secure ? 'linkOn' : null)}}
</div> </div>
</div> </div>
</div> </div>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
{{:~link('Abort', 'cancel', {'command' : 'abort'}, processing ? null : 'disabled', processing ? 'redBackground' : null)}} {{:helper.link('Abort', 'cancel', {'command' : 'abort'}, data.processing ? null : 'disabled', data.processing ? 'redBackground' : null)}}
</div> </div>
</div> </div>

View File

@@ -1,17 +1,17 @@
<div class='notice'> <div class='notice'>
{{if siliconUser}} {{if data.siliconUser}}
<div class="itemContentSmall"> <div class="itemContentSmall">
Interface Lock: Interface Lock:
</div> </div>
<div class="itemContentFull"> <div class="itemContentFull">
{{:~link('Engaged', 'locked', {'toggleaccess' : 1}, locked ? 'selected' : null)}}{{:~link('Disengaged', 'unlocked', {'toggleaccess' : 1}, malfStatus >= 2 ? 'linkOff' : (locked ? null : 'selected'))}} {{:helper.link('Engaged', 'locked', {'toggleaccess' : 1}, data.locked ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlocked', {'toggleaccess' : 1}, data.malfStatus >= 2 ? 'linkOff' : (data.locked ? null : 'selected'))}}
</div> </div>
<div class="clearBoth"></div> <div class="clearBoth"></div>
{{else}} {{else}}
{{if locked}} {{if data.locked}}
Swipe an ID card to unlock this interface. Swipe an ID card to unlock this interface
{{else}} {{else}}
Swipe an ID card to lock this interface. Swipe an ID card to lock this interface
{{/if}} {{/if}}
{{/if}} {{/if}}
</div> </div>
@@ -25,14 +25,14 @@
Main Breaker: Main Breaker:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if locked && !siliconUser}} {{if data.locked && !data.siliconUser}}
{{if isOperating}} {{if data.isOperating}}
<span class='good'>On</span> <span class='good'>On</span>
{{else}} {{else}}
<span class='bad'>Off</span> <span class='bad'>Off</span>
{{/if}} {{/if}}
{{else}} {{else}}
{{:~link('On', 'power', {'breaker' : 1}, isOperating ? 'selected' : null)}}{{:~link('Off', 'close', {'breaker' : 1}, isOperating ? null : 'selected')}} {{:helper.link('On', 'power', {'breaker' : 1}, data.isOperating ? 'selected' : null)}}{{:helper.link('Off', 'close', {'breaker' : 1}, data.isOperating ? null : 'selected')}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@@ -42,9 +42,9 @@
External Power: External Power:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if externalPower == 2}} {{if data.externalPower == 2}}
<span class='good'>Good</span> <span class='good'>Good</span>
{{else externalPower == 1}} {{else data.externalPower == 1}}
<span class='average'>Low</span> <span class='average'>Low</span>
{{else}} {{else}}
<span class='bad'>None</span> <span class='bad'>None</span>
@@ -56,38 +56,38 @@
<div class="itemLabel"> <div class="itemLabel">
Power Cell: Power Cell:
</div> </div>
{{if powerCellStatus == null}} {{if data.powerCellStatus == null}}
<div class="itemContent bad"> <div class="itemContent bad">
Power cell removed. Power cell removed.
</div> </div>
{{else}} {{else}}
{{:~displayBar(powerCellStatus, 0, 100, powerCellStatus >= 50 ? 'good' : powerCellStatus >= 25 ? 'average' : 'bad')}} {{:helper.displayBar(data.powerCellStatus, 0, 100, (data.powerCellStatus >= 50) ? 'good' : (data.powerCellStatus >= 25) ? 'average' : 'bad')}}
<div class="itemContent" style="width: 60px"> <div class="itemContent" style="width: 60px">
{{:~round(powerCellStatus*10)/10}}% {{:helper.round(data.powerCellStatus*10)/10}}%
</div> </div>
{{/if}} {{/if}}
</div> </div>
{{if powerCellStatus != null}} {{if data.powerCellStatus != null}}
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
Charge Mode: Charge Mode:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if locked && !siliconUser}} {{if data.locked && !data.siliconUser}}
{{if chargeMode}} {{if data.chargeMode}}
<span class='good'>Auto</span> <span class='good'>Auto</span>
{{else}} {{else}}
<span class='bad'>Off</span> <span class='bad'>Off</span>
{{/if}} {{/if}}
{{else}} {{else}}
{{:~link('Auto', 'refresh', {'cmode' : 1}, chargeMode ? 'selected' : null)}}{{:~link('Off', 'close', {'cmode' : 1}, chargeMode ? null : 'selected')}} {{:helper.link('Auto', 'refresh', {'cmode' : 1}, data.chargeMode ? 'selected' : null)}}{{:helper.link('Off', 'close', {'cmode' : 1}, data.chargeMode ? null : 'selected')}}
{{/if}} {{/if}}
&nbsp; &nbsp;
{{if chargingStatus > 1}} {{if data.chargingStatus > 1}}
[<span class='good'>Fully Charged</span>] [<span class='good'>Fully Charged</span>]
{{else chargingStatus == 1}} {{else data.chargingStatus == 1}}
[<span class='average'>Charging</span>] [<span class='average'>Charging</span>]
{{else}} {{else}}
[<span class='bad'>Not Charging</span>] [<span class='bad'>Not Charging</span>]
@@ -99,32 +99,34 @@
<h3>Power Channels</h3> <h3>Power Channels</h3>
{{for powerChannels}} {{for data.powerChannels}}
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
{{:title}}: {{:value.title}}:
</div> </div>
<div class="itemContent" style="width: 70px; text-align: right"> <div class="itemContent" style="width: 70px; text-align: right">
{{:powerLoad}} W {{:value.powerLoad}} W
</div> </div>
<div class="itemContent" style="width: 105px"> <div class="itemContent" style="width: 105px">
&nbsp;&nbsp; &nbsp;&nbsp;
{{if status <= 1}} {{if value.status <= 1}}
<span class='bad'>Off</span> <span class='bad'>Off</span>
{{else status >= 2}} {{else value.status >= 2}}
<span class='good'>On</span> <span class='good'>On</span>
{{/if}} {{/if}}
{{if status == 1 || status == 3}} {{if data.locked}}
[Auto] {{if value.status == 1 || value.status == 3}}
{{else}} &nbsp;&nbsp;Auto
[Manual] {{else}}
{{/if}} &nbsp;&nbsp;Manual
{{/if}}
{{/if}}
</div> </div>
{{if !~root.locked || ~root.siliconUser}} {{if !data.locked || data.siliconUser}}
<div class="itemContentFull"> <div class="itemContentFull">
{{:~link('Auto', 'refresh', topicParams.auto, (status == 1 || status == 3) ? 'selected' : null)}} {{:helper.link('Auto', 'refresh', value.topicParams.auto, (value.status == 1 || value.status == 3) ? 'selected' : null)}}
{{:~link('On', 'power', topicParams.on, (status == 2) ? 'selected' : null)}} {{:helper.link('On', 'power', value.topicParams.on, (value.status == 2) ? 'selected' : null)}}
{{:~link('Off', 'close', topicParams.off, (status == 0) ? 'selected' : null)}} {{:helper.link('Off', 'close', value.topicParams.off, (value.status == 0) ? 'selected' : null)}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
@@ -135,7 +137,7 @@
Total Load: Total Load:
</div> </div>
<div class="itemContent" style="width: 70px; text-align: right"> <div class="itemContent" style="width: 70px; text-align: right">
{{:totalLoad}} W {{:data.totalLoad}} W
</div> </div>
</div> </div>
@@ -146,26 +148,26 @@
Cover Lock: Cover Lock:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if locked && !siliconUser}} {{if data.locked && !data.siliconUser}}
{{if coverLocked}} {{if data.coverLocked}}
<span class='good'>Engaged</span> <span class='good'>Engaged</span>
{{else}} {{else}}
<span class='bad'>Disengaged</span> <span class='bad'>Disengaged</span>
{{/if}} {{/if}}
{{else}} {{else}}
{{:~link('Engaged', 'locked', {'lock' : 1}, coverLocked ? 'selected' : null)}}{{:~link('Disengaged', 'unlocked', {'lock' : 1}, coverLocked ? null : 'selected')}} {{:helper.link('Engaged', 'locked', {'lock' : 1}, data.coverLocked ? 'selected' : null)}}{{:helper.link('Disengaged', 'unlocked', {'lock' : 1}, data.coverLocked ? null : 'selected')}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
{{if siliconUser}} {{if data.siliconUser}}
<h3>System Overrides</h3> <h3>System Overrides</h3>
<div class="item"> <div class="item">
{{:~link('Overload Lighting Circuit', 'lightbulb', {'overload' : 1})}} {{:helper.link('Overload Lighting Circuit', 'lightbulb', {'overload' : 1})}}
{{if malfStatus == 1}} {{if data.malfStatus == 1}}
{{:~link('Override Programming', 'script', {'malfhack' : 1})}} {{:helper.link('Override Programming', 'script', {'malfhack' : 1})}}
{{else malfStatus > 1}} {{else data.malfStatus > 1}}
<div class='notice'>APC Hacked</div> <div class='notice'>APC Hacked</div>
{{/if}} {{/if}}
</div> </div>

View File

@@ -4,7 +4,7 @@
Tank Label: Tank Label:
</div> </div>
<div class="itemContent"> <div class="itemContent">
<div style="float: left; width: 180px;">{{:name}}</div> {{:~link('Relabel', 'pencil', {'relabel' : 1}, (canLabel) ? null : 'disabled')}} <div style="float: left; width: 180px;">{{:data.name}}</div> {{:helper.link('Relabel', 'pencil', {'relabel' : 1}, (data.canLabel) ? null : 'disabled')}}
</div> </div>
</div> </div>
@@ -13,7 +13,7 @@
Tank Pressure: Tank Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:tankPressure}} kPa {{:data.tankPressure}} kPa
</div> </div>
</div> </div>
@@ -22,18 +22,18 @@
Port Status: Port Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:portConnected ? '<span class="good">Connected</span>' : '<span class="average">Disconnected</span>'}} {{:data.portConnected ? '<span class="good">Connected</span>' : '<span class="average">Disconnected</span>'}}
</div> </div>
</div> </div>
<h3>Holding Tank Status</h3> <h3>Holding Tank Status</h3>
{{if hasHoldingTank}} {{if data.hasHoldingTank}}
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
Tank Label: Tank Label:
</div> </div>
<div class="itemContent"> <div class="itemContent">
<div style="float: left; width: 180px;">{{:holdingTank.name}}</div> {{:~link('Eject', 'eject', {'remove_tank' : 1})}} <div style="float: left; width: 180px;">{{:data.holdingTank.name}}</div> {{:helper.link('Eject', 'eject', {'remove_tank' : 1})}}
</div> </div>
</div> </div>
@@ -42,7 +42,7 @@
Tank Pressure: Tank Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:holdingTank.tankPressure}} kPa {{:data.holdingTank.tankPressure}} kPa
</div> </div>
</div> </div>
{{else}} {{else}}
@@ -57,17 +57,17 @@
Release Pressure: Release Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(releasePressure, minReleasePressure, maxReleasePressure)}} {{:helper.displayBar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure)}}
<div style="clear: both; padding-top: 4px;"> <div style="clear: both; padding-top: 4px;">
{{:~link('-', null, {'pressure_adj' : -1000}, (releasePressure > minReleasePressure) ? null : 'disabled')}} {{:helper.link('-', null, {'pressure_adj' : -1000}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}}
{{:~link('-', null, {'pressure_adj' : -100}, (releasePressure > minReleasePressure) ? null : 'disabled')}} {{:helper.link('-', null, {'pressure_adj' : -100}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}}
{{:~link('-', null, {'pressure_adj' : -10}, (releasePressure > minReleasePressure) ? null : 'disabled')}} {{:helper.link('-', null, {'pressure_adj' : -10}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}}
{{:~link('-', null, {'pressure_adj' : -1}, (releasePressure > minReleasePressure) ? null : 'disabled')}} {{:helper.link('-', null, {'pressure_adj' : -1}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}}
<div style="float: left; width: 80px; text-align: center;">&nbsp;{{:releasePressure}} kPa&nbsp;</div> <div style="float: left; width: 80px; text-align: center;">&nbsp;{{:data.releasePressure}} kPa&nbsp;</div>
{{:~link('+', null, {'pressure_adj' : 1}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} {{:helper.link('+', null, {'pressure_adj' : 1}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
{{:~link('+', null, {'pressure_adj' : 10}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} {{:helper.link('+', null, {'pressure_adj' : 10}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
{{:~link('+', null, {'pressure_adj' : 100}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} {{:helper.link('+', null, {'pressure_adj' : 100}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
{{:~link('+', null, {'pressure_adj' : 1000}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} {{:helper.link('+', null, {'pressure_adj' : 1000}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
</div> </div>
</div> </div>
</div> </div>
@@ -77,7 +77,7 @@
Release Valve: Release Valve:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('Open', 'unlocked', {'toggle' : 1}, valveOpen ? 'selected' : null)}}{{:~link('Close', 'locked', {'toggle' : 1}, valveOpen ? null : 'selected')}} {{:helper.link('Open', 'unlocked', {'toggle' : 1}, data.valveOpen ? 'selected' : null)}}{{:helper.link('Close', 'locked', {'toggle' : 1}, data.valveOpen ? null : 'selected')}}
</div> </div>
</div> </div>

View File

@@ -7,7 +7,7 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
Energy: Energy:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(energy, 0, maxEnergy, 'good', energy + ' Units')}} {{:helper.displayBar(data.energy, 0, data.maxEnergy, 'good', data.energy + ' Units')}}
</div> </div>
</div> </div>
@@ -16,17 +16,17 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
Dispense: Dispense:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('5', 'gear', {'amount' : 5}, (amount == 5) ? 'selected' : null)}} {{:helper.link('5', 'gear', {'amount' : 5}, (data.amount == 5) ? 'selected' : null)}}
{{:~link('10', 'gear', {'amount' : 10}, (amount == 10) ? 'selected' : null)}} {{:helper.link('10', 'gear', {'amount' : 10}, (data.amount == 10) ? 'selected' : null)}}
{{:~link('20', 'gear', {'amount' : 20}, (amount == 20) ? 'selected' : null)}} {{:helper.link('20', 'gear', {'amount' : 20}, (data.amount == 20) ? 'selected' : null)}}
{{:~link('30', 'gear', {'amount' : 30}, (amount == 30) ? 'selected' : null)}} {{:helper.link('30', 'gear', {'amount' : 30}, (data.amount == 30) ? 'selected' : null)}}
{{:~link('50', 'gear', {'amount' : 50}, (amount == 50) ? 'selected' : null)}} {{:helper.link('50', 'gear', {'amount' : 50}, (data.amount == 50) ? 'selected' : null)}}
</div> </div>
</div> </div>
<div class="item">&nbsp;</div> <div class="item">&nbsp;</div>
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 100%;"> <div class="itemLabel" style="width: 100%;">
{{if glass}} {{if data.glass}}
Drink Dispenser Drink Dispenser
{{else}} {{else}}
Chemical Dispenser Chemical Dispenser
@@ -35,8 +35,8 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
</div> </div>
<div class="item"> <div class="item">
<div class="itemContentWide" style="width: 100%;"> <div class="itemContentWide" style="width: 100%;">
{{for chemicals}} {{for data.chemicals}}
{{:~link(title, 'circle-arrow-s', commands, null, ~root.glass ? 'fixedLeftWide' : 'fixedLeft')}} {{:helper.link(value.title, 'circle-arrow-s', value.commands, null, data.glass ? 'fixedLeftWide' : 'fixedLeft')}}
{{/for}} {{/for}}
</div> </div>
@@ -44,39 +44,43 @@ Used In File(s): \code\modules\reagents\Chemistry-Machinery.dm
<div class="item">&nbsp;</div> <div class="item">&nbsp;</div>
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
{{if glass}} {{if data.glass}}
Glass Glass
{{else}} {{else}}
Beaker Beaker
{{/if}} Contents {{/if}} Contents
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link(glass ? 'Eject Glass' : 'Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled', 'floatRight')}} {{:helper.link(data.glass ? 'Eject Glass' : 'Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled', 'floatRight')}}
</div> </div>
</div> </div>
<div class="statusDisplay" style="height: 225px; overflow: auto;"> <div class="statusDisplay" style="min-height: 180px;">
<div class="item"> <div class="item">
<div class="itemContent" style="width: 100%;"> <div class="itemContent" style="width: 100%;">
{{if isBeakerLoaded}} {{if data.isBeakerLoaded}}
<b>Volume:&nbsp;{{:beakerCurrentVolume}}&nbsp;/&nbsp;{{:beakerMaxVolume}}</b><br> <b>Volume:&nbsp;{{:data.beakerCurrentVolume}}&nbsp;/&nbsp;{{:data.beakerMaxVolume}}</b><br>
{{for beakerContents}} {{for data.beakerContents}}
<span class="highlight">{{:volume}} units of {{:name}}</span><br> <span class="highlight">{{:value.volume}} units of {{:value.name}}</span><br>
{{else}} {{empty}}
<span class="bad"> <span class="bad">
{{if glass}} {{if data.glass}}
Glass Glass
{{else}} {{else}}
Beaker Beaker
{{/if}} {{/if}}
is empty</span> is empty
</span>
{{/for}} {{/for}}
{{else}} {{else}}
<span class="average"><i>No <span class="average"><i>
{{if glass}} No
Glass {{if data.glass}}
{{else}} Glass
Beaker {{else}}
{{/if}} loaded</i></span> Beaker
{{/if}}
loaded
</i></span>
{{/if}} {{/if}}
</div> </div>
</div> </div>

View File

@@ -2,13 +2,13 @@
Crew Monitoring Computer interface Crew Monitoring Computer interface
--> -->
<table width="100%"><tbody> <table width="100%"><tbody>
{{for crewmembers}} {{for data.crewmembers}}
{{if sensor_type == 1}} {{if value.sensor_type == 1}}
<tr><td>{{:name}}</td><td>{{:dead ? "<span class='bad'>Deceased</span>" : "<span class='good'>Living</span>"}}</td><td><span class="neutral">Not Available</span></td></tr> <tr><td>{{:value.name}}</td><td>{{:value.dead ? "<span class='bad'>Deceased</span>" : "<span class='good'>Living</span>"}}</td><td><span class="neutral">Not Available</span></td></tr>
{{else sensor_type == 2}} {{else value.sensor_type == 2}}
<tr><td>{{:name}}</td><td>{{:dead ? "<span class='bad'>Deceased</span>" : "<span class='good'>Living</span>"}} (<span class="oxyloss">{{:oxy}}</span>/<span class="toxin">{{:tox}}</span>/<span class="burn">{{:fire}}</span>/<span class="brute">{{:brute}}</span>)</td><td><span class="neutral">Not Available</td></td></tr> <tr><td>{{:value.name}}</td><td>{{:value.dead ? "<span class='bad'>Deceased</span>" : "<span class='good'>Living</span>"}} (<span class="oxyloss">{{:value.oxy}}</span>/<span class="toxin">{{:value.tox}}</span>/<span class="burn">{{:value.fire}}</span>/<span class="brute">{{:value.brute}}</span>)</td><td><span class="neutral">Not Available</td></td></tr>
{{else sensor_type == 3}} {{else value.sensor_type == 3}}
<tr><td>{{:name}}</td><td>{{:dead ? "<span class='bad'>Deceased</span>" : "<span class='good'>Living</span>"}} (<span class="oxyloss">{{:oxy}}</span>/<span class="toxin">{{:tox}}</span>/<span class="burn">{{:fire}}</span>/<span class="brute">{{:brute}}</span>)</td><td>{{:area}}({{:x}}, {{:y}})</td></tr> <tr><td>{{:value.name}}</td><td>{{:value.dead ? "<span class='bad'>Deceased</span>" : "<span class='good'>Living</span>"}} (<span class="oxyloss">{{:value.oxy}}</span>/<span class="toxin">{{:value.tox}}</span>/<span class="burn">{{:value.fire}}</span>/<span class="brute">{{:value.brute}}</span>)</td><td>{{:value.area}}({{:value.x}}, {{:value.y}})</td></tr>
{{/if}} {{/if}}
{{/for}} {{/for}}
</tbody></table> </tbody></table>

View File

@@ -5,60 +5,62 @@ Used In File(s): \code\game\machinery\cryo.dm
<h3>Cryo Cell Status</h3> <h3>Cryo Cell Status</h3>
<div class="statusDisplay"> <div class="statusDisplay">
{{if !hasOccupant}} {{if !data.hasOccupant}}
<div class="line">Cell Unoccupied</div> <div class="line">Cell Unoccupied</div>
{{else}} {{else}}
<div class="line"> <div class="line">
{{:occupant.name}}&nbsp;=>&nbsp; {{:data.occupant.name}}&nbsp;=>&nbsp;
{{if occupant.stat == 0}} {{if data.occupant.stat == 0}}
<span class="good">Conscious</span> <span class="good">Conscious</span>
{{else occupant.stat == 1}} {{else data.occupant.stat == 1}}
<span class="average">Unconscious</span> <span class="average">Unconscious</span>
{{else}} {{else}}
<span class="bad">DEAD</span> <span class="bad">DEAD</span>
{{/if}} {{/if}}
</div> </div>
{{if occupant.stat < 2}} {{if data.occupant.stat < 2}}
<div class="line"> <div class="line">
<div class="statusLabel">Health:</div> <div class="statusLabel">Health:</div>
{{if occupant.health >= 0}} {{if data.occupant.health >= 0}}
{{:~displayBar(occupant.health, 0, occupant.maxHealth, 'good')}} {{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, 'good')}}
{{else}} {{else}}
{{:~displayBar(occupant.health, 0, occupant.minHealth, 'average alignRight')}} {{:helper.displayBar(data.occupant.health, 0, data.occupant.minHealth, 'average alignRight')}}
{{/if}} {{/if}}
<div class="statusValue">{{:~round(occupant.health)}}</div> <div class="statusValue">{{:helper.round(data.occupant.health)}}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="statusLabel">=&gt; Brute Damage:</div> <div class="statusLabel">=&gt; Brute Damage:</div>
{{:~displayBar(occupant.bruteLoss, 0, occupant.maxHealth, 'bad')}} {{:helper.displayBar(data.occupant.bruteLoss, 0, data.occupant.maxHealth, 'bad')}}
<div class="statusValue">{{:~round(occupant.bruteLoss)}}</div> <div class="statusValue">{{:helper.round(data.occupant.bruteLoss)}}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="statusLabel">=&gt; Resp. Damage:</div> <div class="statusLabel">=&gt; Resp. Damage:</div>
{{:~displayBar(occupant.oxyLoss, 0, occupant.maxHealth, 'bad')}} {{:helper.displayBar(data.occupant.oxyLoss, 0, data.occupant.maxHealth, 'bad')}}
<div class="statusValue">{{:~round(occupant.oxyLoss)}}</div> <div class="statusValue">{{:helper.round(data.occupant.oxyLoss)}}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="statusLabel">=&gt; Toxin Damage:</div> <div class="statusLabel">=&gt; Toxin Damage:</div>
{{:~displayBar(occupant.toxLoss, 0, occupant.maxHealth, 'bad')}} {{:helper.displayBar(data.occupant.toxLoss, 0, data.occupant.maxHealth, 'bad')}}
<div class="statusValue">{{:~round(occupant.toxLoss)}}</div> <div class="statusValue">{{:helper.round(data.occupant.toxLoss)}}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="statusLabel">=&gt; Burn Severity:</div> <div class="statusLabel">=&gt; Burn Severity:</div>
{{:~displayBar(occupant.fireLoss, 0, occupant.maxHealth, 'bad')}} {{:helper.displayBar(data.occupant.fireLoss, 0, data.occupant.maxHealth, 'bad')}}
<div class="statusValue">{{:~round(occupant.fireLoss)}}</div> <div class="statusValue">{{:helper.round(data.occupant.fireLoss)}}</div>
</div> </div>
{{/if}} {{/if}}
{{/if}} {{/if}}
<hr> <hr>
<div class="line"><div class="statusLabel">Cell Temperature:</div><div class="statusValue"> <div class="line">
{{:~string('<span class="{0}">{1} K</span>', cellTemperatureStatus, cellTemperature)}} <div class="statusLabel">Cell Temperature:</div><div class="statusValue">
</div></div> <span class="{{:data.cellTemperatureStatus}}">{{:data.cellTemperature}} K</span>
</div>
</div>
</div> </div>
<h3>Cryo Cell Operation</h3> <h3>Cryo Cell Operation</h3>
@@ -67,10 +69,10 @@ Used In File(s): \code\game\machinery\cryo.dm
Cryo Cell Status: Cryo Cell Status:
</div> </div>
<div class="itemContent" style="width: 40%;"> <div class="itemContent" style="width: 40%;">
{{:~link('On', 'power', {'switchOn' : 1}, isOperating ? 'selected' : null)}}{{:~link('Off', 'close', {'switchOff' : 1}, isOperating ? null : 'selected')}} {{:helper.link('On', 'power', {'switchOn' : 1}, data.isOperating ? 'selected' : null)}}{{:helper.link('Off', 'close', {'switchOff' : 1}, data.isOperating ? null : 'selected')}}
</div> </div>
<div class="itemContent" style="width: 26%;"> <div class="itemContent" style="width: 26%;">
{{:~link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, hasOccupant ? null : 'disabled')}} {{:helper.link('Eject Occupant', 'arrowreturnthick-1-s', {'ejectOccupant' : 1}, data.hasOccupant ? null : 'disabled')}}
</div> </div>
</div> </div>
<div class="item">&nbsp;</div> <div class="item">&nbsp;</div>
@@ -79,10 +81,10 @@ Used In File(s): \code\game\machinery\cryo.dm
Beaker: Beaker:
</div> </div>
<div class="itemContent" style="width: 40%;"> <div class="itemContent" style="width: 40%;">
{{if isBeakerLoaded}} {{if data.isBeakerLoaded}}
{{:beakerLabel ? beakerLabel : '<span class="average">No label</span>'}}<br> {{:data.beakerLabel ? data.beakerLabel : '<span class="average">No label</span>'}}<br>
{{if beakerVolume}} {{if data.beakerVolume}}
<span class="highlight">{{:beakerVolume}} units remaining</span><br> <span class="highlight">{{:data.beakerVolume}} units remaining</span><br>
{{else}} {{else}}
<span class="bad">Beaker is empty</span> <span class="bad">Beaker is empty</span>
{{/if}} {{/if}}
@@ -91,6 +93,6 @@ Used In File(s): \code\game\machinery\cryo.dm
{{/if}} {{/if}}
</div> </div>
<div class="itemContent" style="width: 26%;"> <div class="itemContent" style="width: 26%;">
{{:~link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled')}} {{:helper.link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}}
</div> </div>
</div> </div>

View File

@@ -1,13 +1,13 @@
<div class="item"> <div class="item">
<div class="itemContent"> <div class="itemContent">
{{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} {{:helper.link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}}
</div> </div>
</div> </div>
{{if busy}} {{if data.busy}}
<h5 class='average'>The Splicer is currently busy.</h5> <h5 class='average'>The Splicer is currently busy.</h5>
<div class='notice'> <div class='notice'>
<center><span class='bad'>{{:busy}}</span></center> <center><span class='bad'>{{:data.busy}}</span></center>
</div> </div>
<p> <p>
Thank you for your patience! Thank you for your patience!
@@ -17,7 +17,7 @@
<h2>Virus Dish</h2> <h2>Virus Dish</h2>
</div> </div>
<div class="item"> <div class="item">
{{:~link('Eject Dish', 'eject', { 'eject' : 1 }, dish_inserted ? null : 'disabled')}} {{:helper.link('Eject Dish', 'eject', { 'eject' : 1 }, data.dish_inserted ? null : 'disabled')}}
</div> </div>
<div class="item"> <div class="item">
@@ -25,26 +25,26 @@
<b>Growth Density:</b> <b>Growth Density:</b>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(growth, 0, 100, growth >= 50 ? 'good' : growth >= 25 ? 'average' : 'bad', growth + '%' )}} {{:helper.displayBar(data.growth, 0, 100, (data.growth >= 50) ? 'good' : data.growth >= 25 ? 'average' : 'bad', data.growth + '%' )}}
</div> </div>
</div> </div>
<div class="statusDisplay" style="height: 145px; overflow: auto;"> <div class="statusDisplay" style="height: 145px; overflow: auto;">
<div class='item'> <div class='item'>
{{if !info}} {{if !data.info}}
<div class='itemLabel'> <div class='itemLabel'>
<span class='good'>Symptoms:</span> <span class='good'>Symptoms:</span>
</div> </div>
{{/if}} {{/if}}
<div class='itemContent' style="width: 100%;"> <div class='itemContent' style="width: 100%;">
{{if info}} {{if data.info}}
<span class='average'>{{:info}}</span> <span class='average'>{{:data.info}}</span>
{{else}} {{else}}
{{for effects}} {{for data.effects}}
<div> <div>
<div class="highlight"> <div class="highlight">
({{:stage}}) {{:name}} ({{:data.stage}}) {{:data.name}}
{{if badness > 1}} {{if data.badness > 1}}
<span class='bad'><b>Dangerous</b></span> <span class='bad'><b>Dangerous</b></span>
{{/if}} {{/if}}
</div> </div>
@@ -53,18 +53,18 @@
{{/if}} {{/if}}
</div> </div>
</div> </div>
{{if affected_species && !info}} {{if data.affected_species && !data.info}}
<div class='item'> <div class='item'>
<div class='itemLabelWide'> <div class='itemLabelWide'>
<span class='good'>Affected Species:</span> <span class='good'>Affected Species:</span>
</div> </div>
<div class='itemContent'> <div class='itemContent'>
<span class='highlight'>{{:affected_species}}</span> <span class='highlight'>{{:data.affected_species}}</span>
</div> </div>
</div> </div>
{{/if}} {{/if}}
</div> </div>
{{if effects}} {{if data.effects}}
<div class='item'> <div class='item'>
<span class="bad"><i>CAUTION: Reverse engineering will destroy the viral sample.</i></span> <span class="bad"><i>CAUTION: Reverse engineering will destroy the viral sample.</i></span>
</div> </div>
@@ -73,12 +73,12 @@
Reverse Engineering: Reverse Engineering:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{for effects}} {{for data.effects}}
{{:~link(stage, 'transferthick-e-w', { 'grab' : reference })}} {{:helper.link(data.stage, 'transferthick-e-w', { 'grab' : data.reference })}}
{{/for}} {{/for}}
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:~link('Species', 'transferthick-e-w', { 'affected_species' : 1 })}} {{:helper.link('Species', 'transferthick-e-w', { 'affected_species' : 1 })}}
</div> </div>
</div> </div>
{{/if}} {{/if}}
@@ -92,17 +92,17 @@
<b>Memory Buffer:</b> <b>Memory Buffer:</b>
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{if buffer}} {{if data.buffer}}
{{:buffer.name}} ({{:buffer.stage}}) {{:data.buffer.name}} ({{:data.buffer.stage}})
{{else}} {{else}}
{{if species_buffer}} {{if data.species_buffer}}
{{:species_buffer}} {{:data.species_buffer}}
{{else}} {{else}}
Empty Empty
{{/if}} {{/if}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
{{:~link('Save To Disk', 'disk', { 'disk' : 1 }, (buffer || species_buffer) ? null : 'disabled')}} {{:helper.link('Save To Disk', 'disk', { 'disk' : 1 }, (data.buffer || data.species_buffer) ? null : 'disabled')}}
{{:~link('Splice Onto Dish', 'pencil', { 'splice' : 1 }, (buffer || species_buffer) && !info ? null : 'disabled')}} {{:helper.link('Splice Onto Dish', 'pencil', { 'splice' : 1 }, ((data.buffer || data.species_buffer) && !data.info) ? null : 'disabled')}}
{{/if}} {{/if}}

View File

@@ -1,6 +1,6 @@
<div class="item"> <div class="item">
<div class="itemContent"> <div class="itemContent">
{{:~link('Close', 'gear', {'close' : '1'}, null, 'fixedLeft')}} {{:helper.link('Close', 'gear', {'close' : '1'}, null, 'fixedLeft')}}
</div> </div>
</div> </div>
@@ -12,12 +12,12 @@
Power: Power:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('On', 'power', { 'power' : 1 }, !dish_inserted ? 'disabled' : on ? 'selected' : null)}}{{:~link('Off', 'close', { 'power' : 1 }, on ? null : 'selected')}} {{:helper.link('On', 'power', { 'power' : 1 }, !data.dish_inserted ? 'disabled' : data.on ? 'selected' : null)}}{{:helper.link('Off', 'close', { 'power' : 1 }, data.on ? null : 'selected')}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
{{:~link('Add Radiation', 'radiation', {'rad' : 1})}} {{:helper.link('Add Radiation', 'radiation', {'rad' : 1})}}
{{:~link('Flush System', 'trash', {'flush' : 1}, system_in_use ? null : 'disabled')}} {{:helper.link('Flush System', 'trash', {'flush' : 1}, data.system_in_use ? null : 'disabled')}}
</div> </div>
<div class="statusDisplay" style="height: 100px; overflow: auto;"> <div class="statusDisplay" style="height: 100px; overflow: auto;">
@@ -26,7 +26,7 @@
<span class='good'>Virus Food:</span> <span class='good'>Virus Food:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(food_supply, 0, 100, 'good', food_supply)}} {{:helper.displayBar(data.food_supply, 0, 100, 'good', data.food_supply)}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -34,9 +34,9 @@
<span class='good'>Radiation Level:</span> <span class='good'>Radiation Level:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(radiation, 0, 100, radiation >= 50 ? 'bad' : growth >= 25 ? 'average' : 'good')}} {{:helper.displayBar(data.radiation, 0, 100, (data.radiation >= 50) ? 'bad' : (data.growth >= 25) ? 'average' : 'good')}}
<br/> <br/>
{{:~formatNumber(radiation * 10000)}} <acronym title='In microSieverts'>&micro;Sv</acronym> {{:helper.formatNumber(data.radiation * 10000)}} <acronym title='In microSieverts'>&micro;Sv</acronym>
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -44,7 +44,7 @@
<span class='good'>Toxicity:</span> <span class='good'>Toxicity:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(toxins, 0, 100, toxins >= 50 ? 'bad' : toxins >= 25 ? 'average' : 'good', toxins + '%')}} {{:helper.displayBar(data.toxins, 0, 100, (data.toxins >= 50) ? 'bad' : (data.toxins >= 25) ? 'average' : 'good', data.toxins + '%')}}
</div> </div>
</div> </div>
</div> </div>
@@ -53,17 +53,17 @@
<h2>Chemicals</h2> <h2>Chemicals</h2>
</div> </div>
<div class='item'> <div class='item'>
{{:~link('Eject Chemicals', 'eject', { 'ejectchem' : 1 }, chemicals_inserted ? null : 'disabled')}} {{:helper.link('Eject Chemicals', 'eject', { 'ejectchem' : 1 }, data.chemicals_inserted ? null : 'disabled')}}
{{:~link('Breed Virus', 'circle-arrow-s', { 'virus' : 1 }, can_breed_virus ? null : 'disabled')}} {{:helper.link('Breed Virus', 'circle-arrow-s', { 'virus' : 1 }, data.can_breed_virus ? null : 'disabled')}}
</div> </div>
{{if chemicals_inserted}} {{if data.chemicals_inserted}}
<div class='item'> <div class='item'>
<div class='itemLabel'> <div class='itemLabel'>
Volume: Volume:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:~displayBar(chemical_volume, 0, max_chemical_volume, 'good', chemical_volume + ' / ' + max_chemical_volume)}} {{:helper.displayBar(data.chemical_volume, 0, data.max_chemical_volume, 'good', data.chemical_volume + ' / ' + data.max_chemical_volume)}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -71,10 +71,10 @@
Breeding Environment: Breeding Environment:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
<span class='{{:can_breed_virus ? "good" : "average"}}'> <span class='{{:data.can_breed_virus ? "good" : "average"}}'>
{{:!dish_inserted ? 'N/A' : can_breed_virus ? 'Suitable' : 'No hemolytic samples detected'}} {{:!data.dish_inserted ? 'N/A' : data.can_breed_virus ? 'Suitable' : 'No hemolytic samples detected'}}
</span> </span>
{{if blood_already_infected}} {{if data.blood_already_infected}}
<br/> <br/>
<span class='bad'><i>CAUTION: Viral infection detected in blood sample.</i></span> <span class='bad'><i>CAUTION: Viral infection detected in blood sample.</i></span>
{{/if}} {{/if}}
@@ -90,17 +90,17 @@
<h2>Virus Dish</h2> <h2>Virus Dish</h2>
</div> </div>
<div class='item'> <div class='item'>
{{:~link('Eject Dish', 'eject', {'ejectdish' : 1}, dish_inserted ? null : 'disabled')}} {{:helper.link('Eject Dish', 'eject', {'ejectdish' : 1}, data.dish_inserted ? null : 'disabled')}}
</div> </div>
{{if dish_inserted}} {{if data.dish_inserted}}
{{if virus}} {{if data.virus}}
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
<b>Growth Density:</b> <b>Growth Density:</b>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(growth, 0, 100, growth >= 50 ? 'good' : growth >= 25 ? 'average' : 'bad', growth + '%' )}} {{:helper.displayBar(data.growth, 0, 100, (data.growth >= 50) ? 'good' : (data.growth >= 25) ? 'average' : 'bad', data.growth + '%' )}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -108,7 +108,7 @@
<b>Infection Rate:</b> <b>Infection Rate:</b>
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:analysed ? infection_rate : "Unknown"}} {{:data.analysed ? data.infection_rate : "Unknown"}}
</div> </div>
</div> </div>
{{else}} {{else}}

View File

@@ -5,54 +5,54 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
<h3>Status</h3> <h3>Status</h3>
<div class="statusDisplay"> <div class="statusDisplay">
{{if !hasOccupant}} {{if !data.hasOccupant}}
<div class="line">Cell Unoccupied</div> <div class="line">Cell Unoccupied</div>
{{else}} {{else}}
<div class="line"> <div class="line">
{{:occupant.name}}&nbsp;=>&nbsp; {{:data.occupant.name}}&nbsp;=>&nbsp;
{{if occupant.stat == 0}} {{if data.occupant.stat == 0}}
<span class="good">Conscious</span> <span class="good">Conscious</span>
{{else occupant.stat == 1}} {{else data.occupant.stat == 1}}
<span class="average">Unconscious</span> <span class="average">Unconscious</span>
{{else}} {{else}}
<span class="bad">DEAD</span> <span class="bad">DEAD</span>
{{/if}} {{/if}}
</div> </div>
{{if !occupant.isViableSubject || !occupant.uniqueIdentity || !occupant.structuralEnzymes}} {{if !data.occupant.isViableSubject || !data.occupant.uniqueIdentity || !data.occupant.structuralEnzymes}}
<div class="notice"> <div class="notice">
The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure. The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure.
</div> </div>
{{else occupant.stat < 2}} {{else data.occupant.stat < 2}}
<div class="line"> <div class="line">
<div class="statusLabel">Health:</div> <div class="statusLabel">Health:</div>
{{if occupant.health >= 0}} {{if data.occupant.health >= 0}}
{{:~displayBar(occupant.health, 0, occupant.maxHealth, 'good')}} {{:helper.displayBar(data.occupant.health, 0, data.occupant.maxHealth, 'good')}}
{{else}} {{else}}
{{:~displayBar(occupant.health, 0, occupant.minHealth, 'average alignRight')}} {{:helper.displayBar(data.occupant.health, 0, data.occupant.minHealth, 'average alignRight')}}
{{/if}} {{/if}}
<div class="statusValue">{{:~round(occupant.health)}}</div> <div class="statusValue">{{:helper.round(data.occupant.health)}}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="statusLabel">Radiation:</div> <div class="statusLabel">Radiation:</div>
{{:~displayBar(occupant.radiationLevel, 0, 100, 'average')}} {{:helper.displayBar(data.occupant.radiationLevel, 0, 100, 'average')}}
<div class="statusValue">{{:~round(occupant.radiationLevel)}}</div> <div class="statusValue">{{:helper.round(data.occupant.radiationLevel)}}</div>
</div> </div>
<div class="line"> <div class="line">
<div class="statusLabel">Unique Enzymes:</div> <div class="statusLabel">Unique Enzymes:</div>
<div class="statusValue">{{:occupant.uniqueEnzymes ? occupant.uniqueEnzymes : '<span class="bad">Unknown</span>'}}</div> <div class="statusValue">{{:data.occupant.uniqueEnzymes ? data.occupant.uniqueEnzymes : '<span class="bad">Unknown</span>'}}</div>
</div> </div>
<!--<div class="line"> <!--<div class="line">
<div class="statusLabel"><small>Unique Identifier:</small></div> <div class="statusLabel"><small>Unique Identifier:</small></div>
<div class="statusValue"><small>{{:occupant.uniqueIdentity}}</small></div> <div class="statusValue"><small>{{:data.occupant.uniqueIdentity}}</small></div>
</div> </div>
<div class="line"> <div class="line">
<div class="statusLabel"><small>Structural Enzymes:</small></div> <div class="statusLabel"><small>Structural Enzymes:</small></div>
<div class="statusValue"><small>{{:occupant.structuralEnzymes}}</small></div> <div class="statusValue"><small>{{:data.occupant.structuralEnzymes}}</small></div>
</div>--> </div>-->
{{/if}} {{/if}}
{{/if}} {{/if}}
@@ -61,65 +61,65 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
<h3>Operations</h3> <h3>Operations</h3>
<div class="item"> <div class="item">
{{:~link('Modify U.I.', 'link', {'selectMenuKey' : 'ui'}, selectedMenuKey == 'ui' ? 'selected' : null)}} {{:helper.link('Modify U.I.', 'link', {'selectMenuKey' : 'ui'}, data.selectedMenuKey == 'ui' ? 'selected' : null)}}
{{:~link('Modify S.E.', 'link', {'selectMenuKey' : 'se'}, selectedMenuKey == 'se' ? 'selected' : null)}} {{:helper.link('Modify S.E.', 'link', {'selectMenuKey' : 'se'}, data.selectedMenuKey == 'se' ? 'selected' : null)}}
{{:~link('Transfer Buffers', 'disk', {'selectMenuKey' : 'buffer'}, selectedMenuKey == 'buffer' ? 'selected' : null)}} {{:helper.link('Transfer Buffers', 'disk', {'selectMenuKey' : 'buffer'}, data.selectedMenuKey == 'buffer' ? 'selected' : null)}}
{{:~link('Rejuvenators', 'plusthick', {'selectMenuKey' : 'rejuvenators'}, selectedMenuKey == 'rejuvenators' ? 'selected' : null)}} {{:helper.link('Rejuvenators', 'plusthick', {'selectMenuKey' : 'rejuvenators'}, data.selectedMenuKey == 'rejuvenators' ? 'selected' : null)}}
</div> </div>
<div class="item">&nbsp;</div> <div class="item">&nbsp;</div>
{{if !selectedMenuKey || selectedMenuKey == 'ui'}} {{if !data.selectedMenuKey || data.selectedMenuKey == 'ui'}}
<h3>Modify Unique Identifier</h3> <h3>Modify Unique Identifier</h3>
{{:~displayDNABlocks(occupant.uniqueIdentity, selectedUIBlock, selectedUISubBlock, dnaBlockSize, 'UI')}} {{:helper.displayDNABlocks(data.occupant.uniqueIdentity, data.selectedUIBlock, data.selectedUISubBlock, data.dnaBlockSize, 'UI')}}
<div class="clearBoth"></div> <div class="clearBoth"></div>
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
Target: Target:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('-', null, {'changeUITarget' : 0}, selectedUITarget > 0 ? null : 'disabled')}} {{:helper.link('-', null, {'changeUITarget' : 0}, (data.selectedUITarget > 0) ? null : 'disabled')}}
<div class="statusValue">&nbsp;{{:selectedUITargetHex}}&nbsp;</div> <div class="statusValue">&nbsp;{{:data.selectedUITargetHex}}&nbsp;</div>
{{:~link('+', null, {'changeUITarget' : 1}, selectedUITarget < 15 ? null : 'disabled')}} {{:helper.link('+', null, {'changeUITarget' : 1}, (data.selectedUITarget < 15) ? null : 'disabled')}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Irradiate Block', 'radiation', {'pulseUIRadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}} {{:helper.link('Irradiate Block', 'radiation', {'pulseUIRadiation' : 1}, !data.occupant.isViableSubject ? 'disabled' : null)}}
</div> </div>
</div> </div>
{{else selectedMenuKey == 'se'}} {{else data.selectedMenuKey == 'se'}}
<h3>Modify Structural Enzymes</h3> <h3>Modify Structural Enzymes</h3>
{{:~displayDNABlocks(occupant.structuralEnzymes, selectedSEBlock, selectedSESubBlock, dnaBlockSize, 'SE')}} {{:helper.displayDNABlocks(data.occupant.structuralEnzymes, data.selectedSEBlock, data.selectedSESubBlock, data.dnaBlockSize, 'SE')}}
<div class="clearBoth"></div> <div class="clearBoth"></div>
<div class="item"> <div class="item">
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Irradiate Block', 'radiation', {'pulseSERadiation' : 1}, !occupant.isViableSubject ? 'disabled' : null)}} {{:helper.link('Irradiate Block', 'radiation', {'pulseSERadiation' : 1}, !data.occupant.isViableSubject ? 'disabled' : null)}}
</div> </div>
</div> </div>
{{else selectedMenuKey == 'buffer'}} {{else data.selectedMenuKey == 'buffer'}}
<h3>Transfer Buffers</h3> <h3>Transfer Buffers</h3>
{{for buffers}} {{for data.buffers}}
<h4>Buffer {{:#index + 1}}</h4> <h4>Buffer {{:(index + 1)}}</h4>
<div class="itemGroup"> <div class="itemGroup">
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
Load Data: Load Data:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Subject U.I.', 'link', {'bufferOption' : 'saveUI', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}} {{:helper.link('Subject U.I.', 'link', {'bufferOption' : 'saveUI', 'bufferId' : (index + 1)}, !data.hasOccupant ? 'disabled' : null)}}
{{:~link('Subject U.I. + U.E.', 'link', {'bufferOption' : 'saveUIAndUE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}} {{:helper.link('Subject U.I. + U.E.', 'link', {'bufferOption' : 'saveUIAndUE', 'bufferId' : (index + 1)}, !data.hasOccupant ? 'disabled' : null)}}
{{:~link('Subject S.E.', 'link', {'bufferOption' : 'saveSE', 'bufferId' : (#index + 1)}, !~root.hasOccupant ? 'disabled' : null)}} {{:helper.link('Subject S.E.', 'link', {'bufferOption' : 'saveSE', 'bufferId' : (index + 1)}, !data.hasOccupant ? 'disabled' : null)}}
{{:~link('From Disk', 'disk', {'bufferOption' : 'loadDisk', 'bufferId' : (#index + 1)}, !~root.hasDisk || !~root.disk.data ? 'disabled' : null)}} {{:helper.link('From Disk', 'disk', {'bufferOption' : 'loadDisk', 'bufferId' : (index + 1)}, (!data.hasDisk || !data.disk.data) ? 'disabled' : null)}}
</div> </div>
</div> </div>
{{if data}} {{if value.data}}
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
Label: Label:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link(label, 'document-b', {'bufferOption' : 'changeLabel', 'bufferId' : (#parent.index + 1)})}} {{:helper.link(value.label, 'document-b', {'bufferOption' : 'changeLabel', 'bufferId' : (index + 1)})}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -127,7 +127,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Subject: Subject:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:owner ? owner : '<span class="average">Unknown</span>'}} {{:value.owner ? value.owner : '<span class="average">Unknown</span>'}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -135,8 +135,8 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Stored Data: Stored Data:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}} {{:value.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
{{:ue ? ' + Unique Enzymes' : ''}} {{:value.ue ? ' + Unique Enzymes' : ''}}
</div> </div>
</div> </div>
{{else}} {{else}}
@@ -151,11 +151,11 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Options: Options:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Clear', 'trash', {'bufferOption' : 'clear', 'bufferId' : (#index + 1)}, !data ? 'disabled' : null)}} {{:helper.link('Clear', 'trash', {'bufferOption' : 'clear', 'bufferId' : (index + 1)}, !value.data ? 'disabled' : null)}}
{{:~link('Injector', ~root.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (#index + 1)}, !~root.isInjectorReady || !data ? 'disabled' : null)}} {{:helper.link('Injector', data.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (index + 1)}, (!data.isInjectorReady || !value.data) ? 'disabled' : null)}}
{{:~link('Block Injector', ~root.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (#index + 1), 'createBlockInjector' : 1}, !~root.isInjectorReady || !data ? 'disabled' : null)}} {{:helper.link('Block Injector', data.isInjectorReady ? 'pencil' : 'clock', {'bufferOption' : 'createInjector', 'bufferId' : (index + 1), 'createBlockInjector' : 1}, (!data.isInjectorReady || !value.data) ? 'disabled' : null)}}
{{:~link('Transfer', 'radiation', {'bufferOption' : 'transfer', 'bufferId' : (#index + 1)}, !~root.hasOccupant || !data ? 'disabled' : null)}} {{:helper.link('Transfer', 'radiation', {'bufferOption' : 'transfer', 'bufferId' : (index + 1)}, (!data.hasOccupant || !value.data) ? 'disabled' : null)}}
{{:~link('Save To Disk', 'disk', {'bufferOption' : 'saveDisk', 'bufferId' : (#index + 1)}, !data || !~root.hasDisk ? 'disabled' : null)}} {{:helper.link('Save To Disk', 'disk', {'bufferOption' : 'saveDisk', 'bufferId' : (index + 1)}, (!value.data || !data.hasDisk) ? 'disabled' : null)}}
</div> </div>
</div> </div>
</div> </div>
@@ -163,14 +163,14 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
<h4>Data Disk</h4> <h4>Data Disk</h4>
<div class="itemGroup"> <div class="itemGroup">
{{if hasDisk}} {{if data.hasDisk}}
{{if disk.data}} {{if data.disk.data}}
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
Label: Label:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:disk.label ? disk.label : 'No Label'}} {{:data.disk.label ? data.disk.label : 'No Label'}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -178,7 +178,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Subject: Subject:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:disk.owner ? disk.owner : '<span class="average">Unknown</span>'}} {{:data.disk.owner ? data.disk.owner : '<span class="average">Unknown</span>'}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -186,8 +186,8 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Stored Data: Stored Data:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:disk.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}} {{:data.disk.data == 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'}}
{{:disk.ue ? ' + Unique Enzymes' : ''}} {{:data.disk.ue ? ' + Unique Enzymes' : ''}}
</div> </div>
</div> </div>
{{else}} {{else}}
@@ -206,26 +206,26 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
{{/if}} {{/if}}
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
Options: Options:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Wipe Disk', 'trash', {'bufferOption' : 'wipeDisk'}, !hasDisk || !disk.data ? 'disabled' : null)}} {{:helper.link('Wipe Disk', 'trash', {'bufferOption' : 'wipeDisk'}, (!data.hasDisk || !data.disk.data) ? 'disabled' : null)}}
{{:~link('Eject Disk', 'eject', {'bufferOption' : 'ejectDisk'}, !hasDisk ? 'disabled' : null)}} {{:helper.link('Eject Disk', 'eject', {'bufferOption' : 'ejectDisk'}, !data.hasDisk ? 'disabled' : null)}}
</div> </div>
</div> </div>
</div> </div>
{{else selectedMenuKey == 'rejuvenators'}} {{else data.selectedMenuKey == 'rejuvenators'}}
<h3>Rejuvenators</h3> <h3>Rejuvenators</h3>
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
Inject: Inject:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('5', 'pencil', {'injectRejuvenators' : 5}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} {{:helper.link('5', 'pencil', {'injectRejuvenators' : 5}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
{{:~link('10', 'pencil', {'injectRejuvenators' : 10}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} {{:helper.link('10', 'pencil', {'injectRejuvenators' : 10}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
{{:~link('20', 'pencil', {'injectRejuvenators' : 20}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} {{:helper.link('20', 'pencil', {'injectRejuvenators' : 20}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
{{:~link('30', 'pencil', {'injectRejuvenators' : 30}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} {{:helper.link('30', 'pencil', {'injectRejuvenators' : 30}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
{{:~link('50', 'pencil', {'injectRejuvenators' : 50}, !hasOccupant || !beakerVolume ? 'disabled' : null)}} {{:helper.link('50', 'pencil', {'injectRejuvenators' : 50}, (!data.hasOccupant || !data.beakerVolume) ? 'disabled' : null)}}
</div> </div>
</div> </div>
<div class="item">&nbsp;</div> <div class="item">&nbsp;</div>
@@ -234,10 +234,10 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Beaker: Beaker:
</div> </div>
<div class="itemContentWide" style="width: 40%;"> <div class="itemContentWide" style="width: 40%;">
{{if isBeakerLoaded}} {{if data.isBeakerLoaded}}
{{:beakerLabel ? beakerLabel : '<span class="average">No label</span>'}}<br> {{:data.beakerLabel ? data.beakerLabel : '<span class="average">No label</span>'}}<br>
{{if beakerVolume}} {{if data.beakerVolume}}
<span class="highlight">{{:beakerVolume}} units remaining</span><br> <span class="highlight">{{:data.beakerVolume}} units remaining</span><br>
{{else}} {{else}}
<span class="bad">Beaker is empty</span> <span class="bad">Beaker is empty</span>
{{/if}} {{/if}}
@@ -246,23 +246,23 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
{{/if}} {{/if}}
</div> </div>
<div class="itemContentWide" style="width: 26%;"> <div class="itemContentWide" style="width: 26%;">
{{:~link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, isBeakerLoaded ? null : 'disabled')}} {{:helper.link('Eject Beaker', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}}
</div> </div>
</div> </div>
{{/if}} {{/if}}
<div class="item">&nbsp;</div> <div class="item">&nbsp;</div>
{{if !selectedMenuKey || selectedMenuKey == 'ui' || selectedMenuKey == 'se'}} {{if !data.selectedMenuKey || data.selectedMenuKey == 'ui' || data.selectedMenuKey == 'se'}}
<h3>Radiation Emitter Settings</h3> <h3>Radiation Emitter Settings</h3>
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
Intensity: Intensity:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('-', null, {'radiationIntensity' : 0}, radiationIntensity > 1 ? null : 'disabled')}} {{:helper.link('-', null, {'radiationIntensity' : 0}, (data.radiationIntensity > 1) ? null : 'disabled')}}
<div class="statusValue">&nbsp;{{:radiationIntensity}}&nbsp;</div> <div class="statusValue">&nbsp;{{:data.radiationIntensity}}&nbsp;</div>
{{:~link('+', null, {'radiationIntensity' : 1}, radiationIntensity < 10 ? null : 'disabled')}} {{:helper.link('+', null, {'radiationIntensity' : 1}, (data.radiationIntensity < 10) ? null : 'disabled')}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -270,9 +270,9 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Duration: Duration:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('-', null, {'radiationDuration' : 0}, radiationDuration > 2 ? null : 'disabled')}} {{:helper.link('-', null, {'radiationDuration' : 0}, (data.radiationDuration > 2) ? null : 'disabled')}}
<div class="statusValue">&nbsp;{{:radiationDuration}}&nbsp;</div> <div class="statusValue">&nbsp;{{:data.radiationDuration}}&nbsp;</div>
{{:~link('+', null, {'radiationDuration' : 1}, radiationDuration < 20 ? null : 'disabled')}} {{:helper.link('+', null, {'radiationDuration' : 1}, (data.radiationDuration < 20) ? null : 'disabled')}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -280,7 +280,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
&nbsp; &nbsp;
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Pulse Radiation', 'radiation', {'pulseRadiation' : 1}, !hasOccupant ? 'disabled' : null)}} {{:helper.link('Pulse Radiation', 'radiation', {'pulseRadiation' : 1}, !data.hasOccupant ? 'disabled' : null)}}
</div> </div>
</div> </div>
{{/if}} {{/if}}
@@ -294,7 +294,7 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Occupant: Occupant:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Eject Occupant', 'eject', {'ejectOccupant' : 1}, locked || !hasOccupant || irradiating ? 'disabled' : null)}} {{:helper.link('Eject Occupant', 'eject', {'ejectOccupant' : 1}, data.locked || !data.hasOccupant || data.irradiating ? 'disabled' : null)}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
@@ -302,16 +302,16 @@ Used In File(s): D:\Development\SS13-BS12\code\game\dna\dna_modifier.dm
Door Lock: Door Lock:
</div> </div>
<div class="itemContentWide"> <div class="itemContentWide">
{{:~link('Engaged', 'locked', {'toggleLock' : 1}, locked ? 'selected' : !hasOccupant ? 'disabled' : null)}} {{:helper.link('Engaged', 'locked', {'toggleLock' : 1}, data.locked ? 'selected' : !data.hasOccupant ? 'disabled' : null)}}
{{:~link('Disengaged', 'unlocked', {'toggleLock' : 1}, !locked ? 'selected' : irradiating ? 'disabled' : null)}} {{:helper.link('Disengaged', 'unlocked', {'toggleLock' : 1}, !data.locked ? 'selected' : data.irradiating ? 'disabled' : null)}}
</div> </div>
</div> </div>
{{if irradiating}} {{if data.irradiating}}
<div class="mask"> <div class="mask">
<div class="maskContent"> <div class="maskContent">
<h1>Irradiating Subject</h1> <h1>Irradiating Subject</h1>
<h3>For {{:irradiating}} seconds.</h3> <h3>For {{:data.irradiating}} seconds.</h3>
</div> </div>
</div> </div>
{{/if}} {{/if}}

View File

@@ -3,53 +3,53 @@
<div class="itemLabel"> <div class="itemLabel">
Docking Port Status: Docking Port Status:
</div> </div>
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
<div class="itemContent" style="float:left"> <div class="itemContent" style="float:left">
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="good" style="float:left">DOCKED</span> <span class="good" style="float:left">DOCKED</span>
{{else}} {{else}}
<span class="bad" style="float:left">DOCKED-OVERRIDE ENABLED</span> <span class="bad" style="float:left">DOCKED-OVERRIDE ENABLED</span>
{{/if}} {{/if}}
<span style="float:right"> <span style="float:right">
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
</span> </span>
</div> </div>
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
<div class="itemContent" style="float:left"> <div class="itemContent" style="float:left">
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="average" style="float:left">DOCKING</span> <span class="average" style="float:left">DOCKING</span>
{{else}} {{else}}
<span class="bad" style="float:left">DOCKING-OVERRIDE ENABLED</span> <span class="bad" style="float:left">DOCKING-OVERRIDE ENABLED</span>
{{/if}} {{/if}}
<span style="float:right"> <span style="float:right">
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
</span> </span>
</div> </div>
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
<div class="itemContent" style="float:left"> <div class="itemContent" style="float:left">
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="average" style="float:left">UNDOCKING</span> <span class="average" style="float:left">UNDOCKING</span>
{{else}} {{else}}
<span class="bad" style="float:left">UNDOCKING-OVERRIDE ENABLED</span> <span class="bad" style="float:left">UNDOCKING-OVERRIDE ENABLED</span>
{{/if}} {{/if}}
<span style="float:right"> <span style="float:right">
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
</span> </span>
</div> </div>
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
<div class="itemContent" style="float:left"> <div class="itemContent" style="float:left">
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="idle" style="float:left">NOT IN USE</span> <span class="idle" style="float:left">NOT IN USE</span>
{{else}} {{else}}
<span class="bad" style="float:left">OVERRIDE ENABLED</span> <span class="bad" style="float:left">OVERRIDE ENABLED</span>
{{/if}} {{/if}}
<span style="float:right"> <span style="float:right">
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
</span> </span>
</div> </div>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@@ -59,9 +59,9 @@
Chamber Pressure: Chamber Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(chamber_pressure, 0, 200, chamber_pressure < 80 || chamber_pressure > 120 ? 'bad' : chamber_pressure < 95 || chamber_pressure > 110 ? 'average' : 'good')}} {{:helper.displayBar(data.chamber_pressure, 0, 200, (data.chamber_pressure < 80 || data.chamber_pressure > 120) ? 'bad' : (data.chamber_pressure < 95 || data.chamber_pressure > 110) ? 'average' : 'good')}}
<div class="statusValue"> <div class="statusValue">
{{:chamber_pressure}} kPa {{:data.chamber_pressure}} kPa
</div> </div>
</div> </div>
</div> </div>
@@ -69,28 +69,28 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="width: 100%"> <div class="itemContent" style="width: 100%">
{{:~link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, (processing || airlock_disabled) ? 'disabled' : null)}} {{:helper.link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, (data.processing || data.airlock_disabled) ? 'disabled' : null)}}
{{:~link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, (processing || airlock_disabled) ? 'disabled' : null)}} {{:helper.link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, (data.processing || data.airlock_disabled) ? 'disabled' : null)}}
</div> </div>
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{if airlock_disabled}} {{if data.airlock_disabled}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, 'disabled', null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, 'disabled', null)}}
{{:~link('Force interior door', 'alert', {'command' : 'force_int'}, 'disabled', null)}} {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, 'disabled', null)}}
{{else}} {{else}}
{{if interior_status.state == "open"}} {{if data.interior_status.state == "open"}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, 'redBackground')}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, 'redBackground')}}
{{else}} {{else}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, processing ? 'yellowBackground' : null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, data.processing ? 'yellowBackground' : null)}}
{{/if}} {{/if}}
{{if exterior_status.state == "open"}} {{if data.exterior_status.state == "open"}}
{{:~link('Force interior door', 'alert', {'command' : 'force_int'}, null, 'redBackground')}} {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, null, 'redBackground')}}
{{else}} {{else}}
{{:~link('Force interior door', 'alert', {'command' : 'force_int'}, null, processing ? 'yellowBackground' : null)}} {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, null, data.processing ? 'yellowBackground' : null)}}
{{/if}} {{/if}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
<div class="item" style="padding-top: 10px; width: 100%"> <div class="item" style="padding-top: 10px; width: 100%">
{{:~link('Abort', 'cancel', {'command' : 'abort'}, (processing && !airlock_disabled) ? null : 'disabled', (processing && !airlock_disabled) ? 'redBackground' : null)}} {{:helper.link('Abort', 'cancel', {'command' : 'abort'}, (data.processing && !airlock_disabled) ? null : 'disabled', (data.processing && !data.airlock_disabled) ? 'redBackground' : null)}}
</div> </div>
</div> </div>

View File

@@ -4,7 +4,7 @@
Exterior Door Status: Exterior Door Status:
</div> </div>
<div class="statusValue"> <div class="statusValue">
{{if exterior_status.state == "closed"}} {{if data.exterior_status.state == "closed"}}
Locked Locked
{{else}} {{else}}
Open Open
@@ -16,7 +16,7 @@
Interior Door Status: Interior Door Status:
</div> </div>
<div class="statusValue"> <div class="statusValue">
{{if interior_status.state == "closed"}} {{if data.interior_status.state == "closed"}}
Locked Locked
{{else}} {{else}}
Open Open
@@ -27,15 +27,15 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="width: 100%"> <div class="itemContent" style="width: 100%">
{{if exterior_status.state == "open"}} {{if data.exterior_status.state == "open"}}
{{:~link('Lock Exterior Door', 'alert', {'command' : 'force_ext'}, processing ? 'disabled' : null)}} {{:helper.link('Lock Exterior Door', 'alert', {'command' : 'force_ext'}, data.processing ? 'disabled' : null)}}
{{else}} {{else}}
{{:~link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext_door'}, processing ? 'disabled' : null)}} {{:helper.link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext_door'}, data.processing ? 'disabled' : null)}}
{{/if}} {{/if}}
{{if interior_status.state == "open"}} {{if data.interior_status.state == "open"}}
{{:~link('Lock Interior Door', 'alert', {'command' : 'force_int'}, processing ? 'disabled' : null)}} {{:helper.link('Lock Interior Door', 'alert', {'command' : 'force_int'}, data.processing ? 'disabled' : null)}}
{{else}} {{else}}
{{:~link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int_door'}, processing ? 'disabled' : null)}} {{:helper.link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int_door'}, data.processing ? 'disabled' : null)}}
{{/if}} {{/if}}
</div> </div>
</div> </div>

View File

@@ -1,17 +1,17 @@
<div class="item"> <div class="item">
{{:~link('Overall status', 'note', {'state' :'status'}, null, state == 'status' ? 'selected' : null)}} {{:helper.link('Overall status', 'note', {'state' :'status'}, null, state == 'status' ? 'selected' : null)}}
{{:~link('Details', 'note', {'state' : 'engines'}, null, state == 'engines' ? 'selected' : null)}} {{:helper.link('Details', 'note', {'state' : 'engines'}, null, state == 'engines' ? 'selected' : null)}}
</div> </div>
{{if state == "engines"}} {{if data.state == "engines"}}
{{if engines_info}} {{if data.engines_info}}
{{for engines_info}} {{for data.engines_info}}
<div class='item'> <div class='item'>
<div class="itemLabel"> <div class="itemLabel">
<span class='white'>Engine #{{:#index + 1}}:</span> <span class='white'>Engine #{{:(index + 1)}}:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link(eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : eng_reference }, null, eng_on ? 'selected' : null)}} {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? 'selected' : null)}}
</div> </div>
</div> </div>
<div class='statusDisplay'> <div class='statusDisplay'>
@@ -20,7 +20,7 @@
<span class='average'>Type:</span> <span class='average'>Type:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
<span class='white'>{{:eng_type}}</span> <span class='white'>{{:value.eng_type}}</span>
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -28,8 +28,8 @@
<span class='average'>Status:</span> <span class='average'>Status:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
<span class='{{:eng_on ? 'good' : 'bad'}}'>{{:eng_on ? 'Online' : 'Offline'}}</span><br> <span class='{{:value.eng_on ? 'good' : 'bad'}}'>{{:value.eng_on ? 'Online' : 'Offline'}}</span><br>
<span class='white'>{{:eng_status}}</span> <span class='white'>{{:value.eng_status}}</span>
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -37,7 +37,7 @@
<span class='average'>Current thrust:</span> <span class='average'>Current thrust:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
<span class='white'>{{:eng_thrust}}</span> <span class='white'>{{:value.eng_thrust}}</span>
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -45,25 +45,25 @@
<span class='average'>Thrust limit:</span> <span class='average'>Thrust limit:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('', 'circle-plus', { 'limit' : 0.1, 'engine' : eng_reference }, null, null)}} {{:helper.link('', 'circle-plus', { 'limit' : 0.1, 'engine' : value.eng_reference }, null, null)}}
{{:~link(eng_thrust_limiter+'%', null, { 'set_limit' : 1, 'engine' : eng_reference }, null, null)}} {{:helper.link(value.eng_thrust_limiter+'%', null, { 'set_limit' : 1, 'engine' : value.eng_reference }, null, null)}}
{{:~link('', 'circle-minus', { 'limit' : -0.1, 'engine' : eng_reference }, null, null)}} {{:helper.link('', 'circle-minus', { 'limit' : -0.1, 'engine' : value.eng_reference }, null, null)}}
</div> </div>
</div> </div>
</div> </div>
{{/for}} {{/for}}
{{/if}} {{/if}}
{{/if}} {{/if}}
{{if state == "status"}} {{if data.state == "status"}}
{{if engines_info}} {{if data.engines_info}}
{{for engines_info}} {{for data.engines_info}}
<div class='block'> <div class='block'>
<div class='item'> <div class='item'>
<div class="itemLabel"> <div class="itemLabel">
<span class='white'>Engine #{{:#index + 1}}:</span> <span class='white'>Engine #{{:(index + 1)}}:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link(eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : eng_reference }, null, eng_on ? 'selected' : null)}} {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? 'selected' : null)}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -73,9 +73,9 @@
<span class='average'>Thrust limit:</span> <span class='average'>Thrust limit:</span>
</div> </div>
<div class="itemContent"> <div class="itemContent">
<span class='white'>{{:eng_thrust}}</span> <span class='white'>{{:value.eng_thrust}}</span>
<br> <br>
<span class='white'>{{:eng_thrust_limiter}}%</span> <span class='white'>{{:value.eng_thrust_limiter}}%</span>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -4,17 +4,17 @@
Escape Pod Status: Escape Pod Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{if armed}} {{if data.armed}}
<span class="average">ARMED</span> <span class="average">ARMED</span>
{{else}} {{else}}
<span class="good">SYSTEMS OK</span> <span class="good">SYSTEMS OK</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
<span class="average">EJECTING-STAND CLEAR!</span> <span class="average">EJECTING-STAND CLEAR!</span>
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
<span class="idle">POD EJECTED</span> <span class="idle">POD EJECTED</span>
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
<span class="good">INITIALIZING...</span> <span class="good">INITIALIZING...</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -25,17 +25,17 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{if armed}} {{if data.armed}}
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
{{else}} {{else}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', override_enabled? 'redBackground' : null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled? 'redBackground' : null)}}
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : 'yellowBackground')}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
{{/if}} {{/if}}
{{else}} {{else}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, 'disabled', null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, 'disabled', null)}}
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, 'disabled', null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, 'disabled', null)}}
{{/if}} {{/if}}
</div> </div>
</div> </div>

View File

@@ -4,17 +4,17 @@
Escape Pod Status: Escape Pod Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{if is_armed}} {{if data.is_armed}}
<span class="average">ARMED</span> <span class="average">ARMED</span>
{{else}} {{else}}
<span class="good">SYSTEMS OK</span> <span class="good">SYSTEMS OK</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
<span class="average">EJECTING</span> <span class="average">EJECTING</span>
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
<span class="idle">POD EJECTED</span> <span class="idle">POD EJECTED</span>
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
<span class="average">DOCKING</span> <span class="average">DOCKING</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -28,40 +28,40 @@
Docking Hatch: Docking Hatch:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="good">OPEN</span> <span class="good">OPEN</span>
{{else door_state == "closed"}} {{else data.door_state == "closed"}}
<span class="good">CLOSED</span> <span class="good">CLOSED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{/if}} {{/if}}
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="good">OPEN</span> <span class="good">OPEN</span>
{{else door_state == "closed" && door_lock == "locked"}} {{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span> <span class="good">SECURED</span>
{{else door_state == "closed" && door_lock == "unlocked"}} {{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="good">UNSECURED</span> <span class="good">UNSECURED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="average">OPEN</span> <span class="average">OPEN</span>
{{else door_state == "closed" && door_lock == "locked"}} {{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span> <span class="good">SECURED</span>
{{else door_state == "closed" && door_lock == "unlocked"}} {{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="average">UNSECURED</span> <span class="average">UNSECURED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{/if}} {{/if}}
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="bad">OPEN</span> <span class="bad">OPEN</span>
{{else door_state == "closed" && door_lock == "locked"}} {{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span> <span class="good">SECURED</span>
{{else door_state == "closed" && door_lock == "unlocked"}} {{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="bad">UNSECURED</span> <span class="bad">UNSECURED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -75,12 +75,12 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
{{else}} {{else}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', override_enabled? 'redBackground' : null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled? 'redBackground' : null)}}
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : 'yellowBackground')}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@@ -88,8 +88,8 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{:~link('ARM', 'alert', {'command' : 'manual_arm'}, is_armed ? 'disabled' : null, is_armed ? 'redBackground' : 'yellowBackground')}} {{:helper.link('ARM', 'alert', {'command' : 'manual_arm'}, data.is_armed ? 'disabled' : null, data.is_armed ? 'redBackground' : 'yellowBackground')}}
{{:~link('MANUAL EJECT', 'alert', {'command' : 'force_launch'}, can_force ? null : 'disabled', can_force ? 'yellowBackground' : null)}} {{:helper.link('MANUAL EJECT', 'alert', {'command' : 'force_launch'}, data.can_force ? null : 'disabled', data.can_force ? 'yellowBackground' : null)}}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,7 +1,7 @@
<h3>Shuttle Status</h3> <h3>Shuttle Status</h3>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
{{:shuttle_status}} {{:data.shuttle_status}}
</div> </div>
</div> </div>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
@@ -10,11 +10,11 @@
Bluespace Drive: Bluespace Drive:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if shuttle_state == "idle"}} {{if data.shuttle_state == "idle"}}
<span class="idle">IDLE</span> <span class="idle">IDLE</span>
{{else shuttle_state == "warmup"}} {{else data.shuttle_state == "warmup"}}
<span style="font-weight: bold;color: #336699">SPINNING UP</span> <span style="font-weight: bold;color: #336699">SPINNING UP</span>
{{else shuttle_state == "in_transit"}} {{else data.shuttle_state == "in_transit"}}
<span style="font-weight: bold;color: #336699">ENGAGED</span> <span style="font-weight: bold;color: #336699">ENGAGED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -22,28 +22,28 @@
</div> </div>
</div> </div>
</div> </div>
{{if has_docking}} {{if data.has_docking}}
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
Docking Status: Docking Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
<span class="good">DOCKED</span> <span class="good">DOCKED</span>
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
{{if !docking_override}} {{if !data.docking_override}}
<span class="average">DOCKING</span> <span class="average">DOCKING</span>
{{else}} {{else}}
<span class="average">DOCKING-MANUAL</span> <span class="average">DOCKING-MANUAL</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
{{if !docking_override}} {{if !data.docking_override}}
<span class="average">UNDOCKING</span> <span class="average">UNDOCKING</span>
{{else}} {{else}}
<span class="average">UNDOCKING-MANUAL</span> <span class="average">UNDOCKING-MANUAL</span>
{{/if}} {{/if}}
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
<span class="idle">UNDOCKED</span> <span class="idle">UNDOCKED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -55,7 +55,7 @@
<h3>Shuttle Authorization</h3> <h3>Shuttle Authorization</h3>
<div class="item"> <div class="item">
<div class="item"> <div class="item">
{{if has_auth}} {{if data.has_auth}}
Access Granted. Shuttle controls unlocked. Access Granted. Shuttle controls unlocked.
{{else}} {{else}}
Additional authorization required. Additional authorization required.
@@ -63,8 +63,8 @@
</div> </div>
</div> </div>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
{{for auth_list}} {{for data.auth_list}}
{{:~link(auth_name, 'eject', {'auth' : auth_hash}, null, 'itemContentWide')}} {{:helper.link(value.auth_name, 'eject', {'auth' : value.auth_hash}, null, 'itemContentWide')}}
{{/for}} {{/for}}
</div> </div>
@@ -72,9 +72,9 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{:~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, can_launch? null : 'disabled' , null)}} {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch? null : 'disabled' , null)}}
{{:~link('Cancel Launch', 'cancel', {'cancel' : '1'}, can_cancel? null : 'disabled' , null)}} {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel? null : 'disabled' , null)}}
{{:~link('Force Launch', 'alert', {'force' : '1'}, can_force? null : 'disabled' , can_force? 'redBackground' : null)}} {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force? null : 'disabled' , data.can_force? 'redBackground' : null)}}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -3,7 +3,7 @@
Status: Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('On', 'power', {'toggleStatus' : 1}, on ? 'selected' : null)}}{{:~link('Off', 'close', {'toggleStatus' : 1}, on ? null : 'selected')}} {{:helper.link('On', 'power', {'toggleStatus' : 1}, data.on ? 'selected' : null)}}{{:helper.link('Off', 'close', {'toggleStatus' : 1}, data.on ? null : 'selected')}}
</div> </div>
</div> </div>
@@ -12,7 +12,7 @@
Gas Pressure: Gas Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:gasPressure}} kPa {{:data.gasPressure}} kPa
</div> </div>
</div> </div>
@@ -22,9 +22,9 @@
Current: Current:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(gasTemperature, minGasTemperature, maxGasTemperature, gasTemperatureClass)}} {{:helper.displayBar(data.gasTemperature, data.minGasTemperature, data.maxGasTemperature, data.gasTemperatureClass)}}
<div class="statusValue"> <div class="statusValue">
<span class="{{:gasTemperatureClass}}">{{:gasTemperature}} K</span> <span class="{{:data.gasTemperatureClass}}">{{:data.gasTemperature}} K</span>
</div> </div>
</div> </div>
</div> </div>
@@ -34,15 +34,15 @@
Target: Target:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(targetGasTemperature, minGasTemperature, maxGasTemperature)}} {{:helper.displayBar(data.targetGasTemperature, data.minGasTemperature, data.maxGasTemperature)}}
<div style="clear: both; padding-top: 4px;"> <div style="clear: both; padding-top: 4px;">
{{:~link('-', null, {'temp' : -100}, (targetGasTemperature > minGasTemperature) ? null : 'disabled')}} {{:helper.link('-', null, {'temp' : -100}, (data.targetGasTemperature > data.minGasTemperature) ? null : 'disabled')}}
{{:~link('-', null, {'temp' : -10}, (targetGasTemperature > minGasTemperature) ? null : 'disabled')}} {{:helper.link('-', null, {'temp' : -10}, (data.targetGasTemperature > data.minGasTemperature) ? null : 'disabled')}}
{{:~link('-', null, {'temp' : -1}, (targetGasTemperature > minGasTemperature) ? null : 'disabled')}} {{:helper.link('-', null, {'temp' : -1}, (data.targetGasTemperature > data.minGasTemperature) ? null : 'disabled')}}
<div style="float: left; width: 80px; text-align: center;">&nbsp;{{:targetGasTemperature}} K&nbsp;</div> <div style="float: left; width: 80px; text-align: center;">&nbsp;{{:data.targetGasTemperature}} K&nbsp;</div>
{{:~link('+', null, {'temp' : 1}, (targetGasTemperature < maxGasTemperature) ? null : 'disabled')}} {{:helper.link('+', null, {'temp' : 1}, (data.targetGasTemperature < data.maxGasTemperature) ? null : 'disabled')}}
{{:~link('+', null, {'temp' : 10}, (targetGasTemperature < maxGasTemperature) ? null : 'disabled')}} {{:helper.link('+', null, {'temp' : 10}, (data.targetGasTemperature < data.maxGasTemperature) ? null : 'disabled')}}
{{:~link('+', null, {'temp' : 100}, (targetGasTemperature < maxGasTemperature) ? null : 'disabled')}} {{:helper.link('+', null, {'temp' : 100}, (data.targetGasTemperature < data.maxGasTemperature) ? null : 'disabled')}}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -6,10 +6,10 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<h3>Machine Status</h3> <h3>Machine Status</h3>
<div class="item"> <div class="item">
<div class="itemContent" style="width: 20%;"> <div class="itemContent" style="width: 20%;">
{{:~link(scanning ? 'Halt Scan' : 'Begin Scan', 'signal-diag', {'scanItem' : 1}, null)}} {{:helper.link(data.scanning ? 'Halt Scan' : 'Begin Scan', 'signal-diag', {'scanItem' : 1}, null)}}
</div> </div>
<div class="itemContent" style="width: 20%;"> <div class="itemContent" style="width: 20%;">
{{:~link('Eject item', 'eject', {'ejectItem' : 1}, (scanned_item && !scanning) ? null : 'disabled')}} {{:helper.link('Eject item', 'eject', {'ejectItem' : 1}, (data.scanned_item && !data.scanning) ? null : 'disabled')}}
</div> </div>
</div> </div>
@@ -17,8 +17,8 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="line"> <div class="line">
<div class="statusLabel">Item:</div> <div class="statusLabel">Item:</div>
<div class="statusValue"> <div class="statusValue">
{{if scanned_item}} {{if data.scanned_item}}
<span class="good">{{:scanned_item}}</span> <span class="good">{{:data.scanned_item}}</span>
{{else}} {{else}}
<span class="bad">No item inserted</span> <span class="bad">No item inserted</span>
{{/if}} {{/if}}
@@ -27,8 +27,8 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="line"> <div class="line">
<div class="statusLabel">Heuristic analysis:</div> <div class="statusLabel">Heuristic analysis:</div>
<div class="statusValue"> <div class="statusValue">
{{if scanned_item_desc}} {{if data.scanned_item_desc}}
<span class="average">{{:scanned_item_desc}}</span> <span class="average">{{:data.scanned_item_desc}}</span>
{{/if}} {{/if}}
</div> </div>
</div> </div>
@@ -38,11 +38,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Scan progress:</div> <div class="itemLabel" style="width: 21%;">Scan progress:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(scan_progress, 0, 100, 'good')}} {{:helper.displayBar(data.scan_progress, 0, 100, 'good')}}
{{:scan_progress}} % {{:data.scan_progress}} %
</div> </div>
<div class="itemContent" style="width: 44%;"> <div class="itemContent" style="width: 44%;">
{{if scan_progress >= 100}} {{if data.scan_progress >= 100}}
<span class="notice" style="width: 100%;">Scan completed successfully.</span> <span class="notice" style="width: 100%;">Scan completed successfully.</span>
{{/if}} {{/if}}
</div> </div>
@@ -50,11 +50,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Vacuum seal integrity:</div> <div class="itemLabel" style="width: 21%;">Vacuum seal integrity:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(scanner_seal_integrity, 0, 100, (scanner_seal_integrity < 66 ? (scanner_seal_integrity < 33 ? 'bad' : 'average') : 'good'))}} {{:helper.displayBar(data.scanner_seal_integrity, 0, 100, ((data.scanner_seal_integrity < 66) ? ((data.scanner_seal_integrity < 33) ? 'bad' : 'average') : 'good'))}}
{{:scanner_seal_integrity}} % {{:data.scanner_seal_integrity}} %
</div> </div>
<div class="itemContent" style="width: 44%;"> <div class="itemContent" style="width: 44%;">
{{if scanner_seal_integrity < 25}} {{if data.scanner_seal_integrity < 25}}
<span class="notice">Warning! Vacuum seal breach will result in scan failure!</span> <span class="notice">Warning! Vacuum seal breach will result in scan failure!</span>
{{/if}} {{/if}}
</div> </div>
@@ -64,11 +64,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">MASER Efficiency:</div> <div class="itemLabel" style="width: 21%;">MASER Efficiency:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(maser_efficiency, 1, 100, (maser_efficiency < 66 ? (maser_efficiency < 33 ? 'bad' : 'average') : 'good'))}} {{:helper.displayBar(data.maser_efficiency, 1, 100, ((data.maser_efficiency < 66) ? ((data.maser_efficiency) < 33 ? 'bad' : 'average') : 'good'))}}
{{:maser_efficiency}} % {{:data.maser_efficiency}} %
</div> </div>
<div class="itemContent" style="width: 44%;"> <div class="itemContent" style="width: 44%;">
{{if maser_efficiency < 50}} {{if data.maser_efficiency < 50}}
<span class="notice">Match wavelengths to progress the scan.</span> <span class="notice">Match wavelengths to progress the scan.</span>
{{/if}} {{/if}}
</div> </div>
@@ -76,25 +76,25 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Optimal Wavelength:</div> <div class="itemLabel" style="width: 21%;">Optimal Wavelength:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(optimal_wavelength, 1, 10000, 'good')}} {{:helper.displayBar(data.optimal_wavelength, 1, 10000, 'good')}}
{{:optimal_wavelength}} MHz {{:data.optimal_wavelength}} MHz
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Current Wavelength:</div> <div class="itemLabel" style="width: 21%;">Current Wavelength:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(maser_wavelength, 1, 10000, 'good')}} {{:helper.displayBar(data.maser_wavelength, 1, 10000, 'good')}}
{{:maser_wavelength}} MHz {{:data.maser_wavelength}} MHz
</div> </div>
<div class="itemContent" style="text-align:left; width: 22%;"> <div class="itemContent" style="text-align:left; width: 22%;">
{{:~link('-2 KHz', null, {'maserWavelength' : -2}, null)}} {{:helper.link('-2 KHz', null, {'maserWavelength' : -2}, null)}}
{{:~link('-1 KHz', null, {'maserWavelength' : -1}, null)}} {{:helper.link('-1 KHz', null, {'maserWavelength' : -1}, null)}}
{{:~link('-0.5 KHz', null, {'maserWavelength' : -0.5}, null)}} {{:helper.link('-0.5 KHz', null, {'maserWavelength' : -0.5}, null)}}
</div> </div>
<div class="itemContent" style="text-align:right; width: 22%;"> <div class="itemContent" style="text-align:right; width: 22%;">
{{:~link('+0.5 KHz', null, {'maserWavelength' : 0.5}, null)}} {{:helper.link('+0.5 KHz', null, {'maserWavelength' : 0.5}, null)}}
{{:~link('+1 KHz', null, {'maserWavelength' : 1}, null)}} {{:helper.link('+1 KHz', null, {'maserWavelength' : 1}, null)}}
{{:~link('+2 KHz', null, {'maserWavelength' : 2}, null)}} {{:helper.link('+2 KHz', null, {'maserWavelength' : 2}, null)}}
</div> </div>
</div> </div>
@@ -102,18 +102,18 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Centrifuge speed:</div> <div class="itemLabel" style="width: 21%;">Centrifuge speed:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(scanner_rpm, 0, 1000, 'good')}} {{:helper.displayBar(data.scanner_rpm, 0, 1000, 'good')}}
{{:scanner_rpm}} RPM {{:data.scanner_rpm}} RPM
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Internal temperature:</div> <div class="itemLabel" style="width: 21%;">Internal temperature:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(scanner_temperature, 0, 1273, (scanner_temperature > 250 ? (scanner_temperature > 1000 ? 'bad' : 'average') : 'good')))}} {{:helper.displayBar(data.scanner_temperature, 0, 1273, (data.scanner_temperature > 250 ? (data.scanner_temperature > 1000 ? 'bad' : 'average') : 'good')))}}
{{:scanner_temperature}} K {{:data.scanner_temperature}} K
</div> </div>
<div class="itemContent" style="width: 44%;"> <div class="itemContent" style="width: 44%;">
{{if scanner_temperature > 1000}} {{if data.scanner_temperature > 1000}}
<span class="notice" style="width: 100%;">Warning! Exceeding 1200K will result in scan failure!</span> <span class="notice" style="width: 100%;">Warning! Exceeding 1200K will result in scan failure!</span>
{{/if}} {{/if}}
</div> </div>
@@ -123,12 +123,12 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Ambient radiation:</div> <div class="itemLabel" style="width: 21%;">Ambient radiation:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(radiation, 0, 100, (radiation > 15 ? (radiation > 65 ? 'bad' : 'average') : 'good'))}} {{:helper.displayBar(data.radiation, 0, 100, ((data.radiation > 15) ? ((data.radiation > 65) ? 'bad' : 'average') : 'good'))}}
{{:radiation}} mSv {{:data.radiation}} mSv
</div> </div>
<div class="itemContent" style="width: 44%;"> <div class="itemContent" style="width: 44%;">
{{:~link(rad_shield_on ? 'Disable Radiation Shielding' : 'Enable Radiation Shielding', 'radiation', {'toggle_rad_shield' : 1}, null)}} {{:helper.link(data.rad_shield_on ? 'Disable Radiation Shielding' : 'Enable Radiation Shielding', 'radiation', {'toggle_rad_shield' : 1}, null)}}
{{if rad_shield_on}} {{if data.rad_shield_on}}
<span class="notice" style="width: 100%;">Shield blocking scanner.</span> <span class="notice" style="width: 100%;">Shield blocking scanner.</span>
{{/if}} {{/if}}
</div> </div>
@@ -138,11 +138,11 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Coolant remaining:</div> <div class="itemLabel" style="width: 21%;">Coolant remaining:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(unused_coolant_per, 0, 100, (unused_coolant_per < 66 ? (unused_coolant_per < 33 ? 'bad' : 'average') : 'good'))}} {{:helper.displayBar(data.unused_coolant_per, 0, 100, ((data.unused_coolant_per < 66) ? ((data.unused_coolant_per < 33) ? 'bad' : 'average') : 'good'))}}
{{:unused_coolant_abs}} u {{:data.unused_coolant_abs}} u
</div> </div>
<div class="itemContent" style="width: 44%;"> <div class="itemContent" style="width: 44%;">
{{if unused_coolant_per < 20}} {{if data.unused_coolant_per < 20}}
<span class="notice" style="width: 100%;">Warning! Coolant stocks low!</span> <span class="notice" style="width: 100%;">Warning! Coolant stocks low!</span>
{{/if}} {{/if}}
</div> </div>
@@ -150,28 +150,28 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Coolant flow rate:</div> <div class="itemLabel" style="width: 21%;">Coolant flow rate:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(coolant_usage_rate, 0, 10, 'good')}} {{:helper.displayBar(data.coolant_usage_rate, 0, 10, 'good')}}
{{:coolant_usage_rate}} u/s {{:data.coolant_usage_rate}} u/s
</div> </div>
<div class="itemContent" style="text-align:left; width: 22%;"> <div class="itemContent" style="text-align:left; width: 22%;">
{{:~link('Min u/s', null, {'coolantRate' : -10}, null)}} {{:helper.link('Min u/s', null, {'coolantRate' : -10}, null)}}
{{:~link('-3 u/s', null, {'coolantRate' : -3}, null)}} {{:helper.link('-3 u/s', null, {'coolantRate' : -3}, null)}}
{{:~link('-1 u/s', null, {'coolantRate' : -1}, null)}} {{:helper.link('-1 u/s', null, {'coolantRate' : -1}, null)}}
</div> </div>
<div class="itemContent" style="text-align:right; width: 22%;"> <div class="itemContent" style="text-align:right; width: 22%;">
{{:~link('+1 u/s', null, {'coolantRate' : 1}, null)}} {{:helper.link('+1 u/s', null, {'coolantRate' : 1}, null)}}
{{:~link('+3 u/s', null, {'coolantRate' : 3}, null)}} {{:helper.link('+3 u/s', null, {'coolantRate' : 3}, null)}}
{{:~link('Max u/s', null, {'coolantRate' : 10}, null)}} {{:helper.link('Max u/s', null, {'coolantRate' : 10}, null)}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<div class="itemLabel" style="width: 21%;">Coolant purity:</div> <div class="itemLabel" style="width: 21%;">Coolant purity:</div>
<div class="itemContent" style="width: 35%;"> <div class="itemContent" style="width: 35%;">
{{:~displayBar(coolant_purity, 0, 100, (coolant_purity < 66 ? (coolant_purity < 33 ? 'bad' : 'average') : 'good'))}} {{:helper.displayBar(data.coolant_purity, 0, 100, ((data.coolant_purity < 66) ? ((data.coolant_purity < 33) ? 'bad' : 'average') : 'good'))}}
{{:coolant_purity}} % {{:data.coolant_purity}} %
</div> </div>
<div class="itemContent" style="width: 44%;"> <div class="itemContent" style="width: 44%;">
{{if coolant_purity < 0.5}} {{if data.coolant_purity < 0.5}}
<span class="notice" style="width: 100%;">Warning! Check coolant for contaminants!</span> <span class="notice" style="width: 100%;">Warning! Check coolant for contaminants!</span>
{{/if}} {{/if}}
</div> </div>
@@ -180,6 +180,6 @@ Used In File(s): \code\modules\research\xenoarchaeology\machinery\geosample_scan
<h3>Latest Results</h3> <h3>Latest Results</h3>
<div class="statusDisplay"> <div class="statusDisplay">
<div class="line"> <div class="line">
<span class="highlight">{{:last_scan_data}}</span> <span class="highlight">{{:data.last_scan_data}}</span>
</div> </div>
</div> </div>

View File

@@ -1,17 +1,13 @@
<div style="float:left;width:50%"> <div style="float:left;width:50%">
<h3>Sector information</h3> <h3>Sector information</h3>
<div class='block'> <div class='block'>
{{:sector}} {{:data.sector}}
<br> <br>
<span class='average'>Coordinates:</span> {{:s_x}} : {{:s_y}} <span class='average'>Coordinates:</span> {{:data.s_x}} : {{:data.s_y}}
<br> <br>
<span class='average'>Additional information:</span> {{:s_x}} : {{:s_y}} <span class='average'>Additional information:</span> {{:data.s_x}} : {{:data.s_y}}
{{:sector_info}} {{:data.sector_info}}
</div> </div>
</div> </div>
@@ -23,7 +19,7 @@
<span class='average'>Speed:</span> <span class='average'>Speed:</span>
</div> </div>
<div style="float:right"> <div style="float:right">
{{:speed}} {{:data.speed}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -31,7 +27,7 @@
<span class='average'>Acceleration:</span> <span class='average'>Acceleration:</span>
</div> </div>
<div style="float:right"> <div style="float:right">
{{:accel}} {{:data.accel}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -39,7 +35,7 @@
<span class='average'>Heading:</span> <span class='average'>Heading:</span>
</div> </div>
<div style="float:right"> <div style="float:right">
{{:heading}} {{:data.heading}}
</div> </div>
</div> </div>
</div> </div>
@@ -51,26 +47,26 @@
<div class='item'> <div class='item'>
<div class="itemLabel"> <div class="itemLabel">
<div class='item'> <div class='item'>
{{:~link('', 'triangle-1-nw', { 'move' : 9 }, null, null)}} {{:helper.link('', 'triangle-1-nw', { 'move' : 9 }, null, null)}}
{{:~link('', 'triangle-1-n', { 'move' : 1 }, null, null)}} {{:helper.link('', 'triangle-1-n', { 'move' : 1 }, null, null)}}
{{:~link('', 'triangle-1-ne', { 'move' : 5 }, null, null)}} {{:helper.link('', 'triangle-1-ne', { 'move' : 5 }, null, null)}}
</div> </div>
<div class='item'> <div class='item'>
{{:~link('', 'triangle-1-w', { 'move' : 8 }, null, null)}} {{:helper.link('', 'triangle-1-w', { 'move' : 8 }, null, null)}}
{{:~link('', 'circle-close', { 'brake' : 1 }, null, null)}} {{:helper.link('', 'circle-close', { 'brake' : 1 }, null, null)}}
{{:~link('', 'triangle-1-e', { 'move' : 4 }, null, null)}} {{:helper.link('', 'triangle-1-e', { 'move' : 4 }, null, null)}}
</div> </div>
<div class='item'> <div class='item'>
{{:~link('', 'triangle-1-sw', { 'move' : 10 }, null, null)}} {{:helper.link('', 'triangle-1-sw', { 'move' : 10 }, null, null)}}
{{:~link('', 'triangle-1-s', { 'move' : 2 }, null, null)}} {{:helper.link('', 'triangle-1-s', { 'move' : 2 }, null, null)}}
{{:~link('', 'triangle-1-se', { 'move' : 6 }, null, null)}} {{:helper.link('', 'triangle-1-se', { 'move' : 6 }, null, null)}}
</div> </div>
</div> </div>
<div class="itemContent"> <div class="itemContent">
<div class='item'> <div class='item'>
<span class='white'>Direct control</span> <span class='white'>Direct control</span>
{{:~link(manual_control ? 'Engaged' : 'Disengaged', 'shuffle', { 'manual' : 1 }, manual_control ? 'selected' : null, null)}} {{:helper.link(data.manual_control ? 'Engaged' : 'Disengaged', 'shuffle', { 'manual' : 1 }, data.manual_control ? 'selected' : null, null)}}
</div> </div>
</div> </div>
</div> </div>
@@ -81,7 +77,7 @@
<h3>Autopilot</h3> <h3>Autopilot</h3>
</div> </div>
<div class="itemContent" style="padding-top: 10px;"> <div class="itemContent" style="padding-top: 10px;">
{{:~link(autopilot? 'Engaged' : 'Disengaged', 'gear', { 'apilot' : 1 }, dest ? null : 'disabled' , autopilot ? 'selected' : null)}} {{:helper.link(data.autopilot ? 'Engaged' : 'Disengaged', 'gear', { 'apilot' : 1 }, data.dest ? null : 'disabled', data.autopilot ? 'selected' : null)}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -89,30 +85,30 @@
<span class='white'>Target coordinates</span> <span class='white'>Target coordinates</span>
</div> </div>
<div style="float:left;width:20%"> <div style="float:left;width:20%">
{{if dest}} {{if data.dest}}
{{:~link(d_x, null, { 'setx' : 1 }, null, null)}} {{:~link(d_y, null, { 'sety' : 1 }, null, null)}} {{:helper.link(data.d_x, null, { 'setx' : 1 }, null, null)}} {{:helper.link(data.d_y, null, { 'sety' : 1 }, null, null)}}
{{else}} {{else}}
{{:~link('None', null, { 'sety' : 1, 'setx' : 1 }, null, null)}} {{:helper.link('None', null, { 'sety' : 1, 'setx' : 1 }, null, null)}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
<h3>Navigation data</h3> <h3>Navigation data</h3>
<div class='item'> <div class='item'>
{{:~link('Save current position', 'disk', { 'add' : 'current' }, null)}} {{:helper.link('Save current position', 'disk', { 'add' : 'current' }, null)}}
{{:~link('Add new entry', 'document', { 'add' : 'new' }, null)}} {{:helper.link('Add new entry', 'document', { 'add' : 'new' }, null)}}
</div> </div>
<div class='statusDisplay'> <div class='statusDisplay'>
{{if locations}} {{if data.locations}}
{{for locations}} {{for data.locations}}
<div class='item'> <div class='item'>
<span class='average'>{{:name}}:</span> <span class='average'>{{:value.name}}:</span>
<span class='white'>{{:x}} : {{:y}}</span> <span class='white'>{{:value.x}} : {{:value.y}}</span>
</div> </div>
<div class='item'> <div class='item'>
{{:~link('Plot course', 'arrowreturnthick-1-e', { 'x' : x, 'y' : y }, null, null)}} {{:helper.link('Plot course', 'arrowreturnthick-1-e', { 'x' : value.x, 'y' : value.y }, null, null)}}
{{:~link('Remove entry', 'close', { 'remove' : reference }, null, null)}} {{:helper.link('Remove entry', 'close', { 'remove' : value.reference }, null, null)}}
</div> </div>
{{/for}} {{/for}}
{{/if}} {{/if}}

View File

@@ -1,4 +1,4 @@
{{if printing}} {{if data.printing}}
<h5 class='average'>The computer is currently busy.</h5> <h5 class='average'>The computer is currently busy.</h5>
<div class='notice'> <div class='notice'>
<center><span class='bad'>Printing...</span></center> <center><span class='bad'>Printing...</span></center>
@@ -7,23 +7,23 @@
Thank you for your patience! Thank you for your patience!
</p> </p>
{{else}} {{else}}
{{:~link('Access Modification', 'home', {'choice' : 'mode', 'mode_target' : 0}, !mode ? 'disabled' : null)}} {{:helper.link('Access Modification', 'home', {'choice' : 'mode', 'mode_target' : 0}, !data.mode ? 'disabled' : null)}}
{{:~link('Crew Manifest', 'folder-open', {'choice' : 'mode', 'mode_target' : 1}, mode ? 'disabled' : null)}} {{:helper.link('Crew Manifest', 'folder-open', {'choice' : 'mode', 'mode_target' : 1}, data.mode ? 'disabled' : null)}}
{{:~link('Print', 'print', {'choice' : 'print'}, (mode || has_modify) ? null : 'disabled')}} {{:helper.link('Print', 'print', {'choice' : 'print'}, (data.mode || data.has_modify) ? null : 'disabled')}}
{{if mode}} {{if data.mode}}
<div class='item'> <div class='item'>
<h2>Crew Manifest</h2> <h2>Crew Manifest</h2>
</div> </div>
<div class='item'> <div class='item'>
{{:manifest}} {{:data.manifest}}
</div> </div>
{{else}} {{else}}
<div class='item'> <div class='item'>
<h2>Access Modification</h2> <h2>Access Modification</h2>
</div> </div>
{{if !authenticated}} {{if !data.authenticated}}
<span class='alert'><i>Please insert the IDs into the terminal to proceed.</i></span><br> <span class='alert'><i>Please insert the IDs into the terminal to proceed.</i></span><br>
{{/if}} {{/if}}
@@ -32,7 +32,7 @@
Target Identity: Target Identity:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:~link(target_name, 'eject', {'choice' : 'modify'})}} {{:helper.link(data.target_name, 'eject', {'choice' : 'modify'})}}
</div> </div>
</div> </div>
<div class='item'> <div class='item'>
@@ -40,12 +40,12 @@
Authorized Identity: Authorized Identity:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:~link(scan_name, 'eject', {'choice' : 'scan'})}} {{:helper.link(data.scan_name, 'eject', {'choice' : 'scan'})}}
</div> </div>
</div> </div>
<hr> <hr>
{{if authenticated}} {{if data.authenticated}}
<script type="text/javascript"> <script type="text/javascript">
function markRed(){ function markRed(){
var nameField = document.getElementById('namefield'); var nameField = document.getElementById('namefield');
@@ -64,47 +64,47 @@
nameField.style.backgroundColor = "#FFDDDD"; nameField.style.backgroundColor = "#FFDDDD";
} }
function showAll(){ function showAll(){
var allJobsSlot = document.getElementById('alljobsslot'); var allJobsSlot = document.getElementById('allvalue.jobsslot');
allJobsSlot.innerHTML = "<a href='#' onclick='hideAll()'>Hide</a><br>"; allJobsSlot.innerHTML = "<a href='#' onclick='hideAll()'>Hide</a><br>";
var allJobs = document.getElementById('all-jobs'); var allJobs = document.getElementById('all-value.jobs');
allJobs.style.display = 'block'; allJobs.style.display = 'block';
} }
function hideAll(){ function hideAll(){
var allJobsSlot = document.getElementById('alljobsslot'); var allJobsSlot = document.getElementById('allvalue.jobsslot');
allJobsSlot.innerHTML = "<a href='#' onclick='showAll()'>{{:target_rank}}</a>"; allJobsSlot.innerHTML = "<a href='#' onclick='showAll()'>{{:data.target_rank}}</a>";
var allJobs = document.getElementById('all-jobs'); var allJobs = document.getElementById('all-value.jobs');
allJobs.style.display = 'none'; allJobs.style.display = 'none';
} }
</script> </script>
{{if has_modify}} {{if data.has_modify}}
<div class='item'> <div class='item'>
<h2>Details</h2> <h2>Details</h2>
</div> </div>
<form name='cardcomp' action='?src={{:src}}' method='get'> <form name='cardcomp' action='?src={{:data.src}}' method='get'>
<div class='item'> <div class='item'>
<div class='itemLabel'> <div class='itemLabel'>
<input type='hidden' name='src' value='{{:src}}'> <input type='hidden' name='src' value='{{:data.src}}'>
<input type='hidden' name='choice' value='reg'> <input type='hidden' name='choice' value='reg'>
Registered Name: Registered Name:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
<input type='text' id='namefield' name='reg' value='{{:target_owner}}' onchange='markRed()'> <input type='text' id='namefield' name='reg' value='{{:data.target_owner}}' onchange='markRed()'>
<input type='submit' value='Rename' onclick='markGreen()'> <input type='submit' value='Rename' onclick='markGreen()'>
</div> </div>
</div> </div>
</form> </form>
<form name='accountnum' action='?src={{:src}}' method='get'> <form name='accountnum' action='?src={{:data.src}}' method='get'>
<div class='item'> <div class='item'>
<div class='itemLabel'> <div class='itemLabel'>
<input type='hidden' name='src' value='{{:src}}'> <input type='hidden' name='src' value='{{:data.src}}'>
<input type='hidden' name='choice' value='account'> <input type='hidden' name='choice' value='account'>
Account Number: Account Number:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
<input type='text' id='accountfield' name='account' value='{{:account_number}}' onchange='markAccountRed()'> <input type='text' id='accountfield' name='account' value='{{:data.account_number}}' onchange='markAccountRed()'>
<input type='submit' value='Modify' onclick='markAccountGreen()'> <input type='submit' value='Modify' onclick='markAccountGreen()'>
</div> </div>
</div> </div>
@@ -115,7 +115,7 @@
Terminations: Terminations:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:~link('Terminate ' + target_owner, 'gear', {'choice' : 'terminate'}, target_rank == "Terminated" ? 'disabled' : null, target_rank == "Terminated" ? 'disabled' : 'linkDanger')}} {{:helper.link('Terminate ' + data.target_owner, 'gear', {'choice' : 'terminate'}, data.target_rank == "Terminated" ? 'disabled' : null, data.target_rank == "Terminated" ? 'disabled' : 'linkDanger')}}
</div> </div>
</div> </div>
@@ -124,12 +124,12 @@
</div> </div>
<div class='item'> <div class='item'>
<span id='alljobsslot'> <span id='allvalue.jobsslot'>
<a href='#' onclick='showAll()'>{{:target_rank}}</a> <a href='#' onclick='showAll()'>{{:data.target_rank}}</a>
</span> </span>
</div> </div>
<div class='item'> <div class='item'>
<div id="all-jobs" style='display: none;'> <div id="all-value.jobs" style='display: none;'>
<table> <table>
<tr> <tr>
<th></th><th>Command</th> <th></th><th>Command</th>
@@ -137,63 +137,63 @@
<tr> <tr>
<th>Special</th> <th>Special</th>
<td> <td>
{{:~link("Captain", '', {'choice' : 'assign', 'assign_target' : 'Captain'}, target_rank == 'Captain' ? 'disabled' : null)}} {{:helper.link("Captain", '', {'choice' : 'assign', 'assign_target' : 'Captain'}, data.target_rank == 'Captain' ? 'disabled' : null)}}
{{:~link("Custom", '', {'choice' : 'assign', 'assign_target' : 'Custom'})}} {{:helper.link("Custom", '', {'choice' : 'assign', 'assign_target' : 'Custom'})}}
</td> </td>
</tr> </tr>
<tr> <tr>
<th style="color: '#FFA500';">Engineering</th> <th style="color: '#FFA500';">Engineering</th>
<td> <td>
{{for engineering_jobs}} {{for data.engineering_jobs}}
{{:~link(display_name, '', {'choice' : 'assign', 'assign_target' : job}, target_rank == job ? 'disabled' : null)}} {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}}
{{/for}} {{/for}}
</td> </td>
</tr> </tr>
<tr> <tr>
<th style="color: '#008000';">Medical</th> <th style="color: '#008000';">Medical</th>
<td> <td>
{{for medical_jobs}} {{for data.medical_jobs}}
{{:~link(display_name, '', {'choice' : 'assign', 'assign_target' : job}, target_rank == job ? 'disabled' : null)}} {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}}
{{/for}} {{/for}}
</td> </td>
</tr> </tr>
<tr> <tr>
<th style="color: '#800080';">Science</th> <th style="color: '#800080';">Science</th>
<td> <td>
{{for science_jobs}} {{for data.science_jobs}}
{{:~link(display_name, '', {'choice' : 'assign', 'assign_target' : job}, target_rank == job ? 'disabled' : null)}} {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}}
{{/for}} {{/for}}
</td> </td>
</tr> </tr>
<tr> <tr>
<th style="color: '#DD0000';">Security</th> <th style="color: '#DD0000';">Security</th>
<td> <td>
{{for security_jobs}} {{for data.security_jobs}}
{{:~link(display_name, '', {'choice' : 'assign', 'assign_target' : job}, target_rank == job ? 'disabled' : null)}} {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}}
{{/for}} {{/for}}
</td> </td>
</tr> </tr>
<tr> <tr>
<th style="color: '#808080';">Civilian</th> <th style="color: '#808080';">Civilian</th>
<td> <td>
{{for civilian_jobs}} {{for data.civilian_jobs}}
{{if #index && #index % 6 === 0}} {{if index && index % 6 === 0}}
</td></tr><tr><th></th><td> </td></tr><tr><th></th><td>
{{/if}} {{/if}}
{{:~link(display_name, '', {'choice' : 'assign', 'assign_target' : job}, target_rank == job ? 'disabled' : null)}} {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}}
{{/for}} {{/for}}
</td> </td>
</tr> </tr>
{{if centcom_access}} {{if data.centcom_access}}
<tr> <tr>
<th style="color: '#A52A2A';">CentCom</th> <th style="color: '#A52A2A';">CentCom</th>
<td> <td>
{{for centcom_jobs}} {{for data.centcom_jobs}}
{{if #index % 6 === 0}} {{if index % 6 === 0}}
</td></tr><tr><th></th><td> </td></tr><tr><th></th><td>
{{/if}} {{/if}}
{{:~link(display_name, '', {'choice' : 'assign', 'assign_target' : job}, target_rank == job ? 'disabled' : null)}} {{:helper.link(value.display_name, '', {'choice' : 'assign', 'assign_target' : value.job}, data.target_rank == value.job ? 'disabled' : null)}}
{{/for}} {{/for}}
</td> </td>
</tr> </tr>
@@ -202,28 +202,28 @@
</div> </div>
</div> </div>
{{if centcom_access}} {{if data.centcom_access}}
<div class='item'> <div class='item'>
<h2>Central Command</h2> <h2>Central Command</h2>
</div> </div>
<div class='item' style='width: 100%'> <div class='item' style='width: 100%'>
{{for all_centcom_access}} {{for data.all_centcom_access}}
<div class='itemContentWide'> <div class='itemContentWide'>
{{:~link(desc, '', {'choice' : 'access', 'access_target' : ref, 'allowed' : allowed}, null, allowed ? 'selected' : null)}} {{:helper.link(value.desc, '', {'choice' : 'access', 'access_target' : value.ref, 'allowed' : allowed}, null, value.allowed ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
{{else}} {{else}}
<div class='item'> <div class='item'>
<h2>{{:station_name}}</h2> <h2>{{:data.station_name}}</h2>
</div> </div>
<div class='item' style='width: 100%'> <div class='item' style='width: 100%'>
{{for regions}} {{for data.regions}}
<div style='float: left; width: 175px; min-height: 250px'> <div style='float: left; width: 175px; min-height: 250px'>
<div class='average'><b>{{:name}}</b></div> <div class='average'><b>{{:value.name}}</b></div>
{{for accesses}} {{for value.accesses :accessValue:accessKey}}
<div class='itemContentWide'> <div class='itemContentWide'>
{{:~link(desc, '', {'choice' : 'access', 'access_target' : ref, 'allowed' : allowed}, null, allowed ? 'selected' : null)}} {{:helper.link(accessValue.desc, '', {'choice' : 'access', 'access_target' : accessValue.ref, 'allowed' : accessValue.allowed}, null, accessValue.allowed ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>

View File

@@ -1,45 +1,45 @@
<div class="item"> <div class="item">
{{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} {{:helper.link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}}
{{:~link('Print', 'print', { 'print' : 1 }, antibodies || pathogens ? null : 'disabled', 'fixedLeft')}} {{:helper.link('Print', 'print', { 'print' : 1 }, data.antibodies || data.pathogens ? null : 'disabled', 'fixedLeft')}}
</div> </div>
{{if busy}} {{if data.busy}}
<h5 class='average'>The Centrifuge is currently busy.</h5> <h5 class='average'>The Centrifuge is currently busy.</h5>
<div class='notice'> <div class='notice'>
<center><span class='bad'>{{:busy}}</span></center> <center><span class='bad'>{{:data.busy}}</span></center>
</div> </div>
<p> <p>
Thank you for your patience! Thank you for your patience!
</p> </p>
{{else}} {{else}}
<div class="item"> <div class="item">
<h2>{{:is_antibody_sample ? 'Antibody Sample' : 'Blood Sample'}}</h2> <h2>{{:data.is_antibody_sample ? 'Antibody Sample' : 'Blood Sample'}}</h2>
</div> </div>
<div class='item'> <div class='item'>
{{:~link('Eject Vial', 'eject', { 'action' : 'sample' }, sample_inserted ? null : 'disabled')}} {{:helper.link('Eject Vial', 'eject', { 'action' : 'sample' }, data.sample_inserted ? null : 'disabled')}}
</div> </div>
{{if sample_inserted}} {{if data.sample_inserted}}
{{if antibodies || pathogens}} {{if data.antibodies || data.pathogens}}
<div class="statusDisplay"> <div class="statusDisplay">
{{if antibodies}} {{if data.antibodies}}
<div class='item'> <div class='item'>
<div class='itemLabel'> <div class='itemLabel'>
<span class='good'>Antibodies:</span> <span class='good'>Antibodies:</span>
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:antibodies}} {{:data.antibodies}}
</div> </div>
</div> </div>
{{/if}} {{/if}}
{{if pathogens}} {{if data.pathogens}}
<div class='item'> <div class='item'>
<div class='itemLabel'> <div class='itemLabel'>
<span class='good'>Pathogens:</span> <span class='good'>Pathogens:</span>
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{for pathogens}} {{for data.pathogens}}
<div class='highlight'> <div class='highlight'>
{{:name}} ({{:spread_type}}) {{:value.name}} ({{:value.spread_type}})
</div> </div>
{{/for}} {{/for}}
</div> </div>
@@ -56,24 +56,24 @@
<span class='average'>No vial detected.</span> <span class='average'>No vial detected.</span>
</div> </div>
{{/if}} {{/if}}
{{if antibodies && !is_antibody_sample}} {{if data.antibodies && !data.is_antibody_sample}}
<div class='item'> <div class='item'>
<div class='itemLabelWide'> <div class='itemLabelWide'>
Isolate Antibodies: Isolate Antibodies:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{:~link(antibodies, 'pencil', { 'action' : 'antibody' })}} {{:helper.link(data.antibodies, 'pencil', { 'action' : 'antibody' })}}
</div> </div>
</div> </div>
{{/if}} {{/if}}
{{if pathogens}} {{if data.pathogens}}
<div class='item'> <div class='item'>
<div class='itemLabelWide'> <div class='itemLabelWide'>
Isolate Strain: Isolate Strain:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{for pathogens}} {{for data.pathogens}}
{{:~link(name, 'pencil', { 'isolate' : reference })}} {{:helper.link(value.name, 'pencil', { 'isolate' : value.reference })}}
{{/for}} {{/for}}
</div> </div>
</div> </div>

View File

@@ -4,13 +4,13 @@
Docking Port Status: Docking Port Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
<span class="good">DOCKED</span> <span class="good">DOCKED</span>
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
<span class="average">DOCKING</span> <span class="average">DOCKING</span>
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
<span class="average">UNDOCKING</span> <span class="average">UNDOCKING</span>
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
<span class="idle">NOT IN USE</span> <span class="idle">NOT IN USE</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -19,14 +19,14 @@
</div> </div>
</div> </div>
{{for airlocks}} {{for data.airlocks}}
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
{{:name}} {{:value.name}}
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if override_enabled}} {{if value.override_enabled}}
<span class="bad">OVERRIDE ENABLED</span> <span class="bad">OVERRIDE ENABLED</span>
{{else}} {{else}}
<span class="good">STATUS OK</span> <span class="good">STATUS OK</span>

View File

@@ -1,82 +1,82 @@
<div class="item"> <div class="item">
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
{{:~link(power ? 'On' : 'Off', null, {'command' : 'power'}, null, power ? 'selected' : 'redBackground')}} {{:helper.link(data.power ? 'On' : 'Off', null, {'command' : 'power'}, null, data.power ? 'selected' : 'redBackground')}}
</div> </div>
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
{{:~link('Configure', null, {'command' : 'configure'}, null, config ? 'selected' : null)}} {{:helper.link('Configure', null, {'command' : 'configure'}, null, data.config ? 'selected' : null)}}
</div> </div>
{{if config}} {{if data.config}}
<div style="width: 315px; text-align: center"> <div style="width: 315px; text-align: center">
<div style="float: left"> <div style="float: left">
<div class="white" style="height: 26">Port</div> <div class="white" style="height: 26">Port</div>
{{for ports}} {{for data.ports}}
<div class="average" style="height: 26">{{:dir}} Port</div> <div class="average" style="height: 26">{{:value.dir}} Port</div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Input</div> <div class="white" style="height: 26">Input</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{:~link(' ', null, {'command' : 'switch_mode', 'mode' : 'in', 'dir' : dir}, null, input ? 'selected' : null)}} {{:helper.link(' ', null, {'command' : 'switch_mode', 'mode' : 'in', 'dir' : value.dir}, null, value.input ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Output</div> <div class="white" style="height: 26">Output</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{:~link(' ', null, {'command' : 'switch_mode', 'mode' : 'out', 'dir' : dir}, null, output ? 'selected' : null)}} {{:helper.link(' ', null, {'command' : 'switch_mode', 'mode' : 'out', 'dir' : value.dir}, null, value.output ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Filter</div> <div class="white" style="height: 26">Filter</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{:~link(f_type ? f_type : 'None', null, {'command' : 'switch_filter', 'mode' : f_type, 'dir' : dir}, filter ? null : 'disabled', f_type ? 'selected' : null)}} {{:helper.link(value.f_type ? value.f_type : 'None', null, {'command' : 'switch_filter', 'mode' : value.f_type, 'dir' : value.dir}, value.filter ? null : 'disabled', value.f_type ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
</div> </div>
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
Target Output Pressure: {{:~round(pressure)}} kPa Target Output Pressure: {{:helper.round(data.pressure)}} kPa
</div> </div>
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
{{:~link('Set Target Pressure', null, {'command' : 'set_pressure'})}} {{:helper.link('Set Target Pressure', null, {'command' : 'set_pressure'})}}
</div> </div>
{{else}} {{else}}
<div style="width: 315px; text-align: center"> <div style="width: 315px; text-align: center">
<div style="float: left"> <div style="float: left">
<div class="white" style="height: 26">Port</div> <div class="white" style="height: 26">Port</div>
{{for ports}} {{for data.ports}}
<div class="average" style="height: 26">{{:dir}} Port</div> <div class="average" style="height: 26">{{:value.dir}} Port</div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Mode</div> <div class="white" style="height: 26">Mode</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{if input}} {{if value.input}}
Input Input
{{else output}} {{else value.output}}
Output Output
{{else f_type}} {{else value.f_type}}
{{:f_type}} {{:value.f_type}}
{{else}} {{else}}
Disabled Disabled
{{/if}} {{/if}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
</div> </div>
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
Target Output Pressure: {{:~round(pressure)}} kPa Target Output Pressure: {{:helper.round(data.pressure)}} kPa
</div> </div>
{{/if}} {{/if}}
</div> </div>

View File

@@ -1,100 +1,101 @@
<div class="item"> <div class="item">
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
{{:~link(power ? 'On' : 'Off', null, {'command' : 'power'}, null, power ? 'selected' : 'redBackground')}} {{:helper.link(data.power ? 'On' : 'Off', null, {'command' : 'power'}, null, data.power ? 'selected' : 'redBackground')}}
</div> </div>
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
{{:~link('Configure', null, {'command' : 'configure'}, null, config ? 'selected' : null)}} {{:helper.link('Configure', null, {'command' : 'configure'}, null, data.config ? 'selected' : null)}}
</div> </div>
{{if config}} {{if data.config}}
<div style="width: 315px; text-align: center"> <div style="width: 315px; text-align: center">
<div style="float: left"> <div style="float: left">
<div class="white" style="height: 26">Port</div> <div class="white" style="height: 26">Port</div>
{{for ports}} {{for data.ports}}
<div class="average" style="height: 26">{{:dir}} Port</div> <div class="average" style="height: 26">{{:value.dir}} Port</div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Input</div> <div class="white" style="height: 26">Input</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{:~link(' ', null, input ? {'command' : 'switch_mode', 'mode' : 'none', 'dir' : dir} : {'command' : 'switch_mode', 'mode' : 'in', 'dir' : dir}, output ? 'disabled' : null, input ? 'selected' : null)}} {{:helper.link(' ', null, value.input ? {'command' : 'switch_mode', 'mode' : 'none', 'dir' : value.dir} : {'command' : 'switch_mode', 'mode' : 'in', 'dir' : value.dir}, value.output ? 'disabled' : null, value.input ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Output</div> <div class="white" style="height: 26">Output</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{:~link(' ', null, output ? null : {'command' : 'switch_mode', 'mode' : 'out', 'dir' : dir}, null, output ? 'selected' : null)}} {{:helper.link(' ', null, value.output ? null : {'command' : 'switch_mode', 'mode' : 'out', 'dir' : value.dir}, null, value.output ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Concentration</div> <div class="white" style="height: 26">Concentration</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{:~link( input ? ~round(concentration*100)+' %' : '-', null, {'command' : 'switch_con', 'dir' : dir}, input ? null : 'disabled')}} {{:helper.link( value.input ? helper.round(value.concentration*100)+' %' : '-', null, {'command' : 'switch_con', 'dir' : value.dir}, value.input ? null : 'disabled')}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Lock</div> <div class="white" style="height: 26">Lock</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{:~link(' ', con_lock ? 'locked' : 'unlocked', {'command' : 'switch_conlock', 'dir' : dir}, input ? null : 'disabled', con_lock ? 'selected' : null)}} {{:helper.link(' ', value.con_lock ? 'locked' : 'unlocked', {'command' : 'switch_conlock', 'dir' : value.dir}, value.input ? null : 'disabled', value.con_lock ? 'selected' : null)}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
</div> </div>
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
Target Output Pressure: {{:~round(pressure)}} kPa Target Output Pressure: {{:helper.round(data.pressure)}} kPa
</div> </div>
<div class="itemContent" style="padding: 5px"> <div class="itemContent" style="padding: 5px">
{{:~link('Set Target Pressure', null, {'command' : 'set_pressure'})}} {{:helper.link('Set Target Pressure', null, {'command' : 'set_pressure'})}}
</div> </div>
{{else}} {{else}}
<div style="width: 315px; text-align: center"> <div style="width: 315px; text-align: center">
<div style="float: left"> <div style="float: left">
<div class="white" style="height: 26">Port</div> <div class="white" style="height: 26">Port</div>
{{for ports}} {{for data.ports}}
<div class="average" style="height: 26">{{:dir}} Port</div> <div class="average" style="height: 26">{{:value.dir}} Port</div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Mode</div> <div class="white" style="height: 26">Mode</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{if input}} {{if value.input}}
Input Input
{{else output}} {{else value.output}}
Output Output
{{else}} {{else}}
Disabled Disabled
{{/if}} {{/if}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
<div style="float: left; margin-left: 10"> <div style="float: left; margin-left: 10">
<div class="white" style="height: 26">Concentration</div> <div class="white" style="height: 26">Concentration</div>
{{for ports}} {{for data.ports}}
<div style="height: 26"> <div style="height: 26">
{{if input}} {{if value.input}}
{{:~round(concentration*100)}} % {{:helper.round(value.concentration*100)}} %
{{else}} {{else}}
- -
{{/if}} {{/if}}
</div> </div>
{{/for}} {{/for}}
</div> </div>
</div> </div>
<div class="itemContent" style="padding: 5px">
Target Output Pressure: {{:helper.round(data.pressure)}} kPa
</div>
<div class="itemContent" style="padding: 5px">
Target Output Pressure: {{:~round(pressure)}} kPa
</div>
{{/if}} {{/if}}
</div> </div>

View File

@@ -2,17 +2,17 @@
<h2>Menu</h2> <h2>Menu</h2>
</div> </div>
<div class="item"> <div class="item">
{{if !isolating}} {{if !data.isolating}}
{{:~link('Home', 'home', {'home' : 1}, state == 'home' ? 'disabled' : null, 'fixedLeft')}} {{:helper.link('Home', 'home', {'home' : 1}, data.state == 'home' ? 'disabled' : null, 'fixedLeft')}}
{{:~link('List', 'note', {'list' : 1}, state == 'list' ? 'disabled' : null, 'fixedLeft')}} {{:helper.link('List', 'note', {'list' : 1}, data.state == 'list' ? 'disabled' : null, 'fixedLeft')}}
{{:~link('Pathogen', 'folder-open', {'entry' : 1}, state == 'entry' ? 'disabled' : null, 'fixedLeft')}} {{:helper.link('Pathogen', 'folder-open', {'entry' : 1}, data.state == 'entry' ? 'disabled' : null, 'fixedLeft')}}
{{/if}} {{/if}}
<br> <br>
{{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} {{:helper.link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}}
{{:~link('Print', 'print', { 'print' : 1 }, can_print ? null : 'disabled', 'fixedLeft')}} {{:helper.link('Print', 'print', { 'print' : 1 }, data.can_print ? null : 'disabled', 'fixedLeft')}}
</div> </div>
{{if isolating}} {{if data.isolating}}
<h5 class='average'>The Isolator is currently busy.</h5> <h5 class='average'>The Isolator is currently busy.</h5>
<div class='notice'> <div class='notice'>
<center><span class='bad'>Isolating pathogens...</span></center> <center><span class='bad'>Isolating pathogens...</span></center>
@@ -21,22 +21,22 @@
Thank you for your patience! Thank you for your patience!
</p> </p>
{{else}} {{else}}
{{if state =="home"}} {{if data.state =="home"}}
<div class="item"> <div class="item">
<h2>Blood Sample</h2> <h2>Blood Sample</h2>
</div> </div>
<div class='item'> <div class='item'>
{{:~link('Eject Syringe', 'eject', { 'eject' : 1 }, syringe_inserted ? null : 'disabled')}} {{:helper.link('Eject Syringe', 'eject', { 'eject' : 1 }, data.syringe_inserted ? null : 'disabled')}}
</div> </div>
{{if syringe_inserted}} {{if data.syringe_inserted}}
<div class='statusDisplay'> <div class='statusDisplay'>
<span class='good'><b>Pathogens:</b></span> <span class='good'><b>Pathogens:</b></span>
{{if pathogen_pool}} {{if data.pathogen_pool}}
{{for pathogen_pool}} {{for data.pathogen_pool}}
<div class='item'> <div class='item'>
<span class='highlight'><b><u>{{:#index + 1}}. #{{:unique_id}}</u> {{:is_in_database ? "(Analysed)" : ""}}</b></span><br> <span class='highlight'><b><u>{{:index + 1}}. #{{:value.unique_id}}</u> {{:value.is_in_database ? "(Analysed)" : ""}}</b></span><br>
<span class='average'>{{:name}}:</span> {{:dna}} <span class='average'>{{:value.name}}:</span> {{:value.dna}}
</div> </div>
{{/for}} {{/for}}
{{else}} {{else}}
@@ -48,14 +48,14 @@
<span class='average'>No syringe loaded.</span> <span class='average'>No syringe loaded.</span>
</div> </div>
{{/if}} {{/if}}
{{if pathogen_pool}} {{if data.pathogen_pool}}
<div class='item'> <div class='item'>
<div class='itemLabelWide'> <div class='itemLabelWide'>
Isolate Pathogens: Isolate Pathogens:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{for pathogen_pool}} {{for data.pathogen_pool}}
{{:~link('#' + unique_id, 'pencil', { 'isolate' : reference }, null, 'fixedLeft')}} {{:helper.link('#' + value.unique_id, 'pencil', { 'isolate' : value.reference }, null, 'fixedLeft')}}
{{/for}} {{/for}}
</div> </div>
</div> </div>
@@ -64,25 +64,25 @@
Database Lookup: Database Lookup:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{for pathogen_pool}} {{for data.pathogen_pool}}
{{if is_in_database}} {{if value.is_in_database}}
{{:~link('#' + unique_id, 'info', { 'entry' : 1, 'view' : record }, null, 'fixedLeft')}} {{:helper.link('#' + value.unique_id, 'info', { 'entry' : 1, 'view' : value.record }, null, 'fixedLeft')}}
{{/if}} {{/if}}
{{/for}} {{/for}}
</div> </div>
</div> </div>
{{/if}} {{/if}}
{{else}} {{else}}
{{if state == "list"}} {{if data.state == "list"}}
<div class='item'> <div class='item'>
<h2>View Database</h2> <h2>View Database</h2>
</div> </div>
<div class='item'> <div class='item'>
{{if database}} {{if data.database}}
{{for database}} {{for data.database}}
<div class='itemContent'> <div class='itemContent'>
<div class='highlight fixedLeft'>{{:name}}</div> <div class='highlight fixedLeft'>{{:data.name}}</div>
{{:~link('Details', 'circle-arrow-s', { 'entry' : 1, 'view' : record }, null, 'fixedLeft')}} {{:helper.link('Details', 'circle-arrow-s', { 'entry' : 1, 'view' : value.record }, null, 'fixedLeft')}}
</div> </div>
{{/for}} {{/for}}
{{else}} {{else}}
@@ -90,13 +90,13 @@
{{/if}} {{/if}}
</div> </div>
{{else}} {{else}}
{{if state == "entry"}} {{if data.state == "entry"}}
{{if entry}} {{if data.entry}}
<div class='item'> <div class='item'>
<h2>{{:entry.name}}</h2> <h2>{{:data.entry.name}}</h2>
</div> </div>
<div class='statusDisplay'> <div class='statusDisplay'>
{{:entry.description}} {{:data.entry.description}}
</div> </div>
{{else}} {{else}}
<span class='average'>No virus selected.</span> <span class='average'>No virus selected.</span>

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
<h3>Shuttle Status</h3> <h3>Shuttle Status</h3>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
{{:shuttle_status}} {{:data.shuttle_status}}
</div> </div>
</div> </div>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
@@ -10,11 +10,11 @@
Bluespace Drive: Bluespace Drive:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if shuttle_state == "idle"}} {{if data.shuttle_state == "idle"}}
<span class="idle">IDLE</span> <span class="idle">IDLE</span>
{{else shuttle_state == "warmup"}} {{else data.shuttle_state == "warmup"}}
<span style="font-weight: bold;color: #336699">SPINNING UP</span> <span style="font-weight: bold;color: #336699">SPINNING UP</span>
{{else shuttle_state == "in_transit"}} {{else data.shuttle_state == "in_transit"}}
<span style="font-weight: bold;color: #336699">ENGAGED</span> <span style="font-weight: bold;color: #336699">ENGAGED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -22,28 +22,28 @@
</div> </div>
</div> </div>
</div> </div>
{{if has_docking}} {{if data.has_docking}}
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
Docking Status: Docking Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
<span class="good">DOCKED</span> <span class="good">DOCKED</span>
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
{{if !docking_override}} {{if !data.docking_override}}
<span class="average">DOCKING</span> <span class="average">DOCKING</span>
{{else}} {{else}}
<span class="average">DOCKING-MANUAL</span> <span class="average">DOCKING-MANUAL</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
{{if !docking_override}} {{if !data.docking_override}}
<span class="average">UNDOCKING</span> <span class="average">UNDOCKING</span>
{{else}} {{else}}
<span class="average">UNDOCKING-MANUAL</span> <span class="average">UNDOCKING-MANUAL</span>
{{/if}} {{/if}}
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
<span class="idle">UNDOCKED</span> <span class="idle">UNDOCKED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -58,9 +58,9 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{:~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, can_launch? null : 'disabled' , null)}} {{:helper.link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch? null : 'disabled' , null)}}
{{:~link('Cancel Launch', 'cancel', {'cancel' : '1'}, can_cancel? null : 'disabled' , null)}} {{:helper.link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}}
{{:~link('Force Launch', 'alert', {'force' : '1'}, can_force? null : 'disabled' , can_force? 'redBackground' : null)}} {{:helper.link('Force Launch', 'alert', {'force' : '1'}, data.can_force? null : 'disabled' , can_force? 'redBackground' : null)}}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,7 +1,7 @@
<h3>Shuttle Status</h3> <h3>Shuttle Status</h3>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
{{:shuttle_status}} {{:data.shuttle_status}}
</div> </div>
</div> </div>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
@@ -10,11 +10,11 @@
Drive: Drive:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if shuttle_state == "idle"}} {{if data.shuttle_state == "idle"}}
<span class="idle">IDLE</span> <span class="idle">IDLE</span>
{{else shuttle_state == "warmup"}} {{else data.shuttle_state == "warmup"}}
<span style="font-weight: bold;color: #336699">SPINNING UP</span> <span style="font-weight: bold;color: #336699">SPINNING UP</span>
{{else shuttle_state == "in_transit"}} {{else data.shuttle_state == "in_transit"}}
<span style="font-weight: bold;color: #336699">ENGAGED</span> <span style="font-weight: bold;color: #336699">ENGAGED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -22,53 +22,52 @@
</div> </div>
</div> </div>
</div> </div>
{{if has_docking}} {{if data.has_docking}}
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
Docking Status: Docking Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
<span class="good">DOCKED</span> <span class="good">DOCKED</span>
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
{{if !docking_override}} {{if !data.docking_override}}
<span class="average">DOCKING</span> <span class="average">DOCKING</span>
{{else}} {{else}}
<span class="average">DOCKING-MANUAL</span> <span class="average">DOCKING-MANUAL</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
{{if !docking_override}} {{if !data.docking_override}}
<span class="average">UNDOCKING</span> <span class="average">UNDOCKING</span>
{{else}} {{else}}
<span class="average">UNDOCKING-MANUAL</span> <span class="average">UNDOCKING-MANUAL</span>
{{/if}} {{/if}}
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
<span class="idle">UNDOCKED</span> <span class="idle">UNDOCKED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{/if}} {{/if}}
</div> </div>
</div> </div>
</div> </div>
{{/if}} {{/if}}
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="itemLabel"> <div class="itemLabel">
Current Destination: Current Destination:
</div> </div>
<span class="average">{{:destination_name}}</span> <span class="average">{{:data.destination_name}}</span>
<div class="item"> <div class="item">
{{:~link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, can_pick? null : 'disabled' , null)}} {{:data.~link('Choose Destination', 'arrowreturn-1-s', {'pick' : '1'}, data.can_pick ? null : 'disabled' , null)}}
</div> </div>
</div> </div>
<h3>Shuttle Control</h3> <h3>Shuttle Control</h3>
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{:~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, can_launch? null : 'disabled' , null)}} {{:data.~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, data.can_launch ? null : 'disabled' , null)}}
{{:~link('Cancel Launch', 'cancel', {'cancel' : '1'}, can_cancel? null : 'disabled' , null)}} {{:data.~link('Cancel Launch', 'cancel', {'cancel' : '1'}, data.can_cancel ? null : 'disabled' , null)}}
{{:~link('Force Launch', 'alert', {'force' : '1'}, can_force? null : 'disabled' , can_force? 'redBackground' : null)}} {{:data.~link('Force Launch', 'alert', {'force' : '1'}, data.can_force ? null : 'disabled' , can_force? 'redBackground' : null)}}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -4,9 +4,9 @@
Chamber Pressure: Chamber Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(chamber_pressure, 0, 200, chamber_pressure < 80 || chamber_pressure > 120 ? 'bad' : chamber_pressure < 95 || chamber_pressure > 110 ? 'average' : 'good')}} {{:helper.displayBar(chamber_pressure, 0, 200, (chamber_pressure < 80) || (chamber_pressure > 120) ? 'bad' : (chamber_pressure < 95) || (chamber_pressure > 110) ? 'average' : 'good')}}
<div class="statusValue"> <div class="statusValue">
{{:chamber_pressure}} kPa {{:data.chamber_pressure}} kPa
</div> </div>
</div> </div>
</div> </div>
@@ -14,23 +14,23 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="width: 100%"> <div class="itemContent" style="width: 100%">
{{:~link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, processing ? 'disabled' : null)}} {{:helper.link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, data.processing ? 'disabled' : null)}}
{{:~link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, processing ? 'disabled' : null)}} {{:helper.link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, data.processing ? 'disabled' : null)}}
</div> </div>
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{if interior_status.state == "open"}} {{if data.interior_status.state == "open"}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, 'redBackground')}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, 'redBackground')}}
{{else}} {{else}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, processing ? 'yellowBackground' : null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, data.processing ? 'yellowBackground' : null)}}
{{/if}} {{/if}}
{{if exterior_status.state == "open"}} {{if data.exterior_status.state == "open"}}
{{:~link('Force interior door', 'alert', {'command' : 'force_int'}, null, 'redBackground')}} {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, null, 'redBackground')}}
{{else}} {{else}}
{{:~link('Force interior door', 'alert', {'command' : 'force_int'}, null, processing ? 'yellowBackground' : null)}} {{:helper.link('Force interior door', 'alert', {'command' : 'force_int'}, null, data.processing ? 'yellowBackground' : null)}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
<div class="item" style="padding-top: 10px; width: 100%"> <div class="item" style="padding-top: 10px; width: 100%">
{{:~link('Abort', 'cancel', {'command' : 'abort'}, processing ? null : 'disabled', processing ? 'redBackground' : null)}} {{:helper.link('Abort', 'cancel', {'command' : 'abort'}, data.processing ? null : 'disabled', data.processing ? 'redBackground' : null)}}
</div> </div>
</div> </div>

View File

@@ -4,26 +4,26 @@
Docking Port Status: Docking Port Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="good">DOCKED</span> <span class="good">DOCKED</span>
{{else}} {{else}}
<span class="bad">DOCKED-OVERRIDE ENABLED</span> <span class="bad">DOCKED-OVERRIDE ENABLED</span>
{{/if}} {{/if}}
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="average">DOCKING</span> <span class="average">DOCKING</span>
{{else}} {{else}}
<span class="bad">DOCKING-OVERRIDE ENABLED</span> <span class="bad">DOCKING-OVERRIDE ENABLED</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="average">UNDOCKING</span> <span class="average">UNDOCKING</span>
{{else}} {{else}}
<span class="bad">UNDOCKING-OVERRIDE ENABLED</span> <span class="bad">UNDOCKING-OVERRIDE ENABLED</span>
{{/if}} {{/if}}
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
{{if !override_enabled}} {{if !data.override_enabled}}
<span class="idle">NOT IN USE</span> <span class="idle">NOT IN USE</span>
{{else}} {{else}}
<span class="bad" style="float:left">OVERRIDE ENABLED</span> <span class="bad" style="float:left">OVERRIDE ENABLED</span>
@@ -40,40 +40,40 @@
Docking Hatch: Docking Hatch:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="good">OPEN</span> <span class="good">OPEN</span>
{{else door_state == "closed"}} {{else data.door_state == "closed"}}
<span class="good">CLOSED</span> <span class="good">CLOSED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{/if}} {{/if}}
{{else docking_status == "docking"}} {{else data.docking_status == "docking"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="good">OPEN</span> <span class="good">OPEN</span>
{{else door_state == "closed" && door_lock == "locked"}} {{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span> <span class="good">SECURED</span>
{{else door_state == "closed" && door_lock == "unlocked"}} {{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="good">UNSECURED</span> <span class="good">UNSECURED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{/if}} {{/if}}
{{else docking_status == "undocking"}} {{else data.docking_status == "undocking"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="average">OPEN</span> <span class="average">OPEN</span>
{{else door_state == "closed" && door_lock == "locked"}} {{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span> <span class="good">SECURED</span>
{{else door_state == "closed" && door_lock == "unlocked"}} {{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="average">UNSECURED</span> <span class="average">UNSECURED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
{{/if}} {{/if}}
{{else docking_status == "undocked"}} {{else data.docking_status == "undocked"}}
{{if door_state == "open"}} {{if data.door_state == "open"}}
<span class="bad">OPEN</span> <span class="bad">OPEN</span>
{{else door_state == "closed" && door_lock == "locked"}} {{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span> <span class="good">SECURED</span>
{{else door_state == "closed" && door_lock == "unlocked"}} {{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="bad">UNSECURED</span> <span class="bad">UNSECURED</span>
{{else}} {{else}}
<span class="bad">ERROR</span> <span class="bad">ERROR</span>
@@ -87,12 +87,12 @@
<div class="item" style="padding-top: 10px"> <div class="item" style="padding-top: 10px">
<div class="item"> <div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%"> <div class="itemContent" style="padding-top: 2px; width: 100%">
{{if docking_status == "docked"}} {{if data.docking_status == "docked"}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
{{else}} {{else}}
{{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', override_enabled? 'redBackground' : null)}} {{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redBackground' : null)}}
{{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : 'yellowBackground')}} {{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
{{/if}} {{/if}}
</div> </div>
</div> </div>

View File

@@ -0,0 +1,101 @@
<div class="item" style="padding-top: 10px">
<div class="item">
<div class="itemLabel">
Docking Port Status:
</div>
<div class="itemContent">
{{if data.docking_status == "docked"}}
{{if !data.override_enabled}}
<span class="good">DOCKED</span>
{{else}}
<span class="bad">DOCKED-OVERRIDE ENABLED</span>
{{/if}}
{{else data.docking_status == "docking"}}
{{if !data.override_enabled}}
<span class="average">DOCKING</span>
{{else}}
<span class="bad">DOCKING-OVERRIDE ENABLED</span>
{{/if}}
{{else data.docking_status == "undocking"}}
{{if !data.override_enabled}}
<span class="average">UNDOCKING</span>
{{else}}
<span class="bad">UNDOCKING-OVERRIDE ENABLED</span>
{{/if}}
{{else data.docking_status == "undocked"}}
{{if !data.override_enabled}}
<span class="idle">NOT IN USE</span>
{{else}}
<span class="bad" style="float:left">OVERRIDE ENABLED</span>
{{/if}}
{{else}}
<span class="bad">ERROR</span>
{{/if}}
</div>
</div>
</div>
<div class="item" style="padding-top: 10px">
<div class="item">
<div class="itemLabel">
Docking Hatch:
</div>
<div class="itemContent">
{{if data.docking_status == "docked"}}
{{if data.door_state == "open"}}
<span class="good">OPEN</span>
{{else data.door_state == "closed"}}
<span class="good">CLOSED</span>
{{else}}
<span class="bad">ERROR</span>
{{/if}}
{{else data.docking_status == "docking"}}
{{if data.door_state == "open"}}
<span class="good">OPEN</span>
{{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span>
{{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="good">UNSECURED</span>
{{else}}
<span class="bad">ERROR</span>
{{/if}}
{{else data.docking_status == "undocking"}}
{{if data.door_state == "open"}}
<span class="average">OPEN</span>
{{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span>
{{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="average">UNSECURED</span>
{{else}}
<span class="bad">ERROR</span>
{{/if}}
{{else data.docking_status == "undocked"}}
{{if data.door_state == "open"}}
<span class="bad">OPEN</span>
{{else data.door_state == "closed" && data.door_lock == "locked"}}
<span class="good">SECURED</span>
{{else data.door_state == "closed" && data.door_lock == "unlocked"}}
<span class="bad">UNSECURED</span>
{{else}}
<span class="bad">ERROR</span>
{{/if}}
{{else}}
<span class="bad">ERROR</span>
{{/if}}
</div>
</div>
</div>
<div class="item" style="padding-top: 10px">
<div class="item">
<div class="itemContent" style="padding-top: 2px; width: 100%">
{{if data.docking_status == "docked"}}
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', null)}}
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : null)}}
{{:helper.link('MANUAL EJECT', 'alert', {'command' : 'toggle_override'}, 'disabled', null)}}
{{else}}
{{:helper.link('Force exterior door', 'alert', {'command' : 'force_door'}, data.override_enabled ? null : 'disabled', data.override_enabled ? 'redBackground' : null)}}
{{:helper.link('Override', 'alert', {'command' : 'toggle_override'}, null, data.override_enabled ? 'redBackground' : 'yellowBackground')}}
{{:helper.link('MANUAL EJECT', 'alert', {'command' : 'toggle_override'}, can_force ? null : 'disabled', can_force ? 'redBackground' : null)}}
{{/if}}
</div>
</div>
</div>

View File

@@ -1,37 +1,33 @@
<div class='item'> <div class='item'>
{{:~link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}} {{:helper.link('Close', 'gear', {'close' : 1}, null, 'fixedLeft')}}
</div> </div>
<div class="item"> <div class="item">
<h2>Storage</h2> <h2>Storage</h2>
{{if secure}} {{if data.secure}}
<span class='notice'> <span class='notice'>
{{:locked == -1 ? "Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($..." : "Secure Access: Please have your identification ready."}} {{:data.locked == -1 ? "Sec.re ACC_** //):securi_nt.diag=>##'or 1=1'%($..." : "Secure Access: Please have your identification ready."}}
</span> </span>
{{/if}} {{/if}}
</div> </div>
<div class='item'> <div class='item'>
{{if contents}} {{if data.contents}}
{{for contents}} {{for data.contents}}
<div class='item'> <div class='item'>
<div class='itemLabel'> <span class='highlight'>{{:value.display_name}} ({{:value.quantity}} available)</span>
<span class='highlight'>{{:display_name}} ({{:quantity}}):</span> <div style="float: left;">Vend:&nbsp;</div> {{:helper.link('x1', 'circle-arrow-s', { "vend" : value.vend, "amount" : 1 }, null, 'statusValue')}}
</div> {{if value.quantity >= 5}}
<div class="itemContent"> {{:helper.link('x5', 'circle-arrow-s', { "vend" : value.vend, "amount" : 5 }, null, 'statusValue')}}
{{:~link('Vend', 'circle-arrow-s', { "vend" : vend, "amount" : 1 }, null, 'statusValue')}} {{/if}}
{{if quantity >= 5}} {{if value.quantity >= 10}}
{{:~link('x5', 'circle-arrow-s', { "vend" : vend, "amount" : 5 }, null, 'statusValue')}} {{:helper.link('x10', 'circle-arrow-s', { "vend" : value.vend, "amount" : 10 }, null, 'statusValue')}}
{{/if}} {{/if}}
{{if quantity >= 10}} {{if value.quantity >= 25}}
{{:~link('x10', 'circle-arrow-s', { "vend" : vend, "amount" : 10 }, null, 'statusValue')}} {{:helper.link('x25', 'circle-arrow-s', { "vend" : value.vend, "amount" : 25 }, null, 'statusValue')}}
{{/if}} {{/if}}
{{if quantity >= 25}} {{if value.quantity > 1}}
{{:~link('x25', 'circle-arrow-s', { "vend" : vend, "amount" : 25 }, null, 'statusValue')}} {{:helper.link('All', 'circle-arrow-s', { "vend" : value.vend, "amount" : value.quantity }, null, 'statusValue')}}
{{/if}} {{/if}}
{{if quantity > 1}}
{{:~link('All', 'circle-arrow-s', { "vend" : vend, "amount" : quantity }, null, 'statusValue')}}
{{/if}}
</div>
</div> </div>
{{/for}} {{/for}}
{{else}} {{else}}
@@ -39,7 +35,7 @@
{{/if}} {{/if}}
</div> </div>
{{if panel_open}} {{if data.panel_open}}
<div class='item'> <div class='item'>
<h2>Access Panel</h2> <h2>Access Panel</h2>
</div> </div>
@@ -48,17 +44,17 @@
<span class='good'>Wires:</span> <span class='good'>Wires:</span>
</div> </div>
<div class='itemContentWide'> <div class='itemContentWide'>
{{for wires}} {{for data.wires}}
<div class='item'> <div class='item'>
<div class='itemLabel' style='color: {{:wire}};'> <div class='itemLabel' style='color: {{:value.wire}};'>
{{:wire}} wire: {{:value.wire}} wire:
</div> </div>
<div class='itemContent'> <div class='itemContent'>
{{if cut}} {{if value.cut}}
{{:~link('Mend', 'plus', {'cutwire' : index})}} {{:helper.link('Mend', 'plus', {'cutwire' : value.index})}}
{{else}} {{else}}
{{:~link('Cut', 'minus', {'cutwire' : index})}} {{:helper.link('Cut', 'minus', {'cutwire' : value.index})}}
{{:~link('Pulse', 'signal-diag', {'pulsewire' : index})}} {{:helper.link('Pulse', 'signal-diag', {'pulsewire' : value.index})}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@@ -67,12 +63,12 @@
</div> </div>
<div class='statusDisplay'> <div class='statusDisplay'>
The orange light is <span class='{{:electrified ? "good" : "bad"}}'><b>{{:electrified ? "on" : "off"}}</b></span>.<br> The orange light is <span class='{{:data.electrified ? "good" : "bad"}}'><b>{{:data.electrified ? "on" : "off"}}</b></span>.<br>
The red light is <span class='{{:shoot_inventory ? "good" : "bad"}}'><b>{{:shoot_inventory ? "on" : "off"}}</b></span>.<br> The red light is <span class='{{:data.shoot_inventory ? "good" : "bad"}}'><b>{{:data.shoot_inventory ? "on" : "off"}}</b></span>.<br>
{{if secure}} {{if data.secure}}
The green light is The green light is
<span class='{{:locked == 1 ? "bad" : locked == -1 ? "average" : "good"}}'> <span class='{{:data.locked == 1 ? "bad" : data.locked == -1 ? "average" : "good"}}'>
{{:locked == 1 ? "off" : locked == -1 ? "blinking" : "on"}} {{:data.locked == 1 ? "off" : data.locked == -1 ? "blinking" : "on"}}
</span>.<br> </span>.<br>
{{/if}} {{/if}}
</div> </div>

View File

@@ -3,9 +3,9 @@
Stored Capacity: Stored Capacity:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(storedCapacity, 0, 100, charging ? 'good' : 'average')}} {{:helper.displayBar(data.storedCapacity, 0, 100, data.charging ? 'good' : 'average')}}
<div class="statusValue"> <div class="statusValue">
{{:~round(storedCapacity)}}% {{:helper.round(data.storedCapacity)}}%
</div> </div>
</div> </div>
</div> </div>
@@ -16,9 +16,9 @@
Charge Mode: Charge Mode:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('Auto', 'refresh', {'cmode' : 1}, chargeMode ? 'selected' : null)}}{{:~link('Off', 'close', {'cmode' : 1}, chargeMode ? null : 'selected')}} {{:helper.link('Auto', 'refresh', {'cmode' : 1}, data.chargeMode ? 'selected' : null)}}{{:helper.link('Off', 'close', {'cmode' : 1}, data.chargeMode ? null : 'selected')}}
&nbsp; &nbsp;
{{if charging}} {{if data.charging}}
[<span class='good'>Charging</span>] [<span class='good'>Charging</span>]
{{else}} {{else}}
[<span class='average'>Not Charging</span>] [<span class='average'>Not Charging</span>]
@@ -31,12 +31,12 @@
Input Level: Input Level:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(chargeLevel, 0, chargeMax)}} {{:helper.displayBar(data.chargeLevel, 0, data.chargeMax)}}
<div style="clear: both; padding-top: 4px;"> <div style="clear: both; padding-top: 4px;">
{{:~link('MIN', null, {'input' : 'min'}, (chargeLevel > 0) ? null : 'disabled')}} {{:helper.link('MIN', null, {'input' : 'min'}, (data.chargeLevel > 0) ? null : 'disabled')}}
{{:~link('SET', null, {'input' : 'set'}, null)}} {{:helper.link('SET', null, {'input' : 'set'}, null)}}
{{:~link('MAX', null, {'input' : 'max'}, (chargeLevel < chargeMax) ? null : 'disabled')}} {{:helper.link('MAX', null, {'input' : 'max'}, (data.chargeLevel < data.chargeMax) ? null : 'disabled')}}
<div style="float: left; width: 80px; text-align: center;">&nbsp;{{:chargeLevel}} W&nbsp;</div> <div style="float: left; width: 80px; text-align: center;">&nbsp;{{:data.chargeLevel}} W&nbsp;</div>
</div> </div>
</div> </div>
</div> </div>
@@ -47,7 +47,7 @@
Output Status: Output Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('Online', 'power', {'online' : 1}, outputOnline ? 'selected' : null)}}{{:~link('Offline', 'close', {'online' : 1}, outputOnline ? null : 'selected')}} {{:helper.link('Online', 'power', {'online' : 1}, data.outputOnline ? 'selected' : null)}}{{:helper.link('Offline', 'close', {'online' : 1}, data.outputOnline ? null : 'selected')}}
</div> </div>
</div> </div>
@@ -56,12 +56,12 @@
Output Level: Output Level:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(outputLevel, 0, outputMax)}} {{:helper.displayBar(data.outputLevel, 0, data.outputMax)}}
<div style="clear: both; padding-top: 4px;"> <div style="clear: both; padding-top: 4px;">
{{:~link('MIN', null, {'output' : 'min'}, (outputLevel > 0) ? null : 'disabled')}} {{:helper.link('MIN', null, {'output' : 'min'}, (data.outputLevel > 0) ? null : 'disabled')}}
{{:~link('SET', null, {'output' : 'set'}, null)}} {{:helper.link('SET', null, {'output' : 'set'}, null)}}
{{:~link('MAX', null, {'output' : 'max'}, (outputLevel < outputMax) ? null : 'disabled')}} {{:helper.link('MAX', null, {'output' : 'max'}, (data.outputLevel < data.outputMax) ? null : 'disabled')}}
<div style="float: left; width: 80px; text-align: center;">&nbsp;{{:outputLevel}} W&nbsp;</div> <div style="float: left; width: 80px; text-align: center;">&nbsp;{{:data.outputLevel}} W&nbsp;</div>
</div> </div>
</div> </div>
</div> </div>
@@ -71,9 +71,9 @@
Output Load: Output Load:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(outputLoad, 0, outputMax, (outputLoad < outputLevel) ? 'good' : 'average')}} {{:helper.displayBar(data.outputLoad, 0, data.outputMax, (data.outputLoad < data.outputLevel) ? 'good' : 'average')}}
<div class="statusValue"> <div class="statusValue">
{{:outputLoad}} W {{:data.outputLoad}} W
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,4 +1,4 @@
{{if maskConnected}} {{if data.maskConnected}}
<div class="noticePlaceholder">This tank is connected to a mask.</div> <div class="noticePlaceholder">This tank is connected to a mask.</div>
{{else}} {{else}}
<div class="notice">This tank is NOT connected to a mask.</div> <div class="notice">This tank is NOT connected to a mask.</div>
@@ -9,9 +9,9 @@
Tank Pressure: Tank Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(tankPressure, 0, 1013, (tankPressure > 200) ? 'good' : (tankPressure > 100) ? 'average' : 'bad'))}} {{:helper.displayBar(data.tankPressure, 0, 1013, (data.tankPressure > 200) ? 'good' : (data.tankPressure > 100) ? 'average' : 'bad'))}}
<div class="statusValue"> <div class="statusValue">
{{:tankPressure}} kPa {{:data.tankPressure}} kPa
</div> </div>
</div> </div>
</div> </div>
@@ -23,15 +23,15 @@
Mask Release Pressure: Mask Release Pressure:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~displayBar(releasePressure, 0, maxReleasePressure, (releasePressure >= 23) ? null : ((releasePressure >= 17) ? 'average' : 'bad'))}} {{:helper.displayBar(data.releasePressure, 0, data.maxReleasePressure, (data.releasePressure >= 23) ? null : ((data.releasePressure >= 17) ? 'average' : 'bad'))}}
<div style="clear: both; padding-top: 4px;"> <div style="clear: both; padding-top: 4px;">
{{:~link('-', null, {'dist_p' : -10}, (releasePressure > 0) ? null : 'disabled')}} {{:helper.link('-', null, {'dist_p' : -10}, (data.releasePressure > 0) ? null : 'disabled')}}
{{:~link('-', null, {'dist_p' : -1}, (releasePressure > 0) ? null : 'disabled')}} {{:helper.link('-', null, {'dist_p' : -1}, (data.releasePressure > 0) ? null : 'disabled')}}
<div style="float: left; width: 80px; text-align: center;">&nbsp;{{:releasePressure}} kPa&nbsp;</div> <div style="float: left; width: 80px; text-align: center;">&nbsp;{{:data.releasePressure}} kPa&nbsp;</div>
{{:~link('+', null, {'dist_p' : 1}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} {{:helper.link('+', null, {'dist_p' : 1}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
{{:~link('+', null, {'dist_p' : 10}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} {{:helper.link('+', null, {'dist_p' : 10}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
{{:~link('Max', null, {'dist_p' : 'max'}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} {{:helper.link('Max', null, {'dist_p' : 'max'}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
{{:~link('Reset', null, {'dist_p' : 'reset'}, (releasePressure != defaultReleasePressure) ? null : 'disabled')}} {{:helper.link('Reset', null, {'dist_p' : 'reset'}, (data.releasePressure != data.defaultReleasePressure) ? null : 'disabled')}}
</div> </div>
</div> </div>
</div> </div>
@@ -41,7 +41,7 @@
Mask Release Valve: Mask Release Valve:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('Open', 'unlocked', {'stat' : 1}, (!maskConnected) ? 'disabled' : (valveOpen ? 'selected' : null))}}{{:~link('Close', 'locked', {'stat' : 1}, valveOpen ? null : 'selected')}} {{:helper.link('Open', 'unlocked', {'stat' : 1}, (!data.maskConnected) ? 'disabled' : (data.valveOpen ? 'selected' : null))}}{{:helper.link('Close', 'locked', {'stat' : 1}, data.valveOpen ? null : 'selected')}}
</div> </div>
</div> </div>

View File

@@ -5,16 +5,16 @@ Used In File(s): \code\modules\telesci\telesci_computer.dm
<div class="item"> <div class="item">
<div class="itemLabel">Coordinates:</div> <div class="itemLabel">Coordinates:</div>
<div class="itemContent"> <div class="itemContent">
{{:~link('X: ' + coordx, 'gear', {'setx': 1})}} {{:helper.link('X: ' + data.coordx, 'gear', {'setx': 1})}}
{{:~link('Y: ' + coordy, 'gear', {'sety': 1})}} {{:helper.link('Y: ' + data.coordy, 'gear', {'sety': 1})}}
{{:~link('Z: ' + coordz, 'gear', {'setz': 1})}} {{:helper.link('Z: ' + data.coordz, 'gear', {'setz': 1})}}
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<div class="itemLabel">Controls:</div> <div class="itemLabel">Controls:</div>
<div class="itemContent"> <div class="itemContent">
{{:~link('Send', 'gear', {'send': 1}, null, (coordx != null && coordy != null && coordz != null) ? '' : 'disabled')}} {{:helper.link('Send', 'gear', {'send': 1}, null, (data.coordx != null && data.coordy != null && data.coordz != null) ? '' : 'disabled')}}
{{:~link('Receive', 'gear', {'receive': 1}, null, (coordx != null && coordy != null && coordz != null) ? '' : 'disabled')}} {{:helper.link('Receive', 'gear', {'receive': 1}, null, (data.coordx != null && data.coordy != null && data.coordz != null) ? '' : 'disabled')}}
{{:~link('Recalibrate', 'gear', {'recal': 1})}} {{:helper.link('Recalibrate', 'gear', {'recal': 1})}}
</div> </div>
</div> </div>

View File

@@ -3,12 +3,12 @@
Attachment One: Attachment One:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if attachmentOne}} {{if data.attachmentOne}}
{{:attachmentOne}} {{:data.attachmentOne}}
{{else}} {{else}}
<i>None</i> <i>None</i>
{{/if}} {{/if}}
{{:~link('Remove', 'eject', {'tankone' : 1}, attachmentOne ? null : 'disabled')}} {{:helper.link('Remove', 'eject', {'tankone' : 1}, data.attachmentOne ? null : 'disabled')}}
</div> </div>
</div> </div>
@@ -17,12 +17,12 @@
Attachment Two: Attachment Two:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if attachmentTwo}} {{if data.attachmentTwo}}
{{:attachmentTwo}} {{:data.attachmentTwo}}
{{else}} {{else}}
<i>None</i> <i>None</i>
{{/if}} {{/if}}
{{:~link('Remove', 'eject', {'tanktwo' : 1}, attachmentTwo ? null : 'disabled')}} {{:helper.link('Remove', 'eject', {'tanktwo' : 1}, data.attachmentTwo ? null : 'disabled')}}
</div> </div>
</div> </div>
@@ -31,14 +31,14 @@
Valve Attachment: Valve Attachment:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{if valveAttachment}} {{if data.valveAttachment}}
{{:valveAttachment}} {{:data.valveAttachment}}
{{else}} {{else}}
<i>None</i> <i>None</i>
{{/if}} {{/if}}
{{:~link('Remove', 'eject', {'rem_device' : 1}, valveAttachment ? null : 'disabled')}} {{:helper.link('Remove', 'eject', {'rem_device' : 1}, data.valveAttachment ? null : 'disabled')}}
{{if valveAttachment}} {{if data.valveAttachment}}
{{:~link('View', 'wrench', {'device' : 1})}} {{:helper.link('View', 'wrench', {'device' : 1})}}
{{/if}} {{/if}}
</div> </div>
</div> </div>
@@ -50,7 +50,7 @@
Valve Status: Valve Status:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('Open', 'unlocked', {'open' : 1}, (!attachmentOne || !attachmentTwo) ? 'disabled' : (valveOpen ? 'selected' : null))}}{{:~link('Close', 'locked', {'open' : 1}, (!attachmentOne || !attachmentTwo) ? 'disabled' : (valveOpen ? null : 'selected'))}} {{:helper.link('Open', 'unlocked', {'open' : 1}, (!data.attachmentOne || !data.attachmentTwo) ? 'disabled' : (data.valveOpen ? 'selected' : null))}}{{:helper.link('Close', 'locked', {'open' : 1}, (!data.attachmentOne || !data.attachmentTwo) ? 'disabled' : (data.valveOpen ? null : 'selected'))}}
</div> </div>
</div> </div>

View File

@@ -3,44 +3,43 @@
Title: Syndicate Uplink, uses some javascript to change nanoUI up a bit. Title: Syndicate Uplink, uses some javascript to change nanoUI up a bit.
Used In File(s): \code\game\objects\items\devices\uplinks.dm Used In File(s): \code\game\objects\items\devices\uplinks.dm
--> -->
{{:~syndicateMode()}} {{:helper.syndicateMode()}}
<H2><span class="white">{{:welcome}}</span></H2> <H2><span class="white">{{:data.welcome}}</span></H2>
<br> <br>
<div class="item"> <div class="item">
<div class="itemLabelNarrow"> <div class="itemLabelNarrow">
<b>Functions</b>: <b>Functions</b>:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:~link('Close', 'gear', {'lock' : "1"}, null, 'fixedLeft')}} {{:helper.link('Close', 'gear', {'lock' : "1"}, null, 'fixedLeft')}}
</div> </div>
</div> </div>
<br> <br>
<div class="item"> <div class="item">
<div class="itemLabel"> <div class="itemLabel">
<b>Tele-Crystals</b>: <b>Tele-Crystals</b>:
</div> </div>
<div class="itemContent"> <div class="itemContent">
{{:crystals}} {{:data.crystals}}
</div> </div>
</div> </div>
<H2><span class="white">Request items:</span></H2><br> <H2><span class="white">Request items:</span></H2><br>
<span class="white"><i>Each item costs a number of tele-crystals as indicated by the number following their name.</i></span> <span class="white"><i>Each item costs a number of tele-crystals as indicated by the number following their name.</i></span>
<br><br> <br><br>
{{for nano_items}} {{for data.nano_items}}
<div class="item"> <div class="item">
<H3><span class="white">{{:Category}}</span></H3> <H3><span class="white">{{:value.Category}}</span></H3>
</div> </div>
{{for items}} {{for data.items :itemValue:itemIndex}}
<div class="item"> <div class="item">
{{:~link( Name, 'gear', {'buy_item' : obj_path, 'cost' : Cost}, Cost > ~root.crystals ? 'disabled' : null, null)}} -<span class="white"> {{:Cost}}</span> {{:helper.link( itemValue.Name, 'gear', {'buy_item' : itemValue.obj_path, 'cost' : itemValue.Cost}, itemValue.Cost > data.crystals ? 'disabled' : null, null)}} - <span class="white">{{:itemValue.Cost}}</span>
</div> </div>
{{/for}} {{/for}}
<br> <br>
{{/for}} {{/for}}
<div class="item"> <div class="item">
{{:~link('Buy Random (??)' , 'gear', {'buy_item' : 'random'}, null, 'fixedLeftWidest')}} {{:helper.link('Buy Random (??)' , 'gear', {'buy_item' : 'random'}, null, 'fixedLeftWidest')}}
</div> </div>