diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 1e155b5a554..92b9a37ceea 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -100,7 +100,7 @@ Passive gate is similar to the regular pump except: /obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 400, 100) + ui = new(user, src, ui_key, "atmos_pump", name, 400, 115) ui.open() /obj/machinery/atmospherics/components/binary/passive_gate/get_ui_data() diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index a2a31e3c7d2..9ef04a3774a 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -108,7 +108,7 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 400, 100) + ui = new(user, src, ui_key, "atmos_pump", name, 400, 115) ui.open() /obj/machinery/atmospherics/components/binary/pump/get_ui_data() diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm index 0730b014472..98afbc7778c 100644 --- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm @@ -105,7 +105,7 @@ Thus, the two variables affect pump operation are set in New(): /obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_pump", name, 400, 100) + ui = new(user, src, ui_key, "atmos_pump", name, 400, 115) ui.open() /obj/machinery/atmospherics/components/binary/volume_pump/get_ui_data() diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 94fe581e844..c6f36d17a05 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -172,7 +172,7 @@ Filter types: /obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_filter", name, 400, 120) + ui = new(user, src, ui_key, "atmos_filter", name, 450, 135) ui.open() /obj/machinery/atmospherics/components/trinary/filter/get_ui_data() diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm index 6e6bd0beb42..fa883568853 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm @@ -135,7 +135,7 @@ /obj/machinery/atmospherics/components/trinary/mixer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "atmos_mixer", name, 400, 145) + ui = new(user, src, ui_key, "atmos_mixer", name, 450, 18) ui.open() /obj/machinery/atmospherics/components/trinary/mixer/get_ui_data() diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index c53b22f078a..b7da53bef1c 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -190,7 +190,7 @@ /obj/machinery/alarm/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "air_alarm", name, 480, 625) + ui = new(user, src, ui_key, "air_alarm", name, 480, 660) ui.open() /obj/machinery/alarm/get_ui_data(mob/user) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 63b8ae8999d..bb0bca64961 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -277,7 +277,7 @@ update_flag /obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "canister", name, 470, 400, state = physical_state) + ui = new(user, src, ui_key, "canister", name, 470, 470, state = physical_state) ui.open() /obj/machinery/portable_atmospherics/canister/get_ui_data() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 9b55a6e3a66..ddeda6750b0 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -159,7 +159,7 @@ /obj/machinery/space_heater/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "space_heater", name, 490, 350, state = physical_state) + ui = new(user, src, ui_key, "space_heater", name, 490, 340, state = physical_state) ui.open() /obj/machinery/space_heater/Topic(href, href_list) @@ -173,11 +173,9 @@ mode = HEATER_MODE_STANDBY usr.visible_message("[usr] switches [on ? "on" : "off"] \the [src].", "You switch [on ? "on" : "off"] \the [src].") update_icon() - SSnano.update_uis(src) else if(href_list["mode"]) setMode = href_list["mode"] - SSnano.update_uis(src) else if(href_list["temp"] && panel_open) var/value @@ -192,7 +190,6 @@ var/minTemp = max(settableTemperatureMedian - settableTemperatureRange, TCMB) var/maxTemp = settableTemperatureMedian + settableTemperatureRange targetTemperature = dd_range(minTemp, maxTemp, round(value, 1)) - SSnano.update_uis(src) else if(href_list["cellremove"] && panel_open) if(cell) @@ -204,7 +201,6 @@ cell.add_fingerprint(usr) usr.visible_message("\The [usr] removes \the [cell] from \the [src].", "You remove \the [cell] from \the [src].") cell = null - SSnano.update_uis(src) else if(href_list["cellinstall"] && panel_open) if(!cell) @@ -217,7 +213,8 @@ C.add_fingerprint(usr) usr.visible_message("\The [usr] inserts \a [C] into \the [src].", "You insert \the [C] into \the [src].") - SSnano.update_uis(src) + + SSnano.update_uis(src) /obj/machinery/space_heater/process() if(!on || (stat & BROKEN)) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 3d2c97b2880..ff63089e192 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -122,7 +122,7 @@ /obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "tanks", name, 525, 175, state = inventory_state) + ui = new(user, src, ui_key, "tanks", name, 525, 205, state = inventory_state) ui.open() /obj/item/weapon/tank/get_ui_data() diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 39cb0f0e94b..e93b8598ea8 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -221,15 +221,14 @@ You can set verify to TRUE if you want send() to sleep until the client has the /datum/asset/simple/nanoui assets = list( - "lib.js" = 'nano/assets/lib.js', - "app.js" = 'nano/assets/app.js', - "templates.js" = 'nano/assets/templates.js', - "lib.css" = 'nano/assets/lib.css', - "common.css" = 'nano/assets/common.css', - "generic.css" = 'nano/assets/generic.css', - "nanotrasen.css" = 'nano/assets/nanotrasen.css', + "nanoui.lib.js" = 'nano/assets/nanoui.lib.js', + "nanoui.main.js" = 'nano/assets/nanoui.main.js', + "nanoui.templates.js" = 'nano/assets/nanoui.templates.js', + "nanoui.lib.css" = 'nano/assets/nanoui.lib.css', + "nanoui.common.css" = 'nano/assets/nanoui.common.css', + "nanoui.generic.css" = 'nano/assets/nanoui.generic.css', + "nanoui.nanotrasen.css" = 'nano/assets/nanoui.nanotrasen.css', "fontawesome-webfont.eot" = 'nano/assets/fontawesome-webfont.eot', - "fontawesome-webfont.woff" = 'nano/assets/fontawesome-webfont.woff', "fontawesome-webfont.woff2" = 'nano/assets/fontawesome-webfont.woff2' ) diff --git a/code/modules/html_interface/nanotrasen/nanotrasen.css b/code/modules/html_interface/nanotrasen/hi-nanotrasen.css similarity index 100% rename from code/modules/html_interface/nanotrasen/nanotrasen.css rename to code/modules/html_interface/nanotrasen/hi-nanotrasen.css diff --git a/code/modules/html_interface/nanotrasen/nanotrasen.dm b/code/modules/html_interface/nanotrasen/nanotrasen.dm index 5ae9407093f..0ac9a67a46a 100644 --- a/code/modules/html_interface/nanotrasen/nanotrasen.dm +++ b/code/modules/html_interface/nanotrasen/nanotrasen.dm @@ -18,7 +18,7 @@ The client is optional and may be a /mob, /client or /html_interface_client obje . = ..() // Add appropriate CSS and set the default layout. - src.head = src.head + "" + src.head = src.head + "" src.updateLayout("") /datum/html_interface/nanotrasen/updateLayout(layout) @@ -32,7 +32,7 @@ The client is optional and may be a /mob, /client or /html_interface_client obje /datum/html_interface/nanotrasen/registerResources(var/list/resources = list()) resources["uiBg.png"] = 'uiBg.png' resources["uiBgcenter.png"] = 'uiBgcenter.png' - resources["nanotrasen.css"] = 'nanotrasen.css' + resources["hi-nanotrasen.css"] = 'hi-nanotrasen.css' ..(resources) /datum/html_interface/nanotrasen/createWindow(datum/html_interface_client/hclient) diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 7d7077321e4..432c56b9936 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -253,14 +253,14 @@ /datum/nanoui/proc/get_html() // Generate - - + + + "} var/stylesheet_html = {" - - - + + + "} // Generate data JSON. diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 3aede467ab4..9224829036b 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -327,7 +327,7 @@ /obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "smes", name, 500, 400) + ui = new(user, src, ui_key, "smes", name, 500, 455) ui.open() /obj/machinery/power/smes/get_ui_data() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 3b6da37e45b..e06e6aab043 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -372,7 +372,7 @@ /obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) if (!ui) - ui = new(user, src, ui_key, "solar_control", name, 490, 395) + ui = new(user, src, ui_key, "solar_control", name, 515, 425) ui.open() /obj/machinery/power/solar_control/get_ui_data() diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index d7fdbdb7130..7612054e9dd 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -1,356 +1,356 @@ -/obj/machinery/chem_dispenser - name = "chem dispenser" - desc = "Creates and dispenses chemicals." - density = 1 - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "dispenser" - use_power = 1 - idle_power_usage = 40 - var/energy = 100 - var/max_energy = 100 - var/amount = 30 - var/recharged = 0 - var/recharge_delay = 5 - var/image/icon_beaker = null - var/obj/item/weapon/reagent_containers/beaker = null - var/list/dispensable_reagents = list( - "hydrogen", - "lithium", - "carbon", - "nitrogen", - "oxygen", - "fluorine", - "sodium", - "aluminium", - "silicon", - "phosphorus", - "sulfur", - "chlorine", - "potassium", - "iron", - "copper", - "mercury", - "radium", - "water", - "ethanol", - "sugar", - "sacid", - "welding_fuel", - "silver", - "iodine", - "bromine", - "stable_plasma" - ) - -/obj/machinery/chem_dispenser/New() - ..() - recharge() - dispensable_reagents = sortList(dispensable_reagents) - -/obj/machinery/chem_dispenser/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER - -/obj/machinery/chem_dispenser/process() - - if(recharged < 0) - recharge() - recharged = recharge_delay - else - recharged -= 1 - -/obj/machinery/chem_dispenser/proc/recharge() - if(stat & (BROKEN|NOPOWER)) return - var/addenergy = 1 - var/oldenergy = energy - energy = min(energy + addenergy, max_energy) - if(energy != oldenergy) - use_power(2500) - -/obj/machinery/chem_dispenser/ex_act(severity, target) - if(severity < 3) - ..() - -/obj/machinery/chem_dispenser/blob_act() - if(prob(50)) - qdel(src) - -/obj/machinery/chem_dispenser/interact(mob/user) - if(stat & BROKEN) - return - ui_interact(user) - -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) - ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) - if (!ui) - ui = new(user, src, ui_key, "chem_dispenser", name, 500, 650) - ui.open() - -/obj/machinery/chem_dispenser/get_ui_data() - var/data = list() - data["amount"] = amount - data["energy"] = energy - data["maxEnergy"] = max_energy - data["isBeakerLoaded"] = beaker ? 1 : 0 - - var beakerContents[0] - var beakerCurrentVolume = 0 - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... - beakerCurrentVolume += R.volume - data["beakerContents"] = beakerContents - - if (beaker) - data["beakerCurrentVolume"] = beakerCurrentVolume - data["beakerMaxVolume"] = beaker.volume - data["beakerTransferAmounts"] = beaker.possible_transfer_amounts - else - data["beakerCurrentVolume"] = null - data["beakerMaxVolume"] = null - data["beakerTransferAmounts"] = null - - var chemicals[0] - for(var/re in dispensable_reagents) - var/datum/reagent/temp = chemical_reagents_list[re] - if(temp) - chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... - data["chemicals"] = chemicals - return data - -/obj/machinery/chem_dispenser/Topic(href, href_list) - if(..()) - return - - if(href_list["amount"]) - amount = round(text2num(href_list["amount"]), 5) // round to nearest 5 - if (amount < 0) // Since the user can actually type the commands himself, some sanity checking - amount = 0 - if (amount > 100) - amount = 100 - - if(href_list["dispense"]) - if(beaker && dispensable_reagents.Find(href_list["dispense"])) - var/datum/reagents/R = beaker.reagents - var/space = R.maximum_volume - R.total_volume - - R.add_reagent(href_list["dispense"], min(amount, energy * 10, space)) - energy = max(energy - min(amount, energy * 10, space) / 10, 0) - - if(href_list["remove"]) - if(beaker) - var/amount = text2num(href_list["remove"]) - if(isnum(amount) && (amount > 0) && (amount in beaker.possible_transfer_amounts)) - beaker.reagents.remove_all(amount) - - if(href_list["ejectBeaker"]) - if(beaker) - beaker.loc = loc - beaker = null - overlays.Cut() - - add_fingerprint(usr) - -/obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params) - if(default_unfasten_wrench(user, I)) - return - - if(isrobot(user)) - return - - var/obj/item/weapon/reagent_containers/B = I // Get a beaker from it? - if(!istype(B)) - return // Not a beaker? - - if(beaker) - user << "A beaker is already loaded into the machine!" - return - - if(!user.drop_item()) // Can't let go? - return - - beaker = B - beaker.loc = src - user << "You add the beaker to the machine." - - if(!icon_beaker) - icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. - icon_beaker.pixel_x = rand(-10,5) - overlays += icon_beaker - -/obj/machinery/chem_dispenser/attack_hand(mob/user) - if (!user) - return - interact(user) - - -/obj/machinery/chem_dispenser/constructable - name = "portable chem dispenser" - icon = 'icons/obj/chemical.dmi' - icon_state = "minidispenser" - energy = 10 - max_energy = 10 - amount = 5 - recharge_delay = 30 - dispensable_reagents = list() - var/list/dispensable_reagent_tiers = list( - list( - "hydrogen", - "oxygen", - "silicon", - "phosphorus", - "sulfur", - "carbon", - "nitrogen", - "water" - ), - list( - "lithium", - "sugar", - "sacid", - "copper", - "mercury", - "sodium", - "iodine", - "bromine" - ), - list( - "ethanol", - "chlorine", - "potassium", - "aluminium", - "radium", - "fluorine", - "iron", - "welding_fuel", - "silver", - "stable_plasma" - ), - list( - "oil", - "ash", - "acetone", - "saltpetre", - "ammonia", - "diethylamine" - ) - ) - -/obj/machinery/chem_dispenser/constructable/New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/manipulator(null) - component_parts += new /obj/item/weapon/stock_parts/capacitor(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/cell/high(null) - RefreshParts() - -/obj/machinery/chem_dispenser/constructable/RefreshParts() - var/time = 0 - var/temp_energy = 0 - var/i - for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) - temp_energy += M.rating - temp_energy-- - max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest - for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) - time += C.rating - for(var/obj/item/weapon/stock_parts/cell/P in component_parts) - time += round(P.maxcharge, 10000) / 10000 - recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest - for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) - for(i=1, i<=M.rating, i++) - dispensable_reagents |= dispensable_reagent_tiers[i] - dispensable_reagents = sortList(dispensable_reagents) - -/obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user, params) - ..() - if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I)) - return - - if(exchange_parts(user, I)) - return - - if(panel_open) - if(istype(I, /obj/item/weapon/crowbar)) - if(beaker) - beaker.loc = loc - beaker = null - default_deconstruction_crowbar(I) - return 1 - -/obj/machinery/chem_dispenser/drinks - name = "soda dispenser" - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "soda_dispenser" - amount = 10 - dispensable_reagents = list( - "water", - "ice", - "coffee", - "cream", - "tea", - "icetea", - "cola", - "spacemountainwind", - "dr_gibb", - "space_up", - "tonic", - "sodawater", - "lemon_lime", - "sugar", - "orangejuice", - "limejuice", - "tomatojuice" - ) - -/obj/machinery/chem_dispenser/drinks/attackby(obj/item/I, mob/user) - if(default_unfasten_wrench(user, I)) - return - - if (istype(I, /obj/item/weapon/reagent_containers/glass) || \ - istype(I, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ - istype(I, /obj/item/weapon/reagent_containers/food/drinks/shaker)) - - if (beaker) - return 1 - else - if(!user.drop_item()) - return 1 - src.beaker = I - beaker.loc = src - update_icon() - return - -/obj/machinery/chem_dispenser/drinks/beer - name = "booze dispenser" - anchored = 1 - icon = 'icons/obj/chemical.dmi' - icon_state = "booze_dispenser" - dispensable_reagents = list( - "lemon_lime", - "sugar", - "orangejuice", - "limejuice", - "sodawater", - "tonic", - "beer", - "kahlua", - "whiskey", - "wine", - "vodka", - "gin", - "rum", - "tequila", - "vermouth", - "cognac", - "ale" - ) +/obj/machinery/chem_dispenser + name = "chem dispenser" + desc = "Creates and dispenses chemicals." + density = 1 + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "dispenser" + use_power = 1 + idle_power_usage = 40 + var/energy = 100 + var/max_energy = 100 + var/amount = 30 + var/recharged = 0 + var/recharge_delay = 5 + var/image/icon_beaker = null + var/obj/item/weapon/reagent_containers/beaker = null + var/list/dispensable_reagents = list( + "hydrogen", + "lithium", + "carbon", + "nitrogen", + "oxygen", + "fluorine", + "sodium", + "aluminium", + "silicon", + "phosphorus", + "sulfur", + "chlorine", + "potassium", + "iron", + "copper", + "mercury", + "radium", + "water", + "ethanol", + "sugar", + "sacid", + "welding_fuel", + "silver", + "iodine", + "bromine", + "stable_plasma" + ) + +/obj/machinery/chem_dispenser/New() + ..() + recharge() + dispensable_reagents = sortList(dispensable_reagents) + +/obj/machinery/chem_dispenser/power_change() + if(powered()) + stat &= ~NOPOWER + else + spawn(rand(0, 15)) + stat |= NOPOWER + +/obj/machinery/chem_dispenser/process() + + if(recharged < 0) + recharge() + recharged = recharge_delay + else + recharged -= 1 + +/obj/machinery/chem_dispenser/proc/recharge() + if(stat & (BROKEN|NOPOWER)) return + var/addenergy = 1 + var/oldenergy = energy + energy = min(energy + addenergy, max_energy) + if(energy != oldenergy) + use_power(2500) + +/obj/machinery/chem_dispenser/ex_act(severity, target) + if(severity < 3) + ..() + +/obj/machinery/chem_dispenser/blob_act() + if(prob(50)) + qdel(src) + +/obj/machinery/chem_dispenser/interact(mob/user) + if(stat & BROKEN) + return + ui_interact(user) + +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0) + ui = SSnano.try_update_ui(user, src, ui_key, ui, force_open = force_open) + if (!ui) + ui = new(user, src, ui_key, "chem_dispenser", name, 530, 700) + ui.open() + +/obj/machinery/chem_dispenser/get_ui_data() + var/data = list() + data["amount"] = amount + data["energy"] = energy + data["maxEnergy"] = max_energy + data["isBeakerLoaded"] = beaker ? 1 : 0 + + var beakerContents[0] + var beakerCurrentVolume = 0 + if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) + for(var/datum/reagent/R in beaker.reagents.reagent_list) + beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... + beakerCurrentVolume += R.volume + data["beakerContents"] = beakerContents + + if (beaker) + data["beakerCurrentVolume"] = beakerCurrentVolume + data["beakerMaxVolume"] = beaker.volume + data["beakerTransferAmounts"] = beaker.possible_transfer_amounts + else + data["beakerCurrentVolume"] = null + data["beakerMaxVolume"] = null + data["beakerTransferAmounts"] = null + + var chemicals[0] + for(var/re in dispensable_reagents) + var/datum/reagent/temp = chemical_reagents_list[re] + if(temp) + chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... + data["chemicals"] = chemicals + return data + +/obj/machinery/chem_dispenser/Topic(href, href_list) + if(..()) + return + + if(href_list["amount"]) + amount = round(text2num(href_list["amount"]), 5) // round to nearest 5 + if (amount < 0) // Since the user can actually type the commands himself, some sanity checking + amount = 0 + if (amount > 100) + amount = 100 + + if(href_list["dispense"]) + if(beaker && dispensable_reagents.Find(href_list["dispense"])) + var/datum/reagents/R = beaker.reagents + var/space = R.maximum_volume - R.total_volume + + R.add_reagent(href_list["dispense"], min(amount, energy * 10, space)) + energy = max(energy - min(amount, energy * 10, space) / 10, 0) + + if(href_list["remove"]) + if(beaker) + var/amount = text2num(href_list["remove"]) + if(isnum(amount) && (amount > 0) && (amount in beaker.possible_transfer_amounts)) + beaker.reagents.remove_all(amount) + + if(href_list["ejectBeaker"]) + if(beaker) + beaker.loc = loc + beaker = null + overlays.Cut() + + add_fingerprint(usr) + +/obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params) + if(default_unfasten_wrench(user, I)) + return + + if(isrobot(user)) + return + + var/obj/item/weapon/reagent_containers/B = I // Get a beaker from it? + if(!istype(B)) + return // Not a beaker? + + if(beaker) + user << "A beaker is already loaded into the machine!" + return + + if(!user.drop_item()) // Can't let go? + return + + beaker = B + beaker.loc = src + user << "You add the beaker to the machine." + + if(!icon_beaker) + icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position. + icon_beaker.pixel_x = rand(-10,5) + overlays += icon_beaker + +/obj/machinery/chem_dispenser/attack_hand(mob/user) + if (!user) + return + interact(user) + + +/obj/machinery/chem_dispenser/constructable + name = "portable chem dispenser" + icon = 'icons/obj/chemical.dmi' + icon_state = "minidispenser" + energy = 10 + max_energy = 10 + amount = 5 + recharge_delay = 30 + dispensable_reagents = list() + var/list/dispensable_reagent_tiers = list( + list( + "hydrogen", + "oxygen", + "silicon", + "phosphorus", + "sulfur", + "carbon", + "nitrogen", + "water" + ), + list( + "lithium", + "sugar", + "sacid", + "copper", + "mercury", + "sodium", + "iodine", + "bromine" + ), + list( + "ethanol", + "chlorine", + "potassium", + "aluminium", + "radium", + "fluorine", + "iron", + "welding_fuel", + "silver", + "stable_plasma" + ), + list( + "oil", + "ash", + "acetone", + "saltpetre", + "ammonia", + "diethylamine" + ) + ) + +/obj/machinery/chem_dispenser/constructable/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/chem_dispenser(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/manipulator(null) + component_parts += new /obj/item/weapon/stock_parts/capacitor(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/cell/high(null) + RefreshParts() + +/obj/machinery/chem_dispenser/constructable/RefreshParts() + var/time = 0 + var/temp_energy = 0 + var/i + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + temp_energy += M.rating + temp_energy-- + max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest + for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) + time += C.rating + for(var/obj/item/weapon/stock_parts/cell/P in component_parts) + time += round(P.maxcharge, 10000) / 10000 + recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + for(i=1, i<=M.rating, i++) + dispensable_reagents |= dispensable_reagent_tiers[i] + dispensable_reagents = sortList(dispensable_reagents) + +/obj/machinery/chem_dispenser/constructable/attackby(var/obj/item/I, var/mob/user, params) + ..() + if(default_deconstruction_screwdriver(user, "minidispenser-o", "minidispenser", I)) + return + + if(exchange_parts(user, I)) + return + + if(panel_open) + if(istype(I, /obj/item/weapon/crowbar)) + if(beaker) + beaker.loc = loc + beaker = null + default_deconstruction_crowbar(I) + return 1 + +/obj/machinery/chem_dispenser/drinks + name = "soda dispenser" + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "soda_dispenser" + amount = 10 + dispensable_reagents = list( + "water", + "ice", + "coffee", + "cream", + "tea", + "icetea", + "cola", + "spacemountainwind", + "dr_gibb", + "space_up", + "tonic", + "sodawater", + "lemon_lime", + "sugar", + "orangejuice", + "limejuice", + "tomatojuice" + ) + +/obj/machinery/chem_dispenser/drinks/attackby(obj/item/I, mob/user) + if(default_unfasten_wrench(user, I)) + return + + if (istype(I, /obj/item/weapon/reagent_containers/glass) || \ + istype(I, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ + istype(I, /obj/item/weapon/reagent_containers/food/drinks/shaker)) + + if (beaker) + return 1 + else + if(!user.drop_item()) + return 1 + src.beaker = I + beaker.loc = src + update_icon() + return + +/obj/machinery/chem_dispenser/drinks/beer + name = "booze dispenser" + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "booze_dispenser" + dispensable_reagents = list( + "lemon_lime", + "sugar", + "orangejuice", + "limejuice", + "sodawater", + "tonic", + "beer", + "kahlua", + "whiskey", + "wine", + "vodka", + "gin", + "rum", + "tequila", + "vermouth", + "cognac", + "ale" + ) diff --git a/nano/Gulpfile.coffee b/nano/Gulpfile.coffee index 22e02b2c1c2..f99fc439c89 100644 --- a/nano/Gulpfile.coffee +++ b/nano/Gulpfile.coffee @@ -1,13 +1,26 @@ ### Settings ### -min = require("gulp-util").env.min +util = require("gulp-util") +s = + min: util.env.min + colorblind: util.env.colorblind # Project Paths -paths = - images: "images/" - scripts: "scripts/*.coffee" - styles: "styles/*.less" - templates: "templates/*.dot" - build: "assets" +input = + fonts: "**/*.{eot,woff2}" + images: "images" + scripts: "scripts" + styles: "styles" + templates: "templates" + +output = + dir: "assets" + scripts: + lib: "nanoui.lib.js" + main: "nanoui.main.js" + styles: + lib: "nanoui.lib.css" + prefix: "nanoui." + templates: "nanoui.templates.js" # doT Settings dotOpts = @@ -23,116 +36,92 @@ dotOpts = append: true, selfcontained: true -# LESS Settings -lessOpts = - paths: [paths.images] +### Pacakages ### +bower = require "main-bower-files" +child_process = require "child_process" +del = require "del" +gulp = require "gulp" +merge = require "merge-stream" -# Autoprefixer Settings -autoOpts = - browsers: [ - "last 2 versions", - "> 5%", - "ie >= 8" - ] +### Plugins ### +g = require("gulp-load-plugins")({replaceString: /^gulp(-|\.)|-/g}) +p = + autoprefixer: require "autoprefixer" + colorblind: require "postcss-colorblind" + fontweights: require "postcss-font-weights" + gradient: require "postcss-filter-gradient" + opacity: require "postcss-opacity" + plsfilters: require "pleeease-filters" + rgba: require "postcss-color-rgba-fallback" -# CSSNano Settings -nanoOpts = - discardComments: - removeAll: true - -# Filter Settings -filterOpts = - oldIE: true - - -### Gulp ### -gulp = require "gulp" -gulpif = require "gulp-if" -jsbeautify = require "gulp-jsbeautifier" -bower = require "main-bower-files" -coffee = require "gulp-coffee" -concat = require "gulp-concat" -csscomb = require "gulp-csscomb" -cssnano = require "gulp-cssnano" -del = require "del" -dot = require "gulp-dot-precompiler" -header = require "gulp-header" -filter = require "gulp-filter" -gutil = require "gulp-util" -less = require "gulp-less" -merge = require "merge-stream" -postcss = require "gulp-postcss" -replace = require "gulp-replace" -uglify = require "gulp-uglify" - -### PostCSS ### - -autoprefixer = require "autoprefixer" -clearfix = require "postcss-clearfix" -filters = require "pleeease-filters" -gradient = require "postcss-filter-gradient" -opacity = require "postcss-opacity" -pseudo = require "postcss-pseudoelements" -rgba = require "postcss-color-rgba-fallback" +### Helpers ### +glob = (path) -> + "#{path}/*" ### Tasks ### gulp.task "default", ["fonts", "scripts", "styles", "templates"] gulp.task "clean", -> - del "#{paths.build}/*" + del glob output.dir gulp.task "watch", -> - gulp.watch paths.scripts, ["scripts"] - gulp.watch paths.styles, ["styles"] - gulp.watch paths.templates, ["templates"] + gulp.watch [glob input.images], ["reload"] + gulp.watch [glob input.scripts], ["reload"] + gulp.watch [glob input.styles], ["reload"] + gulp.watch [glob input.templates], ["reload"] -gulp.task "fonts", -> - gulp.src bower "**/*.{eot,woff{,2}}" - .pipe gulp.dest paths.build +gulp.task "reload", ["default"], -> + child_process.exec "reload.bat", (err, stdout, stderr) -> + return console.log err if err -gulp.task "scripts", -> +gulp.task "fonts", ["clean"], -> + gulp.src bower input.fonts + .pipe gulp.dest output.dir + +gulp.task "scripts", ["clean"], -> lib = gulp.src bower "**/*.js" - .pipe concat("lib.js") - .pipe gulpif(min, uglify(), jsbeautify()) - .pipe gulp.dest paths.build + .pipe g.concat(output.scripts.lib) + .pipe g.if(s.min, g.uglify(), g.jsbeautifier()) + .pipe gulp.dest output.dir - nanoui = gulp.src paths.scripts - .pipe coffee() - .pipe concat("app.js") - .pipe gulpif(min, uglify(), jsbeautify()) - .pipe gulp.dest paths.build + main = gulp.src glob input.scripts + .pipe g.coffee() + .pipe g.concat(output.scripts.main) + .pipe g.if(s.min, g.uglify(), g.jsbeautifier()) + .pipe gulp.dest output.dir - merge lib, nanoui + merge lib, main -gulp.task "styles", -> +gulp.task "styles", ["clean"], -> lib = gulp.src bower "**/*.css" - .pipe replace("../fonts/", "") - .pipe concat("lib.css") - .pipe gulpif(min, cssnano(nanoOpts), csscomb()) - .pipe gulp.dest paths.build + .pipe g.replace("../fonts/", "") + .pipe g.concat(output.styles.lib) + .pipe g.if(s.min, g.cssnano({discardComments: {removeAll: true}}), g.csscomb()) + .pipe gulp.dest output.dir - nanoui = gulp.src paths.styles - .pipe filter(["*.less", "!_*.less"]) - .pipe less(lessOpts) - .pipe postcss([ - autoprefixer(autoOpts), - filters(filterOpts) - pseudo, - rgba, - gradient, - opacity, - clearfix + main = gulp.src glob input.styles + .pipe g.filter(["*.less", "!_*.less"]) + .pipe g.less({paths: [input.images]}) + .pipe g.postcss([ + p.autoprefixer({browsers: ["last 2 versions", "ie >= 8"]}), + p.plsfilters({oldIE: true}), + p.rgba({oldie: true}), + p.opacity, + p.gradient, + p.fontweights ]) - .pipe gulpif(min, cssnano(nanoOpts), csscomb()) - .pipe gulp.dest paths.build + .pipe g.if(s.colorblind, g.postcss([p.colorblind])) + .pipe g.if(s.min, g.cssnano({discardComments: {removeAll: true}}), g.csscomb()) + .pipe g.rename({prefix: output.styles.prefix}) + .pipe gulp.dest output.dir - merge lib, nanoui + merge lib, main -gulp.task "templates", -> - gulp.src paths.templates - .pipe dot({dictionary: "TMPL", templateSettings: dotOpts}) - .pipe concat("templates.js") - .pipe header("window.TMPL = {};\n") - .pipe gulpif(min, uglify(), jsbeautify()) - .pipe gulp.dest paths.build +gulp.task "templates", ["clean"], -> + gulp.src glob input.templates + .pipe g.dotprecompiler({dictionary: "TMPL", templateSettings: dotOpts}) + .pipe g.concat(output.templates) + .pipe g.header("window.TMPL = {};\n") + .pipe g.if(s.min, g.uglify(), g.jsbeautifier()) + .pipe gulp.dest output.dir diff --git a/nano/README.md b/nano/README.md index eb1d71254aa..61490ced92c 100644 --- a/nano/README.md +++ b/nano/README.md @@ -12,6 +12,8 @@ - [Bar](#bar) - [doT](#dot) - [Styling](#styling) + - [Contributing](#contributing) + # NanoUI @@ -338,3 +340,38 @@ Here's an example of UI styling from Air Alarms: {{?}} + +## Contributing + +There are a few gotchas when it comes to writing for NanoUI. In order to +simplify server code and make the UI more responsive, we precompile all +templates to Javascript. In addition, Coffeescript and LESS are used to make +development easier, and also need to be precompiled. Precompiling CSS also +allows us to add fallbacks for old versions of Internet Explorer. + +To compile NanoUI (which you will need to do after adding or updating a +template), first install [Node.js](https://nodejs.org). + +Next, you will need to install packages used by NanoUI: + + cd nanoui/ + npm install -g gulp bower + npm install + bower install + +Finally, to compile NanoUI, run Gulp: + + gulp + +Every time you make an update, you will need to recompile. Before comitting, +make sure you minimize the files with Gulp: + + gulp --min + +If you would like to view your changes without restarting, run Gulp reload: + + gulp reload + +Finally, if you want to auto-compile and reload on save, run Gulp watch: + + gulp watch diff --git a/nano/assets/common.css b/nano/assets/common.css deleted file mode 100644 index ad59ec64ad8..00000000000 --- a/nano/assets/common.css +++ /dev/null @@ -1 +0,0 @@ -body,html{height:100%}body{font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff}h1,h2,h3{font-size:18px;margin:0;padding:6px 0}h2{font-size:16px}h3{font-size:14px}hr{background-color:#40628a;border:none}.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight,.label{color:#8ba5c4}.dark{color:#272727}.bold{font-weight:700}.italic{font-style:italic}.fontReset{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.noticeStripes{background-color:#bb9b68;background-image:-webkit-repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);background-image:repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}.hidden{display:none}.clearBoth{clear:both}.clearLeft{clear:left}.clearRight{clear:right}.floatNone{float:none}.floatLeft{float:left}.floatRight{float:right}.alignTop{vertical-align:top}.alignBottom{vertical-align:bottom}.alignLeft{text-align:left}.alignCenter{text-align:center}.alignRight{text-align:right}article.display,article.notice{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column;width:auto;padding:4px;margin:6px 2px;background-color:#000;background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}article.display header,article.notice header{padding-left:4px;margin-bottom:6px;border-bottom:2px solid #40628a}article.display section,article.notice section{width:100%;padding:2px 0}article.display section.text,article.notice section.text{padding:5px 0}article.display section.button,article.notice section.button{padding-bottom:0}article.display .cell,article.notice .cell{display:inline-block;margin:0}article.display .label,article.notice .label{display:inline-block;margin:0;width:33%;color:#8ba5c4}article.display .content,article.notice .content{display:inline-block;margin:0;width:66%}article.display .line,article.notice .line{display:inline-block;margin:0;width:100%}article.display table,article.notice table{width:auto;border-collapse:collapse}article.display table.grow,article.notice table.grow{width:100%}article.display th,article.notice th{vertical-align:top;padding:4px 16px 4px 0;text-align:left;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;color:#8ba5c4}article.display td,article.notice td{padding:2px 2px 0 0}article.notice{margin:8px 2px;box-shadow:none;background-color:#bb9b68;background-image:-webkit-repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);background-image:repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label,article.notice span{color:#000;font-weight:700;font-style:italic}.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;cursor:default;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}.link .iconed{padding-left:3px}.link i{margin-right:3px}.link i.main{display:inline-block}.link.pending i.main,.link i.pending{display:none}.link.pending i.pending{display:inline-block}.link.active{background-color:#40628a}.link.active:hover{background-color:#486e9b}.link.active.selected{background-color:#2f943c}.link.active.selected:hover{background-color:#35a744}.link.active.caution{background-color:#9a9d00}.link.active.caution:hover{background-color:#b3b700}.link.active.danger{background-color:#9d0808}.link.active.danger:hover{background-color:#b50909}.link.inactive{background-color:#999}.link.inactive.selected{background-color:#2f943c}.link.inactive.caution{background-color:#9a9d00}.link.inactive.danger{background-color:#9d0808}.link.disabled{background-color:#999}.bar{display:inline-block;position:relative;top:4px;vertical-align:top;box-sizing:border-box;width:100%;height:20px;margin:1px;padding:1px;border:1px solid #40628a;background:#272727}.bar .barText{position:absolute;top:1px;right:3px;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bar .barFill{display:block;height:100%;overflow:hidden;background:#40628a}.bar .barFill.good{background:#537d29}.bar .barFill.average{background:#be6209}.bar .barFill.bad{background:#b00e0e}.bar .barFill.highlight{background:#8ba5c4}.content{margin:3px}.loading{background-color:#bb9b68;background-image:-webkit-repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);background-image:repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)} \ No newline at end of file diff --git a/nano/assets/fontawesome-webfont.woff b/nano/assets/fontawesome-webfont.woff deleted file mode 100644 index dc35ce3c2cf..00000000000 Binary files a/nano/assets/fontawesome-webfont.woff and /dev/null differ diff --git a/nano/assets/generic.css b/nano/assets/generic.css deleted file mode 100644 index 65b98bb1f8f..00000000000 --- a/nano/assets/generic.css +++ /dev/null @@ -1 +0,0 @@ -body{background:-webkit-linear-gradient(top,#2a2a2a,#202020);background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')} \ No newline at end of file diff --git a/nano/assets/nanotrasen.css b/nano/assets/nanotrasen.css deleted file mode 100644 index 75dbe3734e5..00000000000 --- a/nano/assets/nanotrasen.css +++ /dev/null @@ -1 +0,0 @@ -body{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.35 -8.46 16.07 8.39' version='1' fill-opacity='.2'%3E%3Cpath d='M16.14-1.05a.5-.5 0 0 1-.33.89h-2.46a.2-.2 0 0 1-.2-.2v-3.19zM3.59-4.99v-3.27M3.59-4.99v-3.27a.2-.2 0 0 0-.2-.2H.84a.5-.5 0 0 0-.32.89zM7.11-8.46H4.48a.25-.25 0 0 0-.25.25v7.79a.25-.25 0 0 0 .25.25h1.96a.25-.25 0 0 0 .25-.25v-4.21L9.36-.29a.25-.25 0 0 0 .22.13h2.72a.25-.25 0 0 0 .25-.25V-8.2a.25-.25 0 0 0-.25-.25h-2.02a.25-.25 0 0 0-.25.25v4.26l-2.7-4.39a.25-.25 0 0 0-.22-.13z'/%3E%3C/svg%3E") no-repeat,-webkit-linear-gradient(top,#2a2a2a,#202020);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.35 -8.46 16.07 8.39' version='1' fill-opacity='.2'%3E%3Cpath d='M16.14-1.05a.5-.5 0 0 1-.33.89h-2.46a.2-.2 0 0 1-.2-.2v-3.19zM3.59-4.99v-3.27M3.59-4.99v-3.27a.2-.2 0 0 0-.2-.2H.84a.5-.5 0 0 0-.32.89zM7.11-8.46H4.48a.25-.25 0 0 0-.25.25v7.79a.25-.25 0 0 0 .25.25h1.96a.25-.25 0 0 0 .25-.25v-4.21L9.36-.29a.25-.25 0 0 0 .22.13h2.72a.25-.25 0 0 0 .25-.25V-8.2a.25-.25 0 0 0-.25-.25h-2.02a.25-.25 0 0 0-.25.25v4.26l-2.7-4.39a.25-.25 0 0 0-.22-.13z'/%3E%3C/svg%3E") no-repeat,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020');background-size:80% 80%,100% 100%;background-position:50% 33%,center;background-attachment:fixed,scroll}header[role=titlebar]{position:relative;height:30px;background-color:#363636;box-shadow:0 4px 4px -2px rgba(0,0,0,.3)}header[role=titlebar] .statusicon{position:absolute;top:4px;left:12px}header[role=titlebar] .title{position:absolute;top:6px;left:44px;height:24px;width:66%;color:#98b0c3;font-size:16px} \ No newline at end of file diff --git a/nano/assets/nanoui.common.css b/nano/assets/nanoui.common.css new file mode 100644 index 00000000000..80a2055ab04 --- /dev/null +++ b/nano/assets/nanoui.common.css @@ -0,0 +1 @@ +body,html{height:100%}body{font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff}h1,h2,h3{font-size:18px;margin:0;padding:6px 0}h2{font-size:16px}h3{font-size:14px}hr{background-color:#40628a;border:none}.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight,.label{color:#8ba5c4}.dark{color:#272727}.bold{font-weight:700}.italic{font-style:italic}.fontReset{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.noticeStripes{background-color:#bb9b68;background-image:repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}.hidden{display:none}.clearBoth{clear:both}.clearLeft{clear:left}.clearRight{clear:right}.floatNone{float:none}.floatLeft{float:left}.floatRight{float:right}.alignTop{vertical-align:top}.alignBottom{vertical-align:bottom}.alignLeft{text-align:left}.alignCenter{text-align:center}.alignRight{text-align:right}article.display,article.notice{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:column nowrap;-ms-flex-flow:column nowrap;flex-flow:column;width:auto;padding:4px;margin:6px 2px;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}article.display header,article.notice header{padding-left:4px;margin-bottom:6px;border-bottom:2px solid #40628a}article.display section,article.notice section{width:100%;padding:3px 0}article.display .cell,article.notice .cell{display:inline-block;margin:0}article.display .label,article.notice .label{display:inline-block;margin:0;width:33%;color:#8ba5c4;vertical-align:top}article.display .content,article.notice .content{display:inline-block;margin:0;width:66%}article.display .line,article.notice .line{display:inline-block;margin:0;width:100%}article.display .buttoninfo,article.notice .buttoninfo{margin-left:5px}article.display table,article.notice table{width:auto;border-collapse:collapse}article.display table.grow,article.notice table.grow{width:100%}article.display th,article.notice th{vertical-align:top;padding:4px 16px 4px 0;text-align:left;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;color:#8ba5c4}article.display td,article.notice td{padding:2px 2px 0 0}article.notice{margin:8px 2px;box-shadow:none;background-color:#bb9b68;background-image:repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label,article.notice span{color:#000;font-weight:700;font-style:italic}.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;cursor:default;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}.link .iconed{padding-left:3px}.link i{margin-right:3px}.link i.main{display:inline-block}.link.pending i.main,.link i.pending{display:none}.link.pending i.pending{display:inline-block}.link.active{background-color:#40628a}.link.active:hover{background-color:#486e9b}.link.active.selected{background-color:#2f943c}.link.active.selected:hover{background-color:#35a744}.link.active.caution{background-color:#9a9d00}.link.active.caution:hover{background-color:#b3b700}.link.active.danger{background-color:#9d0808}.link.active.danger:hover{background-color:#b50909}.link.inactive{background-color:#999}.link.inactive.selected{background-color:#2f943c}.link.inactive.caution{background-color:#9a9d00}.link.inactive.danger{background-color:#9d0808}.link.disabled{background-color:#999}.link.gridable{width:125px}.bar{display:inline-block;position:relative;top:4px;vertical-align:top;box-sizing:border-box;width:100%;height:20px;margin:1px;padding:1px;border:1px solid #40628a;background:#272727}.bar .barText{position:absolute;top:1px;right:3px;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bar .barFill{display:block;height:100%;overflow:hidden;background:#40628a}.bar .barFill.good{background:#537d29}.bar .barFill.average{background:#be6209}.bar .barFill.bad{background:#b00e0e}.bar .barFill.highlight{background:#8ba5c4}.content{margin:3px}.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)} \ No newline at end of file diff --git a/nano/assets/nanoui.generic.css b/nano/assets/nanoui.generic.css new file mode 100644 index 00000000000..cfcfa762a80 --- /dev/null +++ b/nano/assets/nanoui.generic.css @@ -0,0 +1 @@ +body{background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')} \ No newline at end of file diff --git a/nano/assets/lib.css b/nano/assets/nanoui.lib.css similarity index 100% rename from nano/assets/lib.css rename to nano/assets/nanoui.lib.css diff --git a/nano/assets/lib.js b/nano/assets/nanoui.lib.js similarity index 100% rename from nano/assets/lib.js rename to nano/assets/nanoui.lib.js diff --git a/nano/assets/app.js b/nano/assets/nanoui.main.js similarity index 100% rename from nano/assets/app.js rename to nano/assets/nanoui.main.js diff --git a/nano/assets/nanoui.nanotrasen.css b/nano/assets/nanoui.nanotrasen.css new file mode 100644 index 00000000000..11653f2ab02 --- /dev/null +++ b/nano/assets/nanoui.nanotrasen.css @@ -0,0 +1 @@ +body{background:url("data:image/svg+xml;charset=utf-8,%3C?xml-stylesheet type='text/css' href='common.css'?%3E%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0.35 -8.46 16.07 8.39' version='1' opacity='.1'%3E%3Cpath d='M16.14-1.05a.5-.5 0 0 1-.33.89h-2.46a.2-.2 0 0 1-.2-.2v-3.19zM3.59-4.99v-3.27M3.59-4.99v-3.27a.2-.2 0 0 0-.2-.2H.84a.5-.5 0 0 0-.32.89zM7.11-8.46H4.48a.25-.25 0 0 0-.25.25v7.79a.25-.25 0 0 0 .25.25h1.96a.25-.25 0 0 0 .25-.25v-4.21L9.36-.29a.25-.25 0 0 0 .22.13h2.72a.25-.25 0 0 0 .25-.25V-8.2a.25-.25 0 0 0-.25-.25h-2.02a.25-.25 0 0 0-.25.25v4.26l-2.7-4.39a.25-.25 0 0 0-.22-.13z'/%3E%3C/svg%3E") no-repeat,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020');background-size:70% 70%,100% 100%;background-position:center,center;background-attachment:fixed,scroll}header.titlebar{width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .title{position:absolute;top:6px;left:12px;color:#98b0c3;font-size:16px}header.titlebar .statusicon{position:absolute;top:4px;right:12px} \ No newline at end of file diff --git a/nano/assets/nanoui.templates.js b/nano/assets/nanoui.templates.js new file mode 100644 index 00000000000..cfb3ecd1c5f --- /dev/null +++ b/nano/assets/nanoui.templates.js @@ -0,0 +1 @@ +window.TMPL={},TMPL.airlock_electronics=function(e,s,a){var n='
';n+=e.oneAccess?""+a.link("One Required","unlock",{access:"one"}):""+a.link("All Required","lock",{access:"one"}),n+=""+a.link("Reset","refresh",{access:"clear"})+'
';var l=e.regions;if(l)for(var t,c=-1,i=l.length-1;i>c;)t=l[c+=1],n+='";n+="";var o=e.regions;if(o)for(var t,c=-1,r=o.length-1;r>c;){t=o[c+=1],n+=""}return n+="
'+t.name+"
";var d=t.accesses;if(d)for(var p,u=-1,v=d.length-1;v>u;)p=d[u+=1],n+=""+a.link(p.name,p.req?"check-square-o":"square-o",{access:p.id},null,p.req?"selected":null)+"
";n+="
"},TMPL.air_alarm=function(e,s,a){var n='
';if(n+=e.siliconUser?'
Interface Lock:
'+a.link("Engaged","lock",{toggleaccess:1},e.locked?"selected":null)+a.link("Disengaged","unlock",{toggleaccess:1},e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",n+='

Air Status

',e.environment_data){var l=e.environment_data;if(l)for(var t,c=-1,i=l.length-1;i>c;)t=l[c+=1],n+='
'+t.name+':
',n+=2==t.danger_level?'':1==t.danger_level?'':'',n+=""+a.fixed(t.value,2)+t.unit+"
";n+='
Local Status:
',n+=2==e.danger_level?'Danger (Internals Required)':1==e.danger_level?'Caution':'Optimal',n+='
Area Status:
',n+=e.atmos_alarm?'Atmosphere Alarm':e.fire_alarm?'Fire Alarm':'Nominal',n+="
"}else n+='
Warning: Cannot obtain air sample for analysis.
';if(e.dangerous&&(n+='
Warning: Safety measures offline. Device may exhibit abnormal behavior.
'),n+="
",!e.locked||e.siliconUser)if(1!=e.screen&&(n+=""+a.link("Back","arrow-left",{screen:1})),1==e.screen)n+='

Air Controls

',n+=e.atmos_alarm?""+a.link("Area Atmospheric Alarm","close",{atmos_reset:1},null,"caution"):""+a.link("Area Atmospheric Alarm","hand-stop-o",{atmos_alarm:1}),n+='
',n+=3!=e.mode?""+a.link("Panic Siphon","exclamation",{mode:3}):""+a.link("Panic Siphon","close",{mode:1},null,"danger"),n+='
'+a.link("Vent Controls","sign-out",{screen:2})+'
'+a.link("Scrubber Controls","filter",{screen:3})+'
'+a.link("Set Environmental Mode","cog",{screen:4})+'
'+a.link("Set Alarm Threshold","bar-chart",{screen:5})+"
";else if(2==e.screen){var o=e.vents;if(o)for(var r,c=-1,d=o.length-1;d>c;)r=o[c+=1],n+='

'+r.long_name+'

Power:
',n+=r.power?""+a.link("On","power-off",{id_tag:r.id_tag,command:"power",val:0},null,null):""+a.link("Off","close",{id_tag:r.id_tag,command:"power",val:1},null,"danger"),n+='
Mode:
',n+="release"==r.direction?'Pressurizing':'Siphoning',n+='
Pressure Checks:
'+a.link("Internal","sign-in",{id_tag:r.id_tag,command:"incheck",val:r.checks},null,r.incheck?"selected":null)+a.link("External","sign-out",{id_tag:r.id_tag,command:"excheck",val:r.checks},null,r.excheck?"selected":null)+'
Set Pressure:
'+a.link(a.fixed(r.external),"pencil",{id_tag:r.id_tag,command:"set_external_pressure"})+a.link("Reset","refresh",{id_tag:r.id_tag,command:"reset_external_pressure"},r.extdefault?"disabled":null)+"
";e.vents.length||(n+='No vents connected.')}else if(3==e.screen){var p=e.scrubbers;if(p)for(var u,c=-1,v=p.length-1;v>c;)u=p[c+=1],n+='

'+u.long_name+'

Power:
',n+=u.power?""+a.link("On","power-off",{id_tag:u.id_tag,command:"power",val:0},null,null):""+a.link("Off","close",{id_tag:u.id_tag,command:"power",val:1},null,"danger"),n+='
Mode:
',n+=u.scrubbing?""+a.link("Scrubbing","filter",{id_tag:u.id_tag,command:"scrubbing",val:0},null,null):""+a.link("Siphoning","sign-in",{id_tag:u.id_tag,command:"scrubbing",val:1},null,"danger"),n+='
Range:
',n+=u.widenet?""+a.link("Extended","expand",{id_tag:u.id_tag,command:"widenet",val:0},null,"caution"):""+a.link("Normal","compress",{id_tag:u.id_tag,command:"widenet",val:1},null,null),n+='
Filters:
'+a.link("CO2",u.filter_co2?"check-square-o":"square-o",{id_tag:u.id_tag,command:"co2_scrub",val:u.filter_co2?0:1},null,u.filter_co2?"selected":null)+a.link("N2O",u.filter_n2o?"check-square-o":"square-o",{id_tag:u.id_tag,command:"n2o_scrub",val:u.filter_n2o?0:1},null,u.filter_n2o?"selected":null)+a.link("Plasma",u.filter_toxins?"check-square-o":"square-o",{id_tag:u.id_tag,command:"tox_scrub",val:u.filter_toxins?0:1},null,u.filter_toxins?"selected":null)+"
";e.scrubbers.length||(n+='No scrubbers connected.')}else if(4==e.screen){n+='

Environmental Modes

';var k=e.modes;if(k)for(var h,c=-1,b=k.length-1;b>c;)h=k[c+=1],n+='
'+a.link(h.name,h.selected?"check-square-o":"square-o",{mode:h.mode},null,h.selected?h.danger?"danger":"selected":null)+"
";n+=""}else if(5==e.screen){n+='

Alarm Thresholds

';var g=e.thresholds;if(g)for(var f,c=-1,m=g.length-1;m>c;){f=g[c+=1],n+="";var _=f.settings;if(_)for(var w,P=-1,y=_.length-1;y>P;)w=_[P+=1],n+="";n+=""}n+="
min2min1max1max2
"+f.name+""+a.link(w.selected>=0?a.round(100*w.selected)/100:"Off",null,{command:"set_threshold",env:w.env,"var":w.val})+"
"}return n},TMPL.apc=function(e,s,a){var n='
';n+=e.siliconUser?'
Interface Lock:
'+a.link("Engaged","lock",{toggleaccess:1},e.locked?"selected":null)+a.link("Disengaged","unlock",{toggleaccess:1},e.malfStatus>=2?"linkOff":e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",n+='

Power Status

Main Breaker:
',n+=e.locked&&!e.siliconUser?e.isOperating?'On':'Off':""+a.link("On","power-off",{breaker:1},e.isOperating?"selected":null)+a.link("Off","close",{breaker:1},e.isOperating?null:"selected"),n+='
External Power:
',n+=2==e.externalPower?'Good':1==e.externalPower?'Low':'None',n+='
Power Cell:
',n+=null!=e.powerCellStatus?""+a.bar(e.powerCellStatus,0,100,e.powerCellStatus>=50?"good":e.powerCellStatus>=25?"average":"bad",a.fixed(e.powerCellStatus)+"%"):'Power cell removed.',n+="
",null!=e.powerCellStatus&&(n+='
Charge Mode:
',n+=e.locked&&!e.siliconUser?e.chargeMode?'Auto':'Off':""+a.link("Auto","refresh",{cmode:1},e.chargeMode?"selected":null)+a.link("Off","close",{cmode:1},e.chargeMode?null:"selected"),n+=" ",n+=e.chargingStatus>1?'[Fully Charged]':1==e.chargingStatus?'[Charging]':'[Not Charging]',n+="
"),n+='

Power Channels

';var l=e.powerChannels;if(l)for(var t,c=-1,i=l.length-1;i>c;)t=l[c+=1],n+="";return n+='
"+t.title+":"+t.powerLoad+" W",t.status<=1?n+='Off':t.status>=2&&(n+='On'),n+="",n+=1==t.status||3==t.status?"[Auto]":"[Manual]",n+='',(!e.locked||e.siliconUser)&&(n+=""+a.link("Auto","refresh",t.topicParams.auto,1==t.status||3==t.status?"selected":null)+a.link("On","power-off",t.topicParams.on,2==t.status?"selected":null)+a.link("Off","close",t.topicParams.off,0==t.status?"selected":null)),n+="
Total Load:'+e.totalLoad+" W
",e.siliconUser&&(n+='

System Overrides

'+a.link("Overload Lighting Circuit","lightbulb-o",{overload:1})+"
",1==e.malfStatus?n+=""+a.link("Override Programming","terminal",{malfhack:1}):2==e.malfStatus?n+=""+a.link("Shunt Core Processes","caret-square-o-down",{occupyapc:1}):3==e.malfStatus?n+=""+a.link("Return to Main Core","carat-square-o-left",{deoccupyapc:1}):4==e.malfStatus&&(n+=""+a.link("Shunt Core Processes","caret-square-o-down",{occupyapc:1},"linkOff")),n+="
"),n+='
Cover Lock:
',n+=e.locked&&!e.siliconUser?e.coverLocked?"Engaged":"Disengaged":""+a.link("Engaged","lock",{lock:1},e.coverLocked?"selected":null)+a.link("Disengaged","unlock",{lock:1},e.coverLocked?null:"selected"),n+="
"},TMPL.atmos_filter=function(e,s,a){var n='
Power:
'+a.link(e.on?"On":"Off",e.on?"power":"close",{power:1})+'
Output Pressure:
'+a.link("Set","pencil",{set_press:"set"})+a.link("Max","plus",{set_press:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Filter:
'+a.link("Plasma",null,{filterset:0},0==e.filter_type?"selected":null)+a.link("O2",null,{filterset:1},1==e.filter_type?"selected":null)+a.link("N2",null,{filterset:2},2==e.filter_type?"selected":null)+a.link("CO2",null,{filterset:3},3==e.filter_type?"selected":null)+a.link("N2O",null,{filterset:4},4==e.filter_type?"selected":null)+a.link("Nothing",null,{filterset:-1},-1==e.filter_type?"selected":null)+"
";return n},TMPL.atmos_mixer=function(e,s,a){var n='
Power:
'+a.link(e.on?"On":"Off",e.on?"power":"close",{power:1})+'
Output Pressure:
'+a.link("Set","pencil",{set_press:"set"})+a.link("Max","plus",{set_press:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Node 1:
'+a.link("","fast-backward",{node1_c:"-0.1"},null)+a.link("","backward",{node1_c:"-0.01"},null)+a.link("","forward",{node1_c:"0.01"},null)+a.link("","fast-forward",{node1_c:"0.1"},null)+''+e.node1_concentration+'%
Node 2:
'+a.link("","fast-backward",{node2_c:"-0.1"},null)+a.link("","backward",{node2_c:"-0.01"},null)+a.link("","forward",{node2_c:"0.01"},null)+a.link("","fast-forward",{node2_c:"0.1"},null)+''+e.node2_concentration+"%
";return n},TMPL.atmos_pump=function(e,s,a){var n='
Power:
'+a.link(e.on?"On":"Off",e.on?"power":"close",{power:1})+"
";return n+=e.max_rate?'
Transfer Rate:
'+a.link("Set","pencil",{set_transfer_rate:"set"})+a.link("Max","plus",{set_transfer_rate:"max"},e.transfer_rate==e.max_rate?"disabled":null)+e.transfer_rate+" L/s
":'
Output Pressure:
'+a.link("Set","pencil",{set_press:"set"})+a.link("Max","plus",{set_press:"max"},e.set_pressure==e.max_pressure?"disabled":null)+e.set_pressure+" kPa
",n+="
"},TMPL.canister=function(e,s,a){var n='
';return n+=e.hasHoldingTank?"The regulator is connected to a tank.":"The regulator is not connected to a tank.",n+='

Canister

'+a.link("Relabel","pencil",{relabel:1},e.canLabel?null:"disabled")+'
Pressure:
'+e.tankPressure+' kPa
Port:
',n+=e.portConnected?'Connected':'Disconnected',n+='

Valve

Release Pressure:
'+a.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+a.link("Reset","refresh",{release_p:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+a.link("Min","minus",{release_p:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+a.link("Set","pencil",{release_p:"custom"},null)+a.link("Max","plus",{release_p:"max"},e.releasePressure
Valve:
'+a.link("Open","unlock",{toggle:1},e.valveOpen?"selected":null)+a.link("Close","lock",{toggle:1},e.valveOpen?null:"selected")+'

Holding Tank

',n+=e.hasHoldingTank?"
"+a.link("Eject","eject",{remove_tank:1})+'
Label:
'+e.holdingTank.name+'
Tank Pressure:
'+e.holdingTank.tankPressure+" kPa
":'
No Holding Tank
',n+="
"},TMPL.chem_dispenser=function(e,s,a){var n='

Status

Energy:
'+a.bar(e.energy,0,e.maxEnergy,null,e.energy+" Units")+'
Amount:
',l=e.beakerTransferAmounts;if(l)for(var t,c=-1,i=l.length-1;i>c;)t=l[c+=1],n+=""+a.link(t,"plus",{amount:t},e.amount==t?"selected":null);n+='

Dispense

';var o=e.chemicals;if(o)for(var r,c=-1,d=o.length-1;d>c;)r=o[c+=1],n+=""+a.link(r.title,"tint",r.commands,null,"gridable");n+='

Beaker

'+a.link("Eject","eject",{ejectBeaker:1},e.isBeakerLoaded?null:"disabled")+'
';var p=e.beakerTransferAmounts;if(p)for(var t,c=-1,u=p.length-1;u>c;)t=p[c+=1],n+=""+a.link(t,"minus",{remove:t});if(n+='
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){n+=""+e.beakerCurrentVolume+"/"+e.beakerMaxVolume+" Units
";var v=e.beakerContents;if(v)for(var k,c=-1,h=v.length-1;h>c;)k=v[c+=1],n+=''+k.volume+" units of "+k.name+"
"}else n+='Beaker Empty';else n+='No Beaker Loaded';return n+="
"},TMPL.chem_heater=function(e,s,a){var n='

Status

Power:
'+a.link(e.isActive?"On":"Off",e.isActive?"power":"close",{toggle_on:1},e.isBeakerLoaded?null:"disabled")+'
Target:
'+a.link(e.targetTemp+"K","pencil",{adjust_temperature:"input"})+'

Beaker

'+a.link("Eject","eject",{eject_beaker:1},e.isBeakerLoaded?null:"disabled")+'
Contents:
';if(e.isBeakerLoaded)if(n+="Temperature: "+e.currentTemp+"K
",e.beakerContents.length){var l=e.beakerContents;if(l)for(var t,c=-1,i=l.length-1;i>c;)t=l[c+=1],n+=''+t.volume+" units of "+t.name+"
"}else n+='Beaker Empty';else n+='No Beaker Loaded';return n+="
"},TMPL.cryo=function(e,s,a){var n='

Occupant

Occupant:
';if(n+=e.hasOccupant?""+e.occupant.name+"":'No Occupant',n+="
",e.hasOccupant&&(n+='
State:
',n+=0==e.occupant.stat?'Conscious':1==e.occupant.stat?'Unconscious':'Dead',n+='
Temperature:
'+a.round(e.occupant.bodyTemperature)+" K
"),e.occupant.stat<2&&(n+='
Health:
'+a.bar(e.occupant.health,e.occupant.minHealth,e.occupant.Maxhealth,e.occupant.health>=0?"good":"average",a.round(e.occupant.health))+'
Brute:
'+a.bar(e.occupant.bruteLoss,0,e.occupant.maxHealth,"bad",a.round(e.occupant.bruteLoss))+'
Respiratory:
'+a.bar(e.occupant.oxyLoss,0,e.occupant.maxHealth,"bad",a.round(e.occupant.oxyLoss))+'
Toxin:
'+a.bar(e.occupant.toxLoss,0,e.occupant.maxHealth,"bad",a.round(e.occupant.toxLoss))+'
Burn:
'+a.bar(e.occupant.fireLoss,0,e.occupant.maxHealth,"bad",a.round(e.occupant.fireLoss))+"
"),n+='

Cell

Power:
'+a.link("On","power-off",{switchOn:1},e.isOperating?"selected":null)+a.link("Off","close",{switchOff:1},e.isOperating?null:"selected")+'
Temperature:
'+e.cellTemperature+' K
Door:
'+a.link("Open","unlock",{openCell:1},e.isOpen?"disabled":null)+a.link("Close","lock",{closeCell:1},e.isOpen?null:"disabled")+'
Eject:
'+a.link("Auto","sign-out",{autoEject:1},e.autoEject?"selected":null)+a.link("Manual","sign-in",{autoEject:0},e.autoEject?null:"selected")+'

Beaker

'+a.link("Eject","eject",{ejectBeaker:1},e.isBeakerLoaded?null:"disabled")+'
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){var l=e.beakerContents;if(l)for(var t,c=-1,i=l.length-1;i>c;)t=l[c+=1],n+=''+t.volume+" units of "+t.name+"
"}else n+='Beaker Empty';else n+='No Beaker Loaded';return n+="
"},TMPL.smes=function(e,s,a){var n='

Storage

Stored Energy:
'+a.bar(e.capacityPercent,0,100,e.capacityPercent>=50?"good":e.capacityPercent>=15?"average":"bad",a.round(e.capacityPercent)+"%")+'

Input

Charge Mode:
'+a.link("Auto","refresh",{input_attempt:1},e.inputAttempt?"selected":null)+a.link("Off","close",{input_attempt:0},e.inputAttempt?null:"selected")+" ";return n+=e.capacityPercent>=99?"[Fully Charged]":e.inputting?"[Charging]":"[Not Charging]",n+='
Input Setting:
'+a.bar(e.inputLevel,0,e.inputLevelMax,null,e.inputLevel+" W")+'
Adjust Input:
'+a.link("","fast-backward",{set_input_level:"0"},e.inputLevel?null:"selected")+a.link("","backward",{set_input_level:"minus"},e.inputLevel?null:"disabled")+a.link("Set","pencil",{set_input_level:"custom"},null)+a.link("","forward",{set_input_level:"plus"},e.inputLevel==e.inputLevelMax?"disabled":null)+a.link("","fast-forward",{set_input_level:"max"},e.inputLevel==e.inputLevelMax?"selected":null)+'
Available:
'+e.inputAvailable+' W

Output

Charge Mode:
'+a.link("On","power-off",{output_attempt:1},e.outputAttempt?"selected":null)+a.link("Off","close",{output_attempt:0},e.outputAttempt?null:"selected")+" ",n+=e.outputting?'[Sending]':e.charge>0?'[Not Sending]':'[No Charge]',n+='
Output Setting:
'+a.bar(e.outputLevel,0,e.outputLevelMax,null,e.outputLevel+" W")+'
Adjust Output:
'+a.link("","fast-backward",{set_output_level:"0"},e.outputLevel?null:"selected")+a.link("","backward",{set_output_level:"minus"},e.outputLevel?null:"disabled")+a.link("Set","pencil",{set_output_level:"custom"},null)+a.link("","forward",{set_output_level:"plus"},e.outputLevel==e.outputLevelMax?"disabled":null)+a.link("","fast-forward",{set_output_level:"max"},e.outputLevel==e.outputLevelMax?"selected":null)+'
Outputting:
'+e.outputUsed+" W
"},TMPL.solar_control=function(e,s,a){var n='

Status

Generated Power:
'+e.generated+' W
Orientation:
'+e.angle+"° ("+e.direction+')
Adjust:
'+a.link("15°","step-backward",{rate_control:"1",cdir:"-15"})+a.link("1°","backward",{rate_control:"1",cdir:"-1"})+a.link("1°","forward",{rate_control:"1",cdir:"1"})+a.link("15°","step-forward",{rate_control:"1",cdir:"15"})+'

Tracking

Tracker Mode:
'+a.link("Off","close",{track:"0"},0==e.tracking_state?"selected":"")+a.link("Timed","clock-o",{track:"1"},1==e.tracking_state?"selected":"");return n+=e.connected_tracker?""+a.link("Auto","refresh",{track:"2"},2==e.tracking_state?"selected":""):""+a.link("Auto","refresh",null,"disabled"),n+='
Tracking Rate:
'+e.tracking_rate+" deg/h ("+e.rotating_way+')
Adjust:
'+a.link("180°","fast-backward",{rate_control:"1",tdir:"-180"})+a.link("30°","step-backward",{rate_control:"1",tdir:"-30"})+a.link("1°","backward",{rate_control:"1",tdir:"-1"})+a.link("1°","forward",{rate_control:"1",tdir:"1"})+a.link("30°","step-forward",{rate_control:"1",tdir:"30"})+a.link("180°","fast-forward",{rate_control:"1",tdir:"180"})+'

Devices

Search:
'+a.link("Refresh","refresh",{search_connected:"1"})+'
Solar Tracker:
',n+=e.connected_tracker?'Found':'Not Found',n+='
Solars Panels:
'+e.connected_panels+" Connected
"},TMPL.space_heater=function(e,s,a){var n='

Status

Power:
'+a.link("On","power-off",{power:1},e.on?"selected":null)+a.link("Off","close",{power:0},e.on?null:"selected")+'
Stored Energy:
';return n+=e.hasPowercell?""+a.bar(e.powerLevel,0,100,"good",e.powerLevel+"%"):'No power cell loaded.',n+="
",e.open&&(n+='
Cell:
',n+=e.hasPowercell?""+a.link("Eject","eject",{cellremove:1}):""+a.link("Install","eject",{cellinstall:1}),n+="
"),n+='

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(n+='
Adjustment:
'+a.link("","fast-backward",{temp:-20},e.targetTemp>e.minTemp?null:"disabled")+a.link("","backward",{temp:-5},e.targetTemp>e.minTemp?null:"disabled")+a.link("Set","pencil",{temp:"custom"},null)+a.link("","forward",{temp:5},e.targetTemp
"),n+='
Operational Mode:
',n+=e.open?""+a.link("Heat","long-arrow-up",{mode:"heat"},"heat"!=e.mode?null:"selected")+a.link("Cool","long-arrow-down",{mode:"cool"},"cool"!=e.mode?null:"selected")+a.link("Auto","arrows-v",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?'Heat':"cool"==e.mode?'Cool':'Auto',n+="
"},TMPL.tanks=function(e,s,a){var n='
';return n+=e.hasHoldingTank?"The regulator is connected to a mask.":"The regulator is not connected to a mask.",n+='
Tank Pressure:
'+a.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad",e.tankPressure+" kPa")+'
Release Pressure:
'+a.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+a.link("Reset","refresh",{dist_p:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+a.link("Min","minus",{dist_p:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+a.link("Set","pencil",{dist_p:"custom"},null)+a.link("Max","plus",{dist_p:"max"},e.releasePressure
Valve:
'+a.link("Open","unlock",{stat:1},e.maskConnected?e.valveOpen?"selected":null:"disabled")+a.link("Close","lock",{stat:1},e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,s,a){var n="
Initiating...
";return n},TMPL._nanotrasen=function(e,s,a){var n="
"+s.title+"
Initiating...
";return n}; \ No newline at end of file diff --git a/nano/assets/templates.js b/nano/assets/templates.js deleted file mode 100644 index f6d6059afb9..00000000000 --- a/nano/assets/templates.js +++ /dev/null @@ -1 +0,0 @@ -window.TMPL={},TMPL.airlock_electronics=function(e,s,a){var l='
';l+=e.oneAccess?""+a.link("One Required","unlock",{access:"one"}):""+a.link("All Required","lock",{access:"one"}),l+=""+a.link("Reset","refresh",{access:"clear"})+'
';var t=e.regions;if(t)for(var i,n=-1,d=t.length-1;d>n;)i=t[n+=1],l+='";l+="";var c=e.regions;if(c)for(var i,n=-1,r=c.length-1;r>n;){i=c[n+=1],l+=""}return l+="
'+i.name+"
";var o=i.accesses;if(o)for(var v,u=-1,p=o.length-1;p>u;)v=o[u+=1],l+=""+a.link(v.name,v.req?"check-square-o":"square-o",{access:v.id},null,v.req?"selected":null)+"
";l+="
"},TMPL.air_alarm=function(e,s,a){var l='
';if(l+=e.siliconUser?'
Interface Lock:
'+a.link("Engaged","lock",{toggleaccess:1},e.locked?"selected":null)+a.link("Disengaged","unlock",{toggleaccess:1},e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",l+='

Air Status

',e.environment_data){var t=e.environment_data;if(t)for(var i,n=-1,d=t.length-1;d>n;)i=t[n+=1],l+='
'+i.name+':
',l+=2==i.danger_level?"":1==i.danger_level?"":"",l+=""+a.fixed(i.value,2)+i.unit+"
";l+='
Local Status:
',l+=2==e.danger_level?"Danger (Internals Required)":1==e.danger_level?"Caution":"Optimal",l+='
Area Status:
',l+=e.atmos_alarm?"Atmosphere Alarm":e.fire_alarm?"Fire Alarm":"Nominal",l+="
"}else l+="
Warning: Cannot obtain air sample for analysis.
";if(e.dangerous&&(l+="
Warning: Safety measures offline. Device may exhibit abnormal behavior.
"),l+="
",!e.locked||e.siliconUser)if(1!=e.screen&&(l+=""+a.link("Back","arrow-left",{screen:1})),1==e.screen)l+='

Air Controls

',l+=e.atmos_alarm?""+a.link("Area Atmospheric Alarm","close",{atmos_reset:1},null,"caution"):""+a.link("Area Atmospheric Alarm","hand-stop-o",{atmos_alarm:1}),l+='
',l+=3!=e.mode?""+a.link("Panic Siphon","exclamation",{mode:3}):""+a.link("Panic Siphon","close",{mode:1},null,"danger"),l+='
'+a.link("Vent Controls","sign-out",{screen:2})+'
'+a.link("Scrubber Controls","filter",{screen:3})+'
'+a.link("Set Environmental Mode","cog",{screen:4})+'
'+a.link("Set Alarm Threshold","bar-chart",{screen:5})+"
";else if(2==e.screen){var c=e.vents;if(c)for(var r,n=-1,o=c.length-1;o>n;)r=c[n+=1],l+='

'+r.long_name+'

Power:
',l+=r.power?""+a.link("On","power-off",{id_tag:r.id_tag,command:"power",val:0},null,null):""+a.link("Off","close",{id_tag:r.id_tag,command:"power",val:1},null,"danger"),l+='
Mode:
',l+="release"==r.direction?'Pressurizing':'Siphoning',l+='
Pressure Checks:
'+a.link("Internal","sign-in",{id_tag:r.id_tag,command:"incheck",val:r.checks},null,r.incheck?"selected":null)+a.link("External","sign-out",{id_tag:r.id_tag,command:"excheck",val:r.checks},null,r.excheck?"selected":null)+'
Set Pressure:
'+a.link(a.fixed(r.external),"pencil",{id_tag:r.id_tag,command:"set_external_pressure"})+a.link("Reset","refresh",{id_tag:r.id_tag,command:"reset_external_pressure"},r.extdefault?"disabled":null)+"
";e.vents.length||(l+="No vents connected.")}else if(3==e.screen){var v=e.scrubbers;if(v)for(var u,n=-1,p=v.length-1;p>n;)u=v[n+=1],l+='

'+u.long_name+'

Power:
',l+=u.power?""+a.link("On","power-off",{id_tag:u.id_tag,command:"power",val:0},null,null):""+a.link("Off","close",{id_tag:u.id_tag,command:"power",val:1},null,"danger"),l+='
Mode:
',l+=u.scrubbing?""+a.link("Scrubbing","filter",{id_tag:u.id_tag,command:"scrubbing",val:0},null,null):""+a.link("Siphoning","sign-in",{id_tag:u.id_tag,command:"scrubbing",val:1},null,"danger"),l+='
Range:
',l+=u.widenet?""+a.link("Extended","expand",{id_tag:u.id_tag,command:"widenet",val:0},null,"caution"):""+a.link("Normal","compress",{id_tag:u.id_tag,command:"widenet",val:1},null,null),l+='
Filters:
'+a.link("CO2",u.filter_co2?"check-square-o":"square-o",{id_tag:u.id_tag,command:"co2_scrub",val:u.filter_co2?0:1},null,u.filter_co2?"selected":null)+a.link("N2O",u.filter_n2o?"check-square-o":"square-o",{id_tag:u.id_tag,command:"n2o_scrub",val:u.filter_n2o?0:1},null,u.filter_n2o?"selected":null)+a.link("Plasma",u.filter_toxins?"check-square-o":"square-o",{id_tag:u.id_tag,command:"tox_scrub",val:u.filter_toxins?0:1},null,u.filter_toxins?"selected":null)+"
";e.scrubbers.length||(l+="No scrubbers connected.")}else if(4==e.screen){l+='

Environmental Modes

';var m=e.modes;if(m)for(var k,n=-1,g=m.length-1;g>n;)k=m[n+=1],l+='
'+a.link(k.name,k.selected?"check-square-o":"square-o",{mode:k.mode},null,k.selected?k.danger?"danger":"selected":null)+"
";l+=""}else if(5==e.screen){l+="

Alarm Thresholds

";var b=e.thresholds;if(b)for(var h,n=-1,f=b.length-1;f>n;){h=b[n+=1],l+="";var _=h.settings;if(_)for(var L,C=-1,P=_.length-1;P>C;)L=_[C+=1],l+="";l+=""}l+="
min2min1max1max2
"+h.name+""+a.link(L.selected>=0?a.round(100*L.selected)/100:"Off",null,{command:"set_threshold",env:L.env,"var":L.val})+"
"}return l},TMPL.apc=function(e,s,a){var l='
';l+=e.siliconUser?'
Interface Lock:
'+a.link("Engaged","lock",{toggleaccess:1},e.locked?"selected":null)+a.link("Disengaged","unlock",{toggleaccess:1},e.malfStatus>=2?"linkOff":e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",l+='

Power Status

Main Breaker:
',l+=e.locked&&!e.siliconUser?e.isOperating?"On":"Off":""+a.link("On","power-off",{breaker:1},e.isOperating?"selected":null)+a.link("Off","close",{breaker:1},e.isOperating?null:"selected"),l+='
External Power:
',l+=2==e.externalPower?"Good":1==e.externalPower?"Low":"None",l+='
Power Cell:
',l+=null!=e.powerCellStatus?""+a.bar(e.powerCellStatus,0,100,e.powerCellStatus>=50?"good":e.powerCellStatus>=25?"average":"bad",a.fixed(e.powerCellStatus)+"%"):"Power cell removed.",l+="
",null!=e.powerCellStatus&&(l+='
Charge Mode:
',l+=e.locked&&!e.siliconUser?e.chargeMode?"Auto":"Off":""+a.link("Auto","refresh",{cmode:1},e.chargeMode?"selected":null)+a.link("Off","close",{cmode:1},e.chargeMode?null:"selected"),l+=" ",l+=e.chargingStatus>1?"[Fully Charged]":1==e.chargingStatus?"[Charging]":"[Not Charging]",l+="
"),l+='

Power Channels

';var t=e.powerChannels;if(t)for(var i,n=-1,d=t.length-1;d>n;)i=t[n+=1],l+="";return l+='
"+i.title+":"+i.powerLoad+" W",i.status<=1?l+="Off":i.status>=2&&(l+="On"),l+="",l+=1==i.status||3==i.status?"[Auto]":"[Manual]",l+='',(!e.locked||e.siliconUser)&&(l+=""+a.link("Auto","refresh",i.topicParams.auto,1==i.status||3==i.status?"selected":null)+a.link("On","power-off",i.topicParams.on,2==i.status?"selected":null)+a.link("Off","close",i.topicParams.off,0==i.status?"selected":null)),l+="
Total Load:'+e.totalLoad+" W
",e.siliconUser&&(l+='

System Overrides

'+a.link("Overload Lighting Circuit","lightbulb-o",{overload:1})+"
",1==e.malfStatus?l+=""+a.link("Override Programming","terminal",{malfhack:1}):2==e.malfStatus?l+=""+a.link("Shunt Core Processes","caret-square-o-down",{occupyapc:1}):3==e.malfStatus?l+=""+a.link("Return to Main Core","carat-square-o-left",{deoccupyapc:1}):4==e.malfStatus&&(l+=""+a.link("Shunt Core Processes","caret-square-o-down",{occupyapc:1},"linkOff")),l+="
"),l+='
Cover Lock:
',l+=e.locked&&!e.siliconUser?e.coverLocked?"Engaged":"Disengaged":""+a.link("Engaged","lock",{lock:1},e.coverLocked?"selected":null)+a.link("Disengaged","unlock",{lock:1},e.coverLocked?null:"selected"),l+="
"},TMPL.atmos_filter=function(e,s,a){var l='
Power:
'+a.link(e.on?"On":"Off",e.on?"power":"close",{power:1})+'
Output Pressure:
'+a.link("Set","pencil",{set_press:"set"})+a.link("Max","plus",{set_press:"max"},e.set_pressure==e.max_pressure?"disabled":null)+e.set_pressure+' kPa
Filter:
'+a.link("Plasma",null,{filterset:0},0==e.filter_type?"selected":null)+a.link("O2",null,{filterset:1},1==e.filter_type?"selected":null)+a.link("N2",null,{filterset:2},2==e.filter_type?"selected":null)+a.link("CO2",null,{filterset:3},3==e.filter_type?"selected":null)+a.link("N2O",null,{filterset:4},4==e.filter_type?"selected":null)+a.link("Nothing",null,{filterset:-1},-1==e.filter_type?"selected":null)+"
";return l},TMPL.atmos_mixer=function(e,s,a){var l='
Power:
'+a.link(e.on?"On":"Off",e.on?"power":"close",{power:1})+'
Output Pressure:
'+a.link("Set","pencil",{set_press:"set"})+a.link("Max","plus",{set_press:"max"},e.set_pressure==e.max_pressure?"disabled":null)+e.set_pressure+' kPa
Node 1:
'+a.link("","seek-start",{node1_c:"-0.1"},null)+a.link("","triangle-1-w",{node1_c:"-0.01"},null)+a.link("","triangle-1-e",{node1_c:"0.01"},null)+a.link("","seek-end",{node1_c:"0.1"},null)+e.node1_concentration+'%
Node 2:
'+a.link("","seek-start",{node2_c:"-0.1"},null)+a.link("","triangle-1-w",{node2_c:"-0.01"},null)+a.link("","triangle-1-e",{node2_c:"0.01"},null)+a.link("","seek-end",{node2_c:"0.1"},null)+e.node2_concentration+"%
";return l},TMPL.atmos_pump=function(e,s,a){var l='
Power:
'+a.link(e.on?"On":"Off",e.on?"power":"close",{power:1})+"
";return l+=e.max_rate?'
Transfer Rate:
'+a.link("Set","pencil",{set_transfer_rate:"set"})+a.link("Max","plus",{set_transfer_rate:"max"},e.transfer_rate==e.max_rate?"disabled":null)+e.transfer_rate+" L/s
":'
Output Pressure:
'+a.link("Set","pencil",{set_press:"set"})+a.link("Max","plus",{set_press:"max"},e.set_pressure==e.max_pressure?"disabled":null)+e.set_pressure+" kPa
"},TMPL.canister=function(e,s,a){var l="";return l+=e.hasHoldingTank?'
The regulator is connected to a tank.
':'
The regulator is not connected to a tank.
',l+='

Canister

'+a.link("Relabel","pencil",{relabel:1},e.canLabel?null:"disabled")+'
Pressure:
'+e.tankPressure+' kPa
Port:
',l+=e.portConnected?'Connected':'Disconnected',l+='

Valve

Release Pressure:
'+a.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure)+e.releasePressure+' kPa
Pressure Regulator:
'+a.link("Reset","refresh",{release_p:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+a.link("Min","minus",{release_p:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+a.link("Set","pencil",{release_p:"custom"},null)+a.link("Max","plus",{release_p:"max"},e.releasePressure'+a.link("Open","unlock",{toggle:1},e.valveOpen?"selected":null)+a.link("Close","lock",{toggle:1},e.valveOpen?null:"selected")+"

Holding Tank

",l+=e.hasHoldingTank?""+a.link("Eject","eject",{remove_tank:1})+'
Label:
'+e.holdingTank.name+'
Tank Pressure:
'+e.holdingTank.tankPressure+" kPa
":'
No Holding Tank
'},TMPL.chem_dispenser=function(e,s,a){var l='

Status

Energy:
'+a.bar(e.energy,0,e.maxEnergy,"good")+e.energy+' Units
Amount:
',t=e.beakerTransferAmounts;if(t)for(var i,n=-1,d=t.length-1;d>n;)i=t[n+=1],l+=""+a.link(i,"plus",{amount:i},e.amount==i?"selected":null);l+='

Dispense

';var c=e.chemicals;if(c)for(var r,n=-1,o=c.length-1;o>n;)r=c[n+=1],l+=""+a.link(r.title,"tint",r.commands,null,"link fixedLeft");l+='

Beaker

'+a.link("Eject","eject",{ejectBeaker:1},e.isBeakerLoaded?null:"disabled")+'
';var v=e.beakerTransferAmounts;if(v)for(var i,n=-1,u=v.length-1;u>n;)i=v[n+=1],l+=""+a.link(i,"minus",{remove:i});if(l+='
Contents:
',e.isBeakerLoaded)if(l+="Volume: "+e.beakerCurrentVolume+"/"+e.beakerMaxVolume+" Units
",e.beakerContents.length){var p=e.beakerContents;if(p)for(var m,n=-1,k=p.length-1;k>n;)m=p[n+=1],l+=''+m.volume+" units of "+m.name+"
"}else l+='Beaker Empty';else l+='No Beaker Loaded';return l+="
"},TMPL.chem_heater=function(e,s,a){var l='

Status

Power:
'+a.link(e.isActive?"On":"Off",e.isActive?"power":"close",{toggle_on:1},e.isBeakerLoaded?null:"disabled")+'
Target:
'+a.link(e.targetTemp+"K","pencil",{adjust_temperature:"input"})+'

Beaker

'+a.link("Eject","eject",{eject_beaker:1},e.isBeakerLoaded?null:"disabled")+'
Contents:
';if(e.isBeakerLoaded)if(l+="Temperature: "+e.currentTemp+"K
",e.beakerContents.length){var t=e.beakerContents;if(t)for(var i,n=-1,d=t.length-1;d>n;)i=t[n+=1],l+=''+i.volume+" units of "+i.name+"
"}else l+='Beaker Empty';else l+='No Beaker Loaded';return l+="
"},TMPL.cryo=function(e,s,a){var l='

Occupant

Occupant:
';if(l+=e.hasOccupant?""+e.occupant.name:'No Occupant',l+="
",e.hasOccupant&&(l+='
State:
',l+=0==e.occupant.stat?'Conscious':1==e.occupant.stat?'Unconscious':'Dead',l+='
Temperature:
'+a.round(e.occupant.bodyTemperature)+" K
"),e.occupant.stat<2&&(l+='
Health:
',l+=e.occupant.health>=0?""+a.bar(e.occupant.health,0,e.occupant.maxHealth,"good"):""+a.bar(e.occupant.health,0,e.occupant.minHealth,"average"),l+=""+a.round(e.occupant.health)+'
Brute:
'+a.bar(e.occupant.bruteLoss,0,e.occupant.maxHealth,"bad")+a.round(e.occupant.bruteLoss)+'
Respiratory:
'+a.bar(e.occupant.oxyLoss,0,e.occupant.maxHealth,"bad")+a.round(e.occupant.oxyLoss)+'
Toxin:
'+a.bar(e.occupant.toxLoss,0,e.occupant.maxHealth,"bad")+a.round(e.occupant.toxLoss)+'
Burn:
'+a.bar(e.occupant.fireLoss,0,e.occupant.maxHealth,"bad")+a.round(e.occupant.fireLoss)+"
"),l+='

Cell

Power:
'+a.link("On","power",{switchOn:1},e.isOperating?"selected":null)+a.link("Off","close",{switchOff:1},e.isOperating?null:"selected")+'
Temperature:
'+e.cellTemperature+' K
Door:
'+a.link("Open","unlocked",{openCell:1},e.isOpen?"disabled":null)+a.link("Close","locked",{closeCell:1},e.isOpen?null:"disabled")+'
Eject:
'+a.link("Auto","eject",{autoEject:1},e.autoEject?"selected":null)+a.link("Manual","pin-s",{autoEject:0},e.autoEject?null:"selected")+'

Beaker

'+a.link("Eject","eject",{ejectBeaker:1},e.isBeakerLoaded?null:"disabled")+'
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){var t=e.beakerContents;if(t)for(var i,n=-1,d=t.length-1;d>n;)i=t[n+=1],l+=''+i.volume+" units of "+i.name+"
"}else l+='Beaker Empty';else l+='No Beaker Loaded';return l+="
"},TMPL.smes=function(e,s,a){var l='

Storage

Stored Energy:
'+a.bar(e.capacityPercent,0,100,e.capacityPercent>=50?"good":e.capacityPercent>=15?"average":"bad")+'
'+a.round(e.capacityPercent)+'%

Input

Charge Mode:
'+a.link("Auto","refresh",{input_attempt:1},e.inputAttempt?"selected":null)+a.link("Off","close",{input_attempt:0},e.inputAttempt?null:"selected")+" ";return l+=e.capacityPercent>=99?"[Fully Charged]":e.inputting?"[Charging]":"[Not Charging]",l+='
Input Setting:
'+a.bar(e.inputLevel,0,e.inputLevelMax)+" "+e.inputLevel+' W
'+a.link("","fast-backward",{set_input_level:"0"},e.inputLevel?null:"selected")+a.link("","backward",{set_input_level:"minus"},e.inputLevel?null:"disabled")+a.link("Set","pencil",{set_input_level:"custom"},null)+a.link("","forward",{set_input_level:"plus"},e.inputLevel==e.inputLevelMax?"disabled":null)+a.link("","fast-forward",{set_input_level:"max"},e.inputLevel==e.inputLevelMax?"selected":null)+'
Available:
'+e.inputAvailable+' W

Output

Charge Mode:
'+a.link("On","power-off",{output_attempt:1},e.outputAttempt?"selected":null)+a.link("Off","close",{output_attempt:0},e.outputAttempt?null:"selected")+" ",l+=e.outputting?'[Sending]':e.charge>0?'[Not Sending]':'[No Charge]',l+='
Output Setting:
'+a.bar(e.outputLevel,0,e.outputLevelMax)+" "+e.outputLevel+' W
'+a.link("","fast-backward",{set_output_level:"0"},e.outputLevel?null:"selected")+a.link("","backward",{set_output_level:"minus"},e.outputLevel?null:"disabled")+a.link("Set","pencil",{set_output_level:"custom"},null)+a.link("","forward",{set_output_level:"plus"},e.outputLevel==e.outputLevelMax?"disabled":null)+a.link("","fast-forward",{set_output_level:"max"},e.outputLevel==e.outputLevelMax?"selected":null)+'
Outputting:
'+e.outputUsed+" W
"},TMPL.solar_control=function(e,s,a){var l='

Status

Generated Power:
'+e.generated+' W
Orientation:
'+e.angle+"° ("+e.direction+")"+a.link("15°","minus",{rate_control:"1",cdir:"-15"})+a.link("1°","minus",{rate_control:"1",cdir:"-1"})+a.link("1°","plus",{rate_control:"1",cdir:"1"})+a.link("15°","plus",{rate_control:"1",cdir:"15"})+'

Tracking

Tracker Mode:
'+a.link("Off","close",{track:"0"},0==e.tracking_state?"selected":"")+a.link("Timed","clock",{track:"1"},1==e.tracking_state?"selected":"");return l+=e.connected_tracker?""+a.link("Auto","signal-diag",{track:"2"},2==e.tracking_state?"selected":""):""+a.link("Auto","signal-diag",null,"disabled"),l+='
Tracking Rate:
'+e.tracking_rate+" deg/h ("+e.rotating_way+")"+a.link("180°","minus",{rate_control:"1",tdir:"-180"})+a.link("30°","minus",{rate_control:"1",tdir:"-30"})+a.link("1°","minus",{rate_control:"1",tdir:"-1"})+a.link("1°","plus",{rate_control:"1",tdir:"1"})+a.link("30°","plus",{rate_control:"1",tdir:"30"})+a.link("180°","plus",{rate_control:"1",tdir:"180"})+'

Devices

Solar Tracker:
',l+=e.connected_tracker?'Found':'Not Found',l+='
Solars Panels:
'+e.connected_panels+' Connected
'+a.link("","refresh",{search_connected:"1"})+"
"},TMPL.space_heater=function(e,s,a){var l='

Status

Power:
'+a.link("On","power",{power:1},e.on?"selected":null)+a.link("Off","close",{power:0},e.on?null:"selected")+'
Stored Energy:
';return e.hasPowercell?(l+=""+a.bar(e.powerLevel,0,100,"good")+" "+e.powerLevel+"%",e.open&&(l+="
"+a.link("Eject","eject",{cellremove:1},null))):(l+="No power cell loaded.",e.open&&(l+=""+a.link("Install","eject",{cellinstall:1},null))),l+='

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C",e.open&&(l+="
"+a.link("","seek-prev",{temp:-20},e.targetTemp>e.minTemp?null:"disabled")+a.link("","triangle-1-w",{temp:-5},e.targetTemp>e.minTemp?null:"disabled")+a.link("Set","pencil",{temp:"custom"},null)+a.link("","triangle-1-e",{temp:5},e.targetTemp
Operational Mode:
',l+=e.open?""+a.link("Heat","arrowthick-1-n",{mode:"heat"},"heat"!=e.mode?null:"selected")+a.link("Cool","arrowthick-1-s",{mode:"cool"},"cool"!=e.mode?null:"selected")+a.link("Auto","arrowthick-2-n-s",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?"Heat":"cool"==e.mode?"Cool":"Auto",l+="
"},TMPL.tanks=function(e,s,a){var l="";return l+=e.maskConnected?'
The regulator is connected to a mask.
':'
The regulator is not connected to a mask.
',l+='
Tank Pressure:
'+a.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad")+e.tankPressure+' kPa
Release Pressure:
'+a.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure)+e.releasePressure+' kPa
Pressure Regulator:
'+a.link("Reset","refresh",{dist_p:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+a.link("Min","minus",{dist_p:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+a.link("Set","pencil",{dist_p:"custom"},null)+a.link("Max","plus",{dist_p:"max"},e.releasePressure'+a.link("Open","unlock",{stat:1},e.maskConnected?e.valveOpen?"selected":null:"disabled")+a.link("Close","lock",{stat:1},e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,s,a){var l="
Initiating...
";return l},TMPL._nanotrasen=function(e,s,a){var l="
"+s.title+"
Initiating...
";return l}; \ No newline at end of file diff --git a/nano/images/nanotrasen.svg b/nano/images/nanotrasen.svg index 781b577d940..b3f8db81905 100644 --- a/nano/images/nanotrasen.svg +++ b/nano/images/nanotrasen.svg @@ -1,6 +1,7 @@ - - - - + + + + + diff --git a/nano/package.json b/nano/package.json index 13fd842e95a..7ab774a9d02 100644 --- a/nano/package.json +++ b/nano/package.json @@ -3,8 +3,6 @@ "private": true, "dependencies": { "autoprefixer": "^6.1.2", - "coffeelint-stylish": "^0.1.2", - "cssnano": "^3.4.0", "del": "^2.2.0", "gulp": "^3.9.0", "gulp-coffee": "^2.3.1", @@ -17,17 +15,19 @@ "gulp-if": "^2.0.0", "gulp-jsbeautifier": "^1.0.1", "gulp-less": "^3.0.5", + "gulp-load-plugins": "^1.1.0", "gulp-postcss": "^6.0.1", + "gulp-rename": "^1.2.2", "gulp-replace": "^0.5.4", "gulp-uglify": "^1.5.1", "gulp-util": "^3.0.7", "main-bower-files": "^2.9.0", "merge-stream": "^1.0.0", "pleeease-filters": "^2.0.0", - "postcss-clearfix": "^0.2.0", - "postcss-color-rgba-fallback": "^2.0.0", + "postcss-color-rgba-fallback": "git+https://github.com/postcss/postcss-color-rgba-fallback", + "postcss-colorblind": "^0.4.0", "postcss-filter-gradient": "^0.1.1", - "postcss-opacity": "^3.0.0", - "postcss-pseudoelements": "^3.0.0" + "postcss-font-weights": "^2.0.1", + "postcss-opacity": "^3.0.0" } } diff --git a/nano/reload.bat b/nano/reload.bat index 11286ecfafa..2fe4104eb07 100644 --- a/nano/reload.bat +++ b/nano/reload.bat @@ -1,2 +1,9 @@ -FOR /F "tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set documents=%%a) +@echo off + +for /f "tokens=3* delims= " %%a in ( + 'reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"' +) do ( + set documents=%%a +) + copy assets\* "%documents%\BYOND\cache" /y diff --git a/nano/styles/_interface.less b/nano/styles/_interface.less index 8a85d4c36d6..6c98d664594 100644 --- a/nano/styles/_interface.less +++ b/nano/styles/_interface.less @@ -21,17 +21,7 @@ article.display { section { width: 100%; - padding: 2px 0; - } - - section.text { - &:extend(section); - padding: 5px 0; - } - - section.button { - &:extend(section); - padding-bottom: 0; + padding: 3px 0; } .cell { @@ -44,6 +34,7 @@ article.display { width: 33%; color: @label; + vertical-align: top; } .content { @@ -56,6 +47,10 @@ article.display { width: 100%; } + .buttoninfo { + margin-left: 5px; + } + table { width: auto; diff --git a/nano/styles/_link.less b/nano/styles/_link.less index 834abf468b7..d3078be6c0c 100644 --- a/nano/styles/_link.less +++ b/nano/styles/_link.less @@ -50,4 +50,8 @@ &.danger { background-color: @danger; } } &.disabled { background-color: @disabled; } + + &.gridable { + width: 125px; + } } diff --git a/nano/styles/nanotrasen.less b/nano/styles/nanotrasen.less index c1ed2da634b..2171e15c4b3 100644 --- a/nano/styles/nanotrasen.less +++ b/nano/styles/nanotrasen.less @@ -6,32 +6,30 @@ body { linear-gradient(to bottom, @background-start 0%, @background-end 100%); - background-size: 80% 80%, 100% 100%; - background-position: 50% 33%, center; + background-size: 70% 70%, 100% 100%; + background-position: center, center; background-attachment: fixed, scroll; } -header[role="titlebar"] { - position: relative; - height: 30px; +header.titlebar { + width: 100%; + height: 32px; background-color: @navbar; - box-shadow: 0 4px 4px -2px rgba(0, 0, 0, 0.3); - - .statusicon { - position: absolute; - top: 4px; - left: 12px; - } + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1); .title { position: absolute; top: 6px; - left: 44px; - height: 24px; - width: 66%; + left: 12px; color: @title; font-size: 16px; } + + .statusicon { + position: absolute; + top: 4px; + right: 12px; + } } diff --git a/nano/templates/_nanotrasen.dot b/nano/templates/_nanotrasen.dot index 8ea3696fe5b..e62cece1524 100644 --- a/nano/templates/_nanotrasen.dot +++ b/nano/templates/_nanotrasen.dot @@ -1,6 +1,6 @@ -
+
+
{{=config.title}} -
{{=config.title}}
diff --git a/nano/templates/air_alarm.dot b/nano/templates/air_alarm.dot index 0f80e08d5b2..9633637e18f 100644 --- a/nano/templates/air_alarm.dot +++ b/nano/templates/air_alarm.dot @@ -1,9 +1,7 @@
{{? data.siliconUser}}
- - Interface Lock: - + Interface Lock:
{{=helper.link('Engaged', 'lock', {'toggleaccess': 1}, data.locked ? 'selected' : null)}} {{=helper.link('Disengaged', 'unlock', {'toggleaccess': 1}, data.locked ? null : 'selected')}} @@ -21,57 +19,53 @@

Air Status

{{? data.environment_data}} {{~ data.environment_data:info:i}} -
- - {{=info.name}}: - +
+ {{=info.name}}:
{{? info.danger_level == 2}} - + {{?? info.danger_level == 1}} - + {{??}} - + {{?}} {{=helper.fixed(info.value, 2)}}{{=info.unit}}
{{~}} -
- - Local Status: - +
+ Local Status:
{{? data.danger_level == 2}} - Danger (Internals Required) + Danger (Internals Required) {{?? data.danger_level == 1}} - Caution + Caution {{??}} - Optimal + Optimal {{?}}
-
- - Area Status: - +
+ Area Status:
{{? data.atmos_alarm}} - Atmosphere Alarm + Atmosphere Alarm {{?? data.fire_alarm}} - Fire Alarm + Fire Alarm {{??}} - Nominal + Nominal {{?}}
{{??}} -
Warning: Cannot obtain air sample for analysis.
+
+ Warning: Cannot obtain air sample for analysis. +
{{?}} {{? data.dangerous}}
- Warning: Safety measures offline. Device may exhibit abnormal behavior. + Warning: Safety measures offline. Device may exhibit abnormal behavior.
{{?}}
@@ -114,9 +108,7 @@

{{=vent.long_name}}

- - Power: - + Power:
{{? vent.power}} {{=helper.link('On', 'power-off', {'id_tag': vent.id_tag, 'command': 'power', 'val': 0}, null, null)}} @@ -126,9 +118,7 @@
- - Mode: - + Mode:
{{? vent.direction == "release"}} Pressurizing @@ -138,18 +128,14 @@
- - Pressure Checks: - + Pressure Checks:
{{=helper.link('Internal', 'sign-in', {'id_tag': vent.id_tag, 'command': 'incheck', 'val': vent.checks}, null, vent.incheck ? 'selected' : null)}} {{=helper.link('External', 'sign-out', {'id_tag': vent.id_tag, 'command': 'excheck', 'val': vent.checks}, null, vent.excheck ? 'selected' : null)}}
- - Set Pressure: - + Set Pressure:
{{=helper.link(helper.fixed(vent.external), 'pencil', {'id_tag': vent.id_tag, 'command': 'set_external_pressure'})}} {{=helper.link('Reset', 'refresh', { 'id_tag': vent.id_tag, 'command': 'reset_external_pressure'}, vent.extdefault ? 'disabled' : null)}} @@ -158,16 +144,14 @@
{{~}} {{? !data.vents.length}} - No vents connected. + No vents connected. {{?}} {{?? data.screen == 3}} {{~ data.scrubbers:scrubber:i}}

{{=scrubber.long_name}}

- - Power: - + Power:
{{? scrubber.power}} {{=helper.link('On', 'power-off', {'id_tag': scrubber.id_tag, 'command': 'power', 'val': 0}, null, null)}} @@ -177,9 +161,7 @@
- - Mode: - + Mode:
{{? scrubber.scrubbing}} {{=helper.link('Scrubbing', 'filter', {'id_tag': scrubber.id_tag, 'command': 'scrubbing', 'val': 0}, null, null)}} @@ -189,9 +171,7 @@
- - Range: - + Range:
{{? scrubber.widenet}} {{=helper.link('Extended', 'expand', {'id_tag': scrubber.id_tag, 'command': 'widenet', 'val': 0}, null, 'caution')}} @@ -201,9 +181,7 @@
- - Filters: - + Filters:
{{=helper.link("CO2", scrubber.filter_co2 ? 'check-square-o' : 'square-o', {'id_tag': scrubber.id_tag, 'command': "co2_scrub", 'val': scrubber.filter_co2 ? 0 : 1}, null, scrubber.filter_co2 ? 'selected' : null)}} {{=helper.link("N2O", scrubber.filter_n2o ? 'check-square-o' : 'square-o', {'id_tag': scrubber.id_tag, 'command': "n2o_scrub", 'val': scrubber.filter_n2o ? 0 : 1}, null, scrubber.filter_n2o ? 'selected' : null)}} @@ -213,7 +191,7 @@
{{~}} {{? !data.scrubbers.length}} - No scrubbers connected. + No scrubbers connected. {{?}} {{?? data.screen == 4}}
@@ -231,10 +209,10 @@ - min2 - min1 - max1 - max2 + min2 + min1 + max1 + max2 diff --git a/nano/templates/apc.dot b/nano/templates/apc.dot index a8c6092288a..71fa6452886 100644 --- a/nano/templates/apc.dot +++ b/nano/templates/apc.dot @@ -1,9 +1,7 @@
{{? data.siliconUser}}
- - Interface Lock: - + Interface Lock:
{{=helper.link('Engaged', 'lock', {'toggleaccess': 1}, data.locked ? 'selected' : null)}} {{=helper.link('Disengaged', 'unlock', {'toggleaccess' : 1}, data.malfStatus >= 2 ? 'linkOff' : (data.locked ? null : 'selected'))}} @@ -20,15 +18,13 @@

Power Status

- - Main Breaker: - + Main Breaker:
{{? data.locked && !data.siliconUser}} {{? data.isOperating}} - On + On {{??}} - Off + Off {{?}} {{??}} {{=helper.link('On', 'power-off', {'breaker' : 1}, data.isOperating ? 'selected' : null)}} @@ -37,42 +33,36 @@
- - External Power: - + External Power:
{{? data.externalPower == 2}} - Good + Good {{?? data.externalPower == 1}} - Low + Low {{??}} - None + None {{?}}
- - Power Cell: - + Power Cell:
{{? data.powerCellStatus != null}} - {{=helper.bar(data.powerCellStatus, 0, 100, data.powerCellStatus >= 50 ? 'good' : data.powerCellStatus >= 25 ? 'average' : 'bad', helper.fixed(data.powerCellStatus) + "%")}} + {{=helper.bar(data.powerCellStatus, 0, 100, data.powerCellStatus >= 50 ? "good" : data.powerCellStatus >= 25 ? "average" : "bad", helper.fixed(data.powerCellStatus) + "%")}} {{??}} - Power cell removed. + Power cell removed. {{?}}
{{? data.powerCellStatus != null}}
- - Charge Mode: - + Charge Mode:
{{? data.locked && !data.siliconUser}} {{? data.chargeMode}} - Auto + Auto {{??}} - Off + Off {{?}} {{??}} {{=helper.link('Auto', 'refresh', {'cmode' : 1}, data.chargeMode ? 'selected' : null)}} @@ -80,11 +70,11 @@ {{?}}   {{? data.chargingStatus > 1}} - [Fully Charged] + [Fully Charged] {{?? data.chargingStatus == 1}} - [Charging] + [Charging] {{??}} - [Not Charging] + [Not Charging] {{?}}
@@ -99,9 +89,9 @@ {{=channel.powerLoad}} W {{? channel.status <= 1}} - Off + Off {{?? channel.status >= 2}} - On + On {{?}} @@ -150,9 +140,7 @@ {{?}}
- - Cover Lock: - + Cover Lock:
{{? data.locked && !data.siliconUser}} {{? data.coverLocked}} diff --git a/nano/templates/atmos_filter.dot b/nano/templates/atmos_filter.dot index 1ce177d094b..ac08c4dd864 100644 --- a/nano/templates/atmos_filter.dot +++ b/nano/templates/atmos_filter.dot @@ -1,31 +1,27 @@ -
-
- Power: -
-
- {{=helper.link(data.on? 'On' : 'Off', data.on? 'power' : 'close', {'power' : 1})}} -
-
-
-
- Output Pressure: -
-
- {{=helper.link('Set', 'pencil', {'set_press' : 'set'})}} - {{=helper.link('Max', 'plus', {'set_press' : 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} - {{=data.set_pressure}} kPa -
-
-
-
- Filter: -
-
- {{=helper.link('Plasma', null, {'filterset' : 0}, (data.filter_type == 0)? 'selected' : null)}} - {{=helper.link('O2', null, {'filterset' : 1}, (data.filter_type == 1)? 'selected' : null)}} - {{=helper.link('N2', null, {'filterset' : 2}, (data.filter_type == 2)? 'selected' : null)}} - {{=helper.link('CO2', null, {'filterset' : 3}, (data.filter_type == 3)? 'selected' : null)}} - {{=helper.link('N2O', null, {'filterset' : 4}, (data.filter_type == 4)? 'selected' : null)}} - {{=helper.link('Nothing', null, {'filterset' : -1}, (data.filter_type == -1)? 'selected' : null)}} -
-
+
+
+ Power: +
+ {{=helper.link(data.on? 'On' : 'Off', data.on? 'power' : 'close', {'power' : 1})}} +
+
+
+ Output Pressure: +
+ {{=helper.link('Set', 'pencil', {'set_press' : 'set'})}} + {{=helper.link('Max', 'plus', {'set_press' : 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} + {{=data.set_pressure}} kPa +
+
+
+ Filter: +
+ {{=helper.link('Plasma', null, {'filterset' : 0}, (data.filter_type == 0)? 'selected' : null)}} + {{=helper.link('O2', null, {'filterset' : 1}, (data.filter_type == 1)? 'selected' : null)}} + {{=helper.link('N2', null, {'filterset' : 2}, (data.filter_type == 2)? 'selected' : null)}} + {{=helper.link('CO2', null, {'filterset' : 3}, (data.filter_type == 3)? 'selected' : null)}} + {{=helper.link('N2O', null, {'filterset' : 4}, (data.filter_type == 4)? 'selected' : null)}} + {{=helper.link('Nothing', null, {'filterset' : -1}, (data.filter_type == -1)? 'selected' : null)}} +
+
+
diff --git a/nano/templates/atmos_mixer.dot b/nano/templates/atmos_mixer.dot index fa534cd2082..6510fa653da 100644 --- a/nano/templates/atmos_mixer.dot +++ b/nano/templates/atmos_mixer.dot @@ -1,42 +1,36 @@ -
-
- Power: -
-
- {{=helper.link(data.on? 'On' : 'Off', data.on? 'power' : 'close', {'power' : 1})}} -
-
-
-
- Output Pressure: -
-
- {{=helper.link('Set', 'pencil', {'set_press' : 'set'})}} - {{=helper.link('Max', 'plus', {'set_press' : 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} - {{=data.set_pressure}} kPa -
-
-
-
- Node 1: -
-
- {{=helper.link('', 'seek-start', {'node1_c' : '-0.1'}, null)}} - {{=helper.link('', 'triangle-1-w', {'node1_c' : '-0.01'}, null)}} - {{=helper.link('', 'triangle-1-e', {'node1_c' : '0.01'}, null)}} - {{=helper.link('', 'seek-end', {'node1_c' : '0.1'}, null)}} - {{=data.node1_concentration}}% -
-
-
-
- Node 2: -
-
- {{=helper.link('', 'seek-start', {'node2_c' : '-0.1'}, null)}} - {{=helper.link('', 'triangle-1-w', {'node2_c' : '-0.01'}, null)}} - {{=helper.link('', 'triangle-1-e', {'node2_c' : '0.01'}, null)}} - {{=helper.link('', 'seek-end', {'node2_c' : '0.1'}, null)}} - {{=data.node2_concentration}}% -
-
+
+
+ Power: +
+ {{=helper.link(data.on? 'On' : 'Off', data.on? 'power' : 'close', {'power' : 1})}} +
+
+
+ Output Pressure: +
+ {{=helper.link('Set', 'pencil', {'set_press' : 'set'})}} + {{=helper.link('Max', 'plus', {'set_press' : 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} + {{=data.set_pressure}} kPa +
+
+
+ Node 1: +
+ {{=helper.link('', 'fast-backward', {'node1_c' : '-0.1'}, null)}} + {{=helper.link('', 'backward', {'node1_c' : '-0.01'}, null)}} + {{=helper.link('', 'forward', {'node1_c' : '0.01'}, null)}} + {{=helper.link('', 'fast-forward', {'node1_c' : '0.1'}, null)}} + {{=data.node1_concentration}}% +
+
+
+ Node 2: +
+ {{=helper.link('', 'fast-backward', {'node2_c' : '-0.1'}, null)}} + {{=helper.link('', 'backward', {'node2_c' : '-0.01'}, null)}} + {{=helper.link('', 'forward', {'node2_c' : '0.01'}, null)}} + {{=helper.link('', 'fast-forward', {'node2_c' : '0.1'}, null)}} + {{=data.node2_concentration}}% +
+
+
diff --git a/nano/templates/atmos_pump.dot b/nano/templates/atmos_pump.dot index 0b93893b26c..1f29c07f3f6 100644 --- a/nano/templates/atmos_pump.dot +++ b/nano/templates/atmos_pump.dot @@ -1,31 +1,27 @@ -
-
- Power: -
-
- {{=helper.link(data.on? 'On' : 'Off', data.on? 'power' : 'close', {'power' : 1})}} -
-
-{{? data.max_rate}} -
-
- Transfer Rate: +
+
+ Power: +
+ {{=helper.link(data.on? 'On' : 'Off', data.on? 'power' : 'close', {'power' : 1})}}
-
- {{=helper.link('Set', 'pencil', {'set_transfer_rate' : 'set'})}} - {{=helper.link('Max', 'plus', {'set_transfer_rate' : 'max'}, data.transfer_rate == data.max_rate ? 'disabled' : null)}} - {{=data.transfer_rate}} L/s -
-
-{{??}} -
-
- Output Pressure: -
-
- {{=helper.link('Set', 'pencil', {'set_press' : 'set'})}} - {{=helper.link('Max', 'plus', {'set_press' : 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} - {{=data.set_pressure}} kPa -
-
-{{?}} +
+ {{? data.max_rate}} +
+ Transfer Rate: +
+ {{=helper.link('Set', 'pencil', {'set_transfer_rate' : 'set'})}} + {{=helper.link('Max', 'plus', {'set_transfer_rate' : 'max'}, data.transfer_rate == data.max_rate ? 'disabled' : null)}} + {{=data.transfer_rate}} L/s +
+
+ {{??}} +
+ Output Pressure: +
+ {{=helper.link('Set', 'pencil', {'set_press' : 'set'})}} + {{=helper.link('Max', 'plus', {'set_press' : 'max'}, data.set_pressure == data.max_pressure ? 'disabled' : null)}} + {{=data.set_pressure}} kPa +
+
+ {{?}} +
diff --git a/nano/templates/canister.dot b/nano/templates/canister.dot index 9cb23cc4e8d..14079dcc40d 100644 --- a/nano/templates/canister.dot +++ b/nano/templates/canister.dot @@ -1,77 +1,80 @@ -{{? data.hasHoldingTank }} -
The regulator is connected to a tank.
-{{??}} -
The regulator is not connected to a tank.
-{{?}} -

Canister

-
- {{=helper.link('Relabel', 'pencil', {'relabel' : 1}, data.canLabel ? null : 'disabled')}} -
-
-
- Pressure: -
-
- {{=data.tankPressure}} kPa -
-
-
-
- Port: -
-
- {{? data.portConnected}} - Connected - {{??}} - Disconnected - {{?}} -
-
-

Valve

-
-
- Release Pressure: -
-
- {{=helper.bar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure)}} - {{=data.releasePressure}} kPa -
-
-
-
- Pressure Regulator: -
-
- {{=helper.link('Reset', 'refresh', {'release_p': 'reset'}, (data.releasePressure != data.defaultReleasePressure) ? null : 'disabled')}} - {{=helper.link('Min', 'minus', {'release_p': 'min'}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', {'release_p': 'custom'}, null)}} - {{=helper.link('Max', 'plus', {'release_p': 'max'}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} -
- {{=helper.link('Open', 'unlock', {'toggle' : 1}, data.valveOpen ? 'selected' : null)}} - {{=helper.link('Close', 'lock', {'toggle' : 1}, data.valveOpen ? null : 'selected')}} -
-
-

Holding Tank

-{{? data.hasHoldingTank}} - {{=helper.link('Eject', 'eject', {'remove_tank' : 1})}} -
-
- Label: +
+ {{? data.hasHoldingTank }} + The regulator is connected to a tank. + {{??}} + The regulator is not connected to a tank. + {{?}} +
+
+

Canister

+
+ {{=helper.link('Relabel', 'pencil', {'relabel' : 1}, data.canLabel ? null : 'disabled')}} +
+
+ Pressure: +
+ {{=data.tankPressure}} kPa
-
- {{=data.holdingTank.name}} +
+
+ + Port: + +
+ {{? data.portConnected}} + Connected + {{??}} + Disconnected + {{?}}
-
-
-
- Tank Pressure: +
+
+
+

Valve

+
+ Release Pressure: +
+ {{=helper.bar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure, null, data.releasePressure + ' kPa')}}
-
- {{=data.holdingTank.tankPressure}} kPa +
+
+
Pressure Regulator:
+
+ {{=helper.link('Reset', 'refresh', {'release_p': 'reset'}, (data.releasePressure != data.defaultReleasePressure) ? null : 'disabled')}} + {{=helper.link('Min', 'minus', {'release_p': 'min'}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} + {{=helper.link('Set', 'pencil', {'release_p': 'custom'}, null)}} + {{=helper.link('Max', 'plus', {'release_p': 'max'}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}}
-
-{{??}} -
- No Holding Tank -
-{{?}} + +
+
Valve:
+
+ {{=helper.link('Open', 'unlock', {'toggle' : 1}, data.valveOpen ? 'selected' : null)}} + {{=helper.link('Close', 'lock', {'toggle' : 1}, data.valveOpen ? null : 'selected')}} +
+
+
+
+

Holding Tank

+ {{? data.hasHoldingTank}} +
+ {{=helper.link('Eject', 'eject', {'remove_tank' : 1})}} +
+
+ Label: +
+ {{=data.holdingTank.name}} +
+
+
+ Tank Pressure: +
+ {{=data.holdingTank.tankPressure}} kPa +
+
+ {{??}} +
+ No Holding Tank +
+ {{?}} +
diff --git a/nano/templates/chem_dispenser.dot b/nano/templates/chem_dispenser.dot index 1a55fa93501..9012f977271 100644 --- a/nano/templates/chem_dispenser.dot +++ b/nano/templates/chem_dispenser.dot @@ -1,64 +1,55 @@ -

Status

-
-
-
- Energy: -
-
- {{=helper.bar(data.energy, 0, data.maxEnergy, 'good')}} - {{=data.energy}} Units -
-
-
-
- Amount: -
-
- {{~ data.beakerTransferAmounts :amount:i}} - {{=helper.link(amount, 'plus', {'amount': amount}, (data.amount == amount) ? 'selected' : null)}} - {{~}} -
-
-
-

Dispense

-
-
-
- {{~ data.chemicals :chem:i}} - {{=helper.link(chem.title, 'tint', chem.commands, null, 'link fixedLeft')}} - {{~}} -
-
-
-

Beaker

-
-
-
- {{=helper.link('Eject', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} -
-
- {{~ data.beakerTransferAmounts :amount:i}} - {{=helper.link(amount, 'minus', {'remove': amount})}} - {{~}} -
-
-
-
- Contents: -
-
- {{? data.isBeakerLoaded}} - Volume: {{=data.beakerCurrentVolume}}/{{=data.beakerMaxVolume}} Units
- {{? data.beakerContents.length}} - {{~ data.beakerContents :reagent:i}} - {{=reagent.volume}} units of {{=reagent.name}}
- {{~}} - {{??}} - Beaker Empty - {{?}} - {{??}} - No Beaker Loaded - {{?}} -
-
-
+
+

Status

+
+ Energy: +
+ {{=helper.bar(data.energy, 0, data.maxEnergy, null, data.energy + ' Units')}} +
+
+
+ Amount: +
+ {{~ data.beakerTransferAmounts :amount:i}} + {{=helper.link(amount, 'plus', {'amount': amount}, (data.amount == amount) ? 'selected' : null)}} + {{~}} +
+
+
+
+

Dispense

+
+ {{~ data.chemicals :chem:i}} + {{=helper.link(chem.title, 'tint', chem.commands, null, 'gridable')}} + {{~}} + +
+
+

Beaker

+
+
+ {{=helper.link('Eject', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} +
+
+ {{~ data.beakerTransferAmounts :amount:i}} + {{=helper.link(amount, 'minus', {'remove': amount})}} + {{~}} +
+
+
+
Contents:
+
+ {{? data.isBeakerLoaded}} + {{? data.beakerContents.length}} + {{=data.beakerCurrentVolume}}/{{=data.beakerMaxVolume}} Units
+ {{~ data.beakerContents :reagent:i}} + {{=reagent.volume}} units of {{=reagent.name}}
+ {{~}} + {{??}} + Beaker Empty + {{?}} + {{??}} + No Beaker Loaded + {{?}} +
+
+
diff --git a/nano/templates/chem_heater.dot b/nano/templates/chem_heater.dot index bbf7b1abaa0..c5d2404942b 100644 --- a/nano/templates/chem_heater.dot +++ b/nano/templates/chem_heater.dot @@ -1,34 +1,26 @@ -

Status

-
-
-
- Power: -
-
+
+

Status

+
+ Power: +
{{=helper.link(data.isActive ? 'On' : 'Off', data.isActive ? 'power' : 'close', {'toggle_on' : 1}, data.isBeakerLoaded ? null : 'disabled')}}
-
-
-
- Target: -
-
+ +
+ Target: +
{{=helper.link(data.targetTemp + 'K', 'pencil', {'adjust_temperature' : 'input'})}}
-
-
-

Beaker

-
-
-
- {{=helper.link('Eject', 'eject', {'eject_beaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} -
-
-
-
- Contents: -
-
+ +
+
+

Beaker

+
+ {{=helper.link('Eject', 'eject', {'eject_beaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} +
+
+ Contents: +
{{? data.isBeakerLoaded}} Temperature: {{=data.currentTemp}}K
{{? data.beakerContents.length}} @@ -42,5 +34,5 @@ No Beaker Loaded {{?}}
- +
diff --git a/nano/templates/cryo.dot b/nano/templates/cryo.dot index d5598ce8bd4..3e519977721 100644 --- a/nano/templates/cryo.dot +++ b/nano/templates/cryo.dot @@ -1,23 +1,19 @@ -

Occupant

-
-
-
- Occupant: -
-
+
+

Occupant

+
+ Occupant: +
{{? data.hasOccupant}} - {{=data.occupant.name}} + {{=data.occupant.name}} {{??}} No Occupant {{?}}
-
+ {{? data.hasOccupant}} -
-
- State: -
-
+
+ State: +
{{? data.occupant.stat == 0}} Conscious {{?? data.occupant.stat == 1}} @@ -26,118 +22,85 @@ Dead {{?}}
-
-
-
- Temperature: -
-
+ +
+ Temperature: +
{{=helper.round(data.occupant.bodyTemperature)}} K
-
+ {{?}} {{? data.occupant.stat < 2}} -
-
- Health: +
+ Health: +
+ {{=helper.bar(data.occupant.health, data.occupant.minHealth, data.occupant.Maxhealth, data.occupant.health >= 0 ? 'good' : 'average', helper.round(data.occupant.health))}}
-
- {{? data.occupant.health >= 0}} - {{=helper.bar(data.occupant.health, 0, data.occupant.maxHealth, 'good')}} - {{??}} - {{=helper.bar(data.occupant.health, 0, data.occupant.minHealth, 'average')}} - {{?}} - {{=helper.round(data.occupant.health)}} +
+
+ Brute: +
+ {{=helper.bar(data.occupant.bruteLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.bruteLoss))}}
-
-
-
- Brute: + +
+ Respiratory: +
+ {{=helper.bar(data.occupant.oxyLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.oxyLoss))}}
-
- {{=helper.bar(data.occupant.bruteLoss, 0, data.occupant.maxHealth, 'bad')}} - {{=helper.round(data.occupant.bruteLoss)}} +
+
+ Toxin: +
+ {{=helper.bar(data.occupant.toxLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.toxLoss))}}
-
-
-
- Respiratory: +
+
+ Burn: +
+ {{=helper.bar(data.occupant.fireLoss, 0, data.occupant.maxHealth, 'bad', helper.round(data.occupant.fireLoss))}}
-
- {{=helper.bar(data.occupant.oxyLoss, 0, data.occupant.maxHealth, 'bad')}} - {{=helper.round(data.occupant.oxyLoss)}} -
-
-
-
- Toxin: -
-
- {{=helper.bar(data.occupant.toxLoss, 0, data.occupant.maxHealth, 'bad')}} - {{=helper.round(data.occupant.toxLoss)}} -
-
-
-
- Burn: -
-
- {{=helper.bar(data.occupant.fireLoss, 0, data.occupant.maxHealth, 'bad')}} - {{=helper.round(data.occupant.fireLoss)}} -
-
+ {{?}} -
-

Cell

-
-
-
- Power: -
-
- {{=helper.link('On', 'power', {'switchOn': 1}, data.isOperating ? 'selected' : null)}} +
+
+

Cell

+
+ Power: +
+ {{=helper.link('On', 'power-off', {'switchOn': 1}, data.isOperating ? 'selected' : null)}} {{=helper.link('Off', 'close', {'switchOff': 1}, data.isOperating ? null : 'selected')}}
- -
-
- Temperature: -
-
+
+
+ Temperature: +
{{=data.cellTemperature}} K
- -
-
- Door: +
+
+ Door: +
+ {{=helper.link('Open', 'unlock', {'openCell' : 1}, data.isOpen ? 'disabled' : null)}} + {{=helper.link('Close', 'lock', {'closeCell' : 1}, data.isOpen ? null : 'disabled')}}
-
- {{=helper.link('Open', 'unlocked', {'openCell' : 1}, data.isOpen ? 'disabled' : null)}} - {{=helper.link('Close', 'locked', {'closeCell' : 1}, data.isOpen ? null : 'disabled')}} +
+
+ Eject: +
+ {{=helper.link('Auto', 'sign-out', {'autoEject' : 1}, data.autoEject ? 'selected' : null)}} + {{=helper.link('Manual', 'sign-in', {'autoEject' : 0}, data.autoEject ? null : 'selected')}}
- -
-
- Eject: -
-
- {{=helper.link('Auto', 'eject', {'autoEject' : 1}, data.autoEject ? 'selected' : null)}} - {{=helper.link('Manual', 'pin-s', {'autoEject' : 0}, data.autoEject ? null : 'selected')}} -
-
- -

Beaker

-
-
-
- {{=helper.link('Eject', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} -
-
-
-
- Contents: -
-
+
+
+
+

Beaker

+
+ {{=helper.link('Eject', 'eject', {'ejectBeaker' : 1}, data.isBeakerLoaded ? null : 'disabled')}} +
+
+ Contents: +
{{? data.isBeakerLoaded}} {{? data.beakerContents.length}} {{~ data.beakerContents :reagent:i}} @@ -150,5 +113,5 @@ No Beaker Loaded {{?}}
- - +
+ diff --git a/nano/templates/smes.dot b/nano/templates/smes.dot index 4f2d5e9f03e..ab37149991c 100644 --- a/nano/templates/smes.dot +++ b/nano/templates/smes.dot @@ -1,100 +1,89 @@ -

Storage

-
-
-
- Stored Energy: -
-
- {{=helper.bar(data.capacityPercent, 0, 100, data.capacityPercent >= 50 ? 'good' : data.capacityPercent >= 15 ? 'average' : 'bad')}} -
- {{=helper.round(data.capacityPercent)}}% -
-
-
-
-

Input

-
-
-
- Charge Mode: -
-
- {{=helper.link('Auto', 'refresh', {'input_attempt': 1}, data.inputAttempt ? 'selected' : null)}} - {{=helper.link('Off', 'close', {'input_attempt': 0}, data.inputAttempt ? null : 'selected')}} -   - {{? data.capacityPercent >= 99}} - [Fully Charged] - {{?? data.inputting}} - [Charging] - {{??}} - [Not Charging] - {{?}} -
-
-
-
- Input Setting: -
-
- {{=helper.bar(data.inputLevel, 0, data.inputLevelMax)}} -  {{=data.inputLevel}} W -
- {{=helper.link('', 'fast-backward', {'set_input_level': '0'}, data.inputLevel ? null : 'selected')}} - {{=helper.link('', 'backward', {'set_input_level': 'minus'}, data.inputLevel ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', {'set_input_level': 'custom'}, null)}} - {{=helper.link('', 'forward', {'set_input_level': 'plus'}, data.inputLevel == data.inputLevelMax ? 'disabled' : null)}} - {{=helper.link('', 'fast-forward', {'set_input_level': 'max'}, data.inputLevel == data.inputLevelMax ? 'selected' : null)}} -
-
-
-
- Available: -
-
- {{=data.inputAvailable}} W -
-
-
-

Output

-
-
-
- Charge Mode: -
-
- {{=helper.link('On', 'power-off', {'output_attempt': 1}, data.outputAttempt ? 'selected' : null)}} - {{=helper.link('Off', 'close', {'output_attempt': 0}, data.outputAttempt ? null : 'selected')}} -   - {{? data.outputting}} - [Sending] - {{?? data.charge > 0}} - [Not Sending] - {{??}} - [No Charge] - {{?}} -
-
-
-
- Output Setting: -
-
- {{=helper.bar(data.outputLevel, 0, data.outputLevelMax)}} -  {{=data.outputLevel}} W -
- {{=helper.link('', 'fast-backward', {'set_output_level': '0'}, data.outputLevel ? null : 'selected')}} - {{=helper.link('', 'backward', {'set_output_level': 'minus'}, data.outputLevel ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', {'set_output_level': 'custom'}, null)}} - {{=helper.link('', 'forward', {'set_output_level': 'plus'}, data.outputLevel == data.outputLevelMax ? 'disabled' : null)}} - {{=helper.link('', 'fast-forward', {'set_output_level': 'max'}, data.outputLevel == data.outputLevelMax ? 'selected' : null)}} -
-
-
-
- Outputting: -
-
- {{=data.outputUsed}} W -
-
-
+
+

Storage

+
+ Stored Energy: +
+ {{=helper.bar(data.capacityPercent, 0, 100, data.capacityPercent >= 50 ? 'good' : data.capacityPercent >= 15 ? 'average' : 'bad', helper.round(data.capacityPercent) + '%')}} +
+
+
+
+

Input

+
+ Charge Mode: +
+ {{=helper.link('Auto', 'refresh', {'input_attempt': 1}, data.inputAttempt ? 'selected' : null)}} + {{=helper.link('Off', 'close', {'input_attempt': 0}, data.inputAttempt ? null : 'selected')}} +   + {{? data.capacityPercent >= 99}} + [Fully Charged] + {{?? data.inputting}} + [Charging] + {{??}} + [Not Charging] + {{?}} +
+
+
+ Input Setting: +
+ {{=helper.bar(data.inputLevel, 0, data.inputLevelMax, null, data.inputLevel + ' W')}} +
+
+
+ Adjust Input: +
+ {{=helper.link('', 'fast-backward', {'set_input_level': '0'}, data.inputLevel ? null : 'selected')}} + {{=helper.link('', 'backward', {'set_input_level': 'minus'}, data.inputLevel ? null : 'disabled')}} + {{=helper.link('Set', 'pencil', {'set_input_level': 'custom'}, null)}} + {{=helper.link('', 'forward', {'set_input_level': 'plus'}, data.inputLevel == data.inputLevelMax ? 'disabled' : null)}} + {{=helper.link('', 'fast-forward', {'set_input_level': 'max'}, data.inputLevel == data.inputLevelMax ? 'selected' : null)}} +
+
+
+ Available: +
+ {{=data.inputAvailable}} W +
+
+
+
+

Output

+
+ Charge Mode: +
+ {{=helper.link('On', 'power-off', {'output_attempt': 1}, data.outputAttempt ? 'selected' : null)}} + {{=helper.link('Off', 'close', {'output_attempt': 0}, data.outputAttempt ? null : 'selected')}} +   + {{? data.outputting}} + [Sending] + {{?? data.charge > 0}} + [Not Sending] + {{??}} + [No Charge] + {{?}} +
+
+
+ Output Setting: +
+ {{=helper.bar(data.outputLevel, 0, data.outputLevelMax, null, data.outputLevel + ' W')}} +
+
+
+ Adjust Output: +
+ {{=helper.link('', 'fast-backward', {'set_output_level': '0'}, data.outputLevel ? null : 'selected')}} + {{=helper.link('', 'backward', {'set_output_level': 'minus'}, data.outputLevel ? null : 'disabled')}} + {{=helper.link('Set', 'pencil', {'set_output_level': 'custom'}, null)}} + {{=helper.link('', 'forward', {'set_output_level': 'plus'}, data.outputLevel == data.outputLevelMax ? 'disabled' : null)}} + {{=helper.link('', 'fast-forward', {'set_output_level': 'max'}, data.outputLevel == data.outputLevelMax ? 'selected' : null)}} +
+
+
+ Outputting: +
+ {{=data.outputUsed}} W +
+
+
diff --git a/nano/templates/solar_control.dot b/nano/templates/solar_control.dot index 1ba3ffa390d..f87dae33f5f 100644 --- a/nano/templates/solar_control.dot +++ b/nano/templates/solar_control.dot @@ -1,80 +1,85 @@ -

Status

-
-
-
- Generated Power: -
-
- {{=data.generated}} W -
-
-
-
- Orientation: -
-
- {{=data.angle}}° ({{=data.direction}}) - {{=helper.link('15°', 'minus', {'rate_control': '1', 'cdir': '-15'})}} - {{=helper.link('1°', 'minus', {'rate_control': '1', 'cdir': '-1'})}} - {{=helper.link('1°', 'plus', {'rate_control': '1', 'cdir': '1'})}} - {{=helper.link('15°', 'plus', {'rate_control': '1', 'cdir': '15'})}} -
-
-
-

Tracking

-
-
-
- Tracker Mode: -
-
- {{=helper.link('Off', 'close', {'track': '0'}, (data.tracking_state == 0) ? 'selected' : '')}} - {{=helper.link('Timed', 'clock', {'track': '1'}, (data.tracking_state == 1) ? 'selected' : '')}} - {{? data.connected_tracker}} - {{=helper.link('Auto', 'signal-diag', {'track': '2'}, (data.tracking_state == 2) ? 'selected' : '')}} - {{??}} - {{=helper.link('Auto', 'signal-diag', null, 'disabled')}} - {{?}} -
-
-
-
- Tracking Rate: -
-
- {{=data.tracking_rate}} deg/h ({{=data.rotating_way}}) - {{=helper.link('180°', 'minus', {'rate_control': '1', 'tdir': '-180'})}} - {{=helper.link('30°', 'minus', {'rate_control': '1', 'tdir': '-30'})}} - {{=helper.link('1°', 'minus', { 'rate_control': '1', 'tdir': '-1'})}} - {{=helper.link('1°', 'plus', { 'rate_control': '1', 'tdir': '1'})}} - {{=helper.link('30°', 'plus', { 'rate_control': '1', 'tdir': '30'})}} - {{=helper.link('180°', 'plus', { 'rate_control': '1', 'tdir': '180'})}} -
-
-
-

Devices

-
-
-
- Solar Tracker: -
-
- {{? data.connected_tracker}} - Found - {{??}} - Not Found - {{?}} -
-
-
-
- Solars Panels: -
-
- {{=data.connected_panels}} Connected -
-
-
- {{=helper.link('', 'refresh', {'search_connected': '1'})}} -
-
+
+

Status

+
+ Generated Power: +
+ {{=data.generated}} W +
+
+
+ Orientation: +
+ {{=data.angle}}° ({{=data.direction}}) +
+
+
+ Adjust: +
+ {{=helper.link('15°', 'step-backward', {'rate_control': '1', 'cdir': '-15'})}} + {{=helper.link('1°', 'backward', {'rate_control': '1', 'cdir': '-1'})}} + {{=helper.link('1°', 'forward', {'rate_control': '1', 'cdir': '1'})}} + {{=helper.link('15°', 'step-forward', {'rate_control': '1', 'cdir': '15'})}} +
+
+
+
+

Tracking

+
+ Tracker Mode: +
+ {{=helper.link('Off', 'close', {'track': '0'}, (data.tracking_state == 0) ? 'selected' : '')}} + {{=helper.link('Timed', 'clock-o', {'track': '1'}, (data.tracking_state == 1) ? 'selected' : '')}} + {{? data.connected_tracker}} + {{=helper.link('Auto', 'refresh', {'track': '2'}, (data.tracking_state == 2) ? 'selected' : '')}} + {{??}} + {{=helper.link('Auto', 'refresh', null, 'disabled')}} + {{?}} +
+
+
+ Tracking Rate: +
+ {{=data.tracking_rate}} deg/h ({{=data.rotating_way}}) +
+
+
+ Adjust: +
+ {{=helper.link('180°', 'fast-backward', {'rate_control': '1', 'tdir': '-180'})}} + {{=helper.link('30°', 'step-backward', {'rate_control': '1', 'tdir': '-30'})}} + {{=helper.link('1°', 'backward', { 'rate_control': '1', 'tdir': '-1'})}} + {{=helper.link('1°', 'forward', { 'rate_control': '1', 'tdir': '1'})}} + {{=helper.link('30°', 'step-forward', { 'rate_control': '1', 'tdir': '30'})}} + {{=helper.link('180°', 'fast-forward', { 'rate_control': '1', 'tdir': '180'})}} +
+
+
+
+

Devices

+
+ Search: +
+ {{=helper.link('Refresh', 'refresh', {'search_connected': '1'})}} +
+
+
+ + Solar Tracker: + +
+ {{? data.connected_tracker}} + Found + {{??}} + Not Found + {{?}} +
+
+
+ + Solars Panels: + +
+ {{=data.connected_panels}} Connected +
+ +
diff --git a/nano/templates/space_heater.dot b/nano/templates/space_heater.dot index 230fe27202f..5405b4013b9 100644 --- a/nano/templates/space_heater.dot +++ b/nano/templates/space_heater.dot @@ -1,76 +1,79 @@ -

Status

-
-
-
- Power: -
-
- {{=helper.link('On', 'power', {'power': 1}, !data.on ? null : 'selected')}} - {{=helper.link('Off', 'close', {'power': 0}, data.on ? null : 'selected')}} -
-
-
-
- Stored Energy: -
-
- {{? data.hasPowercell}} - {{=helper.bar(data.powerLevel, 0, 100, 'good')}} {{=data.powerLevel}}% - {{? data.open}} -
- {{=helper.link('Eject', 'eject', {'cellremove' : 1}, null)}} - {{?}} - {{??}} - No power cell loaded. - {{? data.open}} - {{=helper.link('Install', 'eject', {'cellinstall' : 1}, null )}} - {{?}} - {{?}} -
-
-
- -

Thermostat

-
-
-
- Current Temp: -
-
- {{=data.currentTemp}}°C -
-
-
-
- Target Temp: -
-
- {{=data.targetTemp}}°C - {{? data.open}} -
- {{=helper.link('', 'seek-prev', {'temp': -20}, data.targetTemp > data.minTemp ? null : 'disabled')}} - {{=helper.link('', 'triangle-1-w', {'temp': -5}, data.targetTemp > data.minTemp ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', {'temp': 'custom'}, null)}} - {{=helper.link('', 'triangle-1-e', {'temp': 5}, data.targetTemp < data.maxTemp ? null : 'disabled')}} - {{=helper.link('', 'seek-next', {'temp': 20}, data.targetTemp < data.maxTemp ? null : 'disabled')}} - {{?}} -
-
-
-
- Operational Mode: -
-
- {{? data.open}} - {{=helper.link('Heat', 'arrowthick-1-n', {'mode' : 'heat'}, data.mode != "heat" ? null : 'selected')}} - {{=helper.link('Cool', 'arrowthick-1-s', {'mode' : 'cool'}, data.mode != "cool" ? null : 'selected')}} - {{=helper.link('Auto', 'arrowthick-2-n-s', {'mode' : 'auto'}, (data.mode == "heat" || data.mode == "cool") ? null : 'selected')}} - {{??}} - {{? data.mode == "heat"}}Heat - {{?? data.mode == "cool"}}Cool - {{??}}Auto - {{?}} - {{?}} -
-
-
+
+

Status

+
+ Power: +
+ {{=helper.link('On', 'power-off', {'power': 1}, !data.on ? null : 'selected')}} + {{=helper.link('Off', 'close', {'power': 0}, data.on ? null : 'selected')}} +
+
+
+ Stored Energy: +
+ {{? data.hasPowercell}} + {{=helper.bar(data.powerLevel, 0, 100, 'good', data.powerLevel + '%')}} + {{??}} + No power cell loaded. + {{?}} +
+
+ {{? data.open}} +
+ Cell: +
+ {{? data.hasPowercell}} + {{=helper.link('Eject', 'eject', {'cellremove': 1})}} + {{??}} + {{=helper.link('Install', 'eject', {'cellinstall': 1})}} + {{?}} +
+
+ {{?}} +
+
+

Thermostat

+
+ Current Temp: +
+ {{=data.currentTemp}}°C +
+
+
+ Target Temp: +
+ {{=data.targetTemp}}°C +
+
+ {{? data.open}} +
+ Adjustment: +
+ {{=helper.link('', 'fast-backward', {'temp': -20}, data.targetTemp > data.minTemp ? null : 'disabled')}} + {{=helper.link('', 'backward', {'temp': -5}, data.targetTemp > data.minTemp ? null : 'disabled')}} + {{=helper.link('Set', 'pencil', {'temp': 'custom'}, null)}} + {{=helper.link('', 'forward', {'temp': 5}, data.targetTemp < data.maxTemp ? null : 'disabled')}} + {{=helper.link('', 'fast-forward', {'temp': 20}, data.targetTemp < data.maxTemp ? null : 'disabled')}} +
+
+ {{?}} +
+ + Operational Mode: + +
+ {{? data.open}} + {{=helper.link('Heat', 'long-arrow-up', {'mode': 'heat'}, data.mode != "heat" ? null : 'selected')}} + {{=helper.link('Cool', 'long-arrow-down', {'mode': 'cool'}, data.mode != "cool" ? null : 'selected')}} + {{=helper.link('Auto', 'arrows-v', {'mode': 'auto'}, (data.mode == "heat" || data.mode == "cool") ? null : 'selected')}} + {{??}} + {{? data.mode == "heat"}} + Heat + {{?? data.mode == "cool"}} + Cool + {{??}} + Auto + {{?}} + {{?}} +
+
+
diff --git a/nano/templates/tanks.dot b/nano/templates/tanks.dot index 40c54bf37fd..390d3538849 100644 --- a/nano/templates/tanks.dot +++ b/nano/templates/tanks.dot @@ -1,37 +1,37 @@ -{{? data.maskConnected}} -
The regulator is connected to a mask.
-{{??}} -
The regulator is not connected to a mask.
-{{?}} -
-
- Tank Pressure: -
-
- {{=helper.bar(data.tankPressure, 0, 1013, (data.tankPressure > 200) ? 'good' : ((data.tankPressure > 100) ? 'average' : 'bad'))}} - {{=data.tankPressure}} kPa -
-
-
-
- Release Pressure: -
-
- {{=helper.bar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure)}} - {{=data.releasePressure}} kPa -
-
-
-
- Pressure Regulator: -
-
- {{=helper.link('Reset', 'refresh', {'dist_p': 'reset'}, (data.releasePressure != data.defaultReleasePressure) ? null : 'disabled')}} - {{=helper.link('Min', 'minus', {'dist_p': 'min'}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} - {{=helper.link('Set', 'pencil', {'dist_p': 'custom'}, null)}} - {{=helper.link('Max', 'plus', {'dist_p': 'max'}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} -
- {{=helper.link('Open', 'unlock', {'stat': 1}, data.maskConnected ? (data.valveOpen ? 'selected' : null) : 'disabled')}} - {{=helper.link('Close', 'lock', {'stat': 1}, data.valveOpen ? null : 'selected')}} -
-
+
+ {{? data.hasHoldingTank }} + The regulator is connected to a mask. + {{??}} + The regulator is not connected to a mask. + {{?}} +
+
+
+ Tank Pressure: +
+ {{=helper.bar(data.tankPressure, 0, 1013, (data.tankPressure > 200) ? 'good' : ((data.tankPressure > 100) ? 'average' : 'bad'), data.tankPressure + ' kPa')}} +
+ +
+ Release Pressure: +
+ {{=helper.bar(data.releasePressure, data.minReleasePressure, data.maxReleasePressure, null, data.releasePressure + ' kPa')}} +
+
+
+ Pressure Regulator: +
+ {{=helper.link('Reset', 'refresh', {'dist_p': 'reset'}, (data.releasePressure != data.defaultReleasePressure) ? null : 'disabled')}} + {{=helper.link('Min', 'minus', {'dist_p': 'min'}, (data.releasePressure > data.minReleasePressure) ? null : 'disabled')}} + {{=helper.link('Set', 'pencil', {'dist_p': 'custom'}, null)}} + {{=helper.link('Max', 'plus', {'dist_p': 'max'}, (data.releasePressure < data.maxReleasePressure) ? null : 'disabled')}} +
+
+
+ Valve: +
+ {{=helper.link('Open', 'unlock', {'stat': 1}, data.maskConnected ? (data.valveOpen ? 'selected' : null) : 'disabled')}} + {{=helper.link('Close', 'lock', {'stat': 1}, data.valveOpen ? null : 'selected')}} +
+
+