From 15681a727e12427cb729bf31301e807dd1ead8ff Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Wed, 16 Dec 2015 09:54:01 -0600 Subject: [PATCH 1/8] Combine NanoUI CSS into one file. --- code/modules/client/asset_cache.dm | 478 ++++++----- code/modules/nano/nanoui.dm | 807 +++++++++--------- nano/assets/nanoui.generic.css | 1 - .../{nanoui.common.css => nanoui.main.css} | 2 +- nano/assets/nanoui.nanotrasen.css | 1 - nano/scripts/nanoui.coffee | 174 ++-- nano/styles/{generic.less => _generic.less} | 16 +- .../{nanotrasen.less => _nanotrasen.less} | 18 +- nano/styles/{common.less => main.less} | 177 ++-- 9 files changed, 836 insertions(+), 838 deletions(-) delete mode 100644 nano/assets/nanoui.generic.css rename nano/assets/{nanoui.common.css => nanoui.main.css} (66%) delete mode 100644 nano/assets/nanoui.nanotrasen.css rename nano/styles/{generic.less => _generic.less} (84%) rename nano/styles/{nanotrasen.less => _nanotrasen.less} (89%) rename nano/styles/{common.less => main.less} (90%) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 91198db5fe4..0e9849724b7 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -1,240 +1,238 @@ -/* -Asset cache quick users guide: - -Make a datum at the bottom of this file with your assets for your thing. -The simple subsystem will most like be of use for most cases. -Then call get_asset_datum() with the type of the datum you created and store the return -Then call .send(client) on that stored return value. - -You can set verify to TRUE if you want send() to sleep until the client has the assets. -*/ - - -// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. -// This is doubled for the first asset, then added per asset after -#define ASSET_CACHE_SEND_TIMEOUT 7 - -//When sending mutiple assets, how many before we give the client a quaint little sending resources message -#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 - -/client - var/list/cache = list() // List of all assets sent to this client by the asset cache. - var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. - var/list/sending = list() - var/last_asset_job = 0 // Last job done. - -//This proc sends the asset to the client, but only if it needs it. -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) - return 0 - - client << browse_rsc(SSasset.cache[asset_name], asset_name) - if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. - if (client) - client.cache += asset_name - return 1 - if (!client) - return 0 - - client.sending |= asset_name - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= asset_name - client.cache |= asset_name - client.completed_asset_jobs -= job - - return 1 - -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE) - if(!istype(client)) - if(ismob(client)) - var/mob/M = client - if(M.client) - client = M.client - - else - return 0 - - else - return 0 - - var/list/unreceived = asset_list - (client.cache + client.sending) - if(!unreceived || !unreceived.len) - return 0 - if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - client << "Sending Resources..." - for(var/asset in unreceived) - if (asset in SSasset.cache) - client << browse_rsc(SSasset.cache[asset], asset) - - if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. - if (client) - client.cache += unreceived - return 1 - if (!client) - return 0 - client.sending |= unreceived - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= unreceived - client.cache |= unreceived - client.completed_asset_jobs -= job - - return 1 - -//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. -//The proc calls procs that sleep for long times. -/proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) - for(var/file in files) - if (!client) - break - if (register_asset) - register_asset(file,files[file]) - send_asset(client,file) - sleep(-1) //queuing calls like this too quickly can cause issues in some client versions - -//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. -//if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(var/asset_name, var/asset) - SSasset.cache[asset_name] = asset - -//These datums are used to populate the asset cache, the proc "register()" does this. - -//all of our asset datums, used for referring to these later -/var/global/list/asset_datums = list() - -//get a assetdatum or make a new one -/proc/get_asset_datum(var/type) - if (!(type in asset_datums)) - return new type() - return asset_datums[type] - -/datum/asset/New() - asset_datums[type] = src - -/datum/asset/proc/register() - return - -/datum/asset/proc/send(client) - return - -//If you don't need anything complicated. -/datum/asset/simple - var/assets = list() - var/verify = FALSE - -/datum/asset/simple/register() - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) -/datum/asset/simple/send(client) - send_asset_list(client,assets,verify) - - -//DEFINITIONS FOR ASSET DATUMS START HERE. - - -/datum/asset/simple/nanoui - assets = list( - "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.woff2" = 'nano/assets/fontawesome-webfont.woff2' - ) - -/datum/asset/simple/pda - assets = list( - "pda_atmos.png" = 'icons/pda_icons/pda_atmos.png', - "pda_back.png" = 'icons/pda_icons/pda_back.png', - "pda_bell.png" = 'icons/pda_icons/pda_bell.png', - "pda_blank.png" = 'icons/pda_icons/pda_blank.png', - "pda_boom.png" = 'icons/pda_icons/pda_boom.png', - "pda_bucket.png" = 'icons/pda_icons/pda_bucket.png', - "pda_medbot.png" = 'icons/pda_icons/pda_medbot.png', - "pda_floorbot.png" = 'icons/pda_icons/pda_floorbot.png', - "pda_cleanbot.png" = 'icons/pda_icons/pda_cleanbot.png', - "pda_crate.png" = 'icons/pda_icons/pda_crate.png', - "pda_cuffs.png" = 'icons/pda_icons/pda_cuffs.png', - "pda_eject.png" = 'icons/pda_icons/pda_eject.png', - "pda_exit.png" = 'icons/pda_icons/pda_exit.png', - "pda_flashlight.png" = 'icons/pda_icons/pda_flashlight.png', - "pda_honk.png" = 'icons/pda_icons/pda_honk.png', - "pda_mail.png" = 'icons/pda_icons/pda_mail.png', - "pda_medical.png" = 'icons/pda_icons/pda_medical.png', - "pda_menu.png" = 'icons/pda_icons/pda_menu.png', - "pda_mule.png" = 'icons/pda_icons/pda_mule.png', - "pda_notes.png" = 'icons/pda_icons/pda_notes.png', - "pda_power.png" = 'icons/pda_icons/pda_power.png', - "pda_rdoor.png" = 'icons/pda_icons/pda_rdoor.png', - "pda_reagent.png" = 'icons/pda_icons/pda_reagent.png', - "pda_refresh.png" = 'icons/pda_icons/pda_refresh.png', - "pda_scanner.png" = 'icons/pda_icons/pda_scanner.png', - "pda_signaler.png" = 'icons/pda_icons/pda_signaler.png', - "pda_status.png" = 'icons/pda_icons/pda_status.png' - ) - -/datum/asset/simple/paper - assets = list( - "large_stamp-clown.png" = 'icons/stamp_icons/large_stamp-clown.png', - "large_stamp-deny.png" = 'icons/stamp_icons/large_stamp-deny.png', - "large_stamp-ok.png" = 'icons/stamp_icons/large_stamp-ok.png', - "large_stamp-hop.png" = 'icons/stamp_icons/large_stamp-hop.png', - "large_stamp-cmo.png" = 'icons/stamp_icons/large_stamp-cmo.png', - "large_stamp-ce.png" = 'icons/stamp_icons/large_stamp-ce.png', - "large_stamp-hos.png" = 'icons/stamp_icons/large_stamp-hos.png', - "large_stamp-rd.png" = 'icons/stamp_icons/large_stamp-rd.png', - "large_stamp-cap.png" = 'icons/stamp_icons/large_stamp-cap.png', - "large_stamp-qm.png" = 'icons/stamp_icons/large_stamp-qm.png', - "large_stamp-law.png" = 'icons/stamp_icons/large_stamp-law.png' - ) - - -//Registers HTML Interface assets. -/datum/asset/HTML_interface/register() - for(var/path in typesof(/datum/html_interface)) - var/datum/html_interface/hi = new path() - hi.registerResources() +/* +Asset cache quick users guide: + +Make a datum at the bottom of this file with your assets for your thing. +The simple subsystem will most like be of use for most cases. +Then call get_asset_datum() with the type of the datum you created and store the return +Then call .send(client) on that stored return value. + +You can set verify to TRUE if you want send() to sleep until the client has the assets. +*/ + + +// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. +// This is doubled for the first asset, then added per asset after +#define ASSET_CACHE_SEND_TIMEOUT 7 + +//When sending mutiple assets, how many before we give the client a quaint little sending resources message +#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 + +/client + var/list/cache = list() // List of all assets sent to this client by the asset cache. + var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. + var/list/sending = list() + var/last_asset_job = 0 // Last job done. + +//This proc sends the asset to the client, but only if it needs it. +//This proc blocks(sleeps) unless verify is set to false +/proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + + else + return 0 + + else + return 0 + + if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) + return 0 + + client << browse_rsc(SSasset.cache[asset_name], asset_name) + if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. + if (client) + client.cache += asset_name + return 1 + if (!client) + return 0 + + client.sending |= asset_name + var/job = ++client.last_asset_job + + client << browse({" + + "}, "window=asset_cache_browser") + + var/t = 0 + var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT + while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() + sleep(1) // Lock up the caller until this is received. + t++ + + if(client) + client.sending -= asset_name + client.cache |= asset_name + client.completed_asset_jobs -= job + + return 1 + +//This proc blocks(sleeps) unless verify is set to false +/proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + + else + return 0 + + else + return 0 + + var/list/unreceived = asset_list - (client.cache + client.sending) + if(!unreceived || !unreceived.len) + return 0 + if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + client << "Sending Resources..." + for(var/asset in unreceived) + if (asset in SSasset.cache) + client << browse_rsc(SSasset.cache[asset], asset) + + if(!verify || !winexists(client, "asset_cache_browser")) // Can't access the asset cache browser, rip. + if (client) + client.cache += unreceived + return 1 + if (!client) + return 0 + client.sending |= unreceived + var/job = ++client.last_asset_job + + client << browse({" + + "}, "window=asset_cache_browser") + + var/t = 0 + var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len + while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() + sleep(1) // Lock up the caller until this is received. + t++ + + if(client) + client.sending -= unreceived + client.cache |= unreceived + client.completed_asset_jobs -= job + + return 1 + +//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. +//The proc calls procs that sleep for long times. +/proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) + for(var/file in files) + if (!client) + break + if (register_asset) + register_asset(file,files[file]) + send_asset(client,file) + sleep(-1) //queuing calls like this too quickly can cause issues in some client versions + +//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. +//if it's an icon or something be careful, you'll have to copy it before further use. +/proc/register_asset(var/asset_name, var/asset) + SSasset.cache[asset_name] = asset + +//These datums are used to populate the asset cache, the proc "register()" does this. + +//all of our asset datums, used for referring to these later +/var/global/list/asset_datums = list() + +//get a assetdatum or make a new one +/proc/get_asset_datum(var/type) + if (!(type in asset_datums)) + return new type() + return asset_datums[type] + +/datum/asset/New() + asset_datums[type] = src + +/datum/asset/proc/register() + return + +/datum/asset/proc/send(client) + return + +//If you don't need anything complicated. +/datum/asset/simple + var/assets = list() + var/verify = FALSE + +/datum/asset/simple/register() + for(var/asset_name in assets) + register_asset(asset_name, assets[asset_name]) +/datum/asset/simple/send(client) + send_asset_list(client,assets,verify) + + +//DEFINITIONS FOR ASSET DATUMS START HERE. + + +/datum/asset/simple/nanoui + assets = list( + "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.main.css" = 'nano/assets/nanoui.main.css', + "fontawesome-webfont.eot" = 'nano/assets/fontawesome-webfont.eot', + "fontawesome-webfont.woff2" = 'nano/assets/fontawesome-webfont.woff2' + ) + +/datum/asset/simple/pda + assets = list( + "pda_atmos.png" = 'icons/pda_icons/pda_atmos.png', + "pda_back.png" = 'icons/pda_icons/pda_back.png', + "pda_bell.png" = 'icons/pda_icons/pda_bell.png', + "pda_blank.png" = 'icons/pda_icons/pda_blank.png', + "pda_boom.png" = 'icons/pda_icons/pda_boom.png', + "pda_bucket.png" = 'icons/pda_icons/pda_bucket.png', + "pda_medbot.png" = 'icons/pda_icons/pda_medbot.png', + "pda_floorbot.png" = 'icons/pda_icons/pda_floorbot.png', + "pda_cleanbot.png" = 'icons/pda_icons/pda_cleanbot.png', + "pda_crate.png" = 'icons/pda_icons/pda_crate.png', + "pda_cuffs.png" = 'icons/pda_icons/pda_cuffs.png', + "pda_eject.png" = 'icons/pda_icons/pda_eject.png', + "pda_exit.png" = 'icons/pda_icons/pda_exit.png', + "pda_flashlight.png" = 'icons/pda_icons/pda_flashlight.png', + "pda_honk.png" = 'icons/pda_icons/pda_honk.png', + "pda_mail.png" = 'icons/pda_icons/pda_mail.png', + "pda_medical.png" = 'icons/pda_icons/pda_medical.png', + "pda_menu.png" = 'icons/pda_icons/pda_menu.png', + "pda_mule.png" = 'icons/pda_icons/pda_mule.png', + "pda_notes.png" = 'icons/pda_icons/pda_notes.png', + "pda_power.png" = 'icons/pda_icons/pda_power.png', + "pda_rdoor.png" = 'icons/pda_icons/pda_rdoor.png', + "pda_reagent.png" = 'icons/pda_icons/pda_reagent.png', + "pda_refresh.png" = 'icons/pda_icons/pda_refresh.png', + "pda_scanner.png" = 'icons/pda_icons/pda_scanner.png', + "pda_signaler.png" = 'icons/pda_icons/pda_signaler.png', + "pda_status.png" = 'icons/pda_icons/pda_status.png' + ) + +/datum/asset/simple/paper + assets = list( + "large_stamp-clown.png" = 'icons/stamp_icons/large_stamp-clown.png', + "large_stamp-deny.png" = 'icons/stamp_icons/large_stamp-deny.png', + "large_stamp-ok.png" = 'icons/stamp_icons/large_stamp-ok.png', + "large_stamp-hop.png" = 'icons/stamp_icons/large_stamp-hop.png', + "large_stamp-cmo.png" = 'icons/stamp_icons/large_stamp-cmo.png', + "large_stamp-ce.png" = 'icons/stamp_icons/large_stamp-ce.png', + "large_stamp-hos.png" = 'icons/stamp_icons/large_stamp-hos.png', + "large_stamp-rd.png" = 'icons/stamp_icons/large_stamp-rd.png', + "large_stamp-cap.png" = 'icons/stamp_icons/large_stamp-cap.png', + "large_stamp-qm.png" = 'icons/stamp_icons/large_stamp-qm.png', + "large_stamp-law.png" = 'icons/stamp_icons/large_stamp-law.png' + ) + + +//Registers HTML Interface assets. +/datum/asset/HTML_interface/register() + for(var/path in typesof(/datum/html_interface)) + var/datum/html_interface/hi = new path() + hi.registerResources() diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 076d8baba53..7c514a87456 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -1,405 +1,404 @@ - /** - * NanoUI - * - * Contains the NanoUI datum, and its procs. - * - * /tg/station user interface library - * thanks to baystation12 - * - * modified by neersighted - **/ - - /** - * NanoUI datum: - * - * Represents a NanoUI. - **/ -/datum/nanoui - var/mob/user // The mob who opened/is using the NanoUI. - var/atom/movable/src_object // The object which owns the NanoUI. - var/title // The title of te NanoUI. - var/ui_key // The ui_key of the NanoUI. This allows multiple UIs for one src_object. - var/window_id // The window_id for browse() and onclose(). - var/width = 0 // The window width. - var/height = 0 // The window height - var/window_options = list( // Extra options to winset(). - "focus" = 0, - "titlebar" = 1, - "can_resize" = 1, - "can_minimize" = 1, - "can_maximize" = 0, - "can_close" = 1, - "auto_format" = 0 - ) - var/atom/ref = null // An extra ref to call when the window is closed. - var/layout = "nanotrasen" // The layout to be used for this UI. - var/template // The template to be used for this UI. - var/auto_update = 1 // Update the NanoUI every MC tick. - var/list/initial_data // The data (and datastructure) used to initialize the NanoUI - var/status = NANO_INTERACTIVE // The status/visibility of the NanoUI. - var/datum/topic_state/state = null // Topic state used to determine status. Topic states are in interactions/. - var/datum/nanoui/master_ui // The parent NanoUI. - var/list/datum/nanoui/children = list() // Children of this NanoUI. - - /** - * public - * - * Create a new NanoUI. - * - * required user mob The mob who opened/is using the NanoUI. - * required src_object atom/movable The object which owns the NanoUI. - * required ui_key string The ui_key of the NanoUI. - * required template string The template to render the NanoUI content with. - * optional title string The title of the NanoUI. - * optional width int The window width. - * optional height int The window height. - * optional ref atom An extra ref to use when the window is closed. - * optional master_ui datum/nanoui The parent NanoUI. - * optional state datum/topic_state The state used to determine status. - * - * return datum/nanoui The requested NanoUI. - **/ -/datum/nanoui/New(mob/user, atom/movable/src_object, ui_key, template, \ - title = 0, width = 0, height = 0, \ - atom/ref = null, datum/nanoui/master_ui = null, \ - datum/topic_state/state = default_state) - src.user = user - src.src_object = src_object - src.ui_key = ui_key - src.window_id = "\ref[src_object]-[ui_key]" - - set_template(template) - - if (title) - src.title = sanitize(title) - if (width) - src.width = width - if (height) - src.height = height - - if (ref) - src.ref = ref - - src.master_ui = master_ui - if(master_ui) - master_ui.children += src - src.state = state - - var/datum/asset/assets = get_asset_datum(/datum/asset/simple/nanoui) - assets.send(user) - - - /** - * public - * - * Enable/disable auto-updating of the NanoUI. - * - * required state bool Enable/disable auto-updating. - **/ -/datum/nanoui/proc/set_auto_update(state = 1) - auto_update = state - - /** - * private - * - * Set the data to initialize the NanoUI with. - * The datastructure cannot be changed by subsequent updates. - * - * optional data list The data/datastructure to initialize the NanoUI with. - **/ -/datum/nanoui/proc/set_initial_data(list/data) - initial_data = data - - /** - * private - * - * Get the config data/datastructure to initialize the NanoUI with. - * - * return list The config data. - **/ -/datum/nanoui/proc/get_config_data() - var/list/config_data = list( - "title" = title, - "status" = status, - "ref" = "\ref[src]", - "window" = list( - "width" = width, - "height" = height, - "ref" = window_id - ), - "user" = list( - "name" = user.name, - "fancy" = user.client.prefs.nanoui_fancy, - "ref" = "\ref[user]" - ), - "srcObject" = list( - "name" = src_object.name, - "ref" = "\ref[src_object]" - ), - "templates" = list( - "layout" = "_[layout]", - "content" = "[template]" - ) - ) - return config_data - - /** - * private - * - * Package the data to send to the UI. - * This is the (regular) data and config data, bundled together. - * - * return list The packaged data. - **/ -/datum/nanoui/proc/get_send_data(list/data) - var/list/send_data = list() - - send_data["config"] = get_config_data() - if (!isnull(data)) - send_data["data"] = data - - return send_data - - /** - * public - * - * Sets the browse() window options for this NanoUI. - * - * required window_options list The window options to set. - **/ -/datum/nanoui/proc/set_window_options(list/window_options) - src.window_options = window_options - - /** - * public - * - * Set the layout for this NanoUI. - * This loads custom layout styles and templates for this NanoUI. - * - * required layout string The new UI layout. - **/ -/datum/nanoui/proc/set_layout(layout) - src.layout = lowertext(layout) - - /** - * public - * - * Set the template for this NanoUI. - * - * required template string The new UI template. - **/ -/datum/nanoui/proc/set_template(template) - src.template = lowertext(template) - - /** - * private - * - * Generate HTML for this NanoUI. - * - * return string NanoUI HTML output. - **/ -/datum/nanoui/proc/get_html() - // Generate - - - "} - var/stylesheet_html = {" - - - - - "} - - // Generate JSON. - var/list/send_data = get_send_data(initial_data) - var/initial_data_json = replacetext(JSON.stringify(send_data), "'", "\\'") - - // Generate the HTML document. - return {" - - - - - - [stylesheet_html] - [script_html] - - -
-
-
- Sending Resources... -
-
- - - - "} - - /** - * public - * - * Open this NanoUI (and initialize it with data). - * - * optional data list The data to intialize the UI with. - **/ -/datum/nanoui/proc/open(list/data = null) - if(!user.client) return - - if (!initial_data) - if (!data) // If we don't have initial_data and data was not passed, get data from the src_object. - data = src_object.get_ui_data(user) - set_initial_data(data) // Otherwise use the passed data. - - var/window_size = "" - if (width && height) // If we have a width and height, use them. - window_size = "size=[width]x[height];" - update_status(push = 0) // Update the window state. - if (status == NANO_CLOSE) - return // Bail if we should close. - - user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. - winset(user, window_id, "on-close=\"nanoclose \ref[src]\"") // Instruct the client to signal NanoUI when the window is closed. - SSnano.ui_opened(src) // Call the opened handler. - - /** - * public - * - * Reinitialize the NanoUI. - * (Possibly with a new template and/or data). - * - * optional template string The filename of the new template. - * optional data list The new initial data. - **/ -/datum/nanoui/proc/reinitialize(template, list/data) - if(template) - src.template = template // Set a new template. - if(data) - set_initial_data(data) // Replace the initial_data. - open() - - /** - * public - * - * Close the NanoUI, and all its children. - **/ -/datum/nanoui/proc/close() - set_auto_update(0) // Disable auto-updates. - user << browse(null, "window=[window_id]") // Close the window. - SSnano.ui_closed(src) // Call the closed handler. - for(var/datum/nanoui/child in children) // Loop through and close all children. - child.close() - - /** - * private - * - * Push data to an already open NanoUI. - * - * required data list The data to send. - * optional force bool If the update should be sent regardless of state. - **/ -/datum/nanoui/proc/push_data(data, force = 0) - update_status(push = 0) // Update the window state. - if (status == NANO_DISABLED && !force) - return // Cannot update UI, we have no visibility. - - var/list/send_data = get_send_data(data) // Get the data to send. - - // Send the new data to the recieveUpdate() Javascript function. - user << output(list2params(list(JSON.stringify(send_data))), "[window_id].browser:receiveUpdate") - - /** - * private - * - * Handle clicks from the NanoUI. - * Call the src_object's Topic() if status is NANO_INTERACTIVE. - * If the src_object's Topic() returns 1, update all UIs attacked to it. - **/ -/datum/nanoui/Topic(href, href_list) - update_status(push = 0) // Update the window state. - if (status != NANO_INTERACTIVE || user != usr) - return // If UI is not interactive or usr calling Topic is not the UI user. - - var/action = href_list["nano"] // Pull the action out. - href_list -= "nano" - - var/update = src_object.ui_act(action, href_list, state) // Call Topic() on the src_object. - - if (src_object && update) - SSnano.update_uis(src_object) // If we have a src_object and its Topic() told us to update. - - /** - * private - * - * Update the NanoUI. Only updates the contents/layout if update is true, - * otherwise only updates the status. - * - * optional force bool If the UI should be forced to update. - **/ -/datum/nanoui/process(force = 0) - if (!src_object || !user) // If the object or user died (or something else), abort. - close() - return - - if (status && (force || auto_update)) - update() // Update the UI if the status and update settings allow it. - else - update_status(push = 1) // Otherwise only update status. - - /** - * private - * - * Updates the UI by interacting with the src_object again, which will hopefully - * call try_ui_update on it. - * - * optional force_open bool If force_open should be passed to ui_interact. - **/ -/datum/nanoui/proc/update(force_open = 0) - src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) - - /** - * private - * - * Set the status/visibility of the NanoUI. - * - * required state int The status to set (NANO_CLOSE/NANO_DISABLED/NANO_UPDATE/NANO_INTERACTIVE). - * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). - **/ -/datum/nanoui/proc/set_status(state, push = 0) - if (state != status) // Only update if status has changed. - if (status == NANO_DISABLED) - status = state - if (push) - update() - else - status = state - if (push || status == 0) // Force an update if NANO_DISABLED. - push_data(null, 1) - - /** - * private - * - * Update the status/visibility of the NanoUI for its user. - * - * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). - **/ -/datum/nanoui/proc/update_status(push = 0) - var/new_status = src_object.CanUseTopic(user, state) - if(master_ui) - new_status = min(new_status, master_ui.status) - - set_status(new_status, push) - if(new_status == NANO_CLOSE) + /** + * NanoUI + * + * Contains the NanoUI datum, and its procs. + * + * /tg/station user interface library + * thanks to baystation12 + * + * modified by neersighted + **/ + + /** + * NanoUI datum: + * + * Represents a NanoUI. + **/ +/datum/nanoui + var/mob/user // The mob who opened/is using the NanoUI. + var/atom/movable/src_object // The object which owns the NanoUI. + var/title // The title of te NanoUI. + var/ui_key // The ui_key of the NanoUI. This allows multiple UIs for one src_object. + var/window_id // The window_id for browse() and onclose(). + var/width = 0 // The window width. + var/height = 0 // The window height + var/window_options = list( // Extra options to winset(). + "focus" = 0, + "titlebar" = 1, + "can_resize" = 1, + "can_minimize" = 1, + "can_maximize" = 0, + "can_close" = 1, + "auto_format" = 0 + ) + var/atom/ref = null // An extra ref to call when the window is closed. + var/layout = "nanotrasen" // The layout to be used for this UI. + var/template // The template to be used for this UI. + var/auto_update = 1 // Update the NanoUI every MC tick. + var/list/initial_data // The data (and datastructure) used to initialize the NanoUI + var/status = NANO_INTERACTIVE // The status/visibility of the NanoUI. + var/datum/topic_state/state = null // Topic state used to determine status. Topic states are in interactions/. + var/datum/nanoui/master_ui // The parent NanoUI. + var/list/datum/nanoui/children = list() // Children of this NanoUI. + + /** + * public + * + * Create a new NanoUI. + * + * required user mob The mob who opened/is using the NanoUI. + * required src_object atom/movable The object which owns the NanoUI. + * required ui_key string The ui_key of the NanoUI. + * required template string The template to render the NanoUI content with. + * optional title string The title of the NanoUI. + * optional width int The window width. + * optional height int The window height. + * optional ref atom An extra ref to use when the window is closed. + * optional master_ui datum/nanoui The parent NanoUI. + * optional state datum/topic_state The state used to determine status. + * + * return datum/nanoui The requested NanoUI. + **/ +/datum/nanoui/New(mob/user, atom/movable/src_object, ui_key, template, \ + title = 0, width = 0, height = 0, \ + atom/ref = null, datum/nanoui/master_ui = null, \ + datum/topic_state/state = default_state) + src.user = user + src.src_object = src_object + src.ui_key = ui_key + src.window_id = "\ref[src_object]-[ui_key]" + + set_template(template) + + if (title) + src.title = sanitize(title) + if (width) + src.width = width + if (height) + src.height = height + + if (ref) + src.ref = ref + + src.master_ui = master_ui + if(master_ui) + master_ui.children += src + src.state = state + + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/nanoui) + assets.send(user) + + + /** + * public + * + * Enable/disable auto-updating of the NanoUI. + * + * required state bool Enable/disable auto-updating. + **/ +/datum/nanoui/proc/set_auto_update(state = 1) + auto_update = state + + /** + * private + * + * Set the data to initialize the NanoUI with. + * The datastructure cannot be changed by subsequent updates. + * + * optional data list The data/datastructure to initialize the NanoUI with. + **/ +/datum/nanoui/proc/set_initial_data(list/data) + initial_data = data + + /** + * private + * + * Get the config data/datastructure to initialize the NanoUI with. + * + * return list The config data. + **/ +/datum/nanoui/proc/get_config_data() + var/list/config_data = list( + "title" = title, + "status" = status, + "ref" = "\ref[src]", + "window" = list( + "width" = width, + "height" = height, + "ref" = window_id + ), + "user" = list( + "name" = user.name, + "fancy" = user.client.prefs.nanoui_fancy, + "ref" = "\ref[user]" + ), + "srcObject" = list( + "name" = src_object.name, + "ref" = "\ref[src_object]" + ), + "templates" = list( + "layout" = "_[layout]", + "content" = "[template]" + ) + ) + return config_data + + /** + * private + * + * Package the data to send to the UI. + * This is the (regular) data and config data, bundled together. + * + * return list The packaged data. + **/ +/datum/nanoui/proc/get_send_data(list/data) + var/list/send_data = list() + + send_data["config"] = get_config_data() + if (!isnull(data)) + send_data["data"] = data + + return send_data + + /** + * public + * + * Sets the browse() window options for this NanoUI. + * + * required window_options list The window options to set. + **/ +/datum/nanoui/proc/set_window_options(list/window_options) + src.window_options = window_options + + /** + * public + * + * Set the layout for this NanoUI. + * This loads custom layout styles and templates for this NanoUI. + * + * required layout string The new UI layout. + **/ +/datum/nanoui/proc/set_layout(layout) + src.layout = lowertext(layout) + + /** + * public + * + * Set the template for this NanoUI. + * + * required template string The new UI template. + **/ +/datum/nanoui/proc/set_template(template) + src.template = lowertext(template) + + /** + * private + * + * Generate HTML for this NanoUI. + * + * return string NanoUI HTML output. + **/ +/datum/nanoui/proc/get_html() + // Generate + + + "} + var/stylesheet_html = {" + + + + "} + + // Generate JSON. + var/list/send_data = get_send_data(initial_data) + var/initial_data_json = replacetext(JSON.stringify(send_data), "'", "\\'") + + // Generate the HTML document. + return {" + + + + + + [stylesheet_html] + [script_html] + + +
+
+
+ Sending Resources... +
+
+ + + + "} + + /** + * public + * + * Open this NanoUI (and initialize it with data). + * + * optional data list The data to intialize the UI with. + **/ +/datum/nanoui/proc/open(list/data = null) + if(!user.client) return + + if (!initial_data) + if (!data) // If we don't have initial_data and data was not passed, get data from the src_object. + data = src_object.get_ui_data(user) + set_initial_data(data) // Otherwise use the passed data. + + var/window_size = "" + if (width && height) // If we have a width and height, use them. + window_size = "size=[width]x[height];" + update_status(push = 0) // Update the window state. + if (status == NANO_CLOSE) + return // Bail if we should close. + + user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. + winset(user, window_id, "on-close=\"nanoclose \ref[src]\"") // Instruct the client to signal NanoUI when the window is closed. + SSnano.ui_opened(src) // Call the opened handler. + + /** + * public + * + * Reinitialize the NanoUI. + * (Possibly with a new template and/or data). + * + * optional template string The filename of the new template. + * optional data list The new initial data. + **/ +/datum/nanoui/proc/reinitialize(template, list/data) + if(template) + src.template = template // Set a new template. + if(data) + set_initial_data(data) // Replace the initial_data. + open() + + /** + * public + * + * Close the NanoUI, and all its children. + **/ +/datum/nanoui/proc/close() + set_auto_update(0) // Disable auto-updates. + user << browse(null, "window=[window_id]") // Close the window. + SSnano.ui_closed(src) // Call the closed handler. + for(var/datum/nanoui/child in children) // Loop through and close all children. + child.close() + + /** + * private + * + * Push data to an already open NanoUI. + * + * required data list The data to send. + * optional force bool If the update should be sent regardless of state. + **/ +/datum/nanoui/proc/push_data(data, force = 0) + update_status(push = 0) // Update the window state. + if (status == NANO_DISABLED && !force) + return // Cannot update UI, we have no visibility. + + var/list/send_data = get_send_data(data) // Get the data to send. + + // Send the new data to the recieveUpdate() Javascript function. + user << output(list2params(list(JSON.stringify(send_data))), "[window_id].browser:receiveUpdate") + + /** + * private + * + * Handle clicks from the NanoUI. + * Call the src_object's Topic() if status is NANO_INTERACTIVE. + * If the src_object's Topic() returns 1, update all UIs attacked to it. + **/ +/datum/nanoui/Topic(href, href_list) + update_status(push = 0) // Update the window state. + if (status != NANO_INTERACTIVE || user != usr) + return // If UI is not interactive or usr calling Topic is not the UI user. + + var/action = href_list["nano"] // Pull the action out. + href_list -= "nano" + + var/update = src_object.ui_act(action, href_list, state) // Call Topic() on the src_object. + + if (src_object && update) + SSnano.update_uis(src_object) // If we have a src_object and its Topic() told us to update. + + /** + * private + * + * Update the NanoUI. Only updates the contents/layout if update is true, + * otherwise only updates the status. + * + * optional force bool If the UI should be forced to update. + **/ +/datum/nanoui/process(force = 0) + if (!src_object || !user) // If the object or user died (or something else), abort. + close() + return + + if (status && (force || auto_update)) + update() // Update the UI if the status and update settings allow it. + else + update_status(push = 1) // Otherwise only update status. + + /** + * private + * + * Updates the UI by interacting with the src_object again, which will hopefully + * call try_ui_update on it. + * + * optional force_open bool If force_open should be passed to ui_interact. + **/ +/datum/nanoui/proc/update(force_open = 0) + src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) + + /** + * private + * + * Set the status/visibility of the NanoUI. + * + * required state int The status to set (NANO_CLOSE/NANO_DISABLED/NANO_UPDATE/NANO_INTERACTIVE). + * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). + **/ +/datum/nanoui/proc/set_status(state, push = 0) + if (state != status) // Only update if status has changed. + if (status == NANO_DISABLED) + status = state + if (push) + update() + else + status = state + if (push || status == 0) // Force an update if NANO_DISABLED. + push_data(null, 1) + + /** + * private + * + * Update the status/visibility of the NanoUI for its user. + * + * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). + **/ +/datum/nanoui/proc/update_status(push = 0) + var/new_status = src_object.CanUseTopic(user, state) + if(master_ui) + new_status = min(new_status, master_ui.status) + + set_status(new_status, push) + if(new_status == NANO_CLOSE) close() \ No newline at end of file diff --git a/nano/assets/nanoui.generic.css b/nano/assets/nanoui.generic.css deleted file mode 100644 index cfcfa762a80..00000000000 --- a/nano/assets/nanoui.generic.css +++ /dev/null @@ -1 +0,0 @@ -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/nanoui.common.css b/nano/assets/nanoui.main.css similarity index 66% rename from nano/assets/nanoui.common.css rename to nano/assets/nanoui.main.css index 9a13dd4b9f6..15613de04c7 100644 --- a/nano/assets/nanoui.common.css +++ b/nano/assets/nanoui.main.css @@ -1 +1 @@ -html{cursor:default}body,html{min-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 .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 .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;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.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}.fancy{display:none}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)} \ No newline at end of file +html{cursor:default}body,html{min-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 .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 .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;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.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}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')}body.nanotrasen{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF000000')}.fancy{display:none}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)} \ No newline at end of file diff --git a/nano/assets/nanoui.nanotrasen.css b/nano/assets/nanoui.nanotrasen.css deleted file mode 100644 index 61b9b378ec8..00000000000 --- a/nano/assets/nanoui.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' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF000000')} \ No newline at end of file diff --git a/nano/scripts/nanoui.coffee b/nano/scripts/nanoui.coffee index 104a7c8d003..b5aaed2b1e2 100644 --- a/nano/scripts/nanoui.coffee +++ b/nano/scripts/nanoui.coffee @@ -1,88 +1,86 @@ -class @NanoUI - constructor: (@bus, @fragment = document) -> - @bus.on "serverUpdate", @serverUpdate - @bus.on "update", @update - @bus.on "render", @render - @bus.on "memes", @render - - @initialized = false - - @data = {} - @initialData = JSON.parse @fragment.query("#data").data "initial" - - unless @initialData? or - not ("data" of @initialData or "config" of @initalData) - @error "Initial data did not load correctly." - - serverUpdate: (dataString) => - try - data = JSON.parse(dataString) - catch error - @error error - - @bus.emit "update", data - return - - update: (data) => - unless data.data? - if @data.data? - data.data = @data.data - else - data.data = {} - - @data = data - - @bus.emit "render", @data if @initialized - @bus.emit "updated" - return - - render: (data) => - data = @initialData unless @initialized - - try - if not @initialized - layout = @fragment.query("#layout") - layout.innerHTML = TMPL[data.config.templates.layout]\ - (data.data, data.config, helpers) - - content = @fragment.query("#content") - content.innerHTML = TMPL[data.config.templates.content]\ - (data.data, data.config, helpers) - - catch error - @error error - return - - @bus.emit "rendered", data - if not @initialized - @initialized = true - @data = @initialData - @bus.emit "initialized", data - - act: (action, params = {}) => - params.src = @data.config.ref - params.nano = action - location.href = util.href null, params - - error: (error) -> - error = "#{error.fileName}:#{error.lineNumber} #{error.message}" if error instanceof Error - params = - nano_error: error - location.href = util.href null, params - - log: (message) -> - params = - nano_log: message - location.href = util.href null, params - - close: => - params = - command: "nanoclose #{@data.config.ref}" - @winset "is-visible", "false" - location.href = util.href "winset", params - - winset: (key, value, window) => - window = @data.config.window.ref unless window? - params = - "#{window}.#{key}": value - location.href = util.href "winset", params +class @NanoUI + constructor: (@bus, @fragment = document) -> + @bus.on "serverUpdate", @serverUpdate + @bus.on "update", @update + @bus.on "render", @render + @bus.on "memes", @render + + @initialized = false + + @data = {} + @initialData = JSON.parse @fragment.query("#data").data "initial" + + unless @initialData? or + not ("data" of @initialData or "config" of @initalData) + @error "Initial data did not load correctly." + + serverUpdate: (dataString) => + try + data = JSON.parse(dataString) + catch error + @error error + + @bus.emit "update", data + return + + update: (data) => + unless data.data? + if @data.data? + data.data = @data.data + else + data.data = {} + + @data = data + + @bus.emit "render", @data if @initialized + @bus.emit "updated" + return + + render: (data) => + data = @initialData unless @initialized + + try + if not @initialized + layout = @fragment.query("#layout") + layout.innerHTML = TMPL[data.config.templates.layout](data.data, data.config, helpers) + + content = @fragment.query("#content") + content.innerHTML = TMPL[data.config.templates.content](data.data, data.config, helpers) + + catch error + @error error + return + + @bus.emit "rendered", data + if not @initialized + @initialized = true + @data = @initialData + @bus.emit "initialized", data + + act: (action, params = {}) => + params.src = @data.config.ref + params.nano = action + location.href = util.href null, params + + error: (error) -> + error = "#{error.fileName}:#{error.lineNumber} #{error.message}" if error instanceof Error + params = + nano_error: error + location.href = util.href null, params + + log: (message) -> + params = + nano_log: message + location.href = util.href null, params + + close: => + params = + command: "nanoclose #{@data.config.ref}" + @winset "is-visible", "false" + location.href = util.href "winset", params + + winset: (key, value, window) => + window = @data.config.window.ref unless window? + params = + "#{window}.#{key}": value + location.href = util.href "winset", params diff --git a/nano/styles/generic.less b/nano/styles/_generic.less similarity index 84% rename from nano/styles/generic.less rename to nano/styles/_generic.less index 1f8edf7ce30..ffdc3cd4ff9 100644 --- a/nano/styles/generic.less +++ b/nano/styles/_generic.less @@ -1,8 +1,8 @@ -@import "_config"; - - -body { - background: linear-gradient(to bottom, - @background-start 0%, - @background-end 100%); -} +@import "_config"; + + +body.generic { + background: linear-gradient(to bottom, + @background-start 0%, + @background-end 100%); +} diff --git a/nano/styles/nanotrasen.less b/nano/styles/_nanotrasen.less similarity index 89% rename from nano/styles/nanotrasen.less rename to nano/styles/_nanotrasen.less index 6bf13910d9a..ad091952492 100644 --- a/nano/styles/nanotrasen.less +++ b/nano/styles/_nanotrasen.less @@ -1,9 +1,9 @@ -@import "_config"; - - -body { - background: data-uri('nanotrasen.svg') no-repeat fixed center/70% 70%, - linear-gradient(to bottom, - @background-start 0%, - @background-end 100%) no-repeat fixed center/100% 100%; -} +@import "_config"; + + +body.nanotrasen { + background: data-uri('nanotrasen.svg') no-repeat fixed center/70% 70%, + linear-gradient(to bottom, + @background-start 0%, + @background-end 100%) no-repeat fixed center/100% 100%; +} diff --git a/nano/styles/common.less b/nano/styles/main.less similarity index 90% rename from nano/styles/common.less rename to nano/styles/main.less index 076271f06a3..fa4e6a02162 100644 --- a/nano/styles/common.less +++ b/nano/styles/main.less @@ -1,86 +1,91 @@ -@import "_config"; -@import "_document"; -@import "_util"; -@import "_interface"; -@import "_link"; -@import "_bar"; - - -.fancy { - display: none; -} - - -div.loading { - .noticeStripes; - - padding: 8px; -} - -div.content { - margin: 32px 4px 0 4px; - &.titlebared { - padding-top: 3px; - } -} - -header.titlebar { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 32px; - - background-color: @titlebar; - box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1); - - .statusicon { - position: absolute; - top: 4px; - left: 12px; - } - - .title { - position: absolute; - top: 6px; - left: 46px; - - color: @title; - font-size: 16px; - white-space: nowrap; - } - - .titlebutton() { - color: @title; - - &:hover { - color: lighten(@title, @hover); - } - } - .minimize { - .titlebutton; - position: absolute; - top: 6px; - right: 46px; - } - .close { - .titlebutton; - position: absolute; - top: 4px; - right: 12px; - } -} - -div.resize { - position: fixed; - bottom: 0; - right: 0; - width: 0; - height: 0; - - border-style: solid; - border-width: 0 0 30px 30px; - border-color: transparent transparent @resize transparent; - - transform: rotate(360deg); -} +@import "_config"; + +@import "_document"; +@import "_util"; + +@import "_interface"; +@import "_link"; +@import "_bar"; + +@import "_generic"; +@import "_nanotrasen"; + + +.fancy { + display: none; +} + + +div.loading { + .noticeStripes; + + padding: 8px; +} + +div.content { + margin: 32px 4px 0 4px; + &.titlebared { + padding-top: 3px; + } +} + +header.titlebar { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 32px; + + background-color: @titlebar; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.1); + + .statusicon { + position: absolute; + top: 4px; + left: 12px; + } + + .title { + position: absolute; + top: 6px; + left: 46px; + + color: @title; + font-size: 16px; + white-space: nowrap; + } + + .titlebutton() { + color: @title; + + &:hover { + color: lighten(@title, @hover); + } + } + .minimize { + .titlebutton; + position: absolute; + top: 6px; + right: 46px; + } + .close { + .titlebutton; + position: absolute; + top: 4px; + right: 12px; + } +} + +div.resize { + position: fixed; + bottom: 0; + right: 0; + width: 0; + height: 0; + + border-style: solid; + border-width: 0 0 30px 30px; + border-color: transparent transparent @resize transparent; + + transform: rotate(360deg); +} From b00f19e8ee947bd42958b9c0c556cdaa1102c3fa Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Wed, 16 Dec 2015 10:44:36 -0600 Subject: [PATCH 2/8] Compile NanoUI into two files --- code/modules/client/asset_cache.dm | 7 +- code/modules/nano/nanoui.dm | 7 +- nano/Gulpfile.coffee | 255 +++++++++++---------- nano/assets/{nanoui.lib.css => nanoui.css} | 4 +- nano/assets/nanoui.lib.js | 2 - nano/assets/nanoui.main.css | 1 - nano/assets/nanoui.main.js | 1 - nano/assets/nanoui.templates.js | 1 - nano/package.json | 3 +- 9 files changed, 137 insertions(+), 144 deletions(-) rename nano/assets/{nanoui.lib.css => nanoui.css} (76%) delete mode 100644 nano/assets/nanoui.lib.js delete mode 100644 nano/assets/nanoui.main.css delete mode 100644 nano/assets/nanoui.main.js delete mode 100644 nano/assets/nanoui.templates.js diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 0e9849724b7..75392b1154e 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -175,11 +175,8 @@ You can set verify to TRUE if you want send() to sleep until the client has the /datum/asset/simple/nanoui assets = list( - "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.main.css" = 'nano/assets/nanoui.main.css', + "nanoui.js" = 'nano/assets/nanoui.js', + "nanoui.css" = 'nano/assets/nanoui.css', "fontawesome-webfont.eot" = 'nano/assets/fontawesome-webfont.eot', "fontawesome-webfont.woff2" = 'nano/assets/fontawesome-webfont.woff2' ) diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 7c514a87456..d5a13e5a533 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -201,14 +201,11 @@ /datum/nanoui/proc/get_html() // Generate - - + "} var/stylesheet_html = {" - - + "} // Generate JSON. diff --git a/nano/Gulpfile.coffee b/nano/Gulpfile.coffee index 1775e2c0232..5a817b8d66f 100644 --- a/nano/Gulpfile.coffee +++ b/nano/Gulpfile.coffee @@ -1,127 +1,128 @@ -### Settings ### -util = require("gulp-util") -s = - min: util.env.min - colorblind: util.env.colorblind - -# Project Paths -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 = - evaluate: /\{\{([\s\S]+?)\}\}/g, - interpolate: /\{\{=([\s\S]+?)\}\}/g, - encode: /\{\{!([\s\S]+?)\}\}/g, - use: /\{\{#([\s\S]+?)\}\}/g, - define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, - conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, - iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - varname: "data, config, helper", - strip: true, - append: true, - selfcontained: true - -### Pacakages ### -bower = require "main-bower-files" -child_process = require "child_process" -del = require "del" -gulp = require "gulp" -merge = require "merge-stream" - -### 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" - -### Helpers ### - -glob = (path) -> - "#{path}/*" - -### Tasks ### -gulp.task "default", ["fonts", "scripts", "styles", "templates"] - -gulp.task "clean", -> - del glob output.dir - -gulp.task "watch", -> - 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 "reload", ["default"], -> - child_process.exec "reload.bat", (err, stdout, stderr) -> - return console.log err if err - -gulp.task "fonts", ["clean"], -> - gulp.src bower input.fonts - .pipe gulp.dest output.dir - -gulp.task "scripts", ["clean"], -> - lib = gulp.src bower "**/*.js" - .pipe g.concat(output.scripts.lib) - .pipe g.if(s.min, g.uglify(), g.jsbeautifier()) - .pipe gulp.dest output.dir - - 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, main - -gulp.task "styles", ["clean"], -> - lib = gulp.src bower "**/*.css" - .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 - - 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 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, main - -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 +### Settings ### +util = require("gulp-util") +f = + colorblind: util.env.colorblind || util.env.c + min: util.env.min || util.env.m + sourcemaps: util.env.sourcemaps || util.env.s + +# Project Paths +input = + fonts: "**/*.{eot,woff2}" + images: "images" + scripts: "scripts" + styles: "styles" + templates: "templates" + +output = + dir: "assets" + js: "nanoui.js" + css: "nanoui.css" + +# doT Settings +dotOpts = + evaluate: /\{\{([\s\S]+?)\}\}/g, + interpolate: /\{\{=([\s\S]+?)\}\}/g, + encode: /\{\{!([\s\S]+?)\}\}/g, + use: /\{\{#([\s\S]+?)\}\}/g, + define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, + conditional: /\{\{\?(\?)?\s*([\s\S]*?)\s*\}\}/g, + iterate: /\{\{~\s*(?:\}\}|([\s\S]+?)\s*\:\s*([\w$]+)\s*(?:\:\s*([\w$]+))?\s*\}\})/g, + varname: "data, config, helper", + strip: true, + append: true, + selfcontained: true + +### Pacakages ### +bower = require "main-bower-files" +child_process = require "child_process" +del = require "del" +gulp = require "gulp" +merge = require "merge2" + +### 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" + +### Helpers ### + +glob = (path) -> + "#{path}/*" + +### Tasks ### +gulp.task "default", ["fonts", "js", "css"] + + +gulp.task "clean", -> + del glob output.dir + + +gulp.task "watch", -> + 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 "reload", ["default"], -> + child_process.exec "reload.bat", (err, stdout, stderr) -> + return console.log err if err + + +gulp.task "fonts", ["clean"], -> + gulp.src bower input.fonts + .pipe gulp.dest output.dir + + +gulp.task "js", ["clean"], -> + lib = gulp.src bower "**/*.js" + .pipe g.if(f.sourcemaps, g.sourcemaps.init()) + + main = gulp.src glob input.scripts + .pipe g.if(f.sourcemaps, g.sourcemaps.init()) + .pipe g.coffee() + + templates = gulp.src glob input.templates + .pipe g.dotprecompiler({dictionary: "TMPL", templateSettings: dotOpts}) + .pipe g.concat("templates") + .pipe g.header("window.TMPL = {};\n") + + combined = merge lib, main, templates + combined + .pipe g.concat(output.js) + .pipe g.if(f.min, g.uglify(), g.jsbeautifier()) + .pipe g.if(f.sourcemaps, g.sourcemaps.write()) + .pipe gulp.dest output.dir + + +gulp.task "css", ["clean"], -> + lib = gulp.src bower "**/*.css" + .pipe g.if(f.sourcemaps, g.sourcemaps.init()) + .pipe g.replace("../fonts/", "") + + main = gulp.src glob input.styles + .pipe g.filter(["*.less", "!_*.less"]) + .pipe g.if(f.sourcemaps, g.sourcemaps.init()) + .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 g.if(f.colorblind, g.postcss([p.colorblind])) + + combined = merge lib, main + combined + .pipe g.if(f.min, g.cssnano({discardComments: {removeAll: true}}), g.csscomb()) + .pipe g.concat(output.css) + .pipe g.if(f.sourcemaps, g.sourcemaps.write()) + .pipe gulp.dest output.dir diff --git a/nano/assets/nanoui.lib.css b/nano/assets/nanoui.css similarity index 76% rename from nano/assets/nanoui.lib.css rename to nano/assets/nanoui.css index 034c7f33676..a4c9185d4ce 100644 --- a/nano/assets/nanoui.lib.css +++ b/nano/assets/nanoui.css @@ -1 +1,3 @@ -@font-face{font-family:FontAwesome;src:url(fontawesome-webfont.eot?v=4.5.0);src:url(fontawesome-webfont.eot?#iefix&v=4.5.0) format('embedded-opentype'),url(fontawesome-webfont.woff2?v=4.5.0) format('woff2'),url(fontawesome-webfont.woff?v=4.5.0) format('woff'),url(fontawesome-webfont.ttf?v=4.5.0) format('truetype'),url(fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s infinite linear;animation:a 2s infinite linear}.fa-pulse{-webkit-animation:a 1s infinite steps(8);animation:a 1s infinite steps(8)}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} \ No newline at end of file +@font-face{font-family:FontAwesome;src:url(fontawesome-webfont.eot?v=4.5.0);src:url(fontawesome-webfont.eot?#iefix&v=4.5.0) format('embedded-opentype'),url(fontawesome-webfont.woff2?v=4.5.0) format('woff2'),url(fontawesome-webfont.woff?v=4.5.0) format('woff'),url(fontawesome-webfont.ttf?v=4.5.0) format('truetype'),url(fontawesome-webfont.svg?v=4.5.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s infinite linear;animation:a 2s infinite linear}.fa-pulse{-webkit-animation:a 1s infinite steps(8);animation:a 1s infinite steps(8)}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"} +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} +html{cursor:default}body,html{min-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 .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 .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;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.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}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')}body.nanotrasen{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF000000')}.fancy{display:none}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)} \ No newline at end of file diff --git a/nano/assets/nanoui.lib.js b/nano/assets/nanoui.lib.js deleted file mode 100644 index 0c13cdd523f..00000000000 --- a/nano/assets/nanoui.lib.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t){function e(t,e,n,r){for(var i,a=n.slice(),l=o(e,t),u=0,c=a.length;c>u&&(handler=a[u],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(l):handler.call(t,l),!l.stoppedImmediatePropagation);u++);return i=!l.stoppedPropagation,r&&i&&t.parentNode?t.parentNode.dispatchEvent(l):!l.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function r(t,e,r){var o=y(e||t,r);g(t,"textContent",n(function(){return o.get.call(this)},function(t){o.set.call(this,t)}))}function o(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function a(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function l(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!h&&S.test(document.readyState)&&(h=!h,document.detachEvent(p,u),t=document.createEvent("Event"),t.initEvent(d,!0,!0),document.dispatchEvent(t))}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function s(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var f=!0,h=!1,p="onreadystatechange",d="DOMContentLoaded",v="__IE8__"+Math.random(),g=Object.defineProperty||function(t,e,n){t[e]=n.value},m=Object.defineProperties||function(e,n){for(var r in n)if(b.call(n,r))try{g(e,r,n[r])}catch(o){t.console&&console.log(r+" failed on object:",e,o.message)}},y=Object.getOwnPropertyDescriptor,b=Object.prototype.hasOwnProperty,w=t.Element.prototype,E=t.Text.prototype,T=/^[a-z]+$/,S=/loaded|complete/,x={},C=document.createElement("div"),O=document.documentElement,j=O.removeAttribute,N=O.setAttribute;r(t.HTMLCommentElement.prototype,w,"nodeValue"),r(t.HTMLScriptElement.prototype,null,"text"),r(E,null,"nodeValue"),r(t.HTMLTitleElement.prototype,null,"text"),g(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(y(t.CSSStyleSheet.prototype,"cssText"))),m(w,{textContent:{get:a,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,r){var o,a,u=this,c="on"+t,f=u[v]||g(u,v,{value:{}})[v],h=f[c]||(f[c]={}),p=h.h||(h.h=[]);if(!b.call(h,"w")){if(h.w=function(t){return t[v]||e(u,s(u,t),p,!1)},!b.call(x,c))if(T.test(t)){try{o=document.createEventObject(),o[v]=!0,9!=u.nodeType&&null==u.parentNode&&C.appendChild(u),(a=u.getAttribute(c))&&j.call(u,c),u.fireEvent(c,o),x[c]=!0}catch(o){for(x[c]=!1;C.hasChildNodes();)C.removeChild(C.firstChild)}null!=a&&N.call(u,c,a)}else x[c]=!1;(h.n=x[c])&&u.attachEvent(c,h.w)}i(p,n)<0&&p[r?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",l)}},dispatchEvent:{value:function(t){var n,r=this,o="on"+t.type,i=r[v],a=i&&i[o],l=!!a;return t.target||(t.target=r),l?a.n?r.fireEvent(o,t):e(r,t,a.h,!0):(n=r.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){var r=this,o="on"+t,a=r[v],l=a&&a[o],u=l&&l.h,c=u?i(u,e):-1;c>-1&&u.splice(c,1)}}}),m(E,{addEventListener:{value:w.addEventListener},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener}}),m(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var r=this,o="on"+t,a=r[v]||g(r,v,{value:{}})[v],l=a[o]||(a[o]={}),u=l.h||(l.h=[]);i(u,e)<0&&(r[o]||(r[o]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),r.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,r="on"+t.type,o=n[v],i=o&&o[r],a=!!i;return a&&(i.n?n.fireEvent(r,t):e(n,t,i.h,!0))}},removeEventListener:{value:w.removeEventListener}}),m(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),m(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?a.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:{value:function(e,n,r){var o=this;w.addEventListener.call(o,e,n,r),f&&e===d&&!S.test(o.readyState)&&(f=!1,o.attachEvent(p,u),t==top&&!function i(t){try{o.documentElement.doScroll("left"),u()}catch(e){setTimeout(i,50)}}())}},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw new Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),m(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,r=/^(top|right|bottom|left)$/,o=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,a,l,u=this._,c=u.style,s=u.currentStyle,f=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(o,i),e=s?s[t]:c[t],n.test(e)&&!r.test(t)&&(a=c.left,l=f&&f.left,l&&(f.left=s.left),c.left="fontSize"===t?"1em":e,e=c.pixelLeft+"px",c.left=a,l&&(f.left=l)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,r){return r?new e(n):new t(n)}}()},addEventListener:{value:function(n,r,o){var a,l=t,u="on"+n;l[u]||(l[u]=function(t){return e(l,s(l,t),a,!1)}),a=l[u][v]||(l[u][v]=[]),i(a,r)<0&&a[o?"unshift":"push"](r)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,r){var o="on"+e,a=(t[o]||Object)[v],l=a?i(a,n):-1;l>-1&&a.splice(l,1)}}}),function(t,e,n){for(n=0;n0||-1)*Math.floor(Math.abs(e))),e},ToPrimitive:function(e){var n,r,o;if(_(e))return e;if(r=e.valueOf,t(r)&&(n=r.call(e),_(n)))return n;if(o=e.toString,t(o)&&(n=o.call(e),_(n)))return n;throw new TypeError},ToObject:function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return r(t)},ToUint32:function(t){return t>>>0}},U=function(){};D(i,{bind:function(e){var n=this;if(!t(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var o,i=s.call(arguments,1),a=function(){if(this instanceof o){var t=n.apply(this,d.call(i,s.call(arguments)));return r(t)===t?t:this}return n.apply(e,d.call(i,s.call(arguments)))},l=g(0,n.length-i.length),u=[],c=0;l>c;c++)h.call(u,"$"+c);return o=Function("binder","return function ("+u.join(",")+"){ return binder.apply(this, arguments); }")(a),n.prototype&&(U.prototype=n.prototype,o.prototype=new U,U.prototype=null),o}});var F=v.bind(o.hasOwnProperty),k=v.bind(o.toString),q=v.bind(l.slice),$=v.bind(l.split),R=v.bind(l.indexOf),J=v.bind(h),H=e.isArray||function(t){return"[object Array]"===k(t)},z=1!==[].unshift(0);D(n,{unshift:function(){return p.apply(this,arguments),this.length}},z),D(e,{isArray:H});var Z=r("a"),B="a"!==Z[0]||!(0 in Z),V=function(t){var e=!0,n=!0;return t&&(t.call("foo",function(t,n,r){"object"!=typeof r&&(e=!1)}),t.call([1],function(){"use strict";n="string"==typeof this},"x")),!!t&&e&&n};D(n,{forEach:function(e){var n,r=L.ToObject(this),o=B&&N(this)?$(this,""):r,i=-1,a=L.ToUint32(o.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++i1&&(r=arguments[1]),!t(n))throw new TypeError("Array.prototype.map callback must be a function");for(var u=0;a>u;u++)u in i&&("undefined"==typeof r?l[u]=n(i[u],u,o):l[u]=n.call(r,i[u],u,o));return l}},!V(n.map)),D(n,{filter:function(e){var n,r,o=L.ToObject(this),i=B&&N(this)?$(this,""):o,a=L.ToUint32(i.length),l=[];if(arguments.length>1&&(r=arguments[1]),!t(e))throw new TypeError("Array.prototype.filter callback must be a function");for(var u=0;a>u;u++)u in i&&(n=i[u],("undefined"==typeof r?e(n,u,o):e.call(r,n,u,o))&&J(l,n));return l}},!V(n.filter)),D(n,{every:function(e){var n,r=L.ToObject(this),o=B&&N(this)?$(this,""):r,i=L.ToUint32(o.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.every callback must be a function");for(var a=0;i>a;a++)if(a in o&&!("undefined"==typeof n?e(o[a],a,r):e.call(n,o[a],a,r)))return!1;return!0}},!V(n.every)),D(n,{some:function(e){var n,r=L.ToObject(this),o=B&&N(this)?$(this,""):r,i=L.ToUint32(o.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.some callback must be a function");for(var a=0;i>a;a++)if(a in o&&("undefined"==typeof n?e(o[a],a,r):e.call(n,o[a],a,r)))return!0;return!1}},!V(n.some));var G=!1;n.reduce&&(G="object"==typeof n.reduce.call("es5",function(t,e,n,r){return r})),D(n,{reduce:function(e){var n=L.ToObject(this),r=B&&N(this)?$(this,""):n,o=L.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===o&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var i,a=0;if(arguments.length>=2)i=arguments[1];else for(;;){if(a in r){i=r[a++];break}if(++a>=o)throw new TypeError("reduce of empty array with no initial value")}for(;o>a;a++)a in r&&(i=e(i,r[a],a,n));return i}},!G);var W=!1;n.reduceRight&&(W="object"==typeof n.reduceRight.call("es5",function(t,e,n,r){return r})),D(n,{reduceRight:function(e){var n=L.ToObject(this),r=B&&N(this)?$(this,""):n,o=L.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===o&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var i,a=o-1;if(arguments.length>=2)i=arguments[1];else for(;;){if(a in r){i=r[a--];break}if(--a<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>a)return i;do a in r&&(i=e(i,r[a],a,n));while(a--);return i}},!W);var X=n.indexOf&&-1!==[0,1].indexOf(1,2);D(n,{indexOf:function(t){var e=B&&N(this)?$(this,""):L.ToObject(this),n=L.ToUint32(e.length);if(0===n)return-1;var r=0;for(arguments.length>1&&(r=L.ToInteger(arguments[1])),r=r>=0?r:g(0,n+r);n>r;r++)if(r in e&&e[r]===t)return r;return-1}},X);var Y=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);D(n,{lastIndexOf:function(t){var e=B&&N(this)?$(this,""):L.ToObject(this),n=L.ToUint32(e.length);if(0===n)return-1;var r=n-1;for(arguments.length>1&&(r=m(r,L.ToInteger(arguments[1]))),r=r>=0?r:n-Math.abs(r);r>=0;r--)if(r in e&&t===e[r])return r;return-1}},Y);var K=function(){var t=[1,2],e=t.splice();return 2===t.length&&H(e)&&0===e.length}();D(n,{splice:function(t,e){return 0===arguments.length?[]:f.apply(this,arguments)}},!K);var Q=function(){var t={};return n.splice.call(t,0,0,1),1===t.length}();D(n,{splice:function(t,e){if(0===arguments.length)return[];var n=arguments;return this.length=g(L.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof e&&(n=s.call(arguments),n.length<2?J(n,this.length-t):n[1]=L.ToInteger(e)),f.apply(this,n)}},!Q);var tt=function(){var t=new e(1e5);return t[8]="x",t.splice(1,1),7===t.indexOf("x")}(),et=function(){var t=256,e=[];return e[t]="a",e.splice(t+1,0,"b"),"a"===e[t]}();D(n,{splice:function(t,e){for(var n,r=L.ToObject(this),o=[],i=L.ToUint32(r.length),l=L.ToInteger(t),u=0>l?g(i+l,0):m(l,i),c=m(g(L.ToInteger(e),0),i-u),f=0;c>f;)n=a(u+f),F(r,n)&&(o[f]=r[n]),f+=1;var h,p=s.call(arguments,2),d=p.length;if(c>d){for(f=u;i-c>f;)n=a(f+c),h=a(f+d),F(r,n)?r[h]=r[n]:delete r[h],f+=1;for(f=i;f>i-c+d;)delete r[f-1],f-=1}else if(d>c)for(f=i-c;f>u;)n=a(f+c-1),h=a(f+d-1),F(r,n)?r[h]=r[n]:delete r[h],f-=1;f=u;for(var v=0;v=0&&!H(e)&&t(e.callee)},yt=gt(arguments)?gt:mt;D(r,{keys:function(e){var n=t(e),r=yt(e),o=null!==e&&"object"==typeof e,i=o&&N(e);if(!o&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var l=[],u=ut&&n;if(i&&ct||r)for(var c=0;ch;h++){var p=dt[h];f&&"constructor"===p||!F(e,p)||J(l,p)}return l}});var bt=r.keys&&function(){return 2===r.keys(arguments).length}(1,2),wt=r.keys&&function(){var t=r.keys(arguments);return 1!==arguments.length||1!==t.length||1!==t[0]}(1),Et=r.keys;D(r,{keys:function(t){return Et(yt(t)?s.call(t):t)}},!bt||wt);var Tt=-621987552e5,St="-000001",xt=Date.prototype.toISOString&&-1===new Date(Tt).toISOString().indexOf(St),Ct=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();D(Date.prototype,{toISOString:function(){var t,e,n,r,o;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(r=this.getUTCFullYear(),o=this.getUTCMonth(),r+=Math.floor(o/12),o=(o%12+12)%12,t=[o+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],r=(0>r?"-":r>9999?"+":"")+q("00000"+Math.abs(r),r>=0&&9999>=r?-4:-6),e=t.length;e--;)n=t[e],10>n&&(t[e]="0"+n);return r+"-"+s.call(t,0,2).join("-")+"T"+s.call(t,2).join(":")+"."+q("000"+this.getUTCMilliseconds(),-3)+"Z"}},xt||Ct);var Ot=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Tt).toJSON().indexOf(St)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(t){return!1}}();Ot||(Date.prototype.toJSON=function(e){var n=r(this),o=L.ToPrimitive(n);if("number"==typeof o&&!isFinite(o))return null;var i=n.toISOString;if(!t(i))throw new TypeError("toISOString property is not callable");return i.call(n)});var jt=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Nt=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),At=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(At||Nt||!jt){var It=Math.pow(2,31)-1,Mt=(Math.floor(It/1e3),P(new Date(1970,0,1,0,0,0,It+1).getTime()));Date=function(t){var e=function(n,r,o,i,l,u,c){var s,f=arguments.length;if(this instanceof t){var h=u,p=c;if(Mt&&f>=7&&c>It){var d=Math.floor(c/It)*It,v=Math.floor(d/1e3);h+=v,p-=1e3*v}s=1===f&&a(n)===n?new t(e.parse(n)):f>=7?new t(n,r,o,i,l,h,p):f>=6?new t(n,r,o,i,l,h):f>=5?new t(n,r,o,i,l):f>=4?new t(n,r,o,i):f>=3?new t(n,r,o):f>=2?new t(n,r):f>=1?new t(n):new t}else s=t.apply(this,arguments);return _(s)||D(s,{constructor:e},!0),s},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),r=[0,31,59,90,120,151,181,212,243,273,304,334,365],o=function(t,e){var n=e>1?1:0;return r[e]+Math.floor((t-1969+n)/4)-Math.floor((t-1901+n)/100)+Math.floor((t-1601+n)/400)+365*(t-1970)},i=function(e){var n=0,r=e;if(Mt&&r>It){var o=Math.floor(r/It)*It,i=Math.floor(o/1e3);n+=i,r-=1e3*i}return u(new t(1970,0,1,0,0,n,r))};for(var l in t)F(t,l)&&(e[l]=t[l]);D(e,{now:t.now,UTC:t.UTC},!0),e.prototype=t.prototype,D(e.prototype,{constructor:e},!0);var c=function(e){var r=n.exec(e);if(r){var a,l=u(r[1]),c=u(r[2]||1)-1,s=u(r[3]||1)-1,f=u(r[4]||0),h=u(r[5]||0),p=u(r[6]||0),d=Math.floor(1e3*u(r[7]||0)),v=Boolean(r[4]&&!r[8]),g="-"===r[9]?1:-1,m=u(r[10]||0),y=u(r[11]||0),b=h>0||p>0||d>0;return(b?24:25)>f&&60>h&&60>p&&1e3>d&&c>-1&&12>c&&24>m&&60>y&&s>-1&&s=-864e13&&864e13>=a)?a:NaN}return t.parse.apply(this,arguments)};return D(e,{parse:c}),e}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var Dt=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),_t={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(t,e){for(var n=-1,r=e;++n<_t.size;)r+=t*_t.data[n],_t.data[n]=r%_t.base,r=Math.floor(r/_t.base)},divide:function(t){for(var e=_t.size,n=0;--e>=0;)n+=_t.data[e],_t.data[e]=Math.floor(n/t),n=n%t*_t.base},numToString:function(){for(var t=_t.size,e="";--t>=0;)if(""!==e||0===t||0!==_t.data[t]){var n=a(_t.data[t]);""===e?e=n:e+=q("0000000",0,7-n.length)+n}return e},pow:function Xt(t,e,n){return 0===e?n:e%2===1?Xt(t,e-1,n*t):Xt(t*t,e/2,n)},log:function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}},Pt=function(t){var e,n,r,o,i,l,c,s;if(e=u(t),e=P(e)?0:Math.floor(e),0>e||e>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=u(this),P(n))return"NaN";if(-1e21>=n||n>=1e21)return a(n);if(r="",0>n&&(r="-",n=-n),o="0",n>1e-21)if(i=_t.log(n*_t.pow(2,69,1))-69,l=0>i?n*_t.pow(2,-i,1):n/_t.pow(2,i,1),l*=4503599627370496,i=52-i,i>0){for(_t.multiply(0,l),c=e;c>=7;)_t.multiply(1e7,0),c-=7;for(_t.multiply(_t.pow(10,c,1),0),c=i-1;c>=23;)_t.divide(1<<23),c-=23;_t.divide(1<0?(s=o.length,o=e>=s?r+q("0.0000000000000000000",0,e-s+2)+o:r+q(o,0,s-e)+"."+q(o,s-e)):o=r+o,o};D(c,{toFixed:Pt},Dt);var Lt=function(){try{return"1"===1..toPrecision(void 0)}catch(t){return!0}}(),Ut=c.toPrecision;D(c,{toPrecision:function(t){return"undefined"==typeof t?Ut.call(this):Ut.call(this,t)}},Lt),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var t="undefined"==typeof/()??/.exec("")[1],e=Math.pow(2,32)-1;l.split=function(n,r){var o=this;if("undefined"==typeof n&&0===r)return[];if(!x(n))return $(this,n,r);var i,a,l,u,c=[],f=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),p=0,d=new RegExp(n.source,f+"g");o+="",t||(i=new RegExp("^"+d.source+"$(?!\\s)",f));var v="undefined"==typeof r?e:L.ToUint32(r);for(a=d.exec(o);a&&(l=a.index+a[0].length,!(l>p&&(J(c,q(o,p,a.index)),!t&&a.length>1&&a[0].replace(i,function(){for(var t=1;t1&&a.index=v)));)d.lastIndex===a.index&&d.lastIndex++,a=d.exec(o);return p===o.length?(u||!d.test(""))&&J(c,""):J(c,q(o,p)),c.length>v?q(c,0,v):c}}():"0".split(void 0,0).length&&(l.split=function(t,e){return"undefined"==typeof t&&0===e?[]:$(this,t,e)});var Ft=l.replace,kt=function(){var t=[];return"x".replace(/x(.)?/g,function(e,n){J(t,n)}),1===t.length&&"undefined"==typeof t[0]}();kt||(l.replace=function(e,n){var r=t(n),o=x(e)&&/\)[*?]/.test(e.source);if(r&&o){var i=function(t){var r=arguments.length,o=e.lastIndex;e.lastIndex=0;var i=e.exec(t)||[];return e.lastIndex=o,J(i,arguments[r-2],arguments[r-1]),n.apply(this,i)};return Ft.call(this,e,i)}return Ft.call(this,e,n)});var qt=l.substr,$t="".substr&&"b"!=="0b".substr(-1);D(l,{substr:function(t,e){var n=t;return 0>t&&(n=g(this.length+t,0)),qt.call(this,n,e)}},$t);var Rt=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",Jt="​",Ht="["+Rt+"]",zt=new RegExp("^"+Ht+Ht+"*"),Zt=new RegExp(Ht+Ht+"*$"),Bt=l.trim&&(Rt.trim()||!Jt.trim());D(l,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return a(this).replace(zt,"").replace(Zt,"")}},Bt);var Vt=l.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);D(l,{lastIndexOf:function(t){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");for(var e=a(this),n=a(t),r=arguments.length>1?u(arguments[1]):NaN,o=P(r)?1/0:L.ToInteger(r),i=m(g(o,0),e.length),l=n.length,c=i+l;c>0;){c=g(0,c-l);var s=R(q(e,c,i+l),n);if(-1!==s)return c+s}return-1}},Vt);var Gt=l.lastIndexOf;if(D(l,{lastIndexOf:function(t){return Gt.apply(this,arguments)}},1!==l.lastIndexOf.length),(8!==parseInt(Rt+"08")||22!==parseInt(Rt+"0x16"))&&(parseInt=function(t){var e=/^[\-+]?0[xX]/;return function(n,r){var o=a(n).trim(),i=u(r)||(e.test(o)?16:10);return t(o,i)}}(parseInt)),"RangeError: test"!==String(new RangeError("test"))){var Wt=(Error.prototype.toString,function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");var t=this.name;"undefined"==typeof t?t="Error":"string"!=typeof t&&(t=a(t));var e=this.message;return"undefined"==typeof e?e="":"string"!=typeof e&&(e=a(e)),t?e?t+": "+e:t:e});Error.prototype.toString=Wt}}),function(t,e){function n(t,e){var n=t.createElement("p"),r=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function r(){var t=b.elements;return"string"==typeof t?t.split(" "):t}function o(t,e){var n=b.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),b.elements=n+" "+t,c(e)}function i(t){var e=y[t[g]];return e||(e={},m++,t[g]=m,y[m]=e),e}function a(t,n,r){if(n||(n=e),f)return n.createElement(t);r||(r=i(n));var o;return o=r.cache[t]?r.cache[t].cloneNode():v.test(t)?(r.cache[t]=r.createElem(t)).cloneNode():r.createElem(t),!o.canHaveChildren||d.test(t)||o.tagUrn?o:r.frag.appendChild(o)}function l(t,n){if(t||(t=e),f)return t.createDocumentFragment();n=n||i(t);for(var o=n.frag.cloneNode(),a=0,l=r(),u=l.length;u>a;a++)o.createElement(l[a]);return o}function u(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return b.shivMethods?a(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(b,e.frag)}function c(t){t||(t=e);var r=i(t);return!b.shivCSS||s||r.hasCSS||(r.hasCSS=!!n(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),f||u(t,r),t}var s,f,h="3.7.3",p=t.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",m=0,y={};!function(){try{var t=e.createElement("a");t.innerHTML="",s="hidden"in t,f=1==t.childNodes.length||function(){e.createElement("a");var t=e.createDocumentFragment();return"undefined"==typeof t.cloneNode||"undefined"==typeof t.createDocumentFragment||"undefined"==typeof t.createElement}()}catch(n){s=!0,f=!0}}();var b={elements:p.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:h,shivCSS:p.shivCSS!==!1,supportsUnknownElements:f,shivMethods:p.shivMethods!==!1,type:"default",shivDocument:c,createElement:a,createDocumentFragment:l,addElements:o};t.html5=b,c(e),"object"==typeof module&&module.exports&&(module.exports=b)}("undefined"!=typeof window?window:this,document),function(){function t(e,r){function i(t){if(i[t]!==g)return i[t];var e;if("bug-string-char-index"==t)e="a"!="a"[0];else if("json"==t)e=i("json-stringify")&&i("json-parse");else{var n,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==t){var u=r.stringify,s="function"==typeof u&&b;if(s){(n=function(){return 1}).toJSON=n;try{s="0"===u(0)&&"0"===u(new a)&&'""'==u(new l)&&u(y)===g&&u(g)===g&&u()===g&&"1"===u(n)&&"[1]"==u([n])&&"[null]"==u([g])&&"null"==u(null)&&"[null,null,null]"==u([g,y,null])&&u({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===u(null,n)&&"[\n 1,\n 2\n]"==u([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==u(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==u(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==u(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==u(new c(-1))}catch(f){s=!1}}e=s}if("json-parse"==t){var h=r.parse;if("function"==typeof h)try{if(0===h("0")&&!h(!1)){n=h(o);var p=5==n.a.length&&1===n.a[0];if(p){try{p=!h('" "')}catch(f){}if(p)try{p=1!==h("01")}catch(f){}if(p)try{p=1!==h("1.")}catch(f){}}}}catch(f){p=!1}e=p}}return i[t]=!!e}e||(e=o.Object()),r||(r=o.Object());var a=e.Number||o.Number,l=e.String||o.String,u=e.Object||o.Object,c=e.Date||o.Date,s=e.SyntaxError||o.SyntaxError,f=e.TypeError||o.TypeError,h=e.Math||o.Math,p=e.JSON||o.JSON;"object"==typeof p&&p&&(r.stringify=p.stringify,r.parse=p.parse);var d,v,g,m=u.prototype,y=m.toString,b=new c(-0xc782b5b800cec);try{b=-109252==b.getUTCFullYear()&&0===b.getUTCMonth()&&1===b.getUTCDate()&&10==b.getUTCHours()&&37==b.getUTCMinutes()&&6==b.getUTCSeconds()&&708==b.getUTCMilliseconds()}catch(w){}if(!i("json")){var E="[object Function]",T="[object Date]",S="[object Number]",x="[object String]",C="[object Array]",O="[object Boolean]",j=i("bug-string-char-index");if(!b)var N=h.floor,A=[0,31,59,90,120,151,181,212,243,273,304,334],I=function(t,e){return A[e]+365*(t-1970)+N((t-1969+(e=+(e>1)))/4)-N((t-1901+e)/100)+N((t-1601+e)/400)};if((d=m.hasOwnProperty)||(d=function(t){var e,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=y?d=function(t){var e=this.__proto__,n=t in(this.__proto__=null,this);return this.__proto__=e,n}:(e=n.constructor,d=function(t){var n=(this.constructor||e).prototype;return t in this&&!(t in n&&this[t]===n[t])}),n=null,d.call(this,t)}),v=function(t,e){var r,o,i,a=0;(r=function(){this.valueOf=0}).prototype.valueOf=0,o=new r;for(i in o)d.call(o,i)&&a++;return r=o=null,a?v=2==a?function(t,e){var n,r={},o=y.call(t)==E;for(n in t)o&&"prototype"==n||d.call(r,n)||!(r[n]=1)||!d.call(t,n)||e(n)}:function(t,e){var n,r,o=y.call(t)==E;for(n in t)o&&"prototype"==n||!d.call(t,n)||(r="constructor"===n)||e(n);(r||d.call(t,n="constructor"))&&e(n)}:(o=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],v=function(t,e){var r,i,a=y.call(t)==E,l=!a&&"function"!=typeof t.constructor&&n[typeof t.hasOwnProperty]&&t.hasOwnProperty||d;for(r in t)a&&"prototype"==r||!l.call(t,r)||e(r);for(i=o.length;r=o[--i];l.call(t,r)&&e(r));}),v(t,e)},!i("json-stringify")){var M={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},D="000000",_=function(t,e){return(D+(e||0)).slice(-t)},P="\\u00",L=function(t){for(var e='"',n=0,r=t.length,o=!j||r>10,i=o&&(j?t.split(""):t);r>n;n++){var a=t.charCodeAt(n);switch(a){case 8:case 9:case 10:case 12:case 13:case 34:case 92:e+=M[a];break;default:if(32>a){e+=P+_(2,a.toString(16));break}e+=o?i[n]:t.charAt(n)}}return e+'"'},U=function(t,e,n,r,o,i,a){var l,u,c,s,h,p,m,b,w,E,j,A,M,D,P,F;try{l=e[t]}catch(k){}if("object"==typeof l&&l)if(u=y.call(l),u!=T||d.call(l,"toJSON"))"function"==typeof l.toJSON&&(u!=S&&u!=x&&u!=C||d.call(l,"toJSON"))&&(l=l.toJSON(t));else if(l>-1/0&&1/0>l){if(I){for(h=N(l/864e5),c=N(h/365.2425)+1970-1;I(c+1,0)<=h;c++);for(s=N((h-I(c,0))/30.42);I(c,s+1)<=h;s++);h=1+h-I(c,s),p=(l%864e5+864e5)%864e5,m=N(p/36e5)%24,b=N(p/6e4)%60,w=N(p/1e3)%60,E=p%1e3}else c=l.getUTCFullYear(),s=l.getUTCMonth(),h=l.getUTCDate(),m=l.getUTCHours(),b=l.getUTCMinutes(),w=l.getUTCSeconds(),E=l.getUTCMilliseconds();l=(0>=c||c>=1e4?(0>c?"-":"+")+_(6,0>c?-c:c):_(4,c))+"-"+_(2,s+1)+"-"+_(2,h)+"T"+_(2,m)+":"+_(2,b)+":"+_(2,w)+"."+_(3,E)+"Z"}else l=null;if(n&&(l=n.call(e,t,l)),null===l)return"null";if(u=y.call(l),u==O)return""+l;if(u==S)return l>-1/0&&1/0>l?""+l:"null";if(u==x)return L(""+l);if("object"==typeof l){for(D=a.length;D--;)if(a[D]===l)throw f();if(a.push(l),j=[], -P=i,i+=o,u==C){for(M=0,D=l.length;D>M;M++)A=U(M,l,n,r,o,i,a),j.push(A===g?"null":A);F=j.length?o?"[\n"+i+j.join(",\n"+i)+"\n"+P+"]":"["+j.join(",")+"]":"[]"}else v(r||l,function(t){var e=U(t,l,n,r,o,i,a);e!==g&&j.push(L(t)+":"+(o?" ":"")+e)}),F=j.length?o?"{\n"+i+j.join(",\n"+i)+"\n"+P+"}":"{"+j.join(",")+"}":"{}";return a.pop(),F}};r.stringify=function(t,e,r){var o,i,a,l;if(n[typeof e]&&e)if((l=y.call(e))==E)i=e;else if(l==C){a={};for(var u,c=0,s=e.length;s>c;u=e[c++],l=y.call(u),(l==x||l==S)&&(a[u]=1));}if(r)if((l=y.call(r))==S){if((r-=r%1)>0)for(o="",r>10&&(r=10);o.lengthF;)switch(o=i.charCodeAt(F)){case 9:case 10:case 13:case 32:F++;break;case 123:case 125:case 91:case 93:case 58:case 44:return t=j?i.charAt(F):i[F],F++,t;case 34:for(t="@",F++;a>F;)if(o=i.charCodeAt(F),32>o)R();else if(92==o)switch(o=i.charCodeAt(++F)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:t+=$[o],F++;break;case 117:for(e=++F,n=F+4;n>F;F++)o=i.charCodeAt(F),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||R();t+=q("0x"+i.slice(e,F));break;default:R()}else{if(34==o)break;for(o=i.charCodeAt(F),e=F;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++F);t+=i.slice(e,F)}if(34==i.charCodeAt(F))return F++,t;R();default:if(e=F,45==o&&(r=!0,o=i.charCodeAt(++F)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(F+1),o>=48&&57>=o)&&R(),r=!1;a>F&&(o=i.charCodeAt(F),o>=48&&57>=o);F++);if(46==i.charCodeAt(F)){for(n=++F;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==F&&R(),F=n}if(o=i.charCodeAt(F),101==o||69==o){for(o=i.charCodeAt(++F),(43==o||45==o)&&F++,n=F;a>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==F&&R(),F=n}return+i.slice(e,F)}if(r&&R(),"true"==i.slice(F,F+4))return F+=4,!0;if("false"==i.slice(F,F+5))return F+=5,!1;if("null"==i.slice(F,F+4))return F+=4,null;R()}return"$"},H=function(t){var e,n;if("$"==t&&R(),"string"==typeof t){if("@"==(j?t.charAt(0):t[0]))return t.slice(1);if("["==t){for(e=[];t=J(),"]"!=t;n||(n=!0))n&&(","==t?(t=J(),"]"==t&&R()):R()),","==t&&R(),e.push(H(t));return e}if("{"==t){for(e={};t=J(),"}"!=t;n||(n=!0))n&&(","==t?(t=J(),"}"==t&&R()):R()),(","==t||"string"!=typeof t||"@"!=(j?t.charAt(0):t[0])||":"!=J())&&R(),e[t.slice(1)]=H(J());return e}R()}return t},z=function(t,e,n){var r=Z(t,e,n);r===g?delete t[e]:t[e]=r},Z=function(t,e,n){var r,o=t[e];if("object"==typeof o&&o)if(y.call(o)==C)for(r=o.length;r--;)z(o,r,n);else v(o,function(t){z(o,t,n)});return n.call(t,e,o)};r.parse=function(t,e){var n,r;return F=0,k=""+t,n=H(J()),"$"!=J()&&R(),F=k=null,e&&y.call(e)==E?Z((r={},r[""]=n,r),"",e):n}}}return r.runInContext=t,r}var e="function"==typeof define&&define.amd,n={"function":!0,object:!0},r=n[typeof exports]&&exports&&!exports.nodeType&&exports,o=n[typeof window]&&window||this,i=r&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!i||i.global!==i&&i.window!==i&&i.self!==i||(o=i),r&&!e)t(o,r);else{var a=o.JSON,l=o.JSON3,u=!1,c=t(o,o.JSON3={noConflict:function(){return u||(u=!0,o.JSON=a,o.JSON3=l,a=l=null),c}});o.JSON={parse:c.parse,stringify:c.stringify}}e&&define(function(){return c})}.call(this);var Url=function(){"use strict";var t={protocol:"protocol",host:"hostname",port:"port",path:"pathname",query:"search",hash:"hash"},e={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},n=function(n,r){var a,l=document,u=l.createElement("a"),r=r||l.location.href,c=r.match(/\/\/(.*?)(?::(.*?))?@/)||[];u.href=r;for(a in t)n[a]=u[t[a]]||"";if(n.protocol=n.protocol.replace(/:$/,""),n.query=n.query.replace(/^\?/,""),n.hash=o(n.hash.replace(/^#/,"")),n.user=o(c[1]||""),n.pass=o(c[2]||""),n.port=e[n.protocol]==n.port||0==n.port?"":n.port,n.protocol||/^([a-z]+:)?\/\//.test(r))n.path=n.path.replace(/^\/?/,"/");else{var s=new Url(l.location.href.match(/(.*\/)/)[0]),f=s.path.split("/"),h=n.path.split("/"),p=["protocol","user","pass","host","port"],d=p.length;for(f.pop(),a=0;d>a;a++)n[p[a]]=s[p[a]];for(;".."==h[0];)f.pop(),h.shift();n.path=("/"!=r.charAt(0)?f.join("/"):"")+"/"+h.join("/")}n.paths(("/"==n.path.charAt(0)?n.path.slice(1):n.path).split("/")),i(n)},r=function(t){return encodeURIComponent(t).replace(/'/g,"%27")},o=function(t){return t=t.replace(/\+/g," "),t=t.replace(/%([ef][0-9a-f])%([89ab][0-9a-f])%([89ab][0-9a-f])/gi,function(t,e,n,r){var o=parseInt(e,16)-224,i=parseInt(n,16)-128;if(0==o&&32>i)return t;var a=parseInt(r,16)-128,l=(o<<12)+(i<<6)+a;return l>65535?t:String.fromCharCode(l)}),t=t.replace(/%([cd][0-9a-f])%([89ab][0-9a-f])/gi,function(t,e,n){var r=parseInt(e,16)-192;if(2>r)return t;var o=parseInt(n,16)-128;return String.fromCharCode((r<<6)+o)}),t=t.replace(/%([0-7][0-9a-f])/gi,function(t,e){return String.fromCharCode(parseInt(e,16))})},i=function(t){var e=t.query;t.query=new function(t){for(var e,n=/([^=&]+)(=([^&]*))?/g;e=n.exec(t);){var i=decodeURIComponent(e[1].replace(/\+/g," ")),a=e[3]?o(e[3]):"";null!=this[i]?(this[i]instanceof Array||(this[i]=[this[i]]),this[i].push(a)):this[i]=a}this.clear=function(){for(var t in this)this[t]instanceof Function||delete this[t]},this.count=function(){var t,e=0;for(t in this)this[t]instanceof Function||e++;return e},this.isEmpty=function(){return 0===this.count()},this.toString=function(){var t,e,n="",o=r;for(t in this)if(!(this[t]instanceof Function))if(this[t]instanceof Array){var i=this[t].length;if(i)for(e=0;i>e;e++)n+=n?"&":"",n+=o(t)+"="+o(this[t][e]);else n+=(n?"&":"")+o(t)+"="}else n+=n?"&":"",n+=o(t)+"="+o(this[t]);return n}}(e)};return function(t){this.paths=function(t){var e,n="",i=0;if(t&&t.length&&t+""!==t){for(this.isAbsolute()&&(n="/"),e=t.length;e>i;i++)t[i]=r(t[i]);this.path=n+t.join("/")}for(t=("/"===this.path.charAt(0)?this.path.slice(1):this.path).split("/"),i=0,e=t.length;e>i;i++)t[i]=o(t[i]);return t},this.encode=r,this.decode=o,this.isAbsolute=function(){return this.protocol||"/"===this.path.charAt(0)},this.toString=function(){return(this.protocol&&this.protocol+"://")+(this.user&&r(this.user)+(this.pass&&":"+r(this.pass))+"@")+(this.host&&this.host)+(this.port&&":"+this.port)+(this.path&&this.path)+(this.query.toString()&&"?"+this.query)+(this.hash&&"#"+r(this.hash))},n(this,t)}}();!function(t){"use strict";function e(){return s.createDocumentFragment()}function n(t){return s.createElement(t)}function r(t){if(1===t.length)return o(t[0]);for(var n=e(),r=q.call(t),i=0;i-1}}([].indexOf||function(t){for($=this.length;$--&&this[$]!==t;);return $}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;ea?o[c.call(r,i)-1]=b.call(i,this):o[a]},emit:function(t){for(var e=u.call(this,p),r=e&&this[p].l,o=e&&u.call(r,t),i=o&&r[t].slice(0),a=o&&s.call(arguments,1),l=0,c=o?i.length:l;c>l;)n(this,i[l++],a);return o},expect:function(){for(var t=0;t-1&&(i.splice(n,1),i.length||delete o[t])),this},on:function(t,e,n){var r=u.call(this,p),o=(r?this[p]:T(this)).l,i=r&&u.call(o,t)?o[t]:o[t]=[];return w.call(i,e)<0&&(n?f:c).call(i,e),this},once:function(t,e,r){var o=function(a){i.off(t,o,r),n(i,e,arguments)},i=this;return i.on(t,o,r)},trigger:function(t,e){var o=u.call(this,p),i=o&&this[p].l,a="string"==typeof t,c=a?t:t.type,s=o&&u.call(i,c),f=s&&i[c].slice(0),h=a?new r(this,c,e):t,d=0,v=s?f.length:d,g=!(h instanceof r);for(g&&(h._active=!0,h.stopImmediatePropagation=l.stopImmediatePropagation),h.currentTarget=this,m[0]=h;h._active&&v>d;)n(this,f[d++],m);return g&&(delete h._active,delete h.stopImmediatePropagation),!h.defaultPrevented},when:function(t,e){var r=u.call(this,p),o=(r?this[p]:T(this)).w,i=r&&u.call(o,t);return i?(n(this,e,o[t]),this):this.once(t,function(){u.call(o,t)||(o[t]=arguments)},!0).once(t,e)}},C=function(t,e,n){u.call(t,e)||(t[e]=n)},O=!1;l.defaultPrevented=!1,l._active=l.cancelable=!0,l.preventDefault=function(){this.defaultPrevented=!0},l.stopImmediatePropagation=function(){this._active=!1};for(o in x)u.call(x,o)&&y(a,o,{enumerable:!1,configurable:!0,writable:!0,value:x[o]});!function(t){function e(e){function n(t){t[e].apply(t,this)}return function(){return t.call(this,n,arguments),this}}for(var n in x)x.hasOwnProperty(n)&&!/^listeners|boundTo$/.test(n)&&y(i,n,{enumerable:!1,configurable:!0,writable:!0,value:e(n)})}(i.forEach||function(t,e){for(var n=this,r=0;r-1&&(n.splice(r,1),n.length||(self["on"+t]=null))}),s.expect("ready","DOMContentLoaded"),/loaded|complete/.test(s.readyState)?(t.setImmediate||setTimeout)(c):s.once("DOMContentLoaded",c,!0)}(window),"$"in window||y(window,"$",{enumerable:!1,configurable:!0,writable:!0,value:function(t,e){var n=e||document,r=t.length-6,o=t.lastIndexOf(":first")===r&&r>0,i=o?n.querySelector(t.slice(0,r)):n.querySelectorAll(t);return o?i?[i]:[]:v.call(i)}})}}(Object);var Class=Class||function(t){"use strict";function e(t,e,r){for(var o,i=[],a=0;ae;)o[e++].call(this);return t.apply(this,arguments)}}(E),E[p]=x)),b.call(t,d)&&n(t[d],E,y,!0,!0),h&&(v!==y&&n(v,E,y,!0,!0),E[p]=x),x[c]!==E&&r(x,c,E,!1),n(t,x,y,!1,!0),b.call(t,f)&&a([].concat(t[f]),x),E}}(Object); \ No newline at end of file diff --git a/nano/assets/nanoui.main.css b/nano/assets/nanoui.main.css deleted file mode 100644 index 15613de04c7..00000000000 --- a/nano/assets/nanoui.main.css +++ /dev/null @@ -1 +0,0 @@ -html{cursor:default}body,html{min-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 .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 .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;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.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}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')}body.nanotrasen{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF000000')}.fancy{display:none}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)} \ No newline at end of file diff --git a/nano/assets/nanoui.main.js b/nano/assets/nanoui.main.js deleted file mode 100644 index 677b6bc3955..00000000000 --- a/nano/assets/nanoui.main.js +++ /dev/null @@ -1 +0,0 @@ -(function(){this.NANO={INTERACTIVE:2,UPDATE:1,DISABLED:0}}).call(this),function(){this.helpers={link:function(t,n,i,e,s,r){return null==t&&(t=""),null==n&&(n=""),null==i&&(i=""),null==e&&(e={}),null==s&&(s=""),null==r&&(r=""),e=JSON.stringify(e),n&&(n="",r+=" iconed"),s?""+n+t+"":""+n+t+""},bar:function(t,n,i,e,s){var r;return null==t&&(t=0),null==n&&(n=0),null==i&&(i=100),null==e&&(e=""),null==s&&(s=""),i>n?n>t?t=n:t>i&&(t=i):t>n?t=n:i>t&&(t=i),r=Math.round((t-n)/(i-n)*100),"
"+s+"
"},round:function(t){return Math.round(t)},fixed:function(t,n){return null==n&&(n=1),Number(Math.round(t+"e"+n)+"e-"+n)},floor:function(t){return Math.floor(t)},ceil:function(t){return Math.ceil(t)}}}.call(this),function(){document.when("ready",function(t){return function(){var n;n={},t.nanoui=new t.NanoUI(n,document),t.nanowindow=new t.Window(n,document),n.emit("memes"),t.NanoBus=n}}(this))}.call(this),function(){var t=function(t,n){return function(){return t.apply(n,arguments)}};this.NanoUI=function(){function n(n,i){this.bus=n,this.fragment=null!=i?i:document,this.winset=t(this.winset,this),this.close=t(this.close,this),this.act=t(this.act,this),this.render=t(this.render,this),this.update=t(this.update,this),this.serverUpdate=t(this.serverUpdate,this),this.bus.on("serverUpdate",this.serverUpdate),this.bus.on("update",this.update),this.bus.on("render",this.render),this.bus.on("memes",this.render),this.initialized=!1,this.data={},this.initialData=JSON.parse(this.fragment.query("#data").data("initial")),null==this.initialData&&("data"in this.initialData||"config"in this.initalData)&&this.error("Initial data did not load correctly.")}return n.prototype.serverUpdate=function(t){var n,i,e;try{n=JSON.parse(t)}catch(e){i=e,this.error(i)}this.bus.emit("update",n)},n.prototype.update=function(t){null==t.data&&(null!=this.data.data?t.data=this.data.data:t.data={}),this.data=t,this.initialized&&this.bus.emit("render",this.data),this.bus.emit("updated")},n.prototype.render=function(t){var n,i,e,s;this.initialized||(t=this.initialData);try{this.initialized||(s=this.fragment.query("#layout"),s.innerHTML=TMPL[t.config.templates.layout](t.data,t.config,helpers)),n=this.fragment.query("#content"),n.innerHTML=TMPL[t.config.templates.content](t.data,t.config,helpers)}catch(e){return i=e,void this.error(i)}return this.bus.emit("rendered",t),this.initialized?void 0:(this.initialized=!0,this.data=this.initialData,this.bus.emit("initialized",t))},n.prototype.act=function(t,n){return null==n&&(n={}),n.src=this.data.config.ref,n.nano=t,location.href=util.href(null,n)},n.prototype.error=function(t){var n;return t instanceof Error&&(t=t.fileName+":"+t.lineNumber+" "+t.message),n={nano_error:t},location.href=util.href(null,n)},n.prototype.log=function(t){var n;return n={nano_log:t},location.href=util.href(null,n)},n.prototype.close=function(){var t;return t={command:"nanoclose "+this.data.config.ref},this.winset("is-visible","false"),location.href=util.href("winset",t)},n.prototype.winset=function(t,n,i){var e,s;return null==i&&(i=this.data.config.window.ref),e={},e[i+"."+t]=n,s=e,location.href=util.href("winset",s)},n}()}.call(this),function(){this.util={extend:function(t,n){return Object.keys(n).forEach(function(i){var e;return e=n[i],e&&"[object Object]"===Object.prototype.toString.call(e)?(t[i]=t[i]||{},util.extend(t[i],e)):t[i]=e}),t},href:function(t,n){return null==t&&(t=""),null==n&&(n={}),t=new Url("byond://"+t),util.extend(t.query,n),t}}}.call(this),function(){var t=function(t,n){return function(){return t.apply(n,arguments)}};this.Window=function(){function n(n,i){this.bus=n,this.fragment=null!=i?i:document,this.attachLinks=t(this.attachLinks,this),this.updateLinks=t(this.updateLinks,this),this.updateStatus=t(this.updateStatus,this),this.resize=t(this.resize,this),this.attachResize=t(this.attachResize,this),this.drag=t(this.drag,this),this.attachDrag=t(this.attachDrag,this),this.attachButtons=t(this.attachButtons,this),this.calcOffset=t(this.calcOffset,this),this.fancyChrome=t(this.fancyChrome,this),this.dragging=!1,this.resizing=!1,this.bus.once("initialized",function(t){return function(n){return setTimeout(t.focusMap,100),n.config.user.fancy?(t.fancyChrome(),t.calcOffset(),t.attachButtons(),t.attachDrag(),t.attachResize()):void 0}}(this)),this.bus.on("rendered",this.updateStatus),this.bus.on("rendered",this.updateLinks),this.bus.on("rendered",this.attachLinks),this.fragment.on("keydown",this.focusMap)}return n.prototype.setPos=function(t,n){return nanoui.winset("pos",t+","+n)},n.prototype.setSize=function(t,n){return nanoui.winset("size",t+","+n)},n.prototype.focusMap=function(){return nanoui.winset("focus",1,"mapwindow.map")},n.prototype.fancyChrome=function(){var t;return nanoui.winset("titlebar",0),nanoui.winset("can-resize",0),t=this.fragment.queryAll(".fancy"),t.forEach(function(t){return t.style.display="inherit"})},n.prototype.calcOffset=function(){return this.xOriginal=window.screenLeft,this.yOriginal=window.screenTop,this.setPos(0,0),this.xOffset=window.screenLeft,this.yOffset=window.screenTop,this.setPos(this.xOriginal-this.xOffset,this.yOriginal-this.yOffset)},n.prototype.attachButtons=function(){var t,n,i,e;return t=function(){return nanoui.close()},i=function(){return nanoui.winset("is-minimized","true")},n=this.fragment.queryAll(".close"),n.forEach(function(n){return n.on("click",t)}),e=this.fragment.queryAll(".minimize"),e.forEach(function(t){return t.on("click",i)})},n.prototype.attachDrag=function(){var t;return t=this.fragment.query("#titlebar"),this.fragment.on("mousemove",this.drag),t.on("mousedown",function(t){return function(){return t.dragging=!0}}(this)),this.fragment.on("mouseup",function(t){return function(){return t.dragging=!1}}(this))},n.prototype.drag=function(t){var n,i;return null==t&&(t=window.event),this.dragging?(null==this.xDrag&&(this.xDrag=t.screenX),null==this.yDrag&&(this.yDrag=t.screenY),n=t.screenX-this.xDrag+(window.screenLeft-this.xOffset),i=t.screenY-this.yDrag+(window.screenTop-this.yOffset),this.setPos(n,i),this.xDrag=t.screenX,this.yDrag=t.screenY):void 0},n.prototype.attachResize=function(){var t;return t=this.fragment.query("#resize"),this.fragment.on("mousemove",this.resize),t.on("mousedown",function(t){return function(){return t.resizing=!0}}(this)),this.fragment.on("mouseup",function(t){return function(){return t.resizing=!1}}(this))},n.prototype.resize=function(t){var n,i;return null==t&&(t=window.event),this.resizing?(null==this.xResize&&(this.xResize=t.screenX),null==this.yResize&&(this.yResize=t.screenY),n=Math.max(150,t.screenX-this.xResize+window.innerWidth),i=Math.max(150,t.screenY-this.yResize+window.innerHeight),this.setSize(n,i),this.xResize=t.screenX,this.yResize=t.screenY):void 0},n.prototype.updateStatus=function(t){var n;return n=this.fragment.queryAll(".statusicon"),n.forEach(function(n){var i;switch(n.className=n.className.replace(/good|bad|average/g,""),t.config.status){case NANO.INTERACTIVE:i="good";break;case NANO.UPDATE:i="average";break;default:i="bad"}return n.classList.add(i)})},n.prototype.updateLinks=function(t){var n;return n=this.fragment.queryAll(".link"),t.config.status!==NANO.INTERACTIVE?n.forEach(function(t){return t.className="link disabled"}):void 0},n.prototype.attachLinks=function(t){var n;return n=function(){var n,i;return n=this.data("action"),i=JSON.parse(this.data("params")),null!=n&&null!=i&&t.config.status===NANO.INTERACTIVE?nanoui.act(n,i):void 0},this.fragment.queryAll(".link.active").forEach(function(t){return t.on("click",n)})},n}()}.call(this); \ No newline at end of file diff --git a/nano/assets/nanoui.templates.js b/nano/assets/nanoui.templates.js deleted file mode 100644 index 6de8f22b748..00000000000 --- a/nano/assets/nanoui.templates.js +++ /dev/null @@ -1 +0,0 @@ -window.TMPL={},TMPL.airlock_electronics=function(e,s,a){var n='
';n+=e.oneAccess?""+a.link("One Required","unlock","one_access"):""+a.link("All Required","lock","one_access"),n+=""+a.link("Clear","refresh","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","set",{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",null,e.locked?"selected":null)+a.link("Disengaged","unlock","toggleaccess",null,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",{screen:1})),1==e.screen)n+='

Air Controls

',n+=e.atmos_alarm?""+a.link("Area Atmospheric Alarm","close","reset",null,null,"caution"):""+a.link("Area Atmospheric Alarm","hand-stop-o","alarm"),n+='
',n+=3!=e.mode?""+a.link("Panic Siphon","exclamation","mode",{mode:3}):""+a.link("Panic Siphon","close","mode",{mode:1},null,"danger"),n+='
'+a.link("Vent Controls","sign-out","screen",{screen:2})+'
'+a.link("Scrubber Controls","filter","screen",{screen:3})+'
'+a.link("Set Environmental Mode","cog","screen",{screen:4})+'
'+a.link("Set Alarm Threshold","bar-chart","screen",{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","adjust",{id_tag:r.id_tag,command:"power",val:0},null,null):""+a.link("Off","close","adjust",{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","adjust",{id_tag:r.id_tag,command:"incheck",val:r.checks},null,r.incheck?"selected":null)+a.link("External","sign-out","adjust",{id_tag:r.id_tag,command:"excheck",val:r.checks},null,r.excheck?"selected":null)+'
Set Pressure:
'+a.link(a.fixed(r.external),"pencil","adjust",{id_tag:r.id_tag,command:"set_external_pressure"})+a.link("Reset","refresh","adjust",{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","adjust",{id_tag:u.id_tag,command:"power",val:0},null,null):""+a.link("Off","close","adjust",{id_tag:u.id_tag,command:"power",val:1},null,"danger"),n+='
Mode:
',n+=u.scrubbing?""+a.link("Scrubbing","filter","adjust",{id_tag:u.id_tag,command:"scrubbing",val:0},null,null):""+a.link("Siphoning","sign-in","adjust",{id_tag:u.id_tag,command:"scrubbing",val:1},null,"danger"),n+='
Range:
',n+=u.widenet?""+a.link("Extended","expand","adjust",{id_tag:u.id_tag,command:"widenet",val:0},null,"caution"):""+a.link("Normal","compress","adjust",{id_tag:u.id_tag,command:"widenet",val:1},null,null),n+='
Filters:
'+a.link("CO2",u.filter_co2?"check-square-o":"square-o","adjust",{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","adjust",{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","adjust",{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 h=e.modes;if(h)for(var b,c=-1,k=h.length-1;k>c;)b=h[c+=1],n+='
'+a.link(b.name,b.selected?"check-square-o":"square-o","mode",{mode:b.mode},null,b.selected?b.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 w=f.settings;if(w)for(var _,P=-1,y=w.length-1;y>P;)_=w[P+=1],n+="";n+=""}n+="
min2min1max1max2
"+f.name+""+a.link(_.selected>=0?a.round(100*_.selected)/100:"Off",null,"adjust",{command:"set_threshold",env:_.env,"var":_.val})+"
"}return n},TMPL.apc=function(e,s,a){var n='
';n+=e.siliconUser?'
Interface Lock:
'+a.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+a.link("Disengaged","unlock","toggleaccess",null,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",null,e.isOperating?"selected":null)+a.link("Off","close","breaker",null,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","chargemode",null,e.chargeMode?"selected":null)+a.link("Off","close","chargemode",null,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","channel",t.topicParams.auto,1==t.status||3==t.status?"selected":null)+a.link("On","power-off","channel",t.topicParams.on,2==t.status?"selected":null)+a.link("Off","close","channel",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==e.malfStatus?n+=""+a.link("Override Programming","terminal","hack"):2==e.malfStatus?n+=""+a.link("Shunt Core Processes","caret-square-o-down","occupy"):3==e.malfStatus?n+=""+a.link("Return to Main Core","carat-square-o-left","deoccupy"):4==e.malfStatus&&(n+=""+a.link("Shunt Core Processes","caret-square-o-down")),n+="
"),n+='
Cover Lock:
',n+=e.locked&&!e.siliconUser?e.coverLocked?"Engaged":"Disengaged":""+a.link("Engaged","lock","lock",null,e.coverLocked?"selected":null)+a.link("Disengaged","unlock","lock",null,e.coverLocked?null:"selected"),n+="
"},TMPL.atmos_filter=function(e,s,a){var n='
Power:
'+a.link(e.on?"On":"Off",e.on?"power-off":"close","power")+'
Output Pressure:
'+a.link("Set","pencil","pressure",{set:"custom"})+a.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Filter:
'+a.link("Nothing",null,"filter",{mode:-1},-1==e.filter_type?"selected":null)+a.link("Plasma",null,"filter",{mode:0},0==e.filter_type?"selected":null)+a.link("O2",null,"filter",{mode:1},1==e.filter_type?"selected":null)+a.link("N2",null,"filter",{mode:2},2==e.filter_type?"selected":null)+a.link("CO2",null,"filter",{mode:3},3==e.filter_type?"selected":null)+a.link("N2O",null,"filter",{mode:4},4==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-off":"close","power")+'
Output Pressure:
'+a.link("Set","pencil","pressure",{set:"custom"})+a.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Node 1:
'+a.link("","fast-backward","node1",{concentration:"-0.1"},null)+a.link("","backward","node1",{concentration:"-0.01"},null)+a.link("","forward","node1",{concentration:"0.01"},null)+a.link("","fast-forward","node1",{concentration:"0.1"},null)+''+e.node1_concentration+'%
Node 2:
'+a.link("","fast-backward","node2",{concentration:"-0.1"},null)+a.link("","backward","node2",{concentration:"-0.01"},null)+a.link("","forward","node2",{concentration:"0.01"},null)+a.link("","fast-forward","node2",{concentration:"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-off":"close","power")+"
";return n+=e.max_rate?'
Transfer Rate:
'+a.link("Set","pencil","transfer",{set:"custom"})+a.link("Max","plus","transfer",{set:"max"},e.transfer_rate==e.max_rate?"disabled":null)+''+e.transfer_rate+" L/s
":'
Output Pressure:
'+a.link("Set","pencil","pressure",{set:"custom"})+a.link("Max","plus","pressure",{set:"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",null,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","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+a.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+a.link("Set","pencil","pressure",{set:"custom"},null)+a.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+a.link("Open","unlock","valve",null,e.valveOpen?"selected":null)+a.link("Close","lock","valve",null,e.valveOpen?null:"selected")+'

Holding Tank

',n+=e.hasHoldingTank?"
"+a.link("Eject","eject","eject")+'
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",{set: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","dispense",r.commands,null,"gridable");n+='

Beaker

'+a.link("Eject","eject","eject",null,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",{amount:t});if(n+='
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){n+=""+e.beakerCurrentVolume+"/"+e.beakerMaxVolume+" Units
";var v=e.beakerContents;if(v)for(var h,c=-1,b=v.length-1;b>c;)h=v[c+=1],n+=''+h.volume+" units of "+h.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-off":"close","power",null,e.isBeakerLoaded?null:"disabled")+'
Target:
'+a.link(e.targetTemp+"K","pencil","temperature")+'

Beaker

'+a.link("Eject","eject","eject",null,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.hasOccupant&&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:
',n+=e.isOperating?""+a.link("On","power-off","off"):""+a.link("Off","close","on"),n+='
Temperature:
'+e.cellTemperature+' K
Door:
',n+=e.isOpen?""+a.link("Open","unlock","close"):""+a.link("Closed","lock","open"),n+=e.autoEject?""+a.link("Auto","sign-out","autoeject"):""+a.link("Manual","sign-in","autoeject"),n+='

Beaker

'+a.link("Eject","eject","ejectbeaker",null,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","tryinput",null,e.inputAttempt?"selected":null)+a.link("Off","close","tryinput",null,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","input",{set:"min"},e.inputLevel?null:"selected")+a.link("","backward","input",{set:"minus"},e.inputLevel?null:"disabled")+a.link("Set","pencil","input",{set:"custom"},null)+a.link("","forward","input",{set:"plus"},e.inputLevel==e.inputLevelMax?"disabled":null)+a.link("","fast-forward","input",{set:"max"},e.inputLevel==e.inputLevelMax?"selected":null)+'
Available:
'+e.inputAvailable+' W

Output

Charge Mode:
'+a.link("On","power-off","tryoutput",null,e.outputAttempt?"selected":null)+a.link("Off","close","tryoutput",null,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","output",{set:"min"},e.outputLevel?null:"selected")+a.link("","backward","output",{set:"minus"},e.outputLevel?null:"disabled")+a.link("Set","pencil","output",{set:"custom"},null)+a.link("","forward","output",{set:"plus"},e.outputLevel==e.outputLevelMax?"disabled":null)+a.link("","fast-forward","output",{set:"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","control",{cdir:"-15"})+a.link("1°","backward","control",{cdir:"-1"})+a.link("1°","forward","control",{cdir:"1"})+a.link("15°","step-forward","control",{cdir:"15"})+'

Tracking

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

Devices

Search:
'+a.link("Refresh","refresh","refresh")+'
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",null,e.on?"selected":null)+a.link("Off","close","power",null,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","ejectcell"):""+a.link("Install","eject","installcell"),n+="
"),n+='

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(n+='
Adjustment:
'+a.link("","fast-backward","temp",{set:-20},e.targetTemp>e.minTemp?null:"disabled")+a.link("","backward","temp",{set:-5},e.targetTemp>e.minTemp?null:"disabled")+a.link("Set","pencil","temp",{set:"custom"},null)+a.link("","forward","temp",{set:5},e.targetTemp
"),n+='
Operational Mode:
',n+=e.open?""+a.link("Heat","long-arrow-up","mode",{mode:"heat"},"heat"!=e.mode?null:"selected")+a.link("Cool","long-arrow-down","mode",{mode:"cool"},"cool"!=e.mode?null:"selected")+a.link("Auto","arrows-v","mode",{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","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+a.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+a.link("Set","pencil","pressure",{set:"custom"},null)+a.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+a.link("Open","unlock","valve",null,e.maskConnected?e.valveOpen?"selected":null:"disabled")+a.link("Close","lock","valuve",null,e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,s,a){var n="
"+s.title+"
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/package.json b/nano/package.json index c3b0b311b7c..781f0a9d135 100644 --- a/nano/package.json +++ b/nano/package.json @@ -19,11 +19,12 @@ "gulp-postcss": "^6.0.1", "gulp-rename": "^1.2.2", "gulp-replace": "^0.5.4", + "gulp-sourcemaps": "^1.6.0", "gulp-uglify": "^1.5.1", "gulp-util": "^3.0.7", "hexa-color-regex": "^1.0.0", "main-bower-files": "^2.9.0", - "merge-stream": "^1.0.0", + "merge2": "^0.3.6", "pleeease-filters": "^2.0.0", "postcss-color-rgba-fallback": "git+https://github.com/postcss/postcss-color-rgba-fallback", "postcss-colorblind": "^0.4.0", From 487942a09cd79c0c00678025efec8991d0b22094 Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Wed, 16 Dec 2015 12:36:02 -0600 Subject: [PATCH 3/8] Reduce NanoUI size by hosting fonts externally Also resize Cryo to be more compact --- .../components/unary_devices/cryo.dm | 622 +++++++++--------- code/modules/client/asset_cache.dm | 2 - code/modules/nano/nanoui.dm | 3 +- nano/Gulpfile.coffee | 9 +- nano/assets/fontawesome-webfont.eot | Bin 70807 -> 0 bytes nano/assets/fontawesome-webfont.woff2 | Bin 66624 -> 0 bytes nano/assets/nanoui.css | 1 - nano/bower.json | 7 - 8 files changed, 314 insertions(+), 330 deletions(-) delete mode 100644 nano/assets/fontawesome-webfont.eot delete mode 100644 nano/assets/fontawesome-webfont.woff2 diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm index 57785704c36..9674aa921e1 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm @@ -1,312 +1,312 @@ -/obj/machinery/atmospherics/components/unary/cryo_cell - name = "cryo cell" - icon = 'icons/obj/cryogenics.dmi' - icon_state = "cell-off" - density = 1 - anchored = 1 - layer = 4 - - var/on = 0 - var/temperature_archived - var/obj/item/weapon/reagent_containers/glass/beaker = null - var/next_trans = 0 - var/current_heat_capacity = 50 - state_open = 0 - var/efficiency = 1 - var/autoEject = 0 - -/obj/machinery/atmospherics/components/unary/cryo_cell/New() - ..() - initialize_directions = dir - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/cryo_tube(null) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/weapon/stock_parts/console_screen(null) - component_parts += new /obj/item/stack/cable_coil(null, 1) - - -/obj/machinery/atmospherics/components/unary/cryo_cell/construction() - ..(dir,dir) - -/obj/machinery/atmospherics/components/unary/cryo_cell/RefreshParts() - var/C - for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) - C += M.rating - current_heat_capacity = 50 * C - efficiency = C - -/obj/machinery/atmospherics/components/unary/cryo_cell/Destroy() - var/turf/T = loc - T.contents += contents - - if(beaker) - beaker.loc = get_step(loc, SOUTH) // Beaker is carefully ejected from the wreckage of the cryotube. - beaker = null - return ..() - -/obj/machinery/atmospherics/components/unary/cryo_cell/process_atmos() - ..() - var/datum/gas_mixture/air_contents = AIR1 - - if(air_contents) - temperature_archived = air_contents.temperature - heat_gas_contents() - if(abs(temperature_archived-air_contents.temperature) > 1) - update_parents() - -/obj/machinery/atmospherics/components/unary/cryo_cell/process() - ..() - if(occupant && occupant.health >= 100) - on = 0 - playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) - if(autoEject) - open_machine() - - if(!NODE1 || !is_operational()) - return - if(AIR1) - if(on && occupant) - process_occupant() - expel_gas() - - return 1 - -/obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !iscarbon(target)) - return - close_machine(target) - -/obj/machinery/atmospherics/components/unary/cryo_cell/relaymove(mob/user) - return - -/obj/machinery/atmospherics/components/unary/cryo_cell/container_resist() - usr << "You struggle inside the cryotube, kicking the release with your foot." - sleep(150) - if(!src || !usr || (!occupant && !contents.Find(usr))) // Make sure they didn't disappear. - return - open_machine() - -/obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user) - ..() - - var/list/otherstuff = contents - beaker - if(otherstuff.len > 0) - user << "You can just about make out some loose objects floating in the murk:" - for(var/atom/movable/floater in otherstuff) - user << "\icon[floater] [floater.name]" - else - user << "Seems empty." - -/obj/machinery/atmospherics/components/unary/cryo_cell/attack_hand(mob/user) - if(..() | !user) - return - interact(user) - -/obj/machinery/atmospherics/components/unary/cryo_cell/interact(mob/user) - if(panel_open) - return - ui_interact(user) - -/obj/machinery/atmospherics/components/unary/cryo_cell/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, "cryo", name, 520, 600, state = notcontained_state) - ui.open() - -/obj/machinery/atmospherics/components/unary/cryo_cell/get_ui_data() - // this is the data which will be sent to the ui - var/datum/gas_mixture/air_contents = AIR1 - - var/data = list() - data["isOperating"] = on - data["hasOccupant"] = occupant ? 1 : 0 - data["autoEject"] = autoEject - - var/occupantData = list() - if (!occupant) - occupantData["name"] = null - occupantData["stat"] = null - occupantData["health"] = null - occupantData["maxHealth"] = null - occupantData["minHealth"] = null - occupantData["bruteLoss"] = null - occupantData["oxyLoss"] = null - occupantData["toxLoss"] = null - occupantData["fireLoss"] = null - occupantData["bodyTemperature"] = null - else - occupantData["name"] = occupant.name - occupantData["stat"] = occupant.stat - occupantData["health"] = occupant.health - occupantData["maxHealth"] = occupant.maxHealth - occupantData["minHealth"] = config.health_threshold_dead - occupantData["bruteLoss"] = occupant.getBruteLoss() - occupantData["oxyLoss"] = occupant.getOxyLoss() - occupantData["toxLoss"] = occupant.getToxLoss() - occupantData["fireLoss"] = occupant.getFireLoss() - occupantData["bodyTemperature"] = occupant.bodytemperature - data["occupant"] = occupantData - - data["isOpen"] = state_open - data["cellTemperature"] = round(air_contents.temperature) - data["cellTemperatureStatus"] = "good" - if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celcius) - data["cellTemperatureStatus"] = "bad" - else if(air_contents.temperature > 225) - data["cellTemperatureStatus"] = "average" - - data["isBeakerLoaded"] = beaker ? 1 : 0 - var beakerContents[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... - data["beakerContents"] = beakerContents - return data - -/obj/machinery/atmospherics/components/unary/cryo_cell/ui_act(action, params) - if(..()) - return - - switch(action) - if("open") - open_machine() - if("close") - close_machine() - if("autoeject") - autoEject = !autoEject - if("on") - if(!state_open) - on = 1 - if("off") - on = 0 - if("ejectbeaker") - if(beaker) - beaker.loc = get_step(loc, SOUTH) - beaker = null - update_icon() - return 1 - -/obj/machinery/atmospherics/components/unary/cryo_cell/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/reagent_containers/glass)) - if(isrobot(user)) - return - if(beaker) - user << "A beaker is already loaded into [src]!" - return - if(!user.drop_item()) - return - - beaker = I - I.loc = src - user.visible_message("[user] places [I] in [src].", \ - "You place [I] in [src].") - - if(!(on || occupant || state_open)) - if(default_deconstruction_screwdriver(user, "cell-o", "cell-off", I)) - return - - if(default_change_direction_wrench(user, I)) - return - - if(exchange_parts(user, I)) - return - - if(default_pry_open(I)) - return - - default_deconstruction_crowbar(I) - -/obj/machinery/atmospherics/components/unary/cryo_cell/open_machine() - if(!state_open && !panel_open) - on = 0 - layer = 3 - if(occupant) - occupant.bodytemperature = Clamp(occupant.bodytemperature, 261, 360) - ..() - if(beaker) - beaker.loc = src - -/obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/M) - if(state_open && !panel_open) - layer = 4 - ..(M) - return occupant - -/obj/machinery/atmospherics/components/unary/cryo_cell/update_icon() - if(panel_open) - icon_state = "cell-o" - return - if(state_open) - icon_state = "cell-open" - return - if(on && is_operational()) - if(occupant) - icon_state = "cell-occupied" - else - icon_state = "cell-on" - else - icon_state = "cell-off" - -/obj/machinery/atmospherics/components/unary/cryo_cell/power_change() - ..() - update_icon() - -/obj/machinery/atmospherics/components/unary/cryo_cell/proc/process_occupant() - var/datum/gas_mixture/air_contents = AIR1 - if(!on) - return - if(air_contents.total_moles() < 10) - return - if(occupant) - if(occupant.stat == 2 || occupant.health >= 100) //Why waste energy on dead or healthy people - occupant.bodytemperature = T0C - return - occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature) * current_heat_capacity / (current_heat_capacity + air_contents.heat_capacity()) - occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise //TODO: fix someone else's broken promise - duncathan - if(occupant.bodytemperature < T0C) - occupant.sleeping = max(5 / efficiency, (1 / occupant.bodytemperature) * 2000 / efficiency) - occupant.Paralyse(max(5 / efficiency, (1 / occupant.bodytemperature) * 3000 / efficiency)) - if(air_contents.oxygen > 2) - if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) - else - occupant.adjustOxyLoss(-1) - // Severe damage should heal waaay slower without proper chemicals... - if(occupant.bodytemperature < 225) - if(occupant.getToxLoss()) - occupant.adjustToxLoss(max(-efficiency, (-20*(efficiency ** 2)) / occupant.getToxLoss())) - var/heal_brute = occupant.getBruteLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getBruteLoss()) : 0 - var/heal_fire = occupant.getFireLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getFireLoss()) : 0 - occupant.heal_organ_damage(heal_brute, heal_fire) - if(beaker && next_trans == 0) - beaker.reagents.trans_to(occupant, 1, 10) - beaker.reagents.reaction(occupant, VAPOR) - next_trans++ - if(next_trans == 10) - next_trans = 0 - - -/obj/machinery/atmospherics/components/unary/cryo_cell/proc/heat_gas_contents() - var/datum/gas_mixture/air_contents = AIR1 - - if(air_contents.total_moles() < 1) - return - var/air_heat_capacity = air_contents.heat_capacity() - var/combined_heat_capacity = current_heat_capacity + air_heat_capacity - if(combined_heat_capacity > 0) - var/combined_energy = T20C * current_heat_capacity + air_heat_capacity * air_contents.temperature - air_contents.temperature = combined_energy/combined_heat_capacity - -/obj/machinery/atmospherics/components/unary/cryo_cell/proc/expel_gas() - var/datum/gas_mixture/air_contents = AIR1 - - if(air_contents.total_moles() < 1) - return - var/datum/gas_mixture/expel_gas = new - var/remove_amount = air_contents.total_moles() / 100 - expel_gas = air_contents.remove(remove_amount) - expel_gas.temperature = T20C //Lets expel hot gas and see if that helps people not die as they are removed - loc.assume_air(expel_gas) +/obj/machinery/atmospherics/components/unary/cryo_cell + name = "cryo cell" + icon = 'icons/obj/cryogenics.dmi' + icon_state = "cell-off" + density = 1 + anchored = 1 + layer = 4 + + var/on = 0 + var/temperature_archived + var/obj/item/weapon/reagent_containers/glass/beaker = null + var/next_trans = 0 + var/current_heat_capacity = 50 + state_open = 0 + var/efficiency = 1 + var/autoEject = 0 + +/obj/machinery/atmospherics/components/unary/cryo_cell/New() + ..() + initialize_directions = dir + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/cryo_tube(null) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/weapon/stock_parts/console_screen(null) + component_parts += new /obj/item/stack/cable_coil(null, 1) + + +/obj/machinery/atmospherics/components/unary/cryo_cell/construction() + ..(dir,dir) + +/obj/machinery/atmospherics/components/unary/cryo_cell/RefreshParts() + var/C + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + C += M.rating + current_heat_capacity = 50 * C + efficiency = C + +/obj/machinery/atmospherics/components/unary/cryo_cell/Destroy() + var/turf/T = loc + T.contents += contents + + if(beaker) + beaker.loc = get_step(loc, SOUTH) // Beaker is carefully ejected from the wreckage of the cryotube. + beaker = null + return ..() + +/obj/machinery/atmospherics/components/unary/cryo_cell/process_atmos() + ..() + var/datum/gas_mixture/air_contents = AIR1 + + if(air_contents) + temperature_archived = air_contents.temperature + heat_gas_contents() + if(abs(temperature_archived-air_contents.temperature) > 1) + update_parents() + +/obj/machinery/atmospherics/components/unary/cryo_cell/process() + ..() + if(occupant && occupant.health >= 100) + on = 0 + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + if(autoEject) + open_machine() + + if(!NODE1 || !is_operational()) + return + if(AIR1) + if(on && occupant) + process_occupant() + expel_gas() + + return 1 + +/obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/target, mob/user) + if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !iscarbon(target)) + return + close_machine(target) + +/obj/machinery/atmospherics/components/unary/cryo_cell/relaymove(mob/user) + return + +/obj/machinery/atmospherics/components/unary/cryo_cell/container_resist() + usr << "You struggle inside the cryotube, kicking the release with your foot." + sleep(150) + if(!src || !usr || (!occupant && !contents.Find(usr))) // Make sure they didn't disappear. + return + open_machine() + +/obj/machinery/atmospherics/components/unary/cryo_cell/examine(mob/user) + ..() + + var/list/otherstuff = contents - beaker + if(otherstuff.len > 0) + user << "You can just about make out some loose objects floating in the murk:" + for(var/atom/movable/floater in otherstuff) + user << "\icon[floater] [floater.name]" + else + user << "Seems empty." + +/obj/machinery/atmospherics/components/unary/cryo_cell/attack_hand(mob/user) + if(..() | !user) + return + interact(user) + +/obj/machinery/atmospherics/components/unary/cryo_cell/interact(mob/user) + if(panel_open) + return + ui_interact(user) + +/obj/machinery/atmospherics/components/unary/cryo_cell/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, "cryo", name, 410, 550, state = notcontained_state) + ui.open() + +/obj/machinery/atmospherics/components/unary/cryo_cell/get_ui_data() + // this is the data which will be sent to the ui + var/datum/gas_mixture/air_contents = AIR1 + + var/data = list() + data["isOperating"] = on + data["hasOccupant"] = occupant ? 1 : 0 + data["autoEject"] = autoEject + + var/occupantData = list() + if (!occupant) + occupantData["name"] = null + occupantData["stat"] = null + occupantData["health"] = null + occupantData["maxHealth"] = null + occupantData["minHealth"] = null + occupantData["bruteLoss"] = null + occupantData["oxyLoss"] = null + occupantData["toxLoss"] = null + occupantData["fireLoss"] = null + occupantData["bodyTemperature"] = null + else + occupantData["name"] = occupant.name + occupantData["stat"] = occupant.stat + occupantData["health"] = occupant.health + occupantData["maxHealth"] = occupant.maxHealth + occupantData["minHealth"] = config.health_threshold_dead + occupantData["bruteLoss"] = occupant.getBruteLoss() + occupantData["oxyLoss"] = occupant.getOxyLoss() + occupantData["toxLoss"] = occupant.getToxLoss() + occupantData["fireLoss"] = occupant.getFireLoss() + occupantData["bodyTemperature"] = occupant.bodytemperature + data["occupant"] = occupantData + + data["isOpen"] = state_open + data["cellTemperature"] = round(air_contents.temperature) + data["cellTemperatureStatus"] = "good" + if(air_contents.temperature > T0C) // if greater than 273.15 kelvin (0 celcius) + data["cellTemperatureStatus"] = "bad" + else if(air_contents.temperature > 225) + data["cellTemperatureStatus"] = "average" + + data["isBeakerLoaded"] = beaker ? 1 : 0 + var beakerContents[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... + data["beakerContents"] = beakerContents + return data + +/obj/machinery/atmospherics/components/unary/cryo_cell/ui_act(action, params) + if(..()) + return + + switch(action) + if("open") + open_machine() + if("close") + close_machine() + if("autoeject") + autoEject = !autoEject + if("on") + if(!state_open) + on = 1 + if("off") + on = 0 + if("ejectbeaker") + if(beaker) + beaker.loc = get_step(loc, SOUTH) + beaker = null + update_icon() + return 1 + +/obj/machinery/atmospherics/components/unary/cryo_cell/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/reagent_containers/glass)) + if(isrobot(user)) + return + if(beaker) + user << "A beaker is already loaded into [src]!" + return + if(!user.drop_item()) + return + + beaker = I + I.loc = src + user.visible_message("[user] places [I] in [src].", \ + "You place [I] in [src].") + + if(!(on || occupant || state_open)) + if(default_deconstruction_screwdriver(user, "cell-o", "cell-off", I)) + return + + if(default_change_direction_wrench(user, I)) + return + + if(exchange_parts(user, I)) + return + + if(default_pry_open(I)) + return + + default_deconstruction_crowbar(I) + +/obj/machinery/atmospherics/components/unary/cryo_cell/open_machine() + if(!state_open && !panel_open) + on = 0 + layer = 3 + if(occupant) + occupant.bodytemperature = Clamp(occupant.bodytemperature, 261, 360) + ..() + if(beaker) + beaker.loc = src + +/obj/machinery/atmospherics/components/unary/cryo_cell/close_machine(mob/living/carbon/M) + if(state_open && !panel_open) + layer = 4 + ..(M) + return occupant + +/obj/machinery/atmospherics/components/unary/cryo_cell/update_icon() + if(panel_open) + icon_state = "cell-o" + return + if(state_open) + icon_state = "cell-open" + return + if(on && is_operational()) + if(occupant) + icon_state = "cell-occupied" + else + icon_state = "cell-on" + else + icon_state = "cell-off" + +/obj/machinery/atmospherics/components/unary/cryo_cell/power_change() + ..() + update_icon() + +/obj/machinery/atmospherics/components/unary/cryo_cell/proc/process_occupant() + var/datum/gas_mixture/air_contents = AIR1 + if(!on) + return + if(air_contents.total_moles() < 10) + return + if(occupant) + if(occupant.stat == 2 || occupant.health >= 100) //Why waste energy on dead or healthy people + occupant.bodytemperature = T0C + return + occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature) * current_heat_capacity / (current_heat_capacity + air_contents.heat_capacity()) + occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise //TODO: fix someone else's broken promise - duncathan + if(occupant.bodytemperature < T0C) + occupant.sleeping = max(5 / efficiency, (1 / occupant.bodytemperature) * 2000 / efficiency) + occupant.Paralyse(max(5 / efficiency, (1 / occupant.bodytemperature) * 3000 / efficiency)) + if(air_contents.oxygen > 2) + if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) + else + occupant.adjustOxyLoss(-1) + // Severe damage should heal waaay slower without proper chemicals... + if(occupant.bodytemperature < 225) + if(occupant.getToxLoss()) + occupant.adjustToxLoss(max(-efficiency, (-20*(efficiency ** 2)) / occupant.getToxLoss())) + var/heal_brute = occupant.getBruteLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getBruteLoss()) : 0 + var/heal_fire = occupant.getFireLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getFireLoss()) : 0 + occupant.heal_organ_damage(heal_brute, heal_fire) + if(beaker && next_trans == 0) + beaker.reagents.trans_to(occupant, 1, 10) + beaker.reagents.reaction(occupant, VAPOR) + next_trans++ + if(next_trans == 10) + next_trans = 0 + + +/obj/machinery/atmospherics/components/unary/cryo_cell/proc/heat_gas_contents() + var/datum/gas_mixture/air_contents = AIR1 + + if(air_contents.total_moles() < 1) + return + var/air_heat_capacity = air_contents.heat_capacity() + var/combined_heat_capacity = current_heat_capacity + air_heat_capacity + if(combined_heat_capacity > 0) + var/combined_energy = T20C * current_heat_capacity + air_heat_capacity * air_contents.temperature + air_contents.temperature = combined_energy/combined_heat_capacity + +/obj/machinery/atmospherics/components/unary/cryo_cell/proc/expel_gas() + var/datum/gas_mixture/air_contents = AIR1 + + if(air_contents.total_moles() < 1) + return + var/datum/gas_mixture/expel_gas = new + var/remove_amount = air_contents.total_moles() / 100 + expel_gas = air_contents.remove(remove_amount) + expel_gas.temperature = T20C //Lets expel hot gas and see if that helps people not die as they are removed + loc.assume_air(expel_gas) air_update_turf() \ No newline at end of file diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 75392b1154e..630da54c790 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -177,8 +177,6 @@ You can set verify to TRUE if you want send() to sleep until the client has the assets = list( "nanoui.js" = 'nano/assets/nanoui.js', "nanoui.css" = 'nano/assets/nanoui.css', - "fontawesome-webfont.eot" = 'nano/assets/fontawesome-webfont.eot', - "fontawesome-webfont.woff2" = 'nano/assets/fontawesome-webfont.woff2' ) /datum/asset/simple/pda diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index d5a13e5a533..9521320ee93 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -204,8 +204,9 @@ "} var/stylesheet_html = {" - + + "} // Generate JSON. diff --git a/nano/Gulpfile.coffee b/nano/Gulpfile.coffee index 5a817b8d66f..6fc390ddd29 100644 --- a/nano/Gulpfile.coffee +++ b/nano/Gulpfile.coffee @@ -7,7 +7,6 @@ f = # Project Paths input = - fonts: "**/*.{eot,woff2}" images: "images" scripts: "scripts" styles: "styles" @@ -56,7 +55,7 @@ glob = (path) -> "#{path}/*" ### Tasks ### -gulp.task "default", ["fonts", "js", "css"] +gulp.task "default", ["js", "css"] gulp.task "clean", -> @@ -75,11 +74,6 @@ gulp.task "reload", ["default"], -> return console.log err if err -gulp.task "fonts", ["clean"], -> - gulp.src bower input.fonts - .pipe gulp.dest output.dir - - gulp.task "js", ["clean"], -> lib = gulp.src bower "**/*.js" .pipe g.if(f.sourcemaps, g.sourcemaps.init()) @@ -104,7 +98,6 @@ gulp.task "js", ["clean"], -> gulp.task "css", ["clean"], -> lib = gulp.src bower "**/*.css" .pipe g.if(f.sourcemaps, g.sourcemaps.init()) - .pipe g.replace("../fonts/", "") main = gulp.src glob input.styles .pipe g.filter(["*.less", "!_*.less"]) diff --git a/nano/assets/fontawesome-webfont.eot b/nano/assets/fontawesome-webfont.eot deleted file mode 100644 index 9b6afaedc0fd7aaf927a07f82da9c11022251b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70807 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 diff --git a/nano/assets/fontawesome-webfont.woff2 b/nano/assets/fontawesome-webfont.woff2 deleted file mode 100644 index 500e5172534171f678e01f7569d66f9257036a09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66624 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:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:a 2s infinite linear;animation:a 2s infinite linear}.fa-pulse{-webkit-animation:a 1s infinite steps(8);animation:a 1s infinite steps(8)}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"} html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} html{cursor:default}body,html{min-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 .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 .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;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.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}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')}body.nanotrasen{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF000000')}.fancy{display:none}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)} \ No newline at end of file diff --git a/nano/bower.json b/nano/bower.json index 70435e22731..89515a5d0d7 100644 --- a/nano/bower.json +++ b/nano/bower.json @@ -5,7 +5,6 @@ "DOM4": "dom4#~1.5.2", "eddy-js": "~0.7.0", "es5-shim": "~4.3.1", - "font-awesome": "~4.5.0", "IE8": "ie8#~2.9.10", "html5shiv": "~3.7.3", "json3": "~3.3.2", @@ -28,12 +27,6 @@ "DOM4": "*" } }, - "font-awesome": { - "main": [ - "css/font-awesome.css", - "fonts/*" - ] - }, "jsurl": { "dependencies": { "es5-shim": "*" From 425c848078413bfa0aed02e6d2b6cd773b19c311 Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Wed, 16 Dec 2015 13:57:26 -0600 Subject: [PATCH 4/8] Fix some rendering bugs on IE8, fix fancy chrome vis Also reorganize some NanoUI files --- nano/assets/nanoui.css | 2 +- nano/assets/nanoui.js | 3 + nano/scripts/window.coffee | 8 +- nano/styles/{main.less => _chrome.less} | 18 +- nano/styles/_document.less | 75 +-- .../styles/{_interface.less => _section.less} | 0 nano/styles/_util.less | 114 ++--- nano/styles/nanoui.less | 12 + nano/templates/_nanotrasen.dot | 28 +- nano/templates/air_alarm.dot | 466 +++++++++--------- 10 files changed, 367 insertions(+), 359 deletions(-) create mode 100644 nano/assets/nanoui.js rename nano/styles/{main.less => _chrome.less} (84%) rename nano/styles/{_interface.less => _section.less} (100%) create mode 100644 nano/styles/nanoui.less diff --git a/nano/assets/nanoui.css b/nano/assets/nanoui.css index 4500d04065c..5b24401cc8e 100644 --- a/nano/assets/nanoui.css +++ b/nano/assets/nanoui.css @@ -1,2 +1,2 @@ html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} -html{cursor:default}body,html{min-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 .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 .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;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.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}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')}body.nanotrasen{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF000000')}.fancy{display:none}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)} \ No newline at end of file +html{cursor:default}body,html{min-height:100%}body{height:100%;background-color:#202020;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!important}.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}div.loading{background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);padding:8px}div.content{margin:32px 4px 0}div.content.titlebared{padding-top:3px}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{color:#98b0c3;position:absolute;top:6px;right:46px}header.titlebar .minimize:hover{color:#b8c9d6}header.titlebar .close{color:#98b0c3;position:absolute;top:4px;right:12px}header.titlebar .close:hover{color:#b8c9d6}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 30px 30px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);transform:rotate(1turn)}.fancy{display:none!important}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 .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 .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;vertical-align:top}article.notice{margin:8px 2px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}article.notice .label{color:#000}span.link{display:inline-block;box-sizing:border-box;height:22px;margin:1px;padding:2px 3px;white-space:nowrap;border:1px solid #272727;color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none;background-color:#40628a}span.link .fa{margin-right:3px}span.link .iconed{padding-left:3px}span.link.active{background-color:#40628a}span.link.active:hover{background-color:#507bad}span.link.active.selected{background-color:#2f943c}span.link.active.selected:hover{background-color:#3bbb4c}span.link.active.caution{background-color:#9a9d00}span.link.active.caution:hover{background-color:#ccd000}span.link.active.danger{background-color:#9d0808}span.link.active.danger:hover{background-color:#ce0a0a}span.link.inactive{background-color:#999}span.link.inactive.selected{background-color:#2f943c}span.link.inactive.caution{background-color:#9a9d00}span.link.inactive.danger{background-color:#9d0808}span.link.disabled{background-color:#999}span.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}body.generic{background:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF202020')}body.nanotrasen{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1' viewBox='0 0 425 200' opacity='.25'%3E%3Cpath d='M178.004.04H106.8a6.76 6.026 0 0 0-6.76 6.024v187.872a6.76 6.026 0 0 0 6.76 6.025h53.107a6.76 6.026 0 0 0 6.762-6.024V92.392l72.215 104.7a6.76 6.026 0 0 0 5.76 2.87H318.2a6.76 6.026 0 0 0 6.76-6.026V6.064A6.76 6.026 0 0 0 318.2.04h-54.717a6.76 6.026 0 0 0-6.76 6.024v102.62L183.762 2.91a6.76 6.026 0 0 0-5.76-2.87zM4.845 22.11A13.412 12.502 0 0 1 13.478.04h66.118a5.365 5 0 0 1 5.365 5v79.88zM420.155 177.89a13.412 12.502 0 0 1-8.633 22.07h-66.118a5.365 5 0 0 1-5.365-5v-79.88z'/%3E%3C/svg%3E") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020) no-repeat fixed center/100% 100%;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#FF2A2A2A',EndColorStr='#FF000000')} \ No newline at end of file diff --git a/nano/assets/nanoui.js b/nano/assets/nanoui.js new file mode 100644 index 00000000000..07f2d60d43b --- /dev/null +++ b/nano/assets/nanoui.js @@ -0,0 +1,3 @@ +!function(e){function t(e,t,n,a){for(var s,i=n.slice(),o=r(t,e),l=0,c=i.length;c>l&&(handler=i[l],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(o):handler.call(e,o),!o.stoppedImmediatePropagation);l++);return s=!o.stoppedPropagation,a&&s&&e.parentNode?e.parentNode.dispatchEvent(o):!o.defaultPrevented}function n(e,t){return{configurable:!0,get:e,set:t}}function a(e,t,a){var r=b(t||e,a);g(e,"textContent",n(function(){return r.get.call(this)},function(e){r.set.call(this,e)}))}function r(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}function s(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function i(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function o(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function l(e){!p&&E.test(document.readyState)&&(p=!p,document.detachEvent(f,l),e=document.createEvent("Event"),e.initEvent(h,!0,!0),document.dispatchEvent(e))}function c(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function u(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var d=!0,p=!1,f="onreadystatechange",h="DOMContentLoaded",v="__IE8__"+Math.random(),g=Object.defineProperty||function(e,t,n){e[t]=n.value},m=Object.defineProperties||function(t,n){for(var a in n)if(y.call(n,a))try{g(t,a,n[a])}catch(r){e.console&&console.log(a+" failed on object:",t,r.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,w=e.Element.prototype,k=e.Text.prototype,T=/^[a-z]+$/,E=/loaded|complete/,S={},x=document.createElement("div"),O=document.documentElement,C=O.removeAttribute,P=O.setAttribute;a(e.HTMLCommentElement.prototype,w,"nodeValue"),a(e.HTMLScriptElement.prototype,null,"text"),a(k,null,"nodeValue"),a(e.HTMLTitleElement.prototype,null,"text"),g(e.HTMLStyleElement.prototype,"textContent",function(e){return n(function(){return e.get.call(this.styleSheet)},function(t){e.set.call(this.styleSheet,t)})}(b(e.CSSStyleSheet.prototype,"cssText"))),m(w,{textContent:{get:i,set:c},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;n>t;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:{value:function(e,n,a){var r,i,l=this,c="on"+e,d=l[v]||g(l,v,{value:{}})[v],p=d[c]||(d[c]={}),f=p.h||(p.h=[]);if(!y.call(p,"w")){if(p.w=function(e){return e[v]||t(l,u(l,e),f,!1)},!y.call(S,c))if(T.test(e)){try{r=document.createEventObject(),r[v]=!0,9!=l.nodeType&&null==l.parentNode&&x.appendChild(l),(i=l.getAttribute(c))&&C.call(l,c),l.fireEvent(c,r),S[c]=!0}catch(r){for(S[c]=!1;x.hasChildNodes();)x.removeChild(x.firstChild)}null!=i&&P.call(l,c,i)}else S[c]=!1;(p.n=S[c])&&l.attachEvent(c,p.w)}s(f,n)<0&&f[a?"unshift":"push"](n),"input"===e&&l.attachEvent("onkeyup",o)}},dispatchEvent:{value:function(e){var n,a=this,r="on"+e.type,s=a[v],i=s&&s[r],o=!!i;return e.target||(e.target=a),o?i.n?a.fireEvent(r,e):t(a,e,i.h,!0):(n=a.parentNode)?n.dispatchEvent(e):!0,!e.defaultPrevented}},removeEventListener:{value:function(e,t,n){var a=this,r="on"+e,i=a[v],o=i&&i[r],l=o&&o.h,c=l?s(l,t):-1;c>-1&&l.splice(c,1)}}}),m(k,{addEventListener:{value:w.addEventListener},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener}}),m(e.XMLHttpRequest.prototype,{addEventListener:{value:function(e,t,n){var a=this,r="on"+e,i=a[v]||g(a,v,{value:{}})[v],o=i[r]||(i[r]={}),l=o.h||(o.h=[]);s(l,t)<0&&(a[r]||(a[r]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),a.dispatchEvent(t)}),l[n?"unshift":"push"](t))}},dispatchEvent:{value:function(e){var n=this,a="on"+e.type,r=n[v],s=r&&r[a],i=!!s;return i&&(s.n?n.fireEvent(a,e):t(n,e,s.h,!0))}},removeEventListener:{value:w.removeEventListener}}),m(e.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),m(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?i.call(this):null},set:function(e){11===this.nodeType&&c.call(this,e)}},addEventListener:{value:function(t,n,a){var r=this;w.addEventListener.call(r,t,n,a),d&&t===h&&!E.test(r.readyState)&&(d=!1,r.attachEvent(f,l),e==top&&!function s(e){try{r.documentElement.doScroll("left"),l()}catch(t){setTimeout(s,50)}}())}},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener},createEvent:{value:function(e){var t;if("Event"!==e)throw new Error("unsupported "+e);return t=document.createEventObject(),t.timeStamp=(new Date).getTime(),t}}}),m(e.Window.prototype,{getComputedStyle:{value:function(){function e(e){this._=e}function t(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,s=function(e,t){return t.toUpperCase()};return e.prototype.getPropertyValue=function(e){var t,i,o,l=this._,c=l.style,u=l.currentStyle,d=l.runtimeStyle;return e=("float"===e?"style-float":e).replace(r,s),t=u?u[e]:c[e],n.test(t)&&!a.test(e)&&(i=c.left,o=d&&d.left,o&&(d.left=u.left),c.left="fontSize"===e?"1em":t,t=c.pixelLeft+"px",c.left=i,o&&(d.left=o)),null==t?t:t+""||"auto"},t.prototype.getPropertyValue=function(){return null},function(n,a){return a?new t(n):new e(n)}}()},addEventListener:{value:function(n,a,r){var i,o=e,l="on"+n;o[l]||(o[l]=function(e){return t(o,u(o,e),i,!1)}),i=o[l][v]||(o[l][v]=[]),s(i,a)<0&&i[r?"unshift":"push"](a)}},dispatchEvent:{value:function(t){var n=e["on"+t.type];return n?n.call(e,t)!==!1&&!t.defaultPrevented:!0}},removeEventListener:{value:function(t,n,a){var r="on"+t,i=(e[r]||Object)[v],o=i?s(i,n):-1;o>-1&&i.splice(o,1)}}}),function(e,t,n){for(n=0;n0||-1)*Math.floor(Math.abs(t))),t},ToPrimitive:function(t){var n,a,r;if(N(t))return t;if(a=t.valueOf,e(a)&&(n=a.call(t),N(n)))return n;if(r=t.toString,e(r)&&(n=r.call(t),N(n)))return n;throw new TypeError},ToObject:function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return a(e)},ToUint32:function(e){return e>>>0}},I=function(){};A(s,{bind:function(t){var n=this;if(!e(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var r,s=u.call(arguments,1),i=function(){if(this instanceof r){var e=n.apply(this,h.call(s,u.call(arguments)));return a(e)===e?e:this}return n.apply(t,h.call(s,u.call(arguments)))},o=g(0,n.length-s.length),l=[],c=0;o>c;c++)p.call(l,"$"+c);return r=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this, arguments); }")(i),n.prototype&&(I.prototype=n.prototype,r.prototype=new I,I.prototype=null),r}});var R=v.bind(r.hasOwnProperty),U=v.bind(r.toString),z=v.bind(o.slice),q=v.bind(o.split),F=v.bind(o.indexOf),B=v.bind(p),H=t.isArray||function(e){return"[object Array]"===U(e)},$=1!==[].unshift(0);A(n,{unshift:function(){return f.apply(this,arguments),this.length}},$),A(t,{isArray:H});var J=a("a"),V="a"!==J[0]||!(0 in J),W=function(e){var t=!0,n=!0;return e&&(e.call("foo",function(e,n,a){"object"!=typeof a&&(t=!1)}),e.call([1],function(){"use strict";n="string"==typeof this},"x")),!!e&&t&&n};A(n,{forEach:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=-1,i=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++s1&&(a=arguments[1]),!e(n))throw new TypeError("Array.prototype.map callback must be a function");for(var l=0;i>l;l++)l in s&&("undefined"==typeof a?o[l]=n(s[l],l,r):o[l]=n.call(a,s[l],l,r));return o}},!W(n.map)),A(n,{filter:function(t){var n,a,r=D.ToObject(this),s=V&&P(this)?q(this,""):r,i=D.ToUint32(s.length),o=[];if(arguments.length>1&&(a=arguments[1]),!e(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var l=0;i>l;l++)l in s&&(n=s[l],("undefined"==typeof a?t(n,l,r):t.call(a,n,l,r))&&B(o,n));return o}},!W(n.filter)),A(n,{every:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.every callback must be a function");for(var i=0;s>i;i++)if(i in r&&!("undefined"==typeof n?t(r[i],i,a):t.call(n,r[i],i,a)))return!1;return!0}},!W(n.every)),A(n,{some:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.some callback must be a function");for(var i=0;s>i;i++)if(i in r&&("undefined"==typeof n?t(r[i],i,a):t.call(n,r[i],i,a)))return!0;return!1}},!W(n.some));var Z=!1;n.reduce&&(Z="object"==typeof n.reduce.call("es5",function(e,t,n,a){return a})),A(n,{reduce:function(t){var n=D.ToObject(this),a=V&&P(this)?q(this,""):n,r=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===r&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var s,i=0;if(arguments.length>=2)s=arguments[1];else for(;;){if(i in a){s=a[i++];break}if(++i>=r)throw new TypeError("reduce of empty array with no initial value")}for(;r>i;i++)i in a&&(s=t(s,a[i],i,n));return s}},!Z);var X=!1;n.reduceRight&&(X="object"==typeof n.reduceRight.call("es5",function(e,t,n,a){return a})),A(n,{reduceRight:function(t){var n=D.ToObject(this),a=V&&P(this)?q(this,""):n,r=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===r&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var s,i=r-1;if(arguments.length>=2)s=arguments[1];else for(;;){if(i in a){s=a[i--];break}if(--i<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>i)return s;do i in a&&(s=t(s,a[i],i,n));while(i--);return s}},!X);var Y=n.indexOf&&-1!==[0,1].indexOf(1,2);A(n,{indexOf:function(e){var t=V&&P(this)?q(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=0;for(arguments.length>1&&(a=D.ToInteger(arguments[1])),a=a>=0?a:g(0,n+a);n>a;a++)if(a in t&&t[a]===e)return a;return-1}},Y);var G=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);A(n,{lastIndexOf:function(e){var t=V&&P(this)?q(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=n-1;for(arguments.length>1&&(a=m(a,D.ToInteger(arguments[1]))),a=a>=0?a:n-Math.abs(a);a>=0;a--)if(a in t&&e===t[a])return a;return-1}},G);var K=function(){var e=[1,2],t=e.splice();return 2===e.length&&H(t)&&0===t.length}();A(n,{splice:function(e,t){return 0===arguments.length?[]:d.apply(this,arguments)}},!K);var Q=function(){var e={};return n.splice.call(e,0,0,1),1===e.length}();A(n,{splice:function(e,t){if(0===arguments.length)return[];var n=arguments;return this.length=g(D.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof t&&(n=u.call(arguments),n.length<2?B(n,this.length-e):n[1]=D.ToInteger(t)),d.apply(this,n)}},!Q);var ee=function(){var e=new t(1e5);return e[8]="x",e.splice(1,1),7===e.indexOf("x")}(),te=function(){var e=256,t=[];return t[e]="a",t.splice(e+1,0,"b"),"a"===t[e]}();A(n,{splice:function(e,t){for(var n,a=D.ToObject(this),r=[],s=D.ToUint32(a.length),o=D.ToInteger(e),l=0>o?g(s+o,0):m(o,s),c=m(g(D.ToInteger(t),0),s-l),d=0;c>d;)n=i(l+d),R(a,n)&&(r[d]=a[n]),d+=1;var p,f=u.call(arguments,2),h=f.length;if(c>h){for(d=l;s-c>d;)n=i(d+c),p=i(d+h),R(a,n)?a[p]=a[n]:delete a[p],d+=1;for(d=s;d>s-c+h;)delete a[d-1],d-=1}else if(h>c)for(d=s-c;d>l;)n=i(d+c-1),p=i(d+h-1),R(a,n)?a[p]=a[n]:delete a[p],d-=1;d=l;for(var v=0;v=0&&!H(t)&&e(t.callee)},be=ge(arguments)?ge:me;A(a,{keys:function(t){var n=e(t),a=be(t),r=null!==t&&"object"==typeof t,s=r&&P(t);if(!r&&!n&&!a)throw new TypeError("Object.keys called on a non-object");var o=[],l=le&&n;if(s&&ce||a)for(var c=0;cp;p++){var f=he[p];d&&"constructor"===f||!R(t,f)||B(o,f)}return o}});var ye=a.keys&&function(){return 2===a.keys(arguments).length}(1,2),we=a.keys&&function(){var e=a.keys(arguments);return 1!==arguments.length||1!==e.length||1!==e[0]}(1),ke=a.keys;A(a,{keys:function(e){return ke(be(e)?u.call(e):e)}},!ye||we);var Te=-621987552e5,Ee="-000001",Se=Date.prototype.toISOString&&-1===new Date(Te).toISOString().indexOf(Ee),xe=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();A(Date.prototype,{toISOString:function(){var e,t,n,a,r;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(a=this.getUTCFullYear(),r=this.getUTCMonth(),a+=Math.floor(r/12),r=(r%12+12)%12,e=[r+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],a=(0>a?"-":a>9999?"+":"")+z("00000"+Math.abs(a),a>=0&&9999>=a?-4:-6),t=e.length;t--;)n=e[t],10>n&&(e[t]="0"+n);return a+"-"+u.call(e,0,2).join("-")+"T"+u.call(e,2).join(":")+"."+z("000"+this.getUTCMilliseconds(),-3)+"Z"}},Se||xe);var Oe=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Te).toJSON().indexOf(Ee)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(e){return!1}}();Oe||(Date.prototype.toJSON=function(t){var n=a(this),r=D.ToPrimitive(n);if("number"==typeof r&&!isFinite(r))return null;var s=n.toISOString;if(!e(s))throw new TypeError("toISOString property is not callable");return s.call(n)});var Ce=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Pe=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),_e=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(_e||Pe||!Ce){var je=Math.pow(2,31)-1,Le=(Math.floor(je/1e3),M(new Date(1970,0,1,0,0,0,je+1).getTime()));Date=function(e){var t=function(n,a,r,s,o,l,c){var u,d=arguments.length;if(this instanceof e){var p=l,f=c;if(Le&&d>=7&&c>je){var h=Math.floor(c/je)*je,v=Math.floor(h/1e3);p+=v,f-=1e3*v}u=1===d&&i(n)===n?new e(t.parse(n)):d>=7?new e(n,a,r,s,o,p,f):d>=6?new e(n,a,r,s,o,p):d>=5?new e(n,a,r,s,o):d>=4?new e(n,a,r,s):d>=3?new e(n,a,r):d>=2?new e(n,a):d>=1?new e(n):new e}else u=e.apply(this,arguments);return N(u)||A(u,{constructor:t},!0),u},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),a=[0,31,59,90,120,151,181,212,243,273,304,334,365],r=function(e,t){var n=t>1?1:0;return a[t]+Math.floor((e-1969+n)/4)-Math.floor((e-1901+n)/100)+Math.floor((e-1601+n)/400)+365*(e-1970)},s=function(t){var n=0,a=t;if(Le&&a>je){var r=Math.floor(a/je)*je,s=Math.floor(r/1e3);n+=s,a-=1e3*s}return l(new e(1970,0,1,0,0,n,a))};for(var o in e)R(e,o)&&(t[o]=e[o]);A(t,{now:e.now,UTC:e.UTC},!0),t.prototype=e.prototype,A(t.prototype,{constructor:t},!0);var c=function(t){var a=n.exec(t);if(a){var i,o=l(a[1]),c=l(a[2]||1)-1,u=l(a[3]||1)-1,d=l(a[4]||0),p=l(a[5]||0),f=l(a[6]||0),h=Math.floor(1e3*l(a[7]||0)),v=Boolean(a[4]&&!a[8]),g="-"===a[9]?1:-1,m=l(a[10]||0),b=l(a[11]||0),y=p>0||f>0||h>0;return(y?24:25)>d&&60>p&&60>f&&1e3>h&&c>-1&&12>c&&24>m&&60>b&&u>-1&&u=-864e13&&864e13>=i)?i:NaN}return e.parse.apply(this,arguments)};return A(t,{parse:c}),t}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var Ae=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),Ne={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(e,t){for(var n=-1,a=t;++n=0;)n+=Ne.data[t],Ne.data[t]=Math.floor(n/e),n=n%e*Ne.base},numToString:function(){for(var e=Ne.size,t="";--e>=0;)if(""!==t||0===e||0!==Ne.data[e]){var n=i(Ne.data[e]);""===t?t=n:t+=z("0000000",0,7-n.length)+n}return t},pow:function Ye(e,t,n){return 0===t?n:t%2===1?Ye(e,t-1,n*e):Ye(e*e,t/2,n)},log:function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}},Me=function(e){var t,n,a,r,s,o,c,u;if(t=l(e),t=M(t)?0:Math.floor(t),0>t||t>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=l(this),M(n))return"NaN";if(-1e21>=n||n>=1e21)return i(n);if(a="",0>n&&(a="-",n=-n),r="0",n>1e-21)if(s=Ne.log(n*Ne.pow(2,69,1))-69,o=0>s?n*Ne.pow(2,-s,1):n/Ne.pow(2,s,1),o*=4503599627370496,s=52-s,s>0){for(Ne.multiply(0,o),c=t;c>=7;)Ne.multiply(1e7,0),c-=7;for(Ne.multiply(Ne.pow(10,c,1),0),c=s-1;c>=23;)Ne.divide(1<<23),c-=23;Ne.divide(1<0?(u=r.length,r=t>=u?a+z("0.0000000000000000000",0,t-u+2)+r:a+z(r,0,u-t)+"."+z(r,u-t)):r=a+r,r};A(c,{toFixed:Me},Ae);var De=function(){try{return"1"===1..toPrecision(void 0)}catch(e){return!0}}(),Ie=c.toPrecision;A(c,{toPrecision:function(e){return"undefined"==typeof e?Ie.call(this):Ie.call(this,e)}},De),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var e="undefined"==typeof/()??/.exec("")[1],t=Math.pow(2,32)-1;o.split=function(n,a){var r=this;if("undefined"==typeof n&&0===a)return[];if(!S(n))return q(this,n,a);var s,i,o,l,c=[],d=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),f=0,h=new RegExp(n.source,d+"g");r+="",e||(s=new RegExp("^"+h.source+"$(?!\\s)",d));var v="undefined"==typeof a?t:D.ToUint32(a);for(i=h.exec(r);i&&(o=i.index+i[0].length,!(o>f&&(B(c,z(r,f,i.index)),!e&&i.length>1&&i[0].replace(s,function(){for(var e=1;e1&&i.index=v)));)h.lastIndex===i.index&&h.lastIndex++,i=h.exec(r);return f===r.length?(l||!h.test(""))&&B(c,""):B(c,z(r,f)),c.length>v?z(c,0,v):c}}():"0".split(void 0,0).length&&(o.split=function(e,t){return"undefined"==typeof e&&0===t?[]:q(this,e,t)});var Re=o.replace,Ue=function(){var e=[];return"x".replace(/x(.)?/g,function(t,n){B(e,n)}),1===e.length&&"undefined"==typeof e[0]}();Ue||(o.replace=function(t,n){var a=e(n),r=S(t)&&/\)[*?]/.test(t.source);if(a&&r){var s=function(e){var a=arguments.length,r=t.lastIndex;t.lastIndex=0;var s=t.exec(e)||[];return t.lastIndex=r,B(s,arguments[a-2],arguments[a-1]),n.apply(this,s)};return Re.call(this,t,s)}return Re.call(this,t,n)});var ze=o.substr,qe="".substr&&"b"!=="0b".substr(-1);A(o,{substr:function(e,t){var n=e;return 0>e&&(n=g(this.length+e,0)),ze.call(this,n,t)}},qe);var Fe=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",Be="​",He="["+Fe+"]",$e=new RegExp("^"+He+He+"*"),Je=new RegExp(He+He+"*$"),Ve=o.trim&&(Fe.trim()||!Be.trim());A(o,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return i(this).replace($e,"").replace(Je,"")}},Ve);var We=o.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);A(o,{lastIndexOf:function(e){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");for(var t=i(this),n=i(e),a=arguments.length>1?l(arguments[1]):NaN,r=M(a)?1/0:D.ToInteger(a),s=m(g(r,0),t.length),o=n.length,c=s+o;c>0;){c=g(0,c-o);var u=F(z(t,c,s+o),n);if(-1!==u)return c+u}return-1}},We);var Ze=o.lastIndexOf;if(A(o,{lastIndexOf:function(e){return Ze.apply(this,arguments)}},1!==o.lastIndexOf.length),(8!==parseInt(Fe+"08")||22!==parseInt(Fe+"0x16"))&&(parseInt=function(e){var t=/^[\-+]?0[xX]/;return function(n,a){var r=i(n).trim(),s=l(a)||(t.test(r)?16:10);return e(r,s)}}(parseInt)),"RangeError: test"!==String(new RangeError("test"))){var Xe=(Error.prototype.toString,function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");var e=this.name;"undefined"==typeof e?e="Error":"string"!=typeof e&&(e=i(e));var t=this.message;return"undefined"==typeof t?t="":"string"!=typeof t&&(t=i(t)),e?t?e+": "+t:e:t});Error.prototype.toString=Xe}}),function(e,t){function n(e,t){var n=e.createElement("p"),a=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function a(){var e=y.elements;return"string"==typeof e?e.split(" "):e}function r(e,t){var n=y.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),y.elements=n+" "+e,c(t)}function s(e){var t=b[e[g]];return t||(t={},m++,e[g]=m,b[m]=t),t}function i(e,n,a){if(n||(n=t),d)return n.createElement(e);a||(a=s(n));var r;return r=a.cache[e]?a.cache[e].cloneNode():v.test(e)?(a.cache[e]=a.createElem(e)).cloneNode():a.createElem(e),!r.canHaveChildren||h.test(e)||r.tagUrn?r:a.frag.appendChild(r)}function o(e,n){if(e||(e=t),d)return e.createDocumentFragment();n=n||s(e);for(var r=n.frag.cloneNode(),i=0,o=a(),l=o.length;l>i;i++)r.createElement(o[i]);return r}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return y.shivMethods?i(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+a().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(y,t.frag)}function c(e){e||(e=t);var a=s(e);return!y.shivCSS||u||a.hasCSS||(a.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),d||l(e,a),e}var u,d,p="3.7.3",f=e.html5||{},h=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",m=0,b={};!function(){try{var e=t.createElement("a");e.innerHTML="",u="hidden"in e,d=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){u=!0,d=!0}}();var y={elements:f.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:p,shivCSS:f.shivCSS!==!1,supportsUnknownElements:d,shivMethods:f.shivMethods!==!1,type:"default",shivDocument:c,createElement:i,createDocumentFragment:o,addElements:r};e.html5=y,c(t),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document),function(){function e(t,a){function s(e){if(s[e]!==g)return s[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=s("json-stringify")&&s("json-parse");else{var n,r='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var l=a.stringify,u="function"==typeof l&&y;if(u){(n=function(){return 1}).toJSON=n;try{u="0"===l(0)&&"0"===l(new i)&&'""'==l(new o)&&l(b)===g&&l(g)===g&&l()===g&&"1"===l(n)&&"[1]"==l([n])&&"[null]"==l([g])&&"null"==l(null)&&"[null,null,null]"==l([g,b,null])&&l({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==r&&"1"===l(null,n)&&"[\n 1,\n 2\n]"==l([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==l(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==l(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==l(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==l(new c(-1))}catch(d){u=!1}}t=u}if("json-parse"==e){var p=a.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(r);var f=5==n.a.length&&1===n.a[0];if(f){try{f=!p('" "')}catch(d){}if(f)try{f=1!==p("01")}catch(d){}if(f)try{f=1!==p("1.")}catch(d){}}}}catch(d){f=!1}t=f}}return s[e]=!!t}t||(t=r.Object()),a||(a=r.Object());var i=t.Number||r.Number,o=t.String||r.String,l=t.Object||r.Object,c=t.Date||r.Date,u=t.SyntaxError||r.SyntaxError,d=t.TypeError||r.TypeError,p=t.Math||r.Math,f=t.JSON||r.JSON;"object"==typeof f&&f&&(a.stringify=f.stringify,a.parse=f.parse);var h,v,g,m=l.prototype,b=m.toString,y=new c(-0xc782b5b800cec);try{y=-109252==y.getUTCFullYear()&&0===y.getUTCMonth()&&1===y.getUTCDate()&&10==y.getUTCHours()&&37==y.getUTCMinutes()&&6==y.getUTCSeconds()&&708==y.getUTCMilliseconds()}catch(w){}if(!s("json")){var k="[object Function]",T="[object Date]",E="[object Number]",S="[object String]",x="[object Array]",O="[object Boolean]",C=s("bug-string-char-index");if(!y)var P=p.floor,_=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return _[t]+365*(e-1970)+P((e-1969+(t=+(t>1)))/4)-P((e-1901+t)/100)+P((e-1601+t)/400)};if((h=m.hasOwnProperty)||(h=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=b?h=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,h=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,h.call(this,e)}),v=function(e,t){var a,r,s,i=0;(a=function(){this.valueOf=0}).prototype.valueOf=0,r=new a;for(s in r)h.call(r,s)&&i++;return a=r=null,i?v=2==i?function(e,t){var n,a={},r=b.call(e)==k;for(n in e)r&&"prototype"==n||h.call(a,n)||!(a[n]=1)||!h.call(e,n)||t(n)}:function(e,t){var n,a,r=b.call(e)==k;for(n in e)r&&"prototype"==n||!h.call(e,n)||(a="constructor"===n)||t(n);(a||h.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],v=function(e,t){var a,s,i=b.call(e)==k,o=!i&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||h;for(a in e)i&&"prototype"==a||!o.call(e,a)||t(a);for(s=r.length;a=r[--s];o.call(e,a)&&t(a));}),v(e,t)},!s("json-stringify")){var L={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},A="000000",N=function(e,t){return(A+(t||0)).slice(-e)},M="\\u00",D=function(e){for(var t='"',n=0,a=e.length,r=!C||a>10,s=r&&(C?e.split(""):e);a>n;n++){var i=e.charCodeAt(n);switch(i){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=L[i];break;default:if(32>i){t+=M+N(2,i.toString(16));break}t+=r?s[n]:e.charAt(n)}}return t+'"'},I=function(e,t,n,a,r,s,i){var o,l,c,u,p,f,m,y,w,k,C,_,L,A,M,R;try{o=t[e]}catch(U){}if("object"==typeof o&&o)if(l=b.call(o),l!=T||h.call(o,"toJSON"))"function"==typeof o.toJSON&&(l!=E&&l!=S&&l!=x||h.call(o,"toJSON"))&&(o=o.toJSON(e));else if(o>-1/0&&1/0>o){if(j){for(p=P(o/864e5),c=P(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(u=P((p-j(c,0))/30.42);j(c,u+1)<=p;u++);p=1+p-j(c,u),f=(o%864e5+864e5)%864e5,m=P(f/36e5)%24,y=P(f/6e4)%60,w=P(f/1e3)%60,k=f%1e3}else c=o.getUTCFullYear(),u=o.getUTCMonth(),p=o.getUTCDate(),m=o.getUTCHours(),y=o.getUTCMinutes(),w=o.getUTCSeconds(),k=o.getUTCMilliseconds();o=(0>=c||c>=1e4?(0>c?"-":"+")+N(6,0>c?-c:c):N(4,c))+"-"+N(2,u+1)+"-"+N(2,p)+"T"+N(2,m)+":"+N(2,y)+":"+N(2,w)+"."+N(3,k)+"Z"}else o=null;if(n&&(o=n.call(t,e,o)),null===o)return"null";if(l=b.call(o),l==O)return""+o;if(l==E)return o>-1/0&&1/0>o?""+o:"null";if(l==S)return D(""+o);if("object"==typeof o){for(A=i.length;A--;)if(i[A]===o)throw d();if(i.push(o),C=[], +M=s,s+=r,l==x){for(L=0,A=o.length;A>L;L++)_=I(L,o,n,a,r,s,i),C.push(_===g?"null":_);R=C.length?r?"[\n"+s+C.join(",\n"+s)+"\n"+M+"]":"["+C.join(",")+"]":"[]"}else v(a||o,function(e){var t=I(e,o,n,a,r,s,i);t!==g&&C.push(D(e)+":"+(r?" ":"")+t)}),R=C.length?r?"{\n"+s+C.join(",\n"+s)+"\n"+M+"}":"{"+C.join(",")+"}":"{}";return i.pop(),R}};a.stringify=function(e,t,a){var r,s,i,o;if(n[typeof t]&&t)if((o=b.call(t))==k)s=t;else if(o==x){i={};for(var l,c=0,u=t.length;u>c;l=t[c++],o=b.call(l),(o==S||o==E)&&(i[l]=1));}if(a)if((o=b.call(a))==E){if((a-=a%1)>0)for(r="",a>10&&(a=10);r.lengthR;)switch(r=s.charCodeAt(R)){case 9:case 10:case 13:case 32:R++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=C?s.charAt(R):s[R],R++,e;case 34:for(e="@",R++;i>R;)if(r=s.charCodeAt(R),32>r)F();else if(92==r)switch(r=s.charCodeAt(++R)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=q[r],R++;break;case 117:for(t=++R,n=R+4;n>R;R++)r=s.charCodeAt(R),r>=48&&57>=r||r>=97&&102>=r||r>=65&&70>=r||F();e+=z("0x"+s.slice(t,R));break;default:F()}else{if(34==r)break;for(r=s.charCodeAt(R),t=R;r>=32&&92!=r&&34!=r;)r=s.charCodeAt(++R);e+=s.slice(t,R)}if(34==s.charCodeAt(R))return R++,e;F();default:if(t=R,45==r&&(a=!0,r=s.charCodeAt(++R)),r>=48&&57>=r){for(48==r&&(r=s.charCodeAt(R+1),r>=48&&57>=r)&&F(),a=!1;i>R&&(r=s.charCodeAt(R),r>=48&&57>=r);R++);if(46==s.charCodeAt(R)){for(n=++R;i>n&&(r=s.charCodeAt(n),r>=48&&57>=r);n++);n==R&&F(),R=n}if(r=s.charCodeAt(R),101==r||69==r){for(r=s.charCodeAt(++R),(43==r||45==r)&&R++,n=R;i>n&&(r=s.charCodeAt(n),r>=48&&57>=r);n++);n==R&&F(),R=n}return+s.slice(t,R)}if(a&&F(),"true"==s.slice(R,R+4))return R+=4,!0;if("false"==s.slice(R,R+5))return R+=5,!1;if("null"==s.slice(R,R+4))return R+=4,null;F()}return"$"},H=function(e){var t,n;if("$"==e&&F(),"string"==typeof e){if("@"==(C?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=B(),"]"!=e;n||(n=!0))n&&(","==e?(e=B(),"]"==e&&F()):F()),","==e&&F(),t.push(H(e));return t}if("{"==e){for(t={};e=B(),"}"!=e;n||(n=!0))n&&(","==e?(e=B(),"}"==e&&F()):F()),(","==e||"string"!=typeof e||"@"!=(C?e.charAt(0):e[0])||":"!=B())&&F(),t[e.slice(1)]=H(B());return t}F()}return e},$=function(e,t,n){var a=J(e,t,n);a===g?delete e[t]:e[t]=a},J=function(e,t,n){var a,r=e[t];if("object"==typeof r&&r)if(b.call(r)==x)for(a=r.length;a--;)$(r,a,n);else v(r,function(e){$(r,e,n)});return n.call(e,t,r)};a.parse=function(e,t){var n,a;return R=0,U=""+e,n=H(B()),"$"!=B()&&F(),R=U=null,t&&b.call(t)==k?J((a={},a[""]=n,a),"",t):n}}}return a.runInContext=e,a}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},a=n[typeof exports]&&exports&&!exports.nodeType&&exports,r=n[typeof window]&&window||this,s=a&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!s||s.global!==s&&s.window!==s&&s.self!==s||(r=s),a&&!t)e(r,a);else{var i=r.JSON,o=r.JSON3,l=!1,c=e(r,r.JSON3={noConflict:function(){return l||(l=!0,r.JSON=i,r.JSON3=o,i=o=null),c}});r.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this);var Url=function(){"use strict";var e={protocol:"protocol",host:"hostname",port:"port",path:"pathname",query:"search",hash:"hash"},t={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},n=function(n,a){var i,o=document,l=o.createElement("a"),a=a||o.location.href,c=a.match(/\/\/(.*?)(?::(.*?))?@/)||[];l.href=a;for(i in e)n[i]=l[e[i]]||"";if(n.protocol=n.protocol.replace(/:$/,""),n.query=n.query.replace(/^\?/,""),n.hash=r(n.hash.replace(/^#/,"")),n.user=r(c[1]||""),n.pass=r(c[2]||""),n.port=t[n.protocol]==n.port||0==n.port?"":n.port,n.protocol||/^([a-z]+:)?\/\//.test(a))n.path=n.path.replace(/^\/?/,"/");else{var u=new Url(o.location.href.match(/(.*\/)/)[0]),d=u.path.split("/"),p=n.path.split("/"),f=["protocol","user","pass","host","port"],h=f.length;for(d.pop(),i=0;h>i;i++)n[f[i]]=u[f[i]];for(;".."==p[0];)d.pop(),p.shift();n.path=("/"!=a.charAt(0)?d.join("/"):"")+"/"+p.join("/")}n.paths(("/"==n.path.charAt(0)?n.path.slice(1):n.path).split("/")),s(n)},a=function(e){return encodeURIComponent(e).replace(/'/g,"%27")},r=function(e){return e=e.replace(/\+/g," "),e=e.replace(/%([ef][0-9a-f])%([89ab][0-9a-f])%([89ab][0-9a-f])/gi,function(e,t,n,a){var r=parseInt(t,16)-224,s=parseInt(n,16)-128;if(0==r&&32>s)return e;var i=parseInt(a,16)-128,o=(r<<12)+(s<<6)+i;return o>65535?e:String.fromCharCode(o)}),e=e.replace(/%([cd][0-9a-f])%([89ab][0-9a-f])/gi,function(e,t,n){var a=parseInt(t,16)-192;if(2>a)return e;var r=parseInt(n,16)-128;return String.fromCharCode((a<<6)+r)}),e=e.replace(/%([0-7][0-9a-f])/gi,function(e,t){return String.fromCharCode(parseInt(t,16))})},s=function(e){var t=e.query;e.query=new function(e){for(var t,n=/([^=&]+)(=([^&]*))?/g;t=n.exec(e);){var s=decodeURIComponent(t[1].replace(/\+/g," ")),i=t[3]?r(t[3]):"";null!=this[s]?(this[s]instanceof Array||(this[s]=[this[s]]),this[s].push(i)):this[s]=i}this.clear=function(){for(var e in this)this[e]instanceof Function||delete this[e]},this.count=function(){var e,t=0;for(e in this)this[e]instanceof Function||t++;return t},this.isEmpty=function(){return 0===this.count()},this.toString=function(){var e,t,n="",r=a;for(e in this)if(!(this[e]instanceof Function))if(this[e]instanceof Array){var s=this[e].length;if(s)for(t=0;s>t;t++)n+=n?"&":"",n+=r(e)+"="+r(this[e][t]);else n+=(n?"&":"")+r(e)+"="}else n+=n?"&":"",n+=r(e)+"="+r(this[e]);return n}}(t)};return function(e){this.paths=function(e){var t,n="",s=0;if(e&&e.length&&e+""!==e){for(this.isAbsolute()&&(n="/"),t=e.length;t>s;s++)e[s]=a(e[s]);this.path=n+e.join("/")}for(e=("/"===this.path.charAt(0)?this.path.slice(1):this.path).split("/"),s=0,t=e.length;t>s;s++)e[s]=r(e[s]);return e},this.encode=a,this.decode=r,this.isAbsolute=function(){return this.protocol||"/"===this.path.charAt(0)},this.toString=function(){return(this.protocol&&this.protocol+"://")+(this.user&&a(this.user)+(this.pass&&":"+a(this.pass))+"@")+(this.host&&this.host)+(this.port&&":"+this.port)+(this.path&&this.path)+(this.query.toString()&&"?"+this.query)+(this.hash&&"#"+a(this.hash))},n(this,e)}}();!function(e){"use strict";function t(){return u.createDocumentFragment()}function n(e){return u.createElement(e)}function a(e){if(1===e.length)return r(e[0]);for(var n=t(),a=z.call(e),s=0;s-1}}([].indexOf||function(e){for(q=this.length;q--&&this[q]!==e;);return q}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;ti?r[c.call(a,s)-1]=y.call(s,this):r[i]},emit:function(e){for(var t=l.call(this,f),a=t&&this[f].l,r=t&&l.call(a,e),s=r&&a[e].slice(0),i=r&&u.call(arguments,1),o=0,c=r?s.length:o;c>o;)n(this,s[o++],i);return r},expect:function(){for(var e=0;e-1&&(s.splice(n,1),s.length||delete r[e])),this},on:function(e,t,n){var a=l.call(this,f),r=(a?this[f]:T(this)).l,s=a&&l.call(r,e)?r[e]:r[e]=[];return w.call(s,t)<0&&(n?d:c).call(s,t),this},once:function(e,t,a){var r=function(i){s.off(e,r,a),n(s,t,arguments)},s=this;return s.on(e,r,a)},trigger:function(e,t){var r=l.call(this,f),s=r&&this[f].l,i="string"==typeof e,c=i?e:e.type,u=r&&l.call(s,c),d=u&&s[c].slice(0),p=i?new a(this,c,t):e,h=0,v=u?d.length:h,g=!(p instanceof a);for(g&&(p._active=!0,p.stopImmediatePropagation=o.stopImmediatePropagation),p.currentTarget=this,m[0]=p;p._active&&v>h;)n(this,d[h++],m);return g&&(delete p._active,delete p.stopImmediatePropagation),!p.defaultPrevented},when:function(e,t){var a=l.call(this,f),r=(a?this[f]:T(this)).w,s=a&&l.call(r,e);return s?(n(this,t,r[e]),this):this.once(e,function(){l.call(r,e)||(r[e]=arguments)},!0).once(e,t)}},x=function(e,t,n){l.call(e,t)||(e[t]=n)},O=!1;o.defaultPrevented=!1,o._active=o.cancelable=!0,o.preventDefault=function(){this.defaultPrevented=!0},o.stopImmediatePropagation=function(){this._active=!1};for(r in S)l.call(S,r)&&b(i,r,{enumerable:!1,configurable:!0,writable:!0,value:S[r]});!function(e){function t(t){function n(e){e[t].apply(e,this)}return function(){return e.call(this,n,arguments),this}}for(var n in S)S.hasOwnProperty(n)&&!/^listeners|boundTo$/.test(n)&&b(s,n,{enumerable:!1,configurable:!0,writable:!0,value:t(n)})}(s.forEach||function(e,t){for(var n=this,a=0;a-1&&(n.splice(a,1),n.length||(self["on"+e]=null))}),u.expect("ready","DOMContentLoaded"),/loaded|complete/.test(u.readyState)?(e.setImmediate||setTimeout)(c):u.once("DOMContentLoaded",c,!0)}(window),"$"in window||b(window,"$",{enumerable:!1,configurable:!0,writable:!0,value:function(e,t){var n=t||document,a=e.length-6,r=e.lastIndexOf(":first")===a&&a>0,s=r?n.querySelector(e.slice(0,a)):n.querySelectorAll(e);return r?s?[s]:[]:v.call(s)}})}}(Object);var Class=Class||function(e){"use strict";function t(e,t,a){for(var r,s=[],i=0;it;)r[t++].call(this);return e.apply(this,arguments)}}(k),k[f]=S)),y.call(e,h)&&n(e[h],k,b,!0,!0),p&&(v!==b&&n(v,k,b,!0,!0),k[f]=S),S[c]!==k&&a(S,c,k,!1),n(e,S,b,!1,!0),y.call(e,d)&&i([].concat(e[d]),S),k}}(Object);(function(){this.NANO={INTERACTIVE:2,UPDATE:1,DISABLED:0}}).call(this),function(){this.helpers={link:function(e,t,n,a,r,s){return null==e&&(e=""),null==t&&(t=""),null==n&&(n=""),null==a&&(a={}),null==r&&(r=""),null==s&&(s=""),a=JSON.stringify(a),t&&(t="",s+=" iconed"),r?""+t+e+"":""+t+e+""},bar:function(e,t,n,a,r){var s;return null==e&&(e=0),null==t&&(t=0),null==n&&(n=100),null==a&&(a=""),null==r&&(r=""),n>t?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),s=Math.round((e-t)/(n-t)*100),"
"+r+"
"},round:function(e){return Math.round(e)},fixed:function(e,t){return null==t&&(t=1),Number(Math.round(e+"e"+t)+"e-"+t)},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)}}}.call(this),function(){document.when("ready",function(e){return function(){var t;t={},e.nanoui=new e.NanoUI(t,document),e.nanowindow=new e.Window(t,document),t.emit("memes"),e.NanoBus=t}}(this))}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.NanoUI=function(){function t(t,n){this.bus=t,this.fragment=null!=n?n:document,this.winset=e(this.winset,this),this.close=e(this.close,this),this.act=e(this.act,this),this.render=e(this.render,this),this.update=e(this.update,this),this.serverUpdate=e(this.serverUpdate,this),this.bus.on("serverUpdate",this.serverUpdate),this.bus.on("update",this.update),this.bus.on("render",this.render),this.bus.on("memes",this.render),this.initialized=!1,this.data={},this.initialData=JSON.parse(this.fragment.query("#data").data("initial")),null==this.initialData&&("data"in this.initialData||"config"in this.initalData)&&this.error("Initial data did not load correctly.")}return t.prototype.serverUpdate=function(e){var t,n,a;try{t=JSON.parse(e)}catch(a){n=a,this.error(n)}this.bus.emit("update",t)},t.prototype.update=function(e){null==e.data&&(null!=this.data.data?e.data=this.data.data:e.data={}),this.data=e,this.initialized&&this.bus.emit("render",this.data),this.bus.emit("updated")},t.prototype.render=function(e){var t,n,a,r;this.initialized||(e=this.initialData);try{this.initialized||(r=this.fragment.query("#layout"),r.innerHTML=TMPL[e.config.templates.layout](e.data,e.config,helpers)),t=this.fragment.query("#content"),t.innerHTML=TMPL[e.config.templates.content](e.data,e.config,helpers)}catch(a){return n=a,void this.error(n)}return this.bus.emit("rendered",e),this.initialized?void 0:(this.initialized=!0,this.data=this.initialData,this.bus.emit("initialized",e))},t.prototype.act=function(e,t){return null==t&&(t={}),t.src=this.data.config.ref,t.nano=e,location.href=util.href(null,t)},t.prototype.error=function(e){var t;return e instanceof Error&&(e=e.fileName+":"+e.lineNumber+" "+e.message),t={nano_error:e},location.href=util.href(null,t)},t.prototype.log=function(e){var t;return t={nano_log:e},location.href=util.href(null,t)},t.prototype.close=function(){var e;return e={command:"nanoclose "+this.data.config.ref},this.winset("is-visible","false"),location.href=util.href("winset",e)},t.prototype.winset=function(e,t,n){var a,r;return null==n&&(n=this.data.config.window.ref),a={},a[n+"."+e]=t,r=a,location.href=util.href("winset",r)},t}()}.call(this),function(){this.util={extend:function(e,t){return Object.keys(t).forEach(function(n){var a;return a=t[n],a&&"[object Object]"===Object.prototype.toString.call(a)?(e[n]=e[n]||{},util.extend(e[n],a)):e[n]=a}),e},href:function(e,t){return null==e&&(e=""),null==t&&(t={}),e=new Url("byond://"+e),util.extend(e.query,t),e}}}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.Window=function(){function t(t,n){this.bus=t,this.fragment=null!=n?n:document,this.attachLinks=e(this.attachLinks,this),this.updateLinks=e(this.updateLinks,this),this.updateStatus=e(this.updateStatus,this),this.resize=e(this.resize,this),this.attachResize=e(this.attachResize,this),this.drag=e(this.drag,this),this.attachDrag=e(this.attachDrag,this),this.attachButtons=e(this.attachButtons,this),this.calcOffset=e(this.calcOffset,this),this.fancyChrome=e(this.fancyChrome,this),this.dragging=!1,this.resizing=!1,this.bus.once("initialized",function(e){return function(t){return setTimeout(e.focusMap,100),t.config.user.fancy?(e.fancyChrome(),e.calcOffset(),e.attachButtons(),e.attachDrag(),e.attachResize()):void 0}}(this)),this.bus.on("rendered",this.updateStatus),this.bus.on("rendered",this.updateLinks),this.bus.on("rendered",this.attachLinks),this.fragment.on("keydown",this.focusMap)}return t.prototype.setPos=function(e,t){return nanoui.winset("pos",e+","+t)},t.prototype.setSize=function(e,t){return nanoui.winset("size",e+","+t)},t.prototype.focusMap=function(){return nanoui.winset("focus",1,"mapwindow.map")},t.prototype.fancyChrome=function(){var e;return nanoui.winset("titlebar",0),nanoui.winset("can-resize",0),e=this.fragment.queryAll(".fancy"),e.forEach(function(e){return e.classList.remove("fancy")})},t.prototype.calcOffset=function(){return this.xOriginal=window.screenLeft,this.yOriginal=window.screenTop,this.setPos(0,0),this.xOffset=window.screenLeft,this.yOffset=window.screenTop,this.setPos(this.xOriginal-this.xOffset,this.yOriginal-this.yOffset)},t.prototype.attachButtons=function(){var e,t,n,a;return e=function(){return nanoui.close()},n=function(){return nanoui.winset("is-minimized","true")},t=this.fragment.queryAll(".close"),t.forEach(function(t){return t.on("click",e)}),a=this.fragment.queryAll(".minimize"),a.forEach(function(e){return e.on("click",n)})},t.prototype.attachDrag=function(){var e;return e=this.fragment.query("#titlebar"),this.fragment.on("mousemove",this.drag),e.on("mousedown",function(e){return function(){return e.dragging=!0}}(this)),this.fragment.on("mouseup",function(e){return function(){return e.dragging=!1}}(this))},t.prototype.drag=function(e){var t,n;return null==e&&(e=window.event),this.dragging?(null==this.xDrag&&(this.xDrag=e.screenX),null==this.yDrag&&(this.yDrag=e.screenY),t=e.screenX-this.xDrag+(window.screenLeft-this.xOffset),n=e.screenY-this.yDrag+(window.screenTop-this.yOffset),this.setPos(t,n),this.xDrag=e.screenX,this.yDrag=e.screenY):void 0},t.prototype.attachResize=function(){var e;return e=this.fragment.query("#resize"),this.fragment.on("mousemove",this.resize),e.on("mousedown",function(e){return function(){return e.resizing=!0}}(this)),this.fragment.on("mouseup",function(e){return function(){return e.resizing=!1}}(this))},t.prototype.resize=function(e){var t,n;return null==e&&(e=window.event),this.resizing?(null==this.xResize&&(this.xResize=e.screenX),null==this.yResize&&(this.yResize=e.screenY),t=e.screenX-this.xResize+window.innerWidth,n=e.screenY-this.yResize+window.innerHeight,this.setSize(t,n),this.xResize=e.screenX,this.yResize=e.screenY):void 0},t.prototype.updateStatus=function(e){var t;return t=this.fragment.queryAll(".statusicon"),t.forEach(function(t){var n;switch(t.className=t.className.replace(/good|bad|average/g,""),e.config.status){case NANO.INTERACTIVE:n="good";break;case NANO.UPDATE:n="average";break;default:n="bad"}return t.classList.add(n)})},t.prototype.updateLinks=function(e){var t;return t=this.fragment.queryAll(".link"),e.config.status!==NANO.INTERACTIVE?t.forEach(function(e){return e.className="link disabled"}):void 0},t.prototype.attachLinks=function(e){var t;return t=function(){var t,n;return t=this.data("action"),n=JSON.parse(this.data("params")),null!=t&&null!=n&&e.config.status===NANO.INTERACTIVE?nanoui.act(t,n):void 0},this.fragment.queryAll(".link.active").forEach(function(e){return e.on("click",t)})},t}()}.call(this),window.TMPL={},TMPL.airlock_electronics=function(e,t,n){var a='
';a+=e.oneAccess?""+n.link("One Required","unlock","one_access"):""+n.link("All Required","lock","one_access"),a+=""+n.link("Clear","refresh","clear")+'
';var r=e.regions;if(r)for(var s,i=-1,o=r.length-1;o>i;)s=r[i+=1],a+='";a+="";var l=e.regions;if(l)for(var s,i=-1,c=l.length-1;c>i;){s=l[i+=1],a+=""}return a+="
'+s.name+"
";var u=s.accesses;if(u)for(var d,p=-1,f=u.length-1;f>p;)d=u[p+=1],a+=""+n.link(d.name,d.req?"check-square-o":"square-o","set",{access:d.id},null,d.req?"selected":null)+"
";a+="
"},TMPL.air_alarm=function(e,t,n){var a='
';if(a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

Air Status

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

Air Controls

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

'+c.long_name+'

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

'+p.long_name+'

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

Environmental Modes

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

Alarm Thresholds

';var m=e.thresholds;if(m)for(var b,i=-1,y=m.length-1;y>i;){b=m[i+=1],a+="";var w=b.settings;if(w)for(var k,T=-1,E=w.length-1;E>T;)k=w[T+=1],a+="";a+=""}a+="
min2min1max1max2
"+b.name+""+n.link(k.selected>=0?n.round(100*k.selected)/100:"Off",null,"adjust",{command:"set_threshold",env:k.env,"var":k.val})+"
"}return a},TMPL.apc=function(e,t,n){var a='
';a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,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.",a+='

Power Status

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

Power Channels

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

System Overrides

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

Canister

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

Valve

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

Holding Tank

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

Status

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

Dispense

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

Beaker

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

Status

Power:
'+n.link(e.isActive?"On":"Off",e.isActive?"power-off":"close","power",null,e.isBeakerLoaded?null:"disabled")+'
Target:
'+n.link(e.targetTemp+"K","pencil","temperature")+'

Beaker

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

Occupant

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

Cell

Power:
',a+=e.isOperating?""+n.link("On","power-off","off"):""+n.link("Off","close","on"),a+='
Temperature:
'+e.cellTemperature+' K
Door:
',a+=e.isOpen?""+n.link("Open","unlock","close"):""+n.link("Closed","lock","open"),a+=e.autoEject?""+n.link("Auto","sign-out","autoeject"):""+n.link("Manual","sign-in","autoeject"),a+='

Beaker

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

Storage

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

Input

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

Output

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

Status

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

Tracking

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

Devices

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

Status

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

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(a+='
Adjustment:
'+n.link("","fast-backward","temp",{set:-20},e.targetTemp>e.minTemp?null:"disabled")+n.link("","backward","temp",{set:-5},e.targetTemp>e.minTemp?null:"disabled")+n.link("Set","pencil","temp",{set:"custom"},null)+n.link("","forward","temp",{set:5},e.targetTemp
"),a+='
Operational Mode:
',a+=e.open?""+n.link("Heat","long-arrow-up","mode",{mode:"heat"},"heat"!=e.mode?null:"selected")+n.link("Cool","long-arrow-down","mode",{mode:"cool"},"cool"!=e.mode?null:"selected")+n.link("Auto","arrows-v","mode",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?'Heat':"cool"==e.mode?'Cool':'Auto',a+="
"},TMPL.tanks=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a mask.":"The regulator is not connected to a mask.",a+='
Tank Pressure:
'+n.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad",e.tankPressure+" kPa")+'
Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.maskConnected?e.valveOpen?"selected":null:"disabled")+n.link("Close","lock","valuve",null,e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},TMPL._nanotrasen=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a}; \ No newline at end of file diff --git a/nano/scripts/window.coffee b/nano/scripts/window.coffee index 029ef16fe2f..716b27d0153 100644 --- a/nano/scripts/window.coffee +++ b/nano/scripts/window.coffee @@ -30,8 +30,8 @@ class @Window nanoui.winset "titlebar", 0 nanoui.winset "can-resize", 0 fancy = @fragment.queryAll ".fancy" - fancy.forEach (element) -> - element.style.display = 'inherit' + fancy.forEach (chrome) -> + chrome.classList.remove "fancy" calcOffset: => @xOriginal = window.screenLeft @@ -83,8 +83,8 @@ class @Window @xResize = event.screenX unless @xResize? @yResize = event.screenY unless @yResize? - x = Math.max(150, (event.screenX - @xResize) + window.innerWidth) - y = Math.max(150, (event.screenY - @yResize) + window.innerHeight) + x = Math.max(250, (event.screenX - @xResize) + window.innerWidth) + y = Math.max(250, (event.screenY - @yResize) + window.innerHeight) @setSize x, y @xResize = event.screenX diff --git a/nano/styles/main.less b/nano/styles/_chrome.less similarity index 84% rename from nano/styles/main.less rename to nano/styles/_chrome.less index fa4e6a02162..6eaf1cd9850 100644 --- a/nano/styles/main.less +++ b/nano/styles/_chrome.less @@ -1,20 +1,6 @@ @import "_config"; - -@import "_document"; @import "_util"; -@import "_interface"; -@import "_link"; -@import "_bar"; - -@import "_generic"; -@import "_nanotrasen"; - - -.fancy { - display: none; -} - div.loading { .noticeStripes; @@ -89,3 +75,7 @@ div.resize { transform: rotate(360deg); } + +.fancy { + .hidden; +} diff --git a/nano/styles/_document.less b/nano/styles/_document.less index c291b73fef7..f66ca1f4366 100644 --- a/nano/styles/_document.less +++ b/nano/styles/_document.less @@ -1,36 +1,39 @@ -@import "_config"; -@import "_util"; - - -html { - min-height: 100%; - - cursor: default; // Reset the cursor. -} - -body { - min-height: 100%; - - font-family: @font; - font-size: @fontsize; - color: @text; -} - -h1 { - font-size: @fontsize + 6px; - margin: 0; - padding: 6px 0; -} -h2 { - &:extend(h1); - font-size: @fontsize + 4px; -} -h3 { - &:extend(h1); - font-size: @fontsize + 2px; -} - -hr { - background-color: @rule; - border: none; -} +@import "_config"; +@import "_util"; + + +html { + min-height: 100%; + + cursor: default; // Reset the cursor. +} + +body { + min-height: 100%; + height: 100%; + + background-color: @background-end; // Fallback for old browsers. + + font-family: @font; + font-size: @fontsize; + color: @text; +} + +h1 { + font-size: @fontsize + 6px; + margin: 0; + padding: 6px 0; +} +h2 { + &:extend(h1); + font-size: @fontsize + 4px; +} +h3 { + &:extend(h1); + font-size: @fontsize + 2px; +} + +hr { + background-color: @rule; + border: none; +} diff --git a/nano/styles/_interface.less b/nano/styles/_section.less similarity index 100% rename from nano/styles/_interface.less rename to nano/styles/_section.less diff --git a/nano/styles/_util.less b/nano/styles/_util.less index b51538414cb..b10d5a7469e 100644 --- a/nano/styles/_util.less +++ b/nano/styles/_util.less @@ -1,57 +1,57 @@ -@import "_config"; - - -// Colors -.color(@color) { // Explort a given color as a class. - &.@{color} { - color: @@color; - } -} - -.color(normal); -.color(good); -.color(average); -.color(bad); -.color(label); -.color(highlight); -.color(dark); - -// Text Styles -.bold { font-weight: bold; } -.italic { font-style: italic; } -.fontReset { - color: @text; - font-size: @fontsize; - font-weight: normal; - font-style: normal; - text-decoration: none; -} - -// Fancy "Notice Me" Stripes -.noticeStripes { - background-color: @notice1; // Fallback for old browers. - background-image: repeating-linear-gradient( - -45deg, - @notice1, - @notice1 10px, - @notice2 10px, - @notice2 20px - ); -} - -// General Helpers -.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; } +@import "_config"; + + +// Colors +.color(@color) { // Explort a given color as a class. + &.@{color} { + color: @@color; + } +} + +.color(normal); +.color(good); +.color(average); +.color(bad); +.color(label); +.color(highlight); +.color(dark); + +// Text Styles +.bold { font-weight: bold; } +.italic { font-style: italic; } +.fontReset { + color: @text; + font-size: @fontsize; + font-weight: normal; + font-style: normal; + text-decoration: none; +} + +// Fancy "Notice Me" Stripes +.noticeStripes { + background-color: @notice1; // Fallback for old browers. + background-image: repeating-linear-gradient( + -45deg, + @notice1, + @notice1 10px, + @notice2 10px, + @notice2 20px + ); +} + +// General Helpers +.hidden { display: none !important; } + +.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; } diff --git a/nano/styles/nanoui.less b/nano/styles/nanoui.less new file mode 100644 index 00000000000..3b023c7a058 --- /dev/null +++ b/nano/styles/nanoui.less @@ -0,0 +1,12 @@ +@import "_config"; + +@import "_document"; +@import "_util"; + +@import "_chrome"; +@import "_section"; +@import "_link"; +@import "_bar"; + +@import "_generic"; +@import "_nanotrasen"; diff --git a/nano/templates/_nanotrasen.dot b/nano/templates/_nanotrasen.dot index 25d34906376..dc264f0d581 100644 --- a/nano/templates/_nanotrasen.dot +++ b/nano/templates/_nanotrasen.dot @@ -1,14 +1,14 @@ -
-
- - {{=config.title}} - - -
- -
-
Initiating...
-
- -
-
+
+
+ + {{=config.title}} + + +
+ +
+
Initiating...
+
+ +
+
diff --git a/nano/templates/air_alarm.dot b/nano/templates/air_alarm.dot index a80208384c3..8b67c9716c1 100644 --- a/nano/templates/air_alarm.dot +++ b/nano/templates/air_alarm.dot @@ -1,233 +1,233 @@ -
- {{? data.siliconUser}} -
- Interface Lock: -
- {{=helper.link('Engaged', 'lock', 'toggleaccess', null, data.locked ? 'selected' : null)}} - {{=helper.link('Disengaged', 'unlock', 'toggleaccess', null, data.locked ? null : 'selected')}} -
-
- {{??}} - {{? data.locked}} - Swipe an ID card to unlock this interface. - {{??}} - Swipe an ID card to lock this interface. - {{?}} - {{?}} -
-
-

Air Status

- {{? data.environment_data}} - {{~ data.environment_data:info:i}} -
- {{=info.name}}: -
- {{? info.danger_level == 2}} - - {{?? info.danger_level == 1}} - - {{??}} - - {{?}} - {{=helper.fixed(info.value, 2)}}{{=info.unit}} -
-
- {{~}} -
- Local Status: -
- {{? data.danger_level == 2}} - Danger (Internals Required) - {{?? data.danger_level == 1}} - Caution - {{??}} - Optimal - {{?}} -
-
-
- Area Status: -
- {{? data.atmos_alarm}} - Atmosphere Alarm - {{?? data.fire_alarm}} - Fire Alarm - {{??}} - Nominal - {{?}} -
-
- {{??}} -
- Warning: Cannot obtain air sample for analysis. -
- {{?}} - {{? data.dangerous}} -
-
- Warning: Safety measures offline. Device may exhibit abnormal behavior. -
- {{?}} -
-{{? (!data.locked || data.siliconUser)}} - {{? data.screen != 1}} - {{=helper.link('Back', 'arrow-left', 'screen', {'screen': 1})}} - {{?}} - {{? data.screen == 1}} -
-

Air Controls

-
- {{? !data.atmos_alarm}} - {{=helper.link('Area Atmospheric Alarm', 'hand-stop-o', 'alarm')}} - {{??}} - {{=helper.link('Area Atmospheric Alarm', 'close', 'reset', null, null, 'caution')}} - {{?}} -
-
- {{? data.mode != 3}} - {{=helper.link('Panic Siphon', 'exclamation', 'mode', {'mode': 3})}} - {{??}} - {{=helper.link('Panic Siphon', 'close', 'mode', {'mode': 1}, null, 'danger')}} - {{?}} -
-
- {{=helper.link('Vent Controls', 'sign-out', 'screen', {'screen': 2})}} -
-
- {{=helper.link('Scrubber Controls', 'filter', 'screen', {'screen': 3})}} -
-
- {{=helper.link('Set Environmental Mode', 'cog', 'screen', {'screen': 4})}} -
-
- {{=helper.link('Set Alarm Threshold', 'bar-chart', 'screen', {'screen': 5})}} -
-
- {{?? data.screen == 2}} - {{~ data.vents:vent:i}} -
-

{{=vent.long_name}}

-
- Power: -
- {{? vent.power}} - {{=helper.link('On', 'power-off', 'adjust', {'id_tag': vent.id_tag, 'command': 'power', 'val': 0}, null, null)}} - {{??}} - {{=helper.link('Off', 'close', 'adjust', {'id_tag': vent.id_tag, 'command': 'power', 'val': 1}, null, 'danger')}} - {{?}} -
-
-
- Mode: -
- {{? vent.direction == "release"}} - Pressurizing - {{??}} - Siphoning - {{?}} -
-
-
- Pressure Checks: -
- {{=helper.link('Internal', 'sign-in', 'adjust', {'id_tag': vent.id_tag, 'command': 'incheck', 'val': vent.checks}, null, vent.incheck ? 'selected' : null)}} - {{=helper.link('External', 'sign-out', 'adjust', {'id_tag': vent.id_tag, 'command': 'excheck', 'val': vent.checks}, null, vent.excheck ? 'selected' : null)}} -
-
-
- Set Pressure: -
- {{=helper.link(helper.fixed(vent.external), 'pencil', 'adjust', {'id_tag': vent.id_tag, 'command': 'set_external_pressure'})}} - {{=helper.link('Reset', 'refresh', 'adjust', {'id_tag': vent.id_tag, 'command': 'reset_external_pressure'}, vent.extdefault ? 'disabled' : null)}} -
-
-
- {{~}} - {{? !data.vents.length}} - No vents connected. - {{?}} - {{?? data.screen == 3}} - {{~ data.scrubbers:scrubber:i}} -
-

{{=scrubber.long_name}}

-
- Power: -
- {{? scrubber.power}} - {{=helper.link('On', 'power-off', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'power', 'val': 0}, null, null)}} - {{??}} - {{=helper.link('Off', 'close', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'power', 'val': 1}, null, 'danger')}} - {{?}} -
-
-
- Mode: -
- {{? scrubber.scrubbing}} - {{=helper.link('Scrubbing', 'filter', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'scrubbing', 'val': 0}, null, null)}} - {{??}} - {{=helper.link('Siphoning', 'sign-in', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'scrubbing', 'val': 1}, null, 'danger')}} - {{?}} -
-
-
- Range: -
- {{? scrubber.widenet}} - {{=helper.link('Extended', 'expand', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'widenet', 'val': 0}, null, 'caution')}} - {{??}} - {{=helper.link('Normal', 'compress', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'widenet', 'val': 1}, null, null)}} - {{?}} -
-
-
- Filters: -
- {{=helper.link("CO2", scrubber.filter_co2 ? 'check-square-o' : 'square-o', 'adjust', {'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', 'adjust', {'id_tag': scrubber.id_tag, 'command': "n2o_scrub", 'val': scrubber.filter_n2o ? 0 : 1}, null, scrubber.filter_n2o ? 'selected' : null)}} - {{=helper.link("Plasma", scrubber.filter_toxins ? 'check-square-o' : 'square-o', 'adjust', {'id_tag': scrubber.id_tag, 'command': "tox_scrub", 'val': scrubber.filter_toxins ? 0 : 1}, null, scrubber.filter_toxins ? 'selected' : null)}} -
-
-
- {{~}} - {{? !data.scrubbers.length}} - No scrubbers connected. - {{?}} - {{?? data.screen == 4}} -
-

Environmental Modes

- {{~ data.modes:mode:i}} -
- {{=helper.link(mode.name, mode.selected ? 'check-square-o' : 'square-o', 'mode', {'mode': mode.mode}, null, mode.selected ? (mode.danger ? 'danger' : 'selected') : null)}} -
- {{~}} - - {{?? data.screen == 5}} -
-

Alarm Thresholds

- - - - - - - - - - - - {{~ data.thresholds:threshold:i}} - - - {{~ threshold.settings:setting:j}} - - {{~}} - - {{~}} - -
min2min1max1max2
{{=threshold.name}} - {{=helper.link(setting.selected >= 0 ? helper.round(setting.selected*100)/100 : "Off", null, 'adjust', {'command': 'set_threshold', 'env': setting.env, 'var': setting.val})}} -
- - {{?}} -{{?}} +
+ {{? data.siliconUser}} +
+ Interface Lock: +
+ {{=helper.link('Engaged', 'lock', 'toggleaccess', null, data.locked ? 'selected' : null)}} + {{=helper.link('Disengaged', 'unlock', 'toggleaccess', null, data.locked ? null : 'selected')}} +
+
+ {{??}} + {{? data.locked}} + Swipe an ID card to unlock this interface. + {{??}} + Swipe an ID card to lock this interface. + {{?}} + {{?}} +
+
+

Air Status

+ {{? data.environment_data}} + {{~ data.environment_data:info:i}} +
+ {{=info.name}}: +
+ {{? info.danger_level == 2}} + + {{?? info.danger_level == 1}} + + {{??}} + + {{?}} + {{=helper.fixed(info.value, 2)}}{{=info.unit}} +
+
+ {{~}} +
+ Local Status: +
+ {{? data.danger_level == 2}} + Danger (Internals Required) + {{?? data.danger_level == 1}} + Caution + {{??}} + Optimal + {{?}} +
+
+
+ Area Status: +
+ {{? data.atmos_alarm}} + Atmosphere Alarm + {{?? data.fire_alarm}} + Fire Alarm + {{??}} + Nominal + {{?}} +
+
+ {{??}} +
+ Warning: Cannot obtain air sample for analysis. +
+ {{?}} + {{? data.dangerous}} +
+
+ Warning: Safety measures offline. Device may exhibit abnormal behavior. +
+ {{?}} +
+{{? (!data.locked || data.siliconUser)}} + {{? data.screen != 1}} + {{=helper.link('Back', 'arrow-left', 'screen', {'screen': 1})}} + {{?}} + {{? data.screen == 1}} +
+

Air Controls

+
+ {{? !data.atmos_alarm}} + {{=helper.link('Area Atmospheric Alarm', 'hand-stop-o', 'alarm')}} + {{??}} + {{=helper.link('Area Atmospheric Alarm', 'close', 'reset', null, null, 'caution')}} + {{?}} +
+
+ {{? data.mode != 3}} + {{=helper.link('Panic Siphon', 'exclamation', 'mode', {'mode': 3})}} + {{??}} + {{=helper.link('Panic Siphon', 'close', 'mode', {'mode': 1}, null, 'danger')}} + {{?}} +
+
+ {{=helper.link('Vent Controls', 'sign-out', 'screen', {'screen': 2})}} +
+
+ {{=helper.link('Scrubber Controls', 'filter', 'screen', {'screen': 3})}} +
+
+ {{=helper.link('Set Environmental Mode', 'cog', 'screen', {'screen': 4})}} +
+
+ {{=helper.link('Set Alarm Threshold', 'bar-chart', 'screen', {'screen': 5})}} +
+
+ {{?? data.screen == 2}} + {{~ data.vents:vent:i}} +
+

{{=vent.long_name}}

+
+ Power: +
+ {{? vent.power}} + {{=helper.link('On', 'power-off', 'adjust', {'id_tag': vent.id_tag, 'command': 'power', 'val': 0}, null, null)}} + {{??}} + {{=helper.link('Off', 'close', 'adjust', {'id_tag': vent.id_tag, 'command': 'power', 'val': 1}, null, 'danger')}} + {{?}} +
+
+
+ Mode: +
+ {{? vent.direction == "release"}} + Pressurizing + {{??}} + Siphoning + {{?}} +
+
+
+ Pressure Checks: +
+ {{=helper.link('Internal', 'sign-in', 'adjust', {'id_tag': vent.id_tag, 'command': 'incheck', 'val': vent.checks}, null, vent.incheck ? 'selected' : null)}} + {{=helper.link('External', 'sign-out', 'adjust', {'id_tag': vent.id_tag, 'command': 'excheck', 'val': vent.checks}, null, vent.excheck ? 'selected' : null)}} +
+
+
+ Set Pressure: +
+ {{=helper.link(helper.fixed(vent.external), 'pencil', 'adjust', {'id_tag': vent.id_tag, 'command': 'set_external_pressure'})}} + {{=helper.link('Reset', 'refresh', 'adjust', {'id_tag': vent.id_tag, 'command': 'reset_external_pressure'}, vent.extdefault ? 'disabled' : null)}} +
+
+
+ {{~}} + {{? !data.vents.length}} + No vents connected. + {{?}} + {{?? data.screen == 3}} + {{~ data.scrubbers:scrubber:i}} +
+

{{=scrubber.long_name}}

+
+ Power: +
+ {{? scrubber.power}} + {{=helper.link('On', 'power-off', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'power', 'val': 0}, null, null)}} + {{??}} + {{=helper.link('Off', 'close', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'power', 'val': 1}, null, 'danger')}} + {{?}} +
+
+
+ Mode: +
+ {{? scrubber.scrubbing}} + {{=helper.link('Scrubbing', 'filter', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'scrubbing', 'val': 0}, null, null)}} + {{??}} + {{=helper.link('Siphoning', 'sign-in', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'scrubbing', 'val': 1}, null, 'danger')}} + {{?}} +
+
+
+ Range: +
+ {{? scrubber.widenet}} + {{=helper.link('Extended', 'expand', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'widenet', 'val': 0}, null, 'caution')}} + {{??}} + {{=helper.link('Normal', 'compress', 'adjust', {'id_tag': scrubber.id_tag, 'command': 'widenet', 'val': 1}, null, null)}} + {{?}} +
+
+
+ Filters: +
+ {{=helper.link("CO2", scrubber.filter_co2 ? 'check-square-o' : 'square-o', 'adjust', {'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', 'adjust', {'id_tag': scrubber.id_tag, 'command': "n2o_scrub", 'val': scrubber.filter_n2o ? 0 : 1}, null, scrubber.filter_n2o ? 'selected' : null)}} + {{=helper.link("Plasma", scrubber.filter_toxins ? 'check-square-o' : 'square-o', 'adjust', {'id_tag': scrubber.id_tag, 'command': "tox_scrub", 'val': scrubber.filter_toxins ? 0 : 1}, null, scrubber.filter_toxins ? 'selected' : null)}} +
+
+
+ {{~}} + {{? !data.scrubbers.length}} + No scrubbers connected. + {{?}} + {{?? data.screen == 4}} +
+

Environmental Modes

+ {{~ data.modes:mode:i}} +
+ {{=helper.link(mode.name, mode.selected ? 'check-square-o' : 'square-o', 'mode', {'mode': mode.mode}, null, mode.selected ? (mode.danger ? 'danger' : 'selected') : null)}} +
+ {{~}} +
+ {{?? data.screen == 5}} +
+

Alarm Thresholds

+
+ + + + + + + + + + + {{~ data.thresholds:threshold:i}} + + + {{~ threshold.settings:setting:j}} + + {{~}} + + {{~}} + +
min2min1max1max2
{{=threshold.name}} + {{=helper.link(setting.selected >= 0 ? helper.round(setting.selected*100)/100 : "Off", null, 'adjust', {'command': 'set_threshold', 'env': setting.env, 'var': setting.val})}} +
+ + {{?}} +{{?}} From 1284f0596cd973519b92abaef5c83e6ba47dcfab Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Thu, 17 Dec 2015 02:10:31 -0600 Subject: [PATCH 5/8] Fix NanoUIs when the title includes a single quote --- code/modules/nano/nanoui.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 9521320ee93..0401998f9e3 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -211,7 +211,7 @@ // Generate JSON. var/list/send_data = get_send_data(initial_data) - var/initial_data_json = replacetext(JSON.stringify(send_data), "'", "\\'") + var/initial_data_json = replacetext(JSON.stringify(send_data), "'", "'") // Generate the HTML document. return {" From 332cc5af712952814b03d0092e7705da66f69e96 Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Thu, 17 Dec 2015 02:32:53 -0600 Subject: [PATCH 6/8] Re-organize NanoUI procs --- code/datums/mind.dm | 2 +- code/modules/mob/logout.dm | 2 +- code/modules/nano/external.dm | 27 +-- code/modules/nano/nanoui.dm | 275 +++++++++++++++-------------- code/modules/nano/states/states.dm | 2 +- code/modules/nano/subsystem.dm | 8 +- 6 files changed, 159 insertions(+), 157 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index e68c5d08c52..c565740299b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -68,7 +68,7 @@ if(current) //remove ourself from our old body's mind variable current.mind = null - SSnano.user_transferred(current, new_character) + SSnano.on_transfer(current, new_character) if(key) if(new_character.key != key) //if we're transfering into a body with a key associated which is not ours diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 4c7da6069be..f1bc6dcabcc 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,5 +1,5 @@ /mob/Logout() - SSnano.user_logout(src) // this is used to clean up (remove) this user's Nano UIs + SSnano.on_logout(src) player_list -= src log_access("Logout: [key_name(src)]") if(admin_datums[src.ckey]) diff --git a/code/modules/nano/external.dm b/code/modules/nano/external.dm index bd72394934e..fcf1a4cf4d4 100644 --- a/code/modules/nano/external.dm +++ b/code/modules/nano/external.dm @@ -27,6 +27,20 @@ datum/topic_state/state = default_state) return -1 // Sorta implemented. + /** + * public + * + * Data to be sent to the NanoUI. + * This must be implemented for a NanoUI to work. + * + * required user mob The mob interacting with the NanoUI. + * + * return list Data to be sent to the NanoUI. + **/ +/atom/movable/proc/get_ui_data(mob/user) + return list() // Not implemented. + + /** * public * @@ -41,18 +55,6 @@ /atom/movable/proc/ui_act(action, list/params) return // Not implemented. - /** - * public - * - * Data to be sent to the NanoUI. - * This must be implemented for a NanoUI to work. - * - * required user mob The mob interacting with the NanoUI. - * - * return list Data to be sent to the NanoUI. - **/ -/atom/movable/proc/get_ui_data(mob/user) - return list() // Not implemented. /** * private @@ -67,7 +69,6 @@ * global * * Used to track NanoUIs for a mob. - * **/ /mob/var/list/open_uis = list() diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 0401998f9e3..b2b76fdf2f5 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -88,77 +88,60 @@ var/datum/asset/assets = get_asset_datum(/datum/asset/simple/nanoui) assets.send(user) + /** + * public + * + * Open this NanoUI (and initialize it with data). + * + * optional data list The data to intialize the UI with. + **/ +/datum/nanoui/proc/open(list/data = null) + if(!user.client) + return // Bail if there is no client. + if (status == NANO_CLOSE) + return // Bail if we should close. + + if (!initial_data) + if (!data) // If we don't have initial_data and data was not passed, get data from the src_object. + data = src_object.get_ui_data(user) + set_initial_data(data) // Otherwise use the passed data. + + var/window_size = "" + if (width && height) // If we have a width and height, use them. + window_size = "size=[width]x[height];" + update_status(push = 0) // Update the window state. + + user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. + winset(user, window_id, "on-close=\"nanoclose \ref[src]\"") // Instruct the client to signal NanoUI when the window is closed. + SSnano.on_open(src) /** * public * - * Enable/disable auto-updating of the NanoUI. + * Reinitialize the NanoUI. + * (Possibly with a new template and/or data). * - * required state bool Enable/disable auto-updating. + * optional template string The filename of the new template. + * optional data list The new initial data. **/ -/datum/nanoui/proc/set_auto_update(state = 1) - auto_update = state +/datum/nanoui/proc/reinitialize(template, list/data) + if(template) + set_template(template) // Set a new template. + if(data) + set_initial_data(data) // Replace the initial_data. + open() /** - * private + * public * - * Set the data to initialize the NanoUI with. - * The datastructure cannot be changed by subsequent updates. - * - * optional data list The data/datastructure to initialize the NanoUI with. + * Close the NanoUI, and all its children. **/ -/datum/nanoui/proc/set_initial_data(list/data) - initial_data = data - - /** - * private - * - * Get the config data/datastructure to initialize the NanoUI with. - * - * return list The config data. - **/ -/datum/nanoui/proc/get_config_data() - var/list/config_data = list( - "title" = title, - "status" = status, - "ref" = "\ref[src]", - "window" = list( - "width" = width, - "height" = height, - "ref" = window_id - ), - "user" = list( - "name" = user.name, - "fancy" = user.client.prefs.nanoui_fancy, - "ref" = "\ref[user]" - ), - "srcObject" = list( - "name" = src_object.name, - "ref" = "\ref[src_object]" - ), - "templates" = list( - "layout" = "_[layout]", - "content" = "[template]" - ) - ) - return config_data - - /** - * private - * - * Package the data to send to the UI. - * This is the (regular) data and config data, bundled together. - * - * return list The packaged data. - **/ -/datum/nanoui/proc/get_send_data(list/data) - var/list/send_data = list() - - send_data["config"] = get_config_data() - if (!isnull(data)) - send_data["data"] = data - - return send_data +/datum/nanoui/proc/close() + set_auto_update(0) // Disable auto-updates. + user << browse(null, "window=[window_id]") // Close the window. + SSnano.on_close(src) + for(var/datum/nanoui/child in children) // Loop through and close all children. + child.close() /** * public @@ -191,6 +174,27 @@ /datum/nanoui/proc/set_template(template) src.template = lowertext(template) + /** + * public + * + * Enable/disable auto-updating of the NanoUI. + * + * required state bool Enable/disable auto-updating. + **/ +/datum/nanoui/proc/set_auto_update(state = 1) + auto_update = state + + /** + * private + * + * Set the data to initialize the NanoUI with. + * The datastructure cannot be changed by subsequent updates. + * + * optional data list The data/datastructure to initialize the NanoUI with. + **/ +/datum/nanoui/proc/set_initial_data(list/data) + initial_data = data + /** * private * @@ -246,76 +250,54 @@ "} /** - * public + * private * - * Open this NanoUI (and initialize it with data). + * Get the config data/datastructure to initialize the NanoUI with. * - * optional data list The data to intialize the UI with. + * return list The config data. **/ -/datum/nanoui/proc/open(list/data = null) - if(!user.client) return - - if (!initial_data) - if (!data) // If we don't have initial_data and data was not passed, get data from the src_object. - data = src_object.get_ui_data(user) - set_initial_data(data) // Otherwise use the passed data. - - var/window_size = "" - if (width && height) // If we have a width and height, use them. - window_size = "size=[width]x[height];" - update_status(push = 0) // Update the window state. - if (status == NANO_CLOSE) - return // Bail if we should close. - - user << browse(get_html(), "window=[window_id];[window_size][list2params(window_options)]") // Open the window. - winset(user, window_id, "on-close=\"nanoclose \ref[src]\"") // Instruct the client to signal NanoUI when the window is closed. - SSnano.ui_opened(src) // Call the opened handler. - - /** - * public - * - * Reinitialize the NanoUI. - * (Possibly with a new template and/or data). - * - * optional template string The filename of the new template. - * optional data list The new initial data. - **/ -/datum/nanoui/proc/reinitialize(template, list/data) - if(template) - src.template = template // Set a new template. - if(data) - set_initial_data(data) // Replace the initial_data. - open() - - /** - * public - * - * Close the NanoUI, and all its children. - **/ -/datum/nanoui/proc/close() - set_auto_update(0) // Disable auto-updates. - user << browse(null, "window=[window_id]") // Close the window. - SSnano.ui_closed(src) // Call the closed handler. - for(var/datum/nanoui/child in children) // Loop through and close all children. - child.close() +/datum/nanoui/proc/get_config_data() + var/list/config_data = list( + "title" = title, + "status" = status, + "ref" = "\ref[src]", + "window" = list( + "width" = width, + "height" = height, + "ref" = window_id + ), + "user" = list( + "name" = user.name, + "fancy" = user.client.prefs.nanoui_fancy, + "ref" = "\ref[user]" + ), + "srcObject" = list( + "name" = src_object.name, + "ref" = "\ref[src_object]" + ), + "templates" = list( + "layout" = "_[layout]", + "content" = "[template]" + ) + ) + return config_data /** * private * - * Push data to an already open NanoUI. + * Package the data to send to the UI. + * This is the (regular) data and config data, bundled together. * - * required data list The data to send. - * optional force bool If the update should be sent regardless of state. + * return list The packaged data. **/ -/datum/nanoui/proc/push_data(data, force = 0) - update_status(push = 0) // Update the window state. - if (status == NANO_DISABLED && !force) - return // Cannot update UI, we have no visibility. +/datum/nanoui/proc/get_send_data(list/data) + var/list/send_data = list() - var/list/send_data = get_send_data(data) // Get the data to send. + send_data["config"] = get_config_data() + if (!isnull(data)) + send_data["data"] = data - // Send the new data to the recieveUpdate() Javascript function. - user << output(list2params(list(JSON.stringify(send_data))), "[window_id].browser:receiveUpdate") + return send_data /** * private @@ -355,6 +337,25 @@ else update_status(push = 1) // Otherwise only update status. + /** + * private + * + * Push data to an already open NanoUI. + * + * required data list The data to send. + * optional force bool If the update should be sent regardless of state. + **/ +/datum/nanoui/proc/push_data(data, force = 0) + update_status(push = 0) // Update the window state. + if (status == NANO_DISABLED && !force) + return // Cannot update UI, we have no visibility. + + var/list/send_data = get_send_data(data) // Get the data to send. + + // Send the new data to the recieveUpdate() Javascript function. + user << output(list2params(list(JSON.stringify(send_data))), "[window_id].browser:receiveUpdate") + + /** * private * @@ -366,6 +367,22 @@ /datum/nanoui/proc/update(force_open = 0) src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) + /** + * private + * + * Update the status/visibility of the NanoUI for its user. + * + * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). + **/ +/datum/nanoui/proc/update_status(push = 0) + var/new_status = src_object.nano_state(user, state) + if(master_ui) + new_status = min(new_status, master_ui.status) + + set_status(new_status, push) + if(new_status == NANO_CLOSE) + close() + /** * private * @@ -383,20 +400,4 @@ else status = state if (push || status == 0) // Force an update if NANO_DISABLED. - push_data(null, 1) - - /** - * private - * - * Update the status/visibility of the NanoUI for its user. - * - * optional push bool Push an update to the UI (an update is always sent for NANO_DISABLED). - **/ -/datum/nanoui/proc/update_status(push = 0) - var/new_status = src_object.CanUseTopic(user, state) - if(master_ui) - new_status = min(new_status, master_ui.status) - - set_status(new_status, push) - if(new_status == NANO_CLOSE) - close() \ No newline at end of file + push_data(null, 1) \ No newline at end of file diff --git a/code/modules/nano/states/states.dm b/code/modules/nano/states/states.dm index 0034342e9db..3d2c61bf027 100644 --- a/code/modules/nano/states/states.dm +++ b/code/modules/nano/states/states.dm @@ -14,7 +14,7 @@ * * return NANO_state The state of the UI. **/ -/atom/proc/CanUseTopic(mob/user, datum/topic_state/state) +/atom/proc/nano_state(mob/user, datum/topic_state/state) var/src_object = nano_host() return state.can_use_topic(src_object, user) // Check if the state allows interaction. diff --git a/code/modules/nano/subsystem.dm b/code/modules/nano/subsystem.dm index 7e6840198df..8b468b94186 100644 --- a/code/modules/nano/subsystem.dm +++ b/code/modules/nano/subsystem.dm @@ -158,7 +158,7 @@ * * required ui datum/nanoui The UI to be added. **/ -/datum/subsystem/nano/proc/ui_opened(datum/nanoui/ui) +/datum/subsystem/nano/proc/on_open(datum/nanoui/ui) var/src_object_key = "\ref[ui.src_object]" if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) open_uis[src_object_key] = list(ui.ui_key = list()) // Make a list for the ui_key and src_object. @@ -180,7 +180,7 @@ * * return bool If the UI was removed or not. **/ -/datum/subsystem/nano/proc/ui_closed(datum/nanoui/ui) +/datum/subsystem/nano/proc/on_close(datum/nanoui/ui) var/src_object_key = "\ref[ui.src_object]" if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) return 0 // It wasn't open. @@ -203,7 +203,7 @@ * * return int The number of NanoUIs closed. **/ -/datum/subsystem/nano/proc/user_logout(mob/user) +/datum/subsystem/nano/proc/on_logout(mob/user) return close_user_uis(user) /** @@ -216,7 +216,7 @@ * * return bool If the NanoUIs were transferred. **/ -/datum/subsystem/nano/proc/user_transferred(mob/oldMob, mob/newMob) +/datum/subsystem/nano/proc/on_transfer(mob/oldMob, mob/newMob) if (!oldMob || isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0) return 0 // The old mob had no open NanoUIs. From 6e0d3ed1e18dec3ffa7efcb6fa6cca59f957ee2c Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Thu, 17 Dec 2015 03:26:39 -0600 Subject: [PATCH 7/8] Add missing dependency --- nano/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/nano/package.json b/nano/package.json index 781f0a9d135..dc0212bc371 100644 --- a/nano/package.json +++ b/nano/package.json @@ -3,6 +3,7 @@ "private": true, "dependencies": { "autoprefixer": "^6.1.2", + "coffee-script": "^1.10.0", "del": "^2.2.0", "gulp": "^3.9.0", "gulp-coffee": "^2.3.1", From f553c773708d257ff071dde147d6ca28fa7dfad2 Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Thu, 17 Dec 2015 10:18:27 -0600 Subject: [PATCH 8/8] Recompile NanoUI --- nano/assets/nanoui.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nano/assets/nanoui.js b/nano/assets/nanoui.js index 07f2d60d43b..d275b35323d 100644 --- a/nano/assets/nanoui.js +++ b/nano/assets/nanoui.js @@ -1,3 +1,3 @@ -!function(e){function t(e,t,n,a){for(var s,i=n.slice(),o=r(t,e),l=0,c=i.length;c>l&&(handler=i[l],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(o):handler.call(e,o),!o.stoppedImmediatePropagation);l++);return s=!o.stoppedPropagation,a&&s&&e.parentNode?e.parentNode.dispatchEvent(o):!o.defaultPrevented}function n(e,t){return{configurable:!0,get:e,set:t}}function a(e,t,a){var r=b(t||e,a);g(e,"textContent",n(function(){return r.get.call(this)},function(e){r.set.call(this,e)}))}function r(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}function s(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function i(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function o(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function l(e){!p&&E.test(document.readyState)&&(p=!p,document.detachEvent(f,l),e=document.createEvent("Event"),e.initEvent(h,!0,!0),document.dispatchEvent(e))}function c(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function u(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var d=!0,p=!1,f="onreadystatechange",h="DOMContentLoaded",v="__IE8__"+Math.random(),g=Object.defineProperty||function(e,t,n){e[t]=n.value},m=Object.defineProperties||function(t,n){for(var a in n)if(y.call(n,a))try{g(t,a,n[a])}catch(r){e.console&&console.log(a+" failed on object:",t,r.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,w=e.Element.prototype,k=e.Text.prototype,T=/^[a-z]+$/,E=/loaded|complete/,S={},x=document.createElement("div"),O=document.documentElement,C=O.removeAttribute,P=O.setAttribute;a(e.HTMLCommentElement.prototype,w,"nodeValue"),a(e.HTMLScriptElement.prototype,null,"text"),a(k,null,"nodeValue"),a(e.HTMLTitleElement.prototype,null,"text"),g(e.HTMLStyleElement.prototype,"textContent",function(e){return n(function(){return e.get.call(this.styleSheet)},function(t){e.set.call(this.styleSheet,t)})}(b(e.CSSStyleSheet.prototype,"cssText"))),m(w,{textContent:{get:i,set:c},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;n>t;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:{value:function(e,n,a){var r,i,l=this,c="on"+e,d=l[v]||g(l,v,{value:{}})[v],p=d[c]||(d[c]={}),f=p.h||(p.h=[]);if(!y.call(p,"w")){if(p.w=function(e){return e[v]||t(l,u(l,e),f,!1)},!y.call(S,c))if(T.test(e)){try{r=document.createEventObject(),r[v]=!0,9!=l.nodeType&&null==l.parentNode&&x.appendChild(l),(i=l.getAttribute(c))&&C.call(l,c),l.fireEvent(c,r),S[c]=!0}catch(r){for(S[c]=!1;x.hasChildNodes();)x.removeChild(x.firstChild)}null!=i&&P.call(l,c,i)}else S[c]=!1;(p.n=S[c])&&l.attachEvent(c,p.w)}s(f,n)<0&&f[a?"unshift":"push"](n),"input"===e&&l.attachEvent("onkeyup",o)}},dispatchEvent:{value:function(e){var n,a=this,r="on"+e.type,s=a[v],i=s&&s[r],o=!!i;return e.target||(e.target=a),o?i.n?a.fireEvent(r,e):t(a,e,i.h,!0):(n=a.parentNode)?n.dispatchEvent(e):!0,!e.defaultPrevented}},removeEventListener:{value:function(e,t,n){var a=this,r="on"+e,i=a[v],o=i&&i[r],l=o&&o.h,c=l?s(l,t):-1;c>-1&&l.splice(c,1)}}}),m(k,{addEventListener:{value:w.addEventListener},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener}}),m(e.XMLHttpRequest.prototype,{addEventListener:{value:function(e,t,n){var a=this,r="on"+e,i=a[v]||g(a,v,{value:{}})[v],o=i[r]||(i[r]={}),l=o.h||(o.h=[]);s(l,t)<0&&(a[r]||(a[r]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),a.dispatchEvent(t)}),l[n?"unshift":"push"](t))}},dispatchEvent:{value:function(e){var n=this,a="on"+e.type,r=n[v],s=r&&r[a],i=!!s;return i&&(s.n?n.fireEvent(a,e):t(n,e,s.h,!0))}},removeEventListener:{value:w.removeEventListener}}),m(e.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),m(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?i.call(this):null},set:function(e){11===this.nodeType&&c.call(this,e)}},addEventListener:{value:function(t,n,a){var r=this;w.addEventListener.call(r,t,n,a),d&&t===h&&!E.test(r.readyState)&&(d=!1,r.attachEvent(f,l),e==top&&!function s(e){try{r.documentElement.doScroll("left"),l()}catch(t){setTimeout(s,50)}}())}},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener},createEvent:{value:function(e){var t;if("Event"!==e)throw new Error("unsupported "+e);return t=document.createEventObject(),t.timeStamp=(new Date).getTime(),t}}}),m(e.Window.prototype,{getComputedStyle:{value:function(){function e(e){this._=e}function t(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,s=function(e,t){return t.toUpperCase()};return e.prototype.getPropertyValue=function(e){var t,i,o,l=this._,c=l.style,u=l.currentStyle,d=l.runtimeStyle;return e=("float"===e?"style-float":e).replace(r,s),t=u?u[e]:c[e],n.test(t)&&!a.test(e)&&(i=c.left,o=d&&d.left,o&&(d.left=u.left),c.left="fontSize"===e?"1em":t,t=c.pixelLeft+"px",c.left=i,o&&(d.left=o)),null==t?t:t+""||"auto"},t.prototype.getPropertyValue=function(){return null},function(n,a){return a?new t(n):new e(n)}}()},addEventListener:{value:function(n,a,r){var i,o=e,l="on"+n;o[l]||(o[l]=function(e){return t(o,u(o,e),i,!1)}),i=o[l][v]||(o[l][v]=[]),s(i,a)<0&&i[r?"unshift":"push"](a)}},dispatchEvent:{value:function(t){var n=e["on"+t.type];return n?n.call(e,t)!==!1&&!t.defaultPrevented:!0}},removeEventListener:{value:function(t,n,a){var r="on"+t,i=(e[r]||Object)[v],o=i?s(i,n):-1;o>-1&&i.splice(o,1)}}}),function(e,t,n){for(n=0;n0||-1)*Math.floor(Math.abs(t))),t},ToPrimitive:function(t){var n,a,r;if(N(t))return t;if(a=t.valueOf,e(a)&&(n=a.call(t),N(n)))return n;if(r=t.toString,e(r)&&(n=r.call(t),N(n)))return n;throw new TypeError},ToObject:function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return a(e)},ToUint32:function(e){return e>>>0}},I=function(){};A(s,{bind:function(t){var n=this;if(!e(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var r,s=u.call(arguments,1),i=function(){if(this instanceof r){var e=n.apply(this,h.call(s,u.call(arguments)));return a(e)===e?e:this}return n.apply(t,h.call(s,u.call(arguments)))},o=g(0,n.length-s.length),l=[],c=0;o>c;c++)p.call(l,"$"+c);return r=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this, arguments); }")(i),n.prototype&&(I.prototype=n.prototype,r.prototype=new I,I.prototype=null),r}});var R=v.bind(r.hasOwnProperty),U=v.bind(r.toString),z=v.bind(o.slice),q=v.bind(o.split),F=v.bind(o.indexOf),B=v.bind(p),H=t.isArray||function(e){return"[object Array]"===U(e)},$=1!==[].unshift(0);A(n,{unshift:function(){return f.apply(this,arguments),this.length}},$),A(t,{isArray:H});var J=a("a"),V="a"!==J[0]||!(0 in J),W=function(e){var t=!0,n=!0;return e&&(e.call("foo",function(e,n,a){"object"!=typeof a&&(t=!1)}),e.call([1],function(){"use strict";n="string"==typeof this},"x")),!!e&&t&&n};A(n,{forEach:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=-1,i=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++s1&&(a=arguments[1]),!e(n))throw new TypeError("Array.prototype.map callback must be a function");for(var l=0;i>l;l++)l in s&&("undefined"==typeof a?o[l]=n(s[l],l,r):o[l]=n.call(a,s[l],l,r));return o}},!W(n.map)),A(n,{filter:function(t){var n,a,r=D.ToObject(this),s=V&&P(this)?q(this,""):r,i=D.ToUint32(s.length),o=[];if(arguments.length>1&&(a=arguments[1]),!e(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var l=0;i>l;l++)l in s&&(n=s[l],("undefined"==typeof a?t(n,l,r):t.call(a,n,l,r))&&B(o,n));return o}},!W(n.filter)),A(n,{every:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.every callback must be a function");for(var i=0;s>i;i++)if(i in r&&!("undefined"==typeof n?t(r[i],i,a):t.call(n,r[i],i,a)))return!1;return!0}},!W(n.every)),A(n,{some:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.some callback must be a function");for(var i=0;s>i;i++)if(i in r&&("undefined"==typeof n?t(r[i],i,a):t.call(n,r[i],i,a)))return!0;return!1}},!W(n.some));var Z=!1;n.reduce&&(Z="object"==typeof n.reduce.call("es5",function(e,t,n,a){return a})),A(n,{reduce:function(t){var n=D.ToObject(this),a=V&&P(this)?q(this,""):n,r=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===r&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var s,i=0;if(arguments.length>=2)s=arguments[1];else for(;;){if(i in a){s=a[i++];break}if(++i>=r)throw new TypeError("reduce of empty array with no initial value")}for(;r>i;i++)i in a&&(s=t(s,a[i],i,n));return s}},!Z);var X=!1;n.reduceRight&&(X="object"==typeof n.reduceRight.call("es5",function(e,t,n,a){return a})),A(n,{reduceRight:function(t){var n=D.ToObject(this),a=V&&P(this)?q(this,""):n,r=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===r&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var s,i=r-1;if(arguments.length>=2)s=arguments[1];else for(;;){if(i in a){s=a[i--];break}if(--i<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>i)return s;do i in a&&(s=t(s,a[i],i,n));while(i--);return s}},!X);var Y=n.indexOf&&-1!==[0,1].indexOf(1,2);A(n,{indexOf:function(e){var t=V&&P(this)?q(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=0;for(arguments.length>1&&(a=D.ToInteger(arguments[1])),a=a>=0?a:g(0,n+a);n>a;a++)if(a in t&&t[a]===e)return a;return-1}},Y);var G=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);A(n,{lastIndexOf:function(e){var t=V&&P(this)?q(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=n-1;for(arguments.length>1&&(a=m(a,D.ToInteger(arguments[1]))),a=a>=0?a:n-Math.abs(a);a>=0;a--)if(a in t&&e===t[a])return a;return-1}},G);var K=function(){var e=[1,2],t=e.splice();return 2===e.length&&H(t)&&0===t.length}();A(n,{splice:function(e,t){return 0===arguments.length?[]:d.apply(this,arguments)}},!K);var Q=function(){var e={};return n.splice.call(e,0,0,1),1===e.length}();A(n,{splice:function(e,t){if(0===arguments.length)return[];var n=arguments;return this.length=g(D.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof t&&(n=u.call(arguments),n.length<2?B(n,this.length-e):n[1]=D.ToInteger(t)),d.apply(this,n)}},!Q);var ee=function(){var e=new t(1e5);return e[8]="x",e.splice(1,1),7===e.indexOf("x")}(),te=function(){var e=256,t=[];return t[e]="a",t.splice(e+1,0,"b"),"a"===t[e]}();A(n,{splice:function(e,t){for(var n,a=D.ToObject(this),r=[],s=D.ToUint32(a.length),o=D.ToInteger(e),l=0>o?g(s+o,0):m(o,s),c=m(g(D.ToInteger(t),0),s-l),d=0;c>d;)n=i(l+d),R(a,n)&&(r[d]=a[n]),d+=1;var p,f=u.call(arguments,2),h=f.length;if(c>h){for(d=l;s-c>d;)n=i(d+c),p=i(d+h),R(a,n)?a[p]=a[n]:delete a[p],d+=1;for(d=s;d>s-c+h;)delete a[d-1],d-=1}else if(h>c)for(d=s-c;d>l;)n=i(d+c-1),p=i(d+h-1),R(a,n)?a[p]=a[n]:delete a[p],d-=1;d=l;for(var v=0;v=0&&!H(t)&&e(t.callee)},be=ge(arguments)?ge:me;A(a,{keys:function(t){var n=e(t),a=be(t),r=null!==t&&"object"==typeof t,s=r&&P(t);if(!r&&!n&&!a)throw new TypeError("Object.keys called on a non-object");var o=[],l=le&&n;if(s&&ce||a)for(var c=0;cp;p++){var f=he[p];d&&"constructor"===f||!R(t,f)||B(o,f)}return o}});var ye=a.keys&&function(){return 2===a.keys(arguments).length}(1,2),we=a.keys&&function(){var e=a.keys(arguments);return 1!==arguments.length||1!==e.length||1!==e[0]}(1),ke=a.keys;A(a,{keys:function(e){return ke(be(e)?u.call(e):e)}},!ye||we);var Te=-621987552e5,Ee="-000001",Se=Date.prototype.toISOString&&-1===new Date(Te).toISOString().indexOf(Ee),xe=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();A(Date.prototype,{toISOString:function(){var e,t,n,a,r;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(a=this.getUTCFullYear(),r=this.getUTCMonth(),a+=Math.floor(r/12),r=(r%12+12)%12,e=[r+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],a=(0>a?"-":a>9999?"+":"")+z("00000"+Math.abs(a),a>=0&&9999>=a?-4:-6),t=e.length;t--;)n=e[t],10>n&&(e[t]="0"+n);return a+"-"+u.call(e,0,2).join("-")+"T"+u.call(e,2).join(":")+"."+z("000"+this.getUTCMilliseconds(),-3)+"Z"}},Se||xe);var Oe=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Te).toJSON().indexOf(Ee)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(e){return!1}}();Oe||(Date.prototype.toJSON=function(t){var n=a(this),r=D.ToPrimitive(n);if("number"==typeof r&&!isFinite(r))return null;var s=n.toISOString;if(!e(s))throw new TypeError("toISOString property is not callable");return s.call(n)});var Ce=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Pe=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),_e=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(_e||Pe||!Ce){var je=Math.pow(2,31)-1,Le=(Math.floor(je/1e3),M(new Date(1970,0,1,0,0,0,je+1).getTime()));Date=function(e){var t=function(n,a,r,s,o,l,c){var u,d=arguments.length;if(this instanceof e){var p=l,f=c;if(Le&&d>=7&&c>je){var h=Math.floor(c/je)*je,v=Math.floor(h/1e3);p+=v,f-=1e3*v}u=1===d&&i(n)===n?new e(t.parse(n)):d>=7?new e(n,a,r,s,o,p,f):d>=6?new e(n,a,r,s,o,p):d>=5?new e(n,a,r,s,o):d>=4?new e(n,a,r,s):d>=3?new e(n,a,r):d>=2?new e(n,a):d>=1?new e(n):new e}else u=e.apply(this,arguments);return N(u)||A(u,{constructor:t},!0),u},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),a=[0,31,59,90,120,151,181,212,243,273,304,334,365],r=function(e,t){var n=t>1?1:0;return a[t]+Math.floor((e-1969+n)/4)-Math.floor((e-1901+n)/100)+Math.floor((e-1601+n)/400)+365*(e-1970)},s=function(t){var n=0,a=t;if(Le&&a>je){var r=Math.floor(a/je)*je,s=Math.floor(r/1e3);n+=s,a-=1e3*s}return l(new e(1970,0,1,0,0,n,a))};for(var o in e)R(e,o)&&(t[o]=e[o]);A(t,{now:e.now,UTC:e.UTC},!0),t.prototype=e.prototype,A(t.prototype,{constructor:t},!0);var c=function(t){var a=n.exec(t);if(a){var i,o=l(a[1]),c=l(a[2]||1)-1,u=l(a[3]||1)-1,d=l(a[4]||0),p=l(a[5]||0),f=l(a[6]||0),h=Math.floor(1e3*l(a[7]||0)),v=Boolean(a[4]&&!a[8]),g="-"===a[9]?1:-1,m=l(a[10]||0),b=l(a[11]||0),y=p>0||f>0||h>0;return(y?24:25)>d&&60>p&&60>f&&1e3>h&&c>-1&&12>c&&24>m&&60>b&&u>-1&&u=-864e13&&864e13>=i)?i:NaN}return e.parse.apply(this,arguments)};return A(t,{parse:c}),t}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var Ae=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),Ne={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(e,t){for(var n=-1,a=t;++n=0;)n+=Ne.data[t],Ne.data[t]=Math.floor(n/e),n=n%e*Ne.base},numToString:function(){for(var e=Ne.size,t="";--e>=0;)if(""!==t||0===e||0!==Ne.data[e]){var n=i(Ne.data[e]);""===t?t=n:t+=z("0000000",0,7-n.length)+n}return t},pow:function Ye(e,t,n){return 0===t?n:t%2===1?Ye(e,t-1,n*e):Ye(e*e,t/2,n)},log:function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}},Me=function(e){var t,n,a,r,s,o,c,u;if(t=l(e),t=M(t)?0:Math.floor(t),0>t||t>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=l(this),M(n))return"NaN";if(-1e21>=n||n>=1e21)return i(n);if(a="",0>n&&(a="-",n=-n),r="0",n>1e-21)if(s=Ne.log(n*Ne.pow(2,69,1))-69,o=0>s?n*Ne.pow(2,-s,1):n/Ne.pow(2,s,1),o*=4503599627370496,s=52-s,s>0){for(Ne.multiply(0,o),c=t;c>=7;)Ne.multiply(1e7,0),c-=7;for(Ne.multiply(Ne.pow(10,c,1),0),c=s-1;c>=23;)Ne.divide(1<<23),c-=23;Ne.divide(1<0?(u=r.length,r=t>=u?a+z("0.0000000000000000000",0,t-u+2)+r:a+z(r,0,u-t)+"."+z(r,u-t)):r=a+r,r};A(c,{toFixed:Me},Ae);var De=function(){try{return"1"===1..toPrecision(void 0)}catch(e){return!0}}(),Ie=c.toPrecision;A(c,{toPrecision:function(e){return"undefined"==typeof e?Ie.call(this):Ie.call(this,e)}},De),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var e="undefined"==typeof/()??/.exec("")[1],t=Math.pow(2,32)-1;o.split=function(n,a){var r=this;if("undefined"==typeof n&&0===a)return[];if(!S(n))return q(this,n,a);var s,i,o,l,c=[],d=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),f=0,h=new RegExp(n.source,d+"g");r+="",e||(s=new RegExp("^"+h.source+"$(?!\\s)",d));var v="undefined"==typeof a?t:D.ToUint32(a);for(i=h.exec(r);i&&(o=i.index+i[0].length,!(o>f&&(B(c,z(r,f,i.index)),!e&&i.length>1&&i[0].replace(s,function(){for(var e=1;e1&&i.index=v)));)h.lastIndex===i.index&&h.lastIndex++,i=h.exec(r);return f===r.length?(l||!h.test(""))&&B(c,""):B(c,z(r,f)),c.length>v?z(c,0,v):c}}():"0".split(void 0,0).length&&(o.split=function(e,t){return"undefined"==typeof e&&0===t?[]:q(this,e,t)});var Re=o.replace,Ue=function(){var e=[];return"x".replace(/x(.)?/g,function(t,n){B(e,n)}),1===e.length&&"undefined"==typeof e[0]}();Ue||(o.replace=function(t,n){var a=e(n),r=S(t)&&/\)[*?]/.test(t.source);if(a&&r){var s=function(e){var a=arguments.length,r=t.lastIndex;t.lastIndex=0;var s=t.exec(e)||[];return t.lastIndex=r,B(s,arguments[a-2],arguments[a-1]),n.apply(this,s)};return Re.call(this,t,s)}return Re.call(this,t,n)});var ze=o.substr,qe="".substr&&"b"!=="0b".substr(-1);A(o,{substr:function(e,t){var n=e;return 0>e&&(n=g(this.length+e,0)),ze.call(this,n,t)}},qe);var Fe=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",Be="​",He="["+Fe+"]",$e=new RegExp("^"+He+He+"*"),Je=new RegExp(He+He+"*$"),Ve=o.trim&&(Fe.trim()||!Be.trim());A(o,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return i(this).replace($e,"").replace(Je,"")}},Ve);var We=o.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);A(o,{lastIndexOf:function(e){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");for(var t=i(this),n=i(e),a=arguments.length>1?l(arguments[1]):NaN,r=M(a)?1/0:D.ToInteger(a),s=m(g(r,0),t.length),o=n.length,c=s+o;c>0;){c=g(0,c-o);var u=F(z(t,c,s+o),n);if(-1!==u)return c+u}return-1}},We);var Ze=o.lastIndexOf;if(A(o,{lastIndexOf:function(e){return Ze.apply(this,arguments)}},1!==o.lastIndexOf.length),(8!==parseInt(Fe+"08")||22!==parseInt(Fe+"0x16"))&&(parseInt=function(e){var t=/^[\-+]?0[xX]/;return function(n,a){var r=i(n).trim(),s=l(a)||(t.test(r)?16:10);return e(r,s)}}(parseInt)),"RangeError: test"!==String(new RangeError("test"))){var Xe=(Error.prototype.toString,function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");var e=this.name;"undefined"==typeof e?e="Error":"string"!=typeof e&&(e=i(e));var t=this.message;return"undefined"==typeof t?t="":"string"!=typeof t&&(t=i(t)),e?t?e+": "+t:e:t});Error.prototype.toString=Xe}}),function(e,t){function n(e,t){var n=e.createElement("p"),a=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function a(){var e=y.elements;return"string"==typeof e?e.split(" "):e}function r(e,t){var n=y.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),y.elements=n+" "+e,c(t)}function s(e){var t=b[e[g]];return t||(t={},m++,e[g]=m,b[m]=t),t}function i(e,n,a){if(n||(n=t),d)return n.createElement(e);a||(a=s(n));var r;return r=a.cache[e]?a.cache[e].cloneNode():v.test(e)?(a.cache[e]=a.createElem(e)).cloneNode():a.createElem(e),!r.canHaveChildren||h.test(e)||r.tagUrn?r:a.frag.appendChild(r)}function o(e,n){if(e||(e=t),d)return e.createDocumentFragment();n=n||s(e);for(var r=n.frag.cloneNode(),i=0,o=a(),l=o.length;l>i;i++)r.createElement(o[i]);return r}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return y.shivMethods?i(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+a().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(y,t.frag)}function c(e){e||(e=t);var a=s(e);return!y.shivCSS||u||a.hasCSS||(a.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),d||l(e,a),e}var u,d,p="3.7.3",f=e.html5||{},h=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",m=0,b={};!function(){try{var e=t.createElement("a");e.innerHTML="",u="hidden"in e,d=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){u=!0,d=!0}}();var y={elements:f.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:p,shivCSS:f.shivCSS!==!1,supportsUnknownElements:d,shivMethods:f.shivMethods!==!1,type:"default",shivDocument:c,createElement:i,createDocumentFragment:o,addElements:r};e.html5=y,c(t),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document),function(){function e(t,a){function s(e){if(s[e]!==g)return s[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=s("json-stringify")&&s("json-parse");else{var n,r='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var l=a.stringify,u="function"==typeof l&&y;if(u){(n=function(){return 1}).toJSON=n;try{u="0"===l(0)&&"0"===l(new i)&&'""'==l(new o)&&l(b)===g&&l(g)===g&&l()===g&&"1"===l(n)&&"[1]"==l([n])&&"[null]"==l([g])&&"null"==l(null)&&"[null,null,null]"==l([g,b,null])&&l({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==r&&"1"===l(null,n)&&"[\n 1,\n 2\n]"==l([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==l(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==l(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==l(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==l(new c(-1))}catch(d){u=!1}}t=u}if("json-parse"==e){var p=a.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(r);var f=5==n.a.length&&1===n.a[0];if(f){try{f=!p('" "')}catch(d){}if(f)try{f=1!==p("01")}catch(d){}if(f)try{f=1!==p("1.")}catch(d){}}}}catch(d){f=!1}t=f}}return s[e]=!!t}t||(t=r.Object()),a||(a=r.Object());var i=t.Number||r.Number,o=t.String||r.String,l=t.Object||r.Object,c=t.Date||r.Date,u=t.SyntaxError||r.SyntaxError,d=t.TypeError||r.TypeError,p=t.Math||r.Math,f=t.JSON||r.JSON;"object"==typeof f&&f&&(a.stringify=f.stringify,a.parse=f.parse);var h,v,g,m=l.prototype,b=m.toString,y=new c(-0xc782b5b800cec);try{y=-109252==y.getUTCFullYear()&&0===y.getUTCMonth()&&1===y.getUTCDate()&&10==y.getUTCHours()&&37==y.getUTCMinutes()&&6==y.getUTCSeconds()&&708==y.getUTCMilliseconds()}catch(w){}if(!s("json")){var k="[object Function]",T="[object Date]",E="[object Number]",S="[object String]",x="[object Array]",O="[object Boolean]",C=s("bug-string-char-index");if(!y)var P=p.floor,_=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return _[t]+365*(e-1970)+P((e-1969+(t=+(t>1)))/4)-P((e-1901+t)/100)+P((e-1601+t)/400)};if((h=m.hasOwnProperty)||(h=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=b?h=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,h=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,h.call(this,e)}),v=function(e,t){var a,r,s,i=0;(a=function(){this.valueOf=0}).prototype.valueOf=0,r=new a;for(s in r)h.call(r,s)&&i++;return a=r=null,i?v=2==i?function(e,t){var n,a={},r=b.call(e)==k;for(n in e)r&&"prototype"==n||h.call(a,n)||!(a[n]=1)||!h.call(e,n)||t(n)}:function(e,t){var n,a,r=b.call(e)==k;for(n in e)r&&"prototype"==n||!h.call(e,n)||(a="constructor"===n)||t(n);(a||h.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],v=function(e,t){var a,s,i=b.call(e)==k,o=!i&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||h;for(a in e)i&&"prototype"==a||!o.call(e,a)||t(a);for(s=r.length;a=r[--s];o.call(e,a)&&t(a));}),v(e,t)},!s("json-stringify")){var L={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},A="000000",N=function(e,t){return(A+(t||0)).slice(-e)},M="\\u00",D=function(e){for(var t='"',n=0,a=e.length,r=!C||a>10,s=r&&(C?e.split(""):e);a>n;n++){var i=e.charCodeAt(n);switch(i){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=L[i];break;default:if(32>i){t+=M+N(2,i.toString(16));break}t+=r?s[n]:e.charAt(n)}}return t+'"'},I=function(e,t,n,a,r,s,i){var o,l,c,u,p,f,m,y,w,k,C,_,L,A,M,R;try{o=t[e]}catch(U){}if("object"==typeof o&&o)if(l=b.call(o),l!=T||h.call(o,"toJSON"))"function"==typeof o.toJSON&&(l!=E&&l!=S&&l!=x||h.call(o,"toJSON"))&&(o=o.toJSON(e));else if(o>-1/0&&1/0>o){if(j){for(p=P(o/864e5),c=P(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(u=P((p-j(c,0))/30.42);j(c,u+1)<=p;u++);p=1+p-j(c,u),f=(o%864e5+864e5)%864e5,m=P(f/36e5)%24,y=P(f/6e4)%60,w=P(f/1e3)%60,k=f%1e3}else c=o.getUTCFullYear(),u=o.getUTCMonth(),p=o.getUTCDate(),m=o.getUTCHours(),y=o.getUTCMinutes(),w=o.getUTCSeconds(),k=o.getUTCMilliseconds();o=(0>=c||c>=1e4?(0>c?"-":"+")+N(6,0>c?-c:c):N(4,c))+"-"+N(2,u+1)+"-"+N(2,p)+"T"+N(2,m)+":"+N(2,y)+":"+N(2,w)+"."+N(3,k)+"Z"}else o=null;if(n&&(o=n.call(t,e,o)),null===o)return"null";if(l=b.call(o),l==O)return""+o;if(l==E)return o>-1/0&&1/0>o?""+o:"null";if(l==S)return D(""+o);if("object"==typeof o){for(A=i.length;A--;)if(i[A]===o)throw d();if(i.push(o),C=[], -M=s,s+=r,l==x){for(L=0,A=o.length;A>L;L++)_=I(L,o,n,a,r,s,i),C.push(_===g?"null":_);R=C.length?r?"[\n"+s+C.join(",\n"+s)+"\n"+M+"]":"["+C.join(",")+"]":"[]"}else v(a||o,function(e){var t=I(e,o,n,a,r,s,i);t!==g&&C.push(D(e)+":"+(r?" ":"")+t)}),R=C.length?r?"{\n"+s+C.join(",\n"+s)+"\n"+M+"}":"{"+C.join(",")+"}":"{}";return i.pop(),R}};a.stringify=function(e,t,a){var r,s,i,o;if(n[typeof t]&&t)if((o=b.call(t))==k)s=t;else if(o==x){i={};for(var l,c=0,u=t.length;u>c;l=t[c++],o=b.call(l),(o==S||o==E)&&(i[l]=1));}if(a)if((o=b.call(a))==E){if((a-=a%1)>0)for(r="",a>10&&(a=10);r.lengthR;)switch(r=s.charCodeAt(R)){case 9:case 10:case 13:case 32:R++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=C?s.charAt(R):s[R],R++,e;case 34:for(e="@",R++;i>R;)if(r=s.charCodeAt(R),32>r)F();else if(92==r)switch(r=s.charCodeAt(++R)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=q[r],R++;break;case 117:for(t=++R,n=R+4;n>R;R++)r=s.charCodeAt(R),r>=48&&57>=r||r>=97&&102>=r||r>=65&&70>=r||F();e+=z("0x"+s.slice(t,R));break;default:F()}else{if(34==r)break;for(r=s.charCodeAt(R),t=R;r>=32&&92!=r&&34!=r;)r=s.charCodeAt(++R);e+=s.slice(t,R)}if(34==s.charCodeAt(R))return R++,e;F();default:if(t=R,45==r&&(a=!0,r=s.charCodeAt(++R)),r>=48&&57>=r){for(48==r&&(r=s.charCodeAt(R+1),r>=48&&57>=r)&&F(),a=!1;i>R&&(r=s.charCodeAt(R),r>=48&&57>=r);R++);if(46==s.charCodeAt(R)){for(n=++R;i>n&&(r=s.charCodeAt(n),r>=48&&57>=r);n++);n==R&&F(),R=n}if(r=s.charCodeAt(R),101==r||69==r){for(r=s.charCodeAt(++R),(43==r||45==r)&&R++,n=R;i>n&&(r=s.charCodeAt(n),r>=48&&57>=r);n++);n==R&&F(),R=n}return+s.slice(t,R)}if(a&&F(),"true"==s.slice(R,R+4))return R+=4,!0;if("false"==s.slice(R,R+5))return R+=5,!1;if("null"==s.slice(R,R+4))return R+=4,null;F()}return"$"},H=function(e){var t,n;if("$"==e&&F(),"string"==typeof e){if("@"==(C?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=B(),"]"!=e;n||(n=!0))n&&(","==e?(e=B(),"]"==e&&F()):F()),","==e&&F(),t.push(H(e));return t}if("{"==e){for(t={};e=B(),"}"!=e;n||(n=!0))n&&(","==e?(e=B(),"}"==e&&F()):F()),(","==e||"string"!=typeof e||"@"!=(C?e.charAt(0):e[0])||":"!=B())&&F(),t[e.slice(1)]=H(B());return t}F()}return e},$=function(e,t,n){var a=J(e,t,n);a===g?delete e[t]:e[t]=a},J=function(e,t,n){var a,r=e[t];if("object"==typeof r&&r)if(b.call(r)==x)for(a=r.length;a--;)$(r,a,n);else v(r,function(e){$(r,e,n)});return n.call(e,t,r)};a.parse=function(e,t){var n,a;return R=0,U=""+e,n=H(B()),"$"!=B()&&F(),R=U=null,t&&b.call(t)==k?J((a={},a[""]=n,a),"",t):n}}}return a.runInContext=e,a}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},a=n[typeof exports]&&exports&&!exports.nodeType&&exports,r=n[typeof window]&&window||this,s=a&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!s||s.global!==s&&s.window!==s&&s.self!==s||(r=s),a&&!t)e(r,a);else{var i=r.JSON,o=r.JSON3,l=!1,c=e(r,r.JSON3={noConflict:function(){return l||(l=!0,r.JSON=i,r.JSON3=o,i=o=null),c}});r.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this);var Url=function(){"use strict";var e={protocol:"protocol",host:"hostname",port:"port",path:"pathname",query:"search",hash:"hash"},t={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},n=function(n,a){var i,o=document,l=o.createElement("a"),a=a||o.location.href,c=a.match(/\/\/(.*?)(?::(.*?))?@/)||[];l.href=a;for(i in e)n[i]=l[e[i]]||"";if(n.protocol=n.protocol.replace(/:$/,""),n.query=n.query.replace(/^\?/,""),n.hash=r(n.hash.replace(/^#/,"")),n.user=r(c[1]||""),n.pass=r(c[2]||""),n.port=t[n.protocol]==n.port||0==n.port?"":n.port,n.protocol||/^([a-z]+:)?\/\//.test(a))n.path=n.path.replace(/^\/?/,"/");else{var u=new Url(o.location.href.match(/(.*\/)/)[0]),d=u.path.split("/"),p=n.path.split("/"),f=["protocol","user","pass","host","port"],h=f.length;for(d.pop(),i=0;h>i;i++)n[f[i]]=u[f[i]];for(;".."==p[0];)d.pop(),p.shift();n.path=("/"!=a.charAt(0)?d.join("/"):"")+"/"+p.join("/")}n.paths(("/"==n.path.charAt(0)?n.path.slice(1):n.path).split("/")),s(n)},a=function(e){return encodeURIComponent(e).replace(/'/g,"%27")},r=function(e){return e=e.replace(/\+/g," "),e=e.replace(/%([ef][0-9a-f])%([89ab][0-9a-f])%([89ab][0-9a-f])/gi,function(e,t,n,a){var r=parseInt(t,16)-224,s=parseInt(n,16)-128;if(0==r&&32>s)return e;var i=parseInt(a,16)-128,o=(r<<12)+(s<<6)+i;return o>65535?e:String.fromCharCode(o)}),e=e.replace(/%([cd][0-9a-f])%([89ab][0-9a-f])/gi,function(e,t,n){var a=parseInt(t,16)-192;if(2>a)return e;var r=parseInt(n,16)-128;return String.fromCharCode((a<<6)+r)}),e=e.replace(/%([0-7][0-9a-f])/gi,function(e,t){return String.fromCharCode(parseInt(t,16))})},s=function(e){var t=e.query;e.query=new function(e){for(var t,n=/([^=&]+)(=([^&]*))?/g;t=n.exec(e);){var s=decodeURIComponent(t[1].replace(/\+/g," ")),i=t[3]?r(t[3]):"";null!=this[s]?(this[s]instanceof Array||(this[s]=[this[s]]),this[s].push(i)):this[s]=i}this.clear=function(){for(var e in this)this[e]instanceof Function||delete this[e]},this.count=function(){var e,t=0;for(e in this)this[e]instanceof Function||t++;return t},this.isEmpty=function(){return 0===this.count()},this.toString=function(){var e,t,n="",r=a;for(e in this)if(!(this[e]instanceof Function))if(this[e]instanceof Array){var s=this[e].length;if(s)for(t=0;s>t;t++)n+=n?"&":"",n+=r(e)+"="+r(this[e][t]);else n+=(n?"&":"")+r(e)+"="}else n+=n?"&":"",n+=r(e)+"="+r(this[e]);return n}}(t)};return function(e){this.paths=function(e){var t,n="",s=0;if(e&&e.length&&e+""!==e){for(this.isAbsolute()&&(n="/"),t=e.length;t>s;s++)e[s]=a(e[s]);this.path=n+e.join("/")}for(e=("/"===this.path.charAt(0)?this.path.slice(1):this.path).split("/"),s=0,t=e.length;t>s;s++)e[s]=r(e[s]);return e},this.encode=a,this.decode=r,this.isAbsolute=function(){return this.protocol||"/"===this.path.charAt(0)},this.toString=function(){return(this.protocol&&this.protocol+"://")+(this.user&&a(this.user)+(this.pass&&":"+a(this.pass))+"@")+(this.host&&this.host)+(this.port&&":"+this.port)+(this.path&&this.path)+(this.query.toString()&&"?"+this.query)+(this.hash&&"#"+a(this.hash))},n(this,e)}}();!function(e){"use strict";function t(){return u.createDocumentFragment()}function n(e){return u.createElement(e)}function a(e){if(1===e.length)return r(e[0]);for(var n=t(),a=z.call(e),s=0;s-1}}([].indexOf||function(e){for(q=this.length;q--&&this[q]!==e;);return q}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;ti?r[c.call(a,s)-1]=y.call(s,this):r[i]},emit:function(e){for(var t=l.call(this,f),a=t&&this[f].l,r=t&&l.call(a,e),s=r&&a[e].slice(0),i=r&&u.call(arguments,1),o=0,c=r?s.length:o;c>o;)n(this,s[o++],i);return r},expect:function(){for(var e=0;e-1&&(s.splice(n,1),s.length||delete r[e])),this},on:function(e,t,n){var a=l.call(this,f),r=(a?this[f]:T(this)).l,s=a&&l.call(r,e)?r[e]:r[e]=[];return w.call(s,t)<0&&(n?d:c).call(s,t),this},once:function(e,t,a){var r=function(i){s.off(e,r,a),n(s,t,arguments)},s=this;return s.on(e,r,a)},trigger:function(e,t){var r=l.call(this,f),s=r&&this[f].l,i="string"==typeof e,c=i?e:e.type,u=r&&l.call(s,c),d=u&&s[c].slice(0),p=i?new a(this,c,t):e,h=0,v=u?d.length:h,g=!(p instanceof a);for(g&&(p._active=!0,p.stopImmediatePropagation=o.stopImmediatePropagation),p.currentTarget=this,m[0]=p;p._active&&v>h;)n(this,d[h++],m);return g&&(delete p._active,delete p.stopImmediatePropagation),!p.defaultPrevented},when:function(e,t){var a=l.call(this,f),r=(a?this[f]:T(this)).w,s=a&&l.call(r,e);return s?(n(this,t,r[e]),this):this.once(e,function(){l.call(r,e)||(r[e]=arguments)},!0).once(e,t)}},x=function(e,t,n){l.call(e,t)||(e[t]=n)},O=!1;o.defaultPrevented=!1,o._active=o.cancelable=!0,o.preventDefault=function(){this.defaultPrevented=!0},o.stopImmediatePropagation=function(){this._active=!1};for(r in S)l.call(S,r)&&b(i,r,{enumerable:!1,configurable:!0,writable:!0,value:S[r]});!function(e){function t(t){function n(e){e[t].apply(e,this)}return function(){return e.call(this,n,arguments),this}}for(var n in S)S.hasOwnProperty(n)&&!/^listeners|boundTo$/.test(n)&&b(s,n,{enumerable:!1,configurable:!0,writable:!0,value:t(n)})}(s.forEach||function(e,t){for(var n=this,a=0;a-1&&(n.splice(a,1),n.length||(self["on"+e]=null))}),u.expect("ready","DOMContentLoaded"),/loaded|complete/.test(u.readyState)?(e.setImmediate||setTimeout)(c):u.once("DOMContentLoaded",c,!0)}(window),"$"in window||b(window,"$",{enumerable:!1,configurable:!0,writable:!0,value:function(e,t){var n=t||document,a=e.length-6,r=e.lastIndexOf(":first")===a&&a>0,s=r?n.querySelector(e.slice(0,a)):n.querySelectorAll(e);return r?s?[s]:[]:v.call(s)}})}}(Object);var Class=Class||function(e){"use strict";function t(e,t,a){for(var r,s=[],i=0;it;)r[t++].call(this);return e.apply(this,arguments)}}(k),k[f]=S)),y.call(e,h)&&n(e[h],k,b,!0,!0),p&&(v!==b&&n(v,k,b,!0,!0),k[f]=S),S[c]!==k&&a(S,c,k,!1),n(e,S,b,!1,!0),y.call(e,d)&&i([].concat(e[d]),S),k}}(Object);(function(){this.NANO={INTERACTIVE:2,UPDATE:1,DISABLED:0}}).call(this),function(){this.helpers={link:function(e,t,n,a,r,s){return null==e&&(e=""),null==t&&(t=""),null==n&&(n=""),null==a&&(a={}),null==r&&(r=""),null==s&&(s=""),a=JSON.stringify(a),t&&(t="",s+=" iconed"),r?""+t+e+"":""+t+e+""},bar:function(e,t,n,a,r){var s;return null==e&&(e=0),null==t&&(t=0),null==n&&(n=100),null==a&&(a=""),null==r&&(r=""),n>t?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),s=Math.round((e-t)/(n-t)*100),"
"+r+"
"},round:function(e){return Math.round(e)},fixed:function(e,t){return null==t&&(t=1),Number(Math.round(e+"e"+t)+"e-"+t)},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)}}}.call(this),function(){document.when("ready",function(e){return function(){var t;t={},e.nanoui=new e.NanoUI(t,document),e.nanowindow=new e.Window(t,document),t.emit("memes"),e.NanoBus=t}}(this))}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.NanoUI=function(){function t(t,n){this.bus=t,this.fragment=null!=n?n:document,this.winset=e(this.winset,this),this.close=e(this.close,this),this.act=e(this.act,this),this.render=e(this.render,this),this.update=e(this.update,this),this.serverUpdate=e(this.serverUpdate,this),this.bus.on("serverUpdate",this.serverUpdate),this.bus.on("update",this.update),this.bus.on("render",this.render),this.bus.on("memes",this.render),this.initialized=!1,this.data={},this.initialData=JSON.parse(this.fragment.query("#data").data("initial")),null==this.initialData&&("data"in this.initialData||"config"in this.initalData)&&this.error("Initial data did not load correctly.")}return t.prototype.serverUpdate=function(e){var t,n,a;try{t=JSON.parse(e)}catch(a){n=a,this.error(n)}this.bus.emit("update",t)},t.prototype.update=function(e){null==e.data&&(null!=this.data.data?e.data=this.data.data:e.data={}),this.data=e,this.initialized&&this.bus.emit("render",this.data),this.bus.emit("updated")},t.prototype.render=function(e){var t,n,a,r;this.initialized||(e=this.initialData);try{this.initialized||(r=this.fragment.query("#layout"),r.innerHTML=TMPL[e.config.templates.layout](e.data,e.config,helpers)),t=this.fragment.query("#content"),t.innerHTML=TMPL[e.config.templates.content](e.data,e.config,helpers)}catch(a){return n=a,void this.error(n)}return this.bus.emit("rendered",e),this.initialized?void 0:(this.initialized=!0,this.data=this.initialData,this.bus.emit("initialized",e))},t.prototype.act=function(e,t){return null==t&&(t={}),t.src=this.data.config.ref,t.nano=e,location.href=util.href(null,t)},t.prototype.error=function(e){var t;return e instanceof Error&&(e=e.fileName+":"+e.lineNumber+" "+e.message),t={nano_error:e},location.href=util.href(null,t)},t.prototype.log=function(e){var t;return t={nano_log:e},location.href=util.href(null,t)},t.prototype.close=function(){var e;return e={command:"nanoclose "+this.data.config.ref},this.winset("is-visible","false"),location.href=util.href("winset",e)},t.prototype.winset=function(e,t,n){var a,r;return null==n&&(n=this.data.config.window.ref),a={},a[n+"."+e]=t,r=a,location.href=util.href("winset",r)},t}()}.call(this),function(){this.util={extend:function(e,t){return Object.keys(t).forEach(function(n){var a;return a=t[n],a&&"[object Object]"===Object.prototype.toString.call(a)?(e[n]=e[n]||{},util.extend(e[n],a)):e[n]=a}),e},href:function(e,t){return null==e&&(e=""),null==t&&(t={}),e=new Url("byond://"+e),util.extend(e.query,t),e}}}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.Window=function(){function t(t,n){this.bus=t,this.fragment=null!=n?n:document,this.attachLinks=e(this.attachLinks,this),this.updateLinks=e(this.updateLinks,this),this.updateStatus=e(this.updateStatus,this),this.resize=e(this.resize,this),this.attachResize=e(this.attachResize,this),this.drag=e(this.drag,this),this.attachDrag=e(this.attachDrag,this),this.attachButtons=e(this.attachButtons,this),this.calcOffset=e(this.calcOffset,this),this.fancyChrome=e(this.fancyChrome,this),this.dragging=!1,this.resizing=!1,this.bus.once("initialized",function(e){return function(t){return setTimeout(e.focusMap,100),t.config.user.fancy?(e.fancyChrome(),e.calcOffset(),e.attachButtons(),e.attachDrag(),e.attachResize()):void 0}}(this)),this.bus.on("rendered",this.updateStatus),this.bus.on("rendered",this.updateLinks),this.bus.on("rendered",this.attachLinks),this.fragment.on("keydown",this.focusMap)}return t.prototype.setPos=function(e,t){return nanoui.winset("pos",e+","+t)},t.prototype.setSize=function(e,t){return nanoui.winset("size",e+","+t)},t.prototype.focusMap=function(){return nanoui.winset("focus",1,"mapwindow.map")},t.prototype.fancyChrome=function(){var e;return nanoui.winset("titlebar",0),nanoui.winset("can-resize",0),e=this.fragment.queryAll(".fancy"),e.forEach(function(e){return e.classList.remove("fancy")})},t.prototype.calcOffset=function(){return this.xOriginal=window.screenLeft,this.yOriginal=window.screenTop,this.setPos(0,0),this.xOffset=window.screenLeft,this.yOffset=window.screenTop,this.setPos(this.xOriginal-this.xOffset,this.yOriginal-this.yOffset)},t.prototype.attachButtons=function(){var e,t,n,a;return e=function(){return nanoui.close()},n=function(){return nanoui.winset("is-minimized","true")},t=this.fragment.queryAll(".close"),t.forEach(function(t){return t.on("click",e)}),a=this.fragment.queryAll(".minimize"),a.forEach(function(e){return e.on("click",n)})},t.prototype.attachDrag=function(){var e;return e=this.fragment.query("#titlebar"),this.fragment.on("mousemove",this.drag),e.on("mousedown",function(e){return function(){return e.dragging=!0}}(this)),this.fragment.on("mouseup",function(e){return function(){return e.dragging=!1}}(this))},t.prototype.drag=function(e){var t,n;return null==e&&(e=window.event),this.dragging?(null==this.xDrag&&(this.xDrag=e.screenX),null==this.yDrag&&(this.yDrag=e.screenY),t=e.screenX-this.xDrag+(window.screenLeft-this.xOffset),n=e.screenY-this.yDrag+(window.screenTop-this.yOffset),this.setPos(t,n),this.xDrag=e.screenX,this.yDrag=e.screenY):void 0},t.prototype.attachResize=function(){var e;return e=this.fragment.query("#resize"),this.fragment.on("mousemove",this.resize),e.on("mousedown",function(e){return function(){return e.resizing=!0}}(this)),this.fragment.on("mouseup",function(e){return function(){return e.resizing=!1}}(this))},t.prototype.resize=function(e){var t,n;return null==e&&(e=window.event),this.resizing?(null==this.xResize&&(this.xResize=e.screenX),null==this.yResize&&(this.yResize=e.screenY),t=e.screenX-this.xResize+window.innerWidth,n=e.screenY-this.yResize+window.innerHeight,this.setSize(t,n),this.xResize=e.screenX,this.yResize=e.screenY):void 0},t.prototype.updateStatus=function(e){var t;return t=this.fragment.queryAll(".statusicon"),t.forEach(function(t){var n;switch(t.className=t.className.replace(/good|bad|average/g,""),e.config.status){case NANO.INTERACTIVE:n="good";break;case NANO.UPDATE:n="average";break;default:n="bad"}return t.classList.add(n)})},t.prototype.updateLinks=function(e){var t;return t=this.fragment.queryAll(".link"),e.config.status!==NANO.INTERACTIVE?t.forEach(function(e){return e.className="link disabled"}):void 0},t.prototype.attachLinks=function(e){var t;return t=function(){var t,n;return t=this.data("action"),n=JSON.parse(this.data("params")),null!=t&&null!=n&&e.config.status===NANO.INTERACTIVE?nanoui.act(t,n):void 0},this.fragment.queryAll(".link.active").forEach(function(e){return e.on("click",t)})},t}()}.call(this),window.TMPL={},TMPL.airlock_electronics=function(e,t,n){var a='
';a+=e.oneAccess?""+n.link("One Required","unlock","one_access"):""+n.link("All Required","lock","one_access"),a+=""+n.link("Clear","refresh","clear")+'
';var r=e.regions;if(r)for(var s,i=-1,o=r.length-1;o>i;)s=r[i+=1],a+='";a+="";var l=e.regions;if(l)for(var s,i=-1,c=l.length-1;c>i;){s=l[i+=1],a+=""}return a+="
'+s.name+"
";var u=s.accesses;if(u)for(var d,p=-1,f=u.length-1;f>p;)d=u[p+=1],a+=""+n.link(d.name,d.req?"check-square-o":"square-o","set",{access:d.id},null,d.req?"selected":null)+"
";a+="
"},TMPL.air_alarm=function(e,t,n){var a='
';if(a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

Air Status

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

Air Controls

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

'+c.long_name+'

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

'+p.long_name+'

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

Environmental Modes

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

Alarm Thresholds

';var m=e.thresholds;if(m)for(var b,i=-1,y=m.length-1;y>i;){b=m[i+=1],a+="";var w=b.settings;if(w)for(var k,T=-1,E=w.length-1;E>T;)k=w[T+=1],a+="";a+=""}a+="
min2min1max1max2
"+b.name+""+n.link(k.selected>=0?n.round(100*k.selected)/100:"Off",null,"adjust",{command:"set_threshold",env:k.env,"var":k.val})+"
"}return a},TMPL.apc=function(e,t,n){var a='
';a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,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.",a+='

Power Status

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

Power Channels

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

System Overrides

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

Canister

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

Valve

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

Holding Tank

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

Status

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

Dispense

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

Beaker

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

Status

Power:
'+n.link(e.isActive?"On":"Off",e.isActive?"power-off":"close","power",null,e.isBeakerLoaded?null:"disabled")+'
Target:
'+n.link(e.targetTemp+"K","pencil","temperature")+'

Beaker

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

Occupant

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

Cell

Power:
',a+=e.isOperating?""+n.link("On","power-off","off"):""+n.link("Off","close","on"),a+='
Temperature:
'+e.cellTemperature+' K
Door:
',a+=e.isOpen?""+n.link("Open","unlock","close"):""+n.link("Closed","lock","open"),a+=e.autoEject?""+n.link("Auto","sign-out","autoeject"):""+n.link("Manual","sign-in","autoeject"),a+='

Beaker

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

Storage

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

Input

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

Output

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

Status

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

Tracking

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

Devices

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

Status

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

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(a+='
Adjustment:
'+n.link("","fast-backward","temp",{set:-20},e.targetTemp>e.minTemp?null:"disabled")+n.link("","backward","temp",{set:-5},e.targetTemp>e.minTemp?null:"disabled")+n.link("Set","pencil","temp",{set:"custom"},null)+n.link("","forward","temp",{set:5},e.targetTemp
"),a+='
Operational Mode:
',a+=e.open?""+n.link("Heat","long-arrow-up","mode",{mode:"heat"},"heat"!=e.mode?null:"selected")+n.link("Cool","long-arrow-down","mode",{mode:"cool"},"cool"!=e.mode?null:"selected")+n.link("Auto","arrows-v","mode",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?'Heat':"cool"==e.mode?'Cool':'Auto',a+="
"},TMPL.tanks=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a mask.":"The regulator is not connected to a mask.",a+='
Tank Pressure:
'+n.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad",e.tankPressure+" kPa")+'
Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.maskConnected?e.valveOpen?"selected":null:"disabled")+n.link("Close","lock","valuve",null,e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},TMPL._nanotrasen=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a}; \ No newline at end of file +!function(e){function t(e,t,n,a){for(var s,i=n.slice(),o=r(t,e),l=0,c=i.length;c>l&&(handler=i[l],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(o):handler.call(e,o),!o.stoppedImmediatePropagation);l++);return s=!o.stoppedPropagation,a&&s&&e.parentNode?e.parentNode.dispatchEvent(o):!o.defaultPrevented}function n(e,t){return{configurable:!0,get:e,set:t}}function a(e,t,a){var r=b(t||e,a);g(e,"textContent",n(function(){return r.get.call(this)},function(e){r.set.call(this,e)}))}function r(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}function s(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function i(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function o(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function l(e){!p&&E.test(document.readyState)&&(p=!p,document.detachEvent(f,l),e=document.createEvent("Event"),e.initEvent(h,!0,!0),document.dispatchEvent(e))}function c(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function u(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var d=!0,p=!1,f="onreadystatechange",h="DOMContentLoaded",v="__IE8__"+Math.random(),g=Object.defineProperty||function(e,t,n){e[t]=n.value},m=Object.defineProperties||function(t,n){for(var a in n)if(y.call(n,a))try{g(t,a,n[a])}catch(r){e.console&&console.log(a+" failed on object:",t,r.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,w=e.Element.prototype,k=e.Text.prototype,T=/^[a-z]+$/,E=/loaded|complete/,S={},x=document.createElement("div"),O=document.documentElement,C=O.removeAttribute,P=O.setAttribute;a(e.HTMLCommentElement.prototype,w,"nodeValue"),a(e.HTMLScriptElement.prototype,null,"text"),a(k,null,"nodeValue"),a(e.HTMLTitleElement.prototype,null,"text"),g(e.HTMLStyleElement.prototype,"textContent",function(e){return n(function(){return e.get.call(this.styleSheet)},function(t){e.set.call(this.styleSheet,t)})}(b(e.CSSStyleSheet.prototype,"cssText"))),m(w,{textContent:{get:i,set:c},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;n>t;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:{value:function(e,n,a){var r,i,l=this,c="on"+e,d=l[v]||g(l,v,{value:{}})[v],p=d[c]||(d[c]={}),f=p.h||(p.h=[]);if(!y.call(p,"w")){if(p.w=function(e){return e[v]||t(l,u(l,e),f,!1)},!y.call(S,c))if(T.test(e)){try{r=document.createEventObject(),r[v]=!0,9!=l.nodeType&&null==l.parentNode&&x.appendChild(l),(i=l.getAttribute(c))&&C.call(l,c),l.fireEvent(c,r),S[c]=!0}catch(r){for(S[c]=!1;x.hasChildNodes();)x.removeChild(x.firstChild)}null!=i&&P.call(l,c,i)}else S[c]=!1;(p.n=S[c])&&l.attachEvent(c,p.w)}s(f,n)<0&&f[a?"unshift":"push"](n),"input"===e&&l.attachEvent("onkeyup",o)}},dispatchEvent:{value:function(e){var n,a=this,r="on"+e.type,s=a[v],i=s&&s[r],o=!!i;return e.target||(e.target=a),o?i.n?a.fireEvent(r,e):t(a,e,i.h,!0):(n=a.parentNode)?n.dispatchEvent(e):!0,!e.defaultPrevented}},removeEventListener:{value:function(e,t,n){var a=this,r="on"+e,i=a[v],o=i&&i[r],l=o&&o.h,c=l?s(l,t):-1;c>-1&&l.splice(c,1)}}}),m(k,{addEventListener:{value:w.addEventListener},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener}}),m(e.XMLHttpRequest.prototype,{addEventListener:{value:function(e,t,n){var a=this,r="on"+e,i=a[v]||g(a,v,{value:{}})[v],o=i[r]||(i[r]={}),l=o.h||(o.h=[]);s(l,t)<0&&(a[r]||(a[r]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),a.dispatchEvent(t)}),l[n?"unshift":"push"](t))}},dispatchEvent:{value:function(e){var n=this,a="on"+e.type,r=n[v],s=r&&r[a],i=!!s;return i&&(s.n?n.fireEvent(a,e):t(n,e,s.h,!0))}},removeEventListener:{value:w.removeEventListener}}),m(e.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),m(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?i.call(this):null},set:function(e){11===this.nodeType&&c.call(this,e)}},addEventListener:{value:function(t,n,a){var r=this;w.addEventListener.call(r,t,n,a),d&&t===h&&!E.test(r.readyState)&&(d=!1,r.attachEvent(f,l),e==top&&!function s(e){try{r.documentElement.doScroll("left"),l()}catch(t){setTimeout(s,50)}}())}},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener},createEvent:{value:function(e){var t;if("Event"!==e)throw new Error("unsupported "+e);return t=document.createEventObject(),t.timeStamp=(new Date).getTime(),t}}}),m(e.Window.prototype,{getComputedStyle:{value:function(){function e(e){this._=e}function t(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,s=function(e,t){return t.toUpperCase()};return e.prototype.getPropertyValue=function(e){var t,i,o,l=this._,c=l.style,u=l.currentStyle,d=l.runtimeStyle;return e=("float"===e?"style-float":e).replace(r,s),t=u?u[e]:c[e],n.test(t)&&!a.test(e)&&(i=c.left,o=d&&d.left,o&&(d.left=u.left),c.left="fontSize"===e?"1em":t,t=c.pixelLeft+"px",c.left=i,o&&(d.left=o)),null==t?t:t+""||"auto"},t.prototype.getPropertyValue=function(){return null},function(n,a){return a?new t(n):new e(n)}}()},addEventListener:{value:function(n,a,r){var i,o=e,l="on"+n;o[l]||(o[l]=function(e){return t(o,u(o,e),i,!1)}),i=o[l][v]||(o[l][v]=[]),s(i,a)<0&&i[r?"unshift":"push"](a)}},dispatchEvent:{value:function(t){var n=e["on"+t.type];return n?n.call(e,t)!==!1&&!t.defaultPrevented:!0}},removeEventListener:{value:function(t,n,a){var r="on"+t,i=(e[r]||Object)[v],o=i?s(i,n):-1;o>-1&&i.splice(o,1)}}}),function(e,t,n){for(n=0;n0||-1)*Math.floor(Math.abs(t))),t},ToPrimitive:function(t){var n,a,r;if(M(t))return t;if(a=t.valueOf,e(a)&&(n=a.call(t),M(n)))return n;if(r=t.toString,e(r)&&(n=r.call(t),M(n)))return n;throw new TypeError},ToObject:function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return a(e)},ToUint32:function(e){return e>>>0}},I=function(){};A(s,{bind:function(t){var n=this;if(!e(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var r,s=u.call(arguments,1),i=function(){if(this instanceof r){var e=n.apply(this,h.call(s,u.call(arguments)));return a(e)===e?e:this}return n.apply(t,h.call(s,u.call(arguments)))},o=g(0,n.length-s.length),l=[],c=0;o>c;c++)p.call(l,"$"+c);return r=Function("binder","return function ("+l.join(",")+"){ return binder.apply(this, arguments); }")(i),n.prototype&&(I.prototype=n.prototype,r.prototype=new I,I.prototype=null),r}});var R=v.bind(r.hasOwnProperty),U=v.bind(r.toString),z=v.bind(o.slice),q=v.bind(o.split),F=v.bind(o.indexOf),B=v.bind(p),H=t.isArray||function(e){return"[object Array]"===U(e)},$=1!==[].unshift(0);A(n,{unshift:function(){return f.apply(this,arguments),this.length}},$),A(t,{isArray:H});var J=a("a"),V="a"!==J[0]||!(0 in J),W=function(e){var t=!0,n=!0;return e&&(e.call("foo",function(e,n,a){"object"!=typeof a&&(t=!1)}),e.call([1],function(){"use strict";n="string"==typeof this},"x")),!!e&&t&&n};A(n,{forEach:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=-1,i=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++s1&&(a=arguments[1]),!e(n))throw new TypeError("Array.prototype.map callback must be a function");for(var l=0;i>l;l++)l in s&&("undefined"==typeof a?o[l]=n(s[l],l,r):o[l]=n.call(a,s[l],l,r));return o}},!W(n.map)),A(n,{filter:function(t){var n,a,r=D.ToObject(this),s=V&&P(this)?q(this,""):r,i=D.ToUint32(s.length),o=[];if(arguments.length>1&&(a=arguments[1]),!e(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var l=0;i>l;l++)l in s&&(n=s[l],("undefined"==typeof a?t(n,l,r):t.call(a,n,l,r))&&B(o,n));return o}},!W(n.filter)),A(n,{every:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.every callback must be a function");for(var i=0;s>i;i++)if(i in r&&!("undefined"==typeof n?t(r[i],i,a):t.call(n,r[i],i,a)))return!1;return!0}},!W(n.every)),A(n,{some:function(t){var n,a=D.ToObject(this),r=V&&P(this)?q(this,""):a,s=D.ToUint32(r.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.some callback must be a function");for(var i=0;s>i;i++)if(i in r&&("undefined"==typeof n?t(r[i],i,a):t.call(n,r[i],i,a)))return!0;return!1}},!W(n.some));var Z=!1;n.reduce&&(Z="object"==typeof n.reduce.call("es5",function(e,t,n,a){return a})),A(n,{reduce:function(t){var n=D.ToObject(this),a=V&&P(this)?q(this,""):n,r=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===r&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var s,i=0;if(arguments.length>=2)s=arguments[1];else for(;;){if(i in a){s=a[i++];break}if(++i>=r)throw new TypeError("reduce of empty array with no initial value")}for(;r>i;i++)i in a&&(s=t(s,a[i],i,n));return s}},!Z);var X=!1;n.reduceRight&&(X="object"==typeof n.reduceRight.call("es5",function(e,t,n,a){return a})),A(n,{reduceRight:function(t){var n=D.ToObject(this),a=V&&P(this)?q(this,""):n,r=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===r&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var s,i=r-1;if(arguments.length>=2)s=arguments[1];else for(;;){if(i in a){s=a[i--];break}if(--i<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>i)return s;do i in a&&(s=t(s,a[i],i,n));while(i--);return s}},!X);var Y=n.indexOf&&-1!==[0,1].indexOf(1,2);A(n,{indexOf:function(e){var t=V&&P(this)?q(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=0;for(arguments.length>1&&(a=D.ToInteger(arguments[1])),a=a>=0?a:g(0,n+a);n>a;a++)if(a in t&&t[a]===e)return a;return-1}},Y);var G=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);A(n,{lastIndexOf:function(e){var t=V&&P(this)?q(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=n-1;for(arguments.length>1&&(a=m(a,D.ToInteger(arguments[1]))),a=a>=0?a:n-Math.abs(a);a>=0;a--)if(a in t&&e===t[a])return a;return-1}},G);var K=function(){var e=[1,2],t=e.splice();return 2===e.length&&H(t)&&0===t.length}();A(n,{splice:function(e,t){return 0===arguments.length?[]:d.apply(this,arguments)}},!K);var Q=function(){var e={};return n.splice.call(e,0,0,1),1===e.length}();A(n,{splice:function(e,t){if(0===arguments.length)return[];var n=arguments;return this.length=g(D.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof t&&(n=u.call(arguments),n.length<2?B(n,this.length-e):n[1]=D.ToInteger(t)),d.apply(this,n)}},!Q);var ee=function(){var e=new t(1e5);return e[8]="x",e.splice(1,1),7===e.indexOf("x")}(),te=function(){var e=256,t=[];return t[e]="a",t.splice(e+1,0,"b"),"a"===t[e]}();A(n,{splice:function(e,t){for(var n,a=D.ToObject(this),r=[],s=D.ToUint32(a.length),o=D.ToInteger(e),l=0>o?g(s+o,0):m(o,s),c=m(g(D.ToInteger(t),0),s-l),d=0;c>d;)n=i(l+d),R(a,n)&&(r[d]=a[n]),d+=1;var p,f=u.call(arguments,2),h=f.length;if(c>h){for(d=l;s-c>d;)n=i(d+c),p=i(d+h),R(a,n)?a[p]=a[n]:delete a[p],d+=1;for(d=s;d>s-c+h;)delete a[d-1],d-=1}else if(h>c)for(d=s-c;d>l;)n=i(d+c-1),p=i(d+h-1),R(a,n)?a[p]=a[n]:delete a[p],d-=1;d=l;for(var v=0;v=0&&!H(t)&&e(t.callee)},be=ge(arguments)?ge:me;A(a,{keys:function(t){var n=e(t),a=be(t),r=null!==t&&"object"==typeof t,s=r&&P(t);if(!r&&!n&&!a)throw new TypeError("Object.keys called on a non-object");var o=[],l=le&&n;if(s&&ce||a)for(var c=0;cp;p++){var f=he[p];d&&"constructor"===f||!R(t,f)||B(o,f)}return o}});var ye=a.keys&&function(){return 2===a.keys(arguments).length}(1,2),we=a.keys&&function(){var e=a.keys(arguments);return 1!==arguments.length||1!==e.length||1!==e[0]}(1),ke=a.keys;A(a,{keys:function(e){return ke(be(e)?u.call(e):e)}},!ye||we);var Te=-621987552e5,Ee="-000001",Se=Date.prototype.toISOString&&-1===new Date(Te).toISOString().indexOf(Ee),xe=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();A(Date.prototype,{toISOString:function(){var e,t,n,a,r;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(a=this.getUTCFullYear(),r=this.getUTCMonth(),a+=Math.floor(r/12),r=(r%12+12)%12,e=[r+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],a=(0>a?"-":a>9999?"+":"")+z("00000"+Math.abs(a),a>=0&&9999>=a?-4:-6),t=e.length;t--;)n=e[t],10>n&&(e[t]="0"+n);return a+"-"+u.call(e,0,2).join("-")+"T"+u.call(e,2).join(":")+"."+z("000"+this.getUTCMilliseconds(),-3)+"Z"}},Se||xe);var Oe=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Te).toJSON().indexOf(Ee)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(e){return!1}}();Oe||(Date.prototype.toJSON=function(t){var n=a(this),r=D.ToPrimitive(n);if("number"==typeof r&&!isFinite(r))return null;var s=n.toISOString;if(!e(s))throw new TypeError("toISOString property is not callable");return s.call(n)});var Ce=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Pe=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),_e=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(_e||Pe||!Ce){var je=Math.pow(2,31)-1,Le=(Math.floor(je/1e3),N(new Date(1970,0,1,0,0,0,je+1).getTime()));Date=function(e){var t=function(n,a,r,s,o,l,c){var u,d=arguments.length;if(this instanceof e){var p=l,f=c;if(Le&&d>=7&&c>je){var h=Math.floor(c/je)*je,v=Math.floor(h/1e3);p+=v,f-=1e3*v}u=1===d&&i(n)===n?new e(t.parse(n)):d>=7?new e(n,a,r,s,o,p,f):d>=6?new e(n,a,r,s,o,p):d>=5?new e(n,a,r,s,o):d>=4?new e(n,a,r,s):d>=3?new e(n,a,r):d>=2?new e(n,a):d>=1?new e(n):new e}else u=e.apply(this,arguments);return M(u)||A(u,{constructor:t},!0),u},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),a=[0,31,59,90,120,151,181,212,243,273,304,334,365],r=function(e,t){var n=t>1?1:0;return a[t]+Math.floor((e-1969+n)/4)-Math.floor((e-1901+n)/100)+Math.floor((e-1601+n)/400)+365*(e-1970)},s=function(t){var n=0,a=t;if(Le&&a>je){var r=Math.floor(a/je)*je,s=Math.floor(r/1e3);n+=s,a-=1e3*s}return l(new e(1970,0,1,0,0,n,a))};for(var o in e)R(e,o)&&(t[o]=e[o]);A(t,{now:e.now,UTC:e.UTC},!0),t.prototype=e.prototype,A(t.prototype,{constructor:t},!0);var c=function(t){var a=n.exec(t);if(a){var i,o=l(a[1]),c=l(a[2]||1)-1,u=l(a[3]||1)-1,d=l(a[4]||0),p=l(a[5]||0),f=l(a[6]||0),h=Math.floor(1e3*l(a[7]||0)),v=Boolean(a[4]&&!a[8]),g="-"===a[9]?1:-1,m=l(a[10]||0),b=l(a[11]||0),y=p>0||f>0||h>0;return(y?24:25)>d&&60>p&&60>f&&1e3>h&&c>-1&&12>c&&24>m&&60>b&&u>-1&&u=-864e13&&864e13>=i)?i:NaN}return e.parse.apply(this,arguments)};return A(t,{parse:c}),t}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var Ae=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),Me={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(e,t){for(var n=-1,a=t;++n=0;)n+=Me.data[t],Me.data[t]=Math.floor(n/e),n=n%e*Me.base},numToString:function(){for(var e=Me.size,t="";--e>=0;)if(""!==t||0===e||0!==Me.data[e]){var n=i(Me.data[e]);""===t?t=n:t+=z("0000000",0,7-n.length)+n}return t},pow:function Ye(e,t,n){return 0===t?n:t%2===1?Ye(e,t-1,n*e):Ye(e*e,t/2,n)},log:function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}},Ne=function(e){var t,n,a,r,s,o,c,u;if(t=l(e),t=N(t)?0:Math.floor(t),0>t||t>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=l(this),N(n))return"NaN";if(-1e21>=n||n>=1e21)return i(n);if(a="",0>n&&(a="-",n=-n),r="0",n>1e-21)if(s=Me.log(n*Me.pow(2,69,1))-69,o=0>s?n*Me.pow(2,-s,1):n/Me.pow(2,s,1),o*=4503599627370496,s=52-s,s>0){for(Me.multiply(0,o),c=t;c>=7;)Me.multiply(1e7,0),c-=7;for(Me.multiply(Me.pow(10,c,1),0),c=s-1;c>=23;)Me.divide(1<<23),c-=23;Me.divide(1<0?(u=r.length,r=t>=u?a+z("0.0000000000000000000",0,t-u+2)+r:a+z(r,0,u-t)+"."+z(r,u-t)):r=a+r,r};A(c,{toFixed:Ne},Ae);var De=function(){try{return"1"===1..toPrecision(void 0)}catch(e){return!0}}(),Ie=c.toPrecision;A(c,{toPrecision:function(e){return"undefined"==typeof e?Ie.call(this):Ie.call(this,e)}},De),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var e="undefined"==typeof/()??/.exec("")[1],t=Math.pow(2,32)-1;o.split=function(n,a){var r=this;if("undefined"==typeof n&&0===a)return[];if(!S(n))return q(this,n,a);var s,i,o,l,c=[],d=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),f=0,h=new RegExp(n.source,d+"g");r+="",e||(s=new RegExp("^"+h.source+"$(?!\\s)",d));var v="undefined"==typeof a?t:D.ToUint32(a);for(i=h.exec(r);i&&(o=i.index+i[0].length,!(o>f&&(B(c,z(r,f,i.index)),!e&&i.length>1&&i[0].replace(s,function(){for(var e=1;e1&&i.index=v)));)h.lastIndex===i.index&&h.lastIndex++,i=h.exec(r);return f===r.length?(l||!h.test(""))&&B(c,""):B(c,z(r,f)),c.length>v?z(c,0,v):c}}():"0".split(void 0,0).length&&(o.split=function(e,t){return"undefined"==typeof e&&0===t?[]:q(this,e,t)});var Re=o.replace,Ue=function(){var e=[];return"x".replace(/x(.)?/g,function(t,n){B(e,n)}),1===e.length&&"undefined"==typeof e[0]}();Ue||(o.replace=function(t,n){var a=e(n),r=S(t)&&/\)[*?]/.test(t.source);if(a&&r){var s=function(e){var a=arguments.length,r=t.lastIndex;t.lastIndex=0;var s=t.exec(e)||[];return t.lastIndex=r,B(s,arguments[a-2],arguments[a-1]),n.apply(this,s)};return Re.call(this,t,s)}return Re.call(this,t,n)});var ze=o.substr,qe="".substr&&"b"!=="0b".substr(-1);A(o,{substr:function(e,t){var n=e;return 0>e&&(n=g(this.length+e,0)),ze.call(this,n,t)}},qe);var Fe=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",Be="​",He="["+Fe+"]",$e=new RegExp("^"+He+He+"*"),Je=new RegExp(He+He+"*$"),Ve=o.trim&&(Fe.trim()||!Be.trim());A(o,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return i(this).replace($e,"").replace(Je,"")}},Ve);var We=o.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);A(o,{lastIndexOf:function(e){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");for(var t=i(this),n=i(e),a=arguments.length>1?l(arguments[1]):NaN,r=N(a)?1/0:D.ToInteger(a),s=m(g(r,0),t.length),o=n.length,c=s+o;c>0;){c=g(0,c-o);var u=F(z(t,c,s+o),n);if(-1!==u)return c+u}return-1}},We);var Ze=o.lastIndexOf;if(A(o,{lastIndexOf:function(e){return Ze.apply(this,arguments)}},1!==o.lastIndexOf.length),(8!==parseInt(Fe+"08")||22!==parseInt(Fe+"0x16"))&&(parseInt=function(e){var t=/^[\-+]?0[xX]/;return function(n,a){var r=i(n).trim(),s=l(a)||(t.test(r)?16:10);return e(r,s)}}(parseInt)),"RangeError: test"!==String(new RangeError("test"))){var Xe=(Error.prototype.toString,function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");var e=this.name;"undefined"==typeof e?e="Error":"string"!=typeof e&&(e=i(e));var t=this.message;return"undefined"==typeof t?t="":"string"!=typeof t&&(t=i(t)),e?t?e+": "+t:e:t});Error.prototype.toString=Xe}}),function(e,t){function n(e,t){var n=e.createElement("p"),a=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function a(){var e=y.elements;return"string"==typeof e?e.split(" "):e}function r(e,t){var n=y.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),y.elements=n+" "+e,c(t)}function s(e){var t=b[e[g]];return t||(t={},m++,e[g]=m,b[m]=t),t}function i(e,n,a){if(n||(n=t),d)return n.createElement(e);a||(a=s(n));var r;return r=a.cache[e]?a.cache[e].cloneNode():v.test(e)?(a.cache[e]=a.createElem(e)).cloneNode():a.createElem(e),!r.canHaveChildren||h.test(e)||r.tagUrn?r:a.frag.appendChild(r)}function o(e,n){if(e||(e=t),d)return e.createDocumentFragment();n=n||s(e);for(var r=n.frag.cloneNode(),i=0,o=a(),l=o.length;l>i;i++)r.createElement(o[i]);return r}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return y.shivMethods?i(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+a().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(y,t.frag)}function c(e){e||(e=t);var a=s(e);return!y.shivCSS||u||a.hasCSS||(a.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),d||l(e,a),e}var u,d,p="3.7.3",f=e.html5||{},h=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",m=0,b={};!function(){try{var e=t.createElement("a");e.innerHTML="",u="hidden"in e,d=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){u=!0,d=!0}}();var y={elements:f.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:p,shivCSS:f.shivCSS!==!1,supportsUnknownElements:d,shivMethods:f.shivMethods!==!1,type:"default",shivDocument:c,createElement:i,createDocumentFragment:o,addElements:r};e.html5=y,c(t),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document),function(){function e(t,a){function s(e){if(s[e]!==g)return s[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=s("json-stringify")&&s("json-parse");else{var n,r='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var l=a.stringify,u="function"==typeof l&&y;if(u){(n=function(){return 1}).toJSON=n;try{u="0"===l(0)&&"0"===l(new i)&&'""'==l(new o)&&l(b)===g&&l(g)===g&&l()===g&&"1"===l(n)&&"[1]"==l([n])&&"[null]"==l([g])&&"null"==l(null)&&"[null,null,null]"==l([g,b,null])&&l({a:[n,!0,!1,null,"\x00\b\n\f\r "]})==r&&"1"===l(null,n)&&"[\n 1,\n 2\n]"==l([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==l(new c(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==l(new c(864e13))&&'"-000001-01-01T00:00:00.000Z"'==l(new c(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==l(new c(-1))}catch(d){u=!1}}t=u}if("json-parse"==e){var p=a.parse;if("function"==typeof p)try{if(0===p("0")&&!p(!1)){n=p(r);var f=5==n.a.length&&1===n.a[0];if(f){try{f=!p('" "')}catch(d){}if(f)try{f=1!==p("01")}catch(d){}if(f)try{f=1!==p("1.")}catch(d){}}}}catch(d){f=!1}t=f}}return s[e]=!!t}t||(t=r.Object()),a||(a=r.Object());var i=t.Number||r.Number,o=t.String||r.String,l=t.Object||r.Object,c=t.Date||r.Date,u=t.SyntaxError||r.SyntaxError,d=t.TypeError||r.TypeError,p=t.Math||r.Math,f=t.JSON||r.JSON;"object"==typeof f&&f&&(a.stringify=f.stringify,a.parse=f.parse);var h,v,g,m=l.prototype,b=m.toString,y=new c(-0xc782b5b800cec);try{y=-109252==y.getUTCFullYear()&&0===y.getUTCMonth()&&1===y.getUTCDate()&&10==y.getUTCHours()&&37==y.getUTCMinutes()&&6==y.getUTCSeconds()&&708==y.getUTCMilliseconds()}catch(w){}if(!s("json")){var k="[object Function]",T="[object Date]",E="[object Number]",S="[object String]",x="[object Array]",O="[object Boolean]",C=s("bug-string-char-index");if(!y)var P=p.floor,_=[0,31,59,90,120,151,181,212,243,273,304,334],j=function(e,t){return _[t]+365*(e-1970)+P((e-1969+(t=+(t>1)))/4)-P((e-1901+t)/100)+P((e-1601+t)/400)};if((h=m.hasOwnProperty)||(h=function(e){var t,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=b?h=function(e){var t=this.__proto__,n=e in(this.__proto__=null,this);return this.__proto__=t,n}:(t=n.constructor,h=function(e){var n=(this.constructor||t).prototype;return e in this&&!(e in n&&this[e]===n[e])}),n=null,h.call(this,e)}),v=function(e,t){var a,r,s,i=0;(a=function(){this.valueOf=0}).prototype.valueOf=0,r=new a;for(s in r)h.call(r,s)&&i++;return a=r=null,i?v=2==i?function(e,t){var n,a={},r=b.call(e)==k;for(n in e)r&&"prototype"==n||h.call(a,n)||!(a[n]=1)||!h.call(e,n)||t(n)}:function(e,t){var n,a,r=b.call(e)==k;for(n in e)r&&"prototype"==n||!h.call(e,n)||(a="constructor"===n)||t(n);(a||h.call(e,n="constructor"))&&t(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],v=function(e,t){var a,s,i=b.call(e)==k,o=!i&&"function"!=typeof e.constructor&&n[typeof e.hasOwnProperty]&&e.hasOwnProperty||h;for(a in e)i&&"prototype"==a||!o.call(e,a)||t(a);for(s=r.length;a=r[--s];o.call(e,a)&&t(a));}),v(e,t)},!s("json-stringify")){var L={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},A="000000",M=function(e,t){return(A+(t||0)).slice(-e)},N="\\u00",D=function(e){for(var t='"',n=0,a=e.length,r=!C||a>10,s=r&&(C?e.split(""):e);a>n;n++){var i=e.charCodeAt(n);switch(i){case 8:case 9:case 10:case 12:case 13:case 34:case 92:t+=L[i];break;default:if(32>i){t+=N+M(2,i.toString(16));break}t+=r?s[n]:e.charAt(n)}}return t+'"'},I=function(e,t,n,a,r,s,i){var o,l,c,u,p,f,m,y,w,k,C,_,L,A,N,R;try{o=t[e]}catch(U){}if("object"==typeof o&&o)if(l=b.call(o),l!=T||h.call(o,"toJSON"))"function"==typeof o.toJSON&&(l!=E&&l!=S&&l!=x||h.call(o,"toJSON"))&&(o=o.toJSON(e));else if(o>-1/0&&1/0>o){if(j){for(p=P(o/864e5),c=P(p/365.2425)+1970-1;j(c+1,0)<=p;c++);for(u=P((p-j(c,0))/30.42);j(c,u+1)<=p;u++);p=1+p-j(c,u),f=(o%864e5+864e5)%864e5,m=P(f/36e5)%24,y=P(f/6e4)%60,w=P(f/1e3)%60,k=f%1e3}else c=o.getUTCFullYear(),u=o.getUTCMonth(),p=o.getUTCDate(),m=o.getUTCHours(),y=o.getUTCMinutes(),w=o.getUTCSeconds(),k=o.getUTCMilliseconds();o=(0>=c||c>=1e4?(0>c?"-":"+")+M(6,0>c?-c:c):M(4,c))+"-"+M(2,u+1)+"-"+M(2,p)+"T"+M(2,m)+":"+M(2,y)+":"+M(2,w)+"."+M(3,k)+"Z"}else o=null;if(n&&(o=n.call(t,e,o)),null===o)return"null";if(l=b.call(o),l==O)return""+o;if(l==E)return o>-1/0&&1/0>o?""+o:"null";if(l==S)return D(""+o);if("object"==typeof o){for(A=i.length;A--;)if(i[A]===o)throw d();if(i.push(o),C=[], +N=s,s+=r,l==x){for(L=0,A=o.length;A>L;L++)_=I(L,o,n,a,r,s,i),C.push(_===g?"null":_);R=C.length?r?"[\n"+s+C.join(",\n"+s)+"\n"+N+"]":"["+C.join(",")+"]":"[]"}else v(a||o,function(e){var t=I(e,o,n,a,r,s,i);t!==g&&C.push(D(e)+":"+(r?" ":"")+t)}),R=C.length?r?"{\n"+s+C.join(",\n"+s)+"\n"+N+"}":"{"+C.join(",")+"}":"{}";return i.pop(),R}};a.stringify=function(e,t,a){var r,s,i,o;if(n[typeof t]&&t)if((o=b.call(t))==k)s=t;else if(o==x){i={};for(var l,c=0,u=t.length;u>c;l=t[c++],o=b.call(l),(o==S||o==E)&&(i[l]=1));}if(a)if((o=b.call(a))==E){if((a-=a%1)>0)for(r="",a>10&&(a=10);r.lengthR;)switch(r=s.charCodeAt(R)){case 9:case 10:case 13:case 32:R++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e=C?s.charAt(R):s[R],R++,e;case 34:for(e="@",R++;i>R;)if(r=s.charCodeAt(R),32>r)F();else if(92==r)switch(r=s.charCodeAt(++R)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=q[r],R++;break;case 117:for(t=++R,n=R+4;n>R;R++)r=s.charCodeAt(R),r>=48&&57>=r||r>=97&&102>=r||r>=65&&70>=r||F();e+=z("0x"+s.slice(t,R));break;default:F()}else{if(34==r)break;for(r=s.charCodeAt(R),t=R;r>=32&&92!=r&&34!=r;)r=s.charCodeAt(++R);e+=s.slice(t,R)}if(34==s.charCodeAt(R))return R++,e;F();default:if(t=R,45==r&&(a=!0,r=s.charCodeAt(++R)),r>=48&&57>=r){for(48==r&&(r=s.charCodeAt(R+1),r>=48&&57>=r)&&F(),a=!1;i>R&&(r=s.charCodeAt(R),r>=48&&57>=r);R++);if(46==s.charCodeAt(R)){for(n=++R;i>n&&(r=s.charCodeAt(n),r>=48&&57>=r);n++);n==R&&F(),R=n}if(r=s.charCodeAt(R),101==r||69==r){for(r=s.charCodeAt(++R),(43==r||45==r)&&R++,n=R;i>n&&(r=s.charCodeAt(n),r>=48&&57>=r);n++);n==R&&F(),R=n}return+s.slice(t,R)}if(a&&F(),"true"==s.slice(R,R+4))return R+=4,!0;if("false"==s.slice(R,R+5))return R+=5,!1;if("null"==s.slice(R,R+4))return R+=4,null;F()}return"$"},H=function(e){var t,n;if("$"==e&&F(),"string"==typeof e){if("@"==(C?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=B(),"]"!=e;n||(n=!0))n&&(","==e?(e=B(),"]"==e&&F()):F()),","==e&&F(),t.push(H(e));return t}if("{"==e){for(t={};e=B(),"}"!=e;n||(n=!0))n&&(","==e?(e=B(),"}"==e&&F()):F()),(","==e||"string"!=typeof e||"@"!=(C?e.charAt(0):e[0])||":"!=B())&&F(),t[e.slice(1)]=H(B());return t}F()}return e},$=function(e,t,n){var a=J(e,t,n);a===g?delete e[t]:e[t]=a},J=function(e,t,n){var a,r=e[t];if("object"==typeof r&&r)if(b.call(r)==x)for(a=r.length;a--;)$(r,a,n);else v(r,function(e){$(r,e,n)});return n.call(e,t,r)};a.parse=function(e,t){var n,a;return R=0,U=""+e,n=H(B()),"$"!=B()&&F(),R=U=null,t&&b.call(t)==k?J((a={},a[""]=n,a),"",t):n}}}return a.runInContext=e,a}var t="function"==typeof define&&define.amd,n={"function":!0,object:!0},a=n[typeof exports]&&exports&&!exports.nodeType&&exports,r=n[typeof window]&&window||this,s=a&&n[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;if(!s||s.global!==s&&s.window!==s&&s.self!==s||(r=s),a&&!t)e(r,a);else{var i=r.JSON,o=r.JSON3,l=!1,c=e(r,r.JSON3={noConflict:function(){return l||(l=!0,r.JSON=i,r.JSON3=o,i=o=null),c}});r.JSON={parse:c.parse,stringify:c.stringify}}t&&define(function(){return c})}.call(this);var Url=function(){"use strict";var e={protocol:"protocol",host:"hostname",port:"port",path:"pathname",query:"search",hash:"hash"},t={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},n=function(n,a){var i,o=document,l=o.createElement("a"),a=a||o.location.href,c=a.match(/\/\/(.*?)(?::(.*?))?@/)||[];l.href=a;for(i in e)n[i]=l[e[i]]||"";if(n.protocol=n.protocol.replace(/:$/,""),n.query=n.query.replace(/^\?/,""),n.hash=r(n.hash.replace(/^#/,"")),n.user=r(c[1]||""),n.pass=r(c[2]||""),n.port=t[n.protocol]==n.port||0==n.port?"":n.port,n.protocol||/^([a-z]+:)?\/\//.test(a))n.path=n.path.replace(/^\/?/,"/");else{var u=new Url(o.location.href.match(/(.*\/)/)[0]),d=u.path.split("/"),p=n.path.split("/"),f=["protocol","user","pass","host","port"],h=f.length;for(d.pop(),i=0;h>i;i++)n[f[i]]=u[f[i]];for(;".."==p[0];)d.pop(),p.shift();n.path=("/"!=a.charAt(0)?d.join("/"):"")+"/"+p.join("/")}n.paths(("/"==n.path.charAt(0)?n.path.slice(1):n.path).split("/")),s(n)},a=function(e){return encodeURIComponent(e).replace(/'/g,"%27")},r=function(e){return e=e.replace(/\+/g," "),e=e.replace(/%([ef][0-9a-f])%([89ab][0-9a-f])%([89ab][0-9a-f])/gi,function(e,t,n,a){var r=parseInt(t,16)-224,s=parseInt(n,16)-128;if(0==r&&32>s)return e;var i=parseInt(a,16)-128,o=(r<<12)+(s<<6)+i;return o>65535?e:String.fromCharCode(o)}),e=e.replace(/%([cd][0-9a-f])%([89ab][0-9a-f])/gi,function(e,t,n){var a=parseInt(t,16)-192;if(2>a)return e;var r=parseInt(n,16)-128;return String.fromCharCode((a<<6)+r)}),e=e.replace(/%([0-7][0-9a-f])/gi,function(e,t){return String.fromCharCode(parseInt(t,16))})},s=function(e){var t=e.query;e.query=new function(e){for(var t,n=/([^=&]+)(=([^&]*))?/g;t=n.exec(e);){var s=decodeURIComponent(t[1].replace(/\+/g," ")),i=t[3]?r(t[3]):"";null!=this[s]?(this[s]instanceof Array||(this[s]=[this[s]]),this[s].push(i)):this[s]=i}this.clear=function(){for(var e in this)this[e]instanceof Function||delete this[e]},this.count=function(){var e,t=0;for(e in this)this[e]instanceof Function||t++;return t},this.isEmpty=function(){return 0===this.count()},this.toString=function(){var e,t,n="",r=a;for(e in this)if(!(this[e]instanceof Function))if(this[e]instanceof Array){var s=this[e].length;if(s)for(t=0;s>t;t++)n+=n?"&":"",n+=r(e)+"="+r(this[e][t]);else n+=(n?"&":"")+r(e)+"="}else n+=n?"&":"",n+=r(e)+"="+r(this[e]);return n}}(t)};return function(e){this.paths=function(e){var t,n="",s=0;if(e&&e.length&&e+""!==e){for(this.isAbsolute()&&(n="/"),t=e.length;t>s;s++)e[s]=a(e[s]);this.path=n+e.join("/")}for(e=("/"===this.path.charAt(0)?this.path.slice(1):this.path).split("/"),s=0,t=e.length;t>s;s++)e[s]=r(e[s]);return e},this.encode=a,this.decode=r,this.isAbsolute=function(){return this.protocol||"/"===this.path.charAt(0)},this.toString=function(){return(this.protocol&&this.protocol+"://")+(this.user&&a(this.user)+(this.pass&&":"+a(this.pass))+"@")+(this.host&&this.host)+(this.port&&":"+this.port)+(this.path&&this.path)+(this.query.toString()&&"?"+this.query)+(this.hash&&"#"+a(this.hash))},n(this,e)}}();!function(e){"use strict";function t(){return u.createDocumentFragment()}function n(e){return u.createElement(e)}function a(e){if(1===e.length)return r(e[0]);for(var n=t(),a=z.call(e),s=0;s-1}}([].indexOf||function(e){for(q=this.length;q--&&this[q]!==e;);return q}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;ti?r[c.call(a,s)-1]=y.call(s,this):r[i]},emit:function(e){for(var t=l.call(this,f),a=t&&this[f].l,r=t&&l.call(a,e),s=r&&a[e].slice(0),i=r&&u.call(arguments,1),o=0,c=r?s.length:o;c>o;)n(this,s[o++],i);return r},expect:function(){for(var e=0;e-1&&(s.splice(n,1),s.length||delete r[e])),this},on:function(e,t,n){var a=l.call(this,f),r=(a?this[f]:T(this)).l,s=a&&l.call(r,e)?r[e]:r[e]=[];return w.call(s,t)<0&&(n?d:c).call(s,t),this},once:function(e,t,a){var r=function(i){s.off(e,r,a),n(s,t,arguments)},s=this;return s.on(e,r,a)},trigger:function(e,t){var r=l.call(this,f),s=r&&this[f].l,i="string"==typeof e,c=i?e:e.type,u=r&&l.call(s,c),d=u&&s[c].slice(0),p=i?new a(this,c,t):e,h=0,v=u?d.length:h,g=!(p instanceof a);for(g&&(p._active=!0,p.stopImmediatePropagation=o.stopImmediatePropagation),p.currentTarget=this,m[0]=p;p._active&&v>h;)n(this,d[h++],m);return g&&(delete p._active,delete p.stopImmediatePropagation),!p.defaultPrevented},when:function(e,t){var a=l.call(this,f),r=(a?this[f]:T(this)).w,s=a&&l.call(r,e);return s?(n(this,t,r[e]),this):this.once(e,function(){l.call(r,e)||(r[e]=arguments)},!0).once(e,t)}},x=function(e,t,n){l.call(e,t)||(e[t]=n)},O=!1;o.defaultPrevented=!1,o._active=o.cancelable=!0,o.preventDefault=function(){this.defaultPrevented=!0},o.stopImmediatePropagation=function(){this._active=!1};for(r in S)l.call(S,r)&&b(i,r,{enumerable:!1,configurable:!0,writable:!0,value:S[r]});!function(e){function t(t){function n(e){e[t].apply(e,this)}return function(){return e.call(this,n,arguments),this}}for(var n in S)S.hasOwnProperty(n)&&!/^listeners|boundTo$/.test(n)&&b(s,n,{enumerable:!1,configurable:!0,writable:!0,value:t(n)})}(s.forEach||function(e,t){for(var n=this,a=0;a-1&&(n.splice(a,1),n.length||(self["on"+e]=null))}),u.expect("ready","DOMContentLoaded"),/loaded|complete/.test(u.readyState)?(e.setImmediate||setTimeout)(c):u.once("DOMContentLoaded",c,!0)}(window),"$"in window||b(window,"$",{enumerable:!1,configurable:!0,writable:!0,value:function(e,t){var n=t||document,a=e.length-6,r=e.lastIndexOf(":first")===a&&a>0,s=r?n.querySelector(e.slice(0,a)):n.querySelectorAll(e);return r?s?[s]:[]:v.call(s)}})}}(Object);var Class=Class||function(e){"use strict";function t(e,t,a){for(var r,s=[],i=0;it;)r[t++].call(this);return e.apply(this,arguments)}}(k),k[f]=S)),y.call(e,h)&&n(e[h],k,b,!0,!0),p&&(v!==b&&n(v,k,b,!0,!0),k[f]=S),S[c]!==k&&a(S,c,k,!1),n(e,S,b,!1,!0),y.call(e,d)&&i([].concat(e[d]),S),k}}(Object);(function(){this.NANO={INTERACTIVE:2,UPDATE:1,DISABLED:0}}).call(this),function(){this.helpers={link:function(e,t,n,a,r,s){return null==e&&(e=""),null==t&&(t=""),null==n&&(n=""),null==a&&(a={}),null==r&&(r=""),null==s&&(s=""),a=JSON.stringify(a),t&&(t="",s+=" iconed"),r?""+t+e+"":""+t+e+""},bar:function(e,t,n,a,r){var s;return null==e&&(e=0),null==t&&(t=0),null==n&&(n=100),null==a&&(a=""),null==r&&(r=""),n>t?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),s=Math.round((e-t)/(n-t)*100),"
"+r+"
"},round:function(e){return Math.round(e)},fixed:function(e,t){return null==t&&(t=1),Number(Math.round(e+"e"+t)+"e-"+t)},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)}}}.call(this),function(){document.when("ready",function(e){return function(){var t;t={},e.nanoui=new e.NanoUI(t,document),e.nanowindow=new e.Window(t,document),t.emit("memes"),e.NanoBus=t}}(this))}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.NanoUI=function(){function t(t,n){this.bus=t,this.fragment=null!=n?n:document,this.winset=e(this.winset,this),this.close=e(this.close,this),this.act=e(this.act,this),this.render=e(this.render,this),this.update=e(this.update,this),this.serverUpdate=e(this.serverUpdate,this),this.bus.on("serverUpdate",this.serverUpdate),this.bus.on("update",this.update),this.bus.on("render",this.render),this.bus.on("memes",this.render),this.initialized=!1,this.data={},this.initialData=JSON.parse(this.fragment.query("#data").data("initial")),null==this.initialData&&("data"in this.initialData||"config"in this.initalData)&&this.error("Initial data did not load correctly.")}return t.prototype.serverUpdate=function(e){var t,n,a;try{t=JSON.parse(e)}catch(a){n=a,this.error(n)}this.bus.emit("update",t)},t.prototype.update=function(e){null==e.data&&(null!=this.data.data?e.data=this.data.data:e.data={}),this.data=e,this.initialized&&this.bus.emit("render",this.data),this.bus.emit("updated")},t.prototype.render=function(e){var t,n,a,r;this.initialized||(e=this.initialData);try{this.initialized||(r=this.fragment.query("#layout"),r.innerHTML=TMPL[e.config.templates.layout](e.data,e.config,helpers)),t=this.fragment.query("#content"),t.innerHTML=TMPL[e.config.templates.content](e.data,e.config,helpers)}catch(a){return n=a,void this.error(n)}return this.bus.emit("rendered",e),this.initialized?void 0:(this.initialized=!0,this.data=this.initialData,this.bus.emit("initialized",e))},t.prototype.act=function(e,t){return null==t&&(t={}),t.src=this.data.config.ref,t.nano=e,location.href=util.href(null,t)},t.prototype.error=function(e){var t;return e instanceof Error&&(e=e.fileName+":"+e.lineNumber+" "+e.message),t={nano_error:e},location.href=util.href(null,t)},t.prototype.log=function(e){var t;return t={nano_log:e},location.href=util.href(null,t)},t.prototype.close=function(){var e;return e={command:"nanoclose "+this.data.config.ref},this.winset("is-visible","false"),location.href=util.href("winset",e)},t.prototype.winset=function(e,t,n){var a,r;return null==n&&(n=this.data.config.window.ref),a={},a[n+"."+e]=t,r=a,location.href=util.href("winset",r)},t}()}.call(this),function(){this.util={extend:function(e,t){return Object.keys(t).forEach(function(n){var a;return a=t[n],a&&"[object Object]"===Object.prototype.toString.call(a)?(e[n]=e[n]||{},util.extend(e[n],a)):e[n]=a}),e},href:function(e,t){return null==e&&(e=""),null==t&&(t={}),e=new Url("byond://"+e),util.extend(e.query,t),e}}}.call(this),function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.Window=function(){function t(t,n){this.bus=t,this.fragment=null!=n?n:document,this.attachLinks=e(this.attachLinks,this),this.updateLinks=e(this.updateLinks,this),this.updateStatus=e(this.updateStatus,this),this.resize=e(this.resize,this),this.attachResize=e(this.attachResize,this),this.drag=e(this.drag,this),this.attachDrag=e(this.attachDrag,this),this.attachButtons=e(this.attachButtons,this),this.calcOffset=e(this.calcOffset,this),this.fancyChrome=e(this.fancyChrome,this),this.dragging=!1,this.resizing=!1,this.bus.once("initialized",function(e){return function(t){return setTimeout(e.focusMap,100),t.config.user.fancy?(e.fancyChrome(),e.calcOffset(),e.attachButtons(),e.attachDrag(),e.attachResize()):void 0}}(this)),this.bus.on("rendered",this.updateStatus),this.bus.on("rendered",this.updateLinks),this.bus.on("rendered",this.attachLinks),this.fragment.on("keydown",this.focusMap)}return t.prototype.setPos=function(e,t){return nanoui.winset("pos",e+","+t)},t.prototype.setSize=function(e,t){return nanoui.winset("size",e+","+t)},t.prototype.focusMap=function(){return nanoui.winset("focus",1,"mapwindow.map")},t.prototype.fancyChrome=function(){var e;return nanoui.winset("titlebar",0),nanoui.winset("can-resize",0),e=this.fragment.queryAll(".fancy"),e.forEach(function(e){return e.classList.remove("fancy")})},t.prototype.calcOffset=function(){return this.xOriginal=window.screenLeft,this.yOriginal=window.screenTop,this.setPos(0,0),this.xOffset=window.screenLeft,this.yOffset=window.screenTop,this.setPos(this.xOriginal-this.xOffset,this.yOriginal-this.yOffset)},t.prototype.attachButtons=function(){var e,t,n,a;return e=function(){return nanoui.close()},n=function(){return nanoui.winset("is-minimized","true")},t=this.fragment.queryAll(".close"),t.forEach(function(t){return t.on("click",e)}),a=this.fragment.queryAll(".minimize"),a.forEach(function(e){return e.on("click",n)})},t.prototype.attachDrag=function(){var e;return e=this.fragment.query("#titlebar"),this.fragment.on("mousemove",this.drag),e.on("mousedown",function(e){return function(){return e.dragging=!0}}(this)),this.fragment.on("mouseup",function(e){return function(){return e.dragging=!1}}(this))},t.prototype.drag=function(e){var t,n;return null==e&&(e=window.event),this.dragging?(null==this.xDrag&&(this.xDrag=e.screenX),null==this.yDrag&&(this.yDrag=e.screenY),t=e.screenX-this.xDrag+(window.screenLeft-this.xOffset),n=e.screenY-this.yDrag+(window.screenTop-this.yOffset),this.setPos(t,n),this.xDrag=e.screenX,this.yDrag=e.screenY):void 0},t.prototype.attachResize=function(){var e;return e=this.fragment.query("#resize"),this.fragment.on("mousemove",this.resize),e.on("mousedown",function(e){return function(){return e.resizing=!0}}(this)),this.fragment.on("mouseup",function(e){return function(){return e.resizing=!1}}(this))},t.prototype.resize=function(e){var t,n;return null==e&&(e=window.event),this.resizing?(null==this.xResize&&(this.xResize=e.screenX),null==this.yResize&&(this.yResize=e.screenY),t=Math.max(250,e.screenX-this.xResize+window.innerWidth),n=Math.max(250,e.screenY-this.yResize+window.innerHeight),this.setSize(t,n),this.xResize=e.screenX,this.yResize=e.screenY):void 0},t.prototype.updateStatus=function(e){var t;return t=this.fragment.queryAll(".statusicon"),t.forEach(function(t){var n;switch(t.className=t.className.replace(/good|bad|average/g,""),e.config.status){case NANO.INTERACTIVE:n="good";break;case NANO.UPDATE:n="average";break;default:n="bad"}return t.classList.add(n)})},t.prototype.updateLinks=function(e){var t;return t=this.fragment.queryAll(".link"),e.config.status!==NANO.INTERACTIVE?t.forEach(function(e){return e.className="link disabled"}):void 0},t.prototype.attachLinks=function(e){var t;return t=function(){var t,n;return t=this.data("action"),n=JSON.parse(this.data("params")),null!=t&&null!=n&&e.config.status===NANO.INTERACTIVE?nanoui.act(t,n):void 0},this.fragment.queryAll(".link.active").forEach(function(e){return e.on("click",t)})},t}()}.call(this),window.TMPL={},TMPL.airlock_electronics=function(e,t,n){var a='
';a+=e.oneAccess?""+n.link("One Required","unlock","one_access"):""+n.link("All Required","lock","one_access"),a+=""+n.link("Clear","refresh","clear")+'
';var r=e.regions;if(r)for(var s,i=-1,o=r.length-1;o>i;)s=r[i+=1],a+='";a+="";var l=e.regions;if(l)for(var s,i=-1,c=l.length-1;c>i;){s=l[i+=1],a+=""}return a+="
'+s.name+"
";var u=s.accesses;if(u)for(var d,p=-1,f=u.length-1;f>p;)d=u[p+=1],a+=""+n.link(d.name,d.req?"check-square-o":"square-o","set",{access:d.id},null,d.req?"selected":null)+"
";a+="
"},TMPL.air_alarm=function(e,t,n){var a='
';if(a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

Air Status

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

Air Controls

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

'+c.long_name+'

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

'+p.long_name+'

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

Environmental Modes

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

Alarm Thresholds

';var m=e.thresholds;if(m)for(var b,i=-1,y=m.length-1;y>i;){b=m[i+=1],a+="";var w=b.settings;if(w)for(var k,T=-1,E=w.length-1;E>T;)k=w[T+=1],a+="";a+=""}a+="
min2min1max1max2
"+b.name+""+n.link(k.selected>=0?n.round(100*k.selected)/100:"Off",null,"adjust",{command:"set_threshold",env:k.env,"var":k.val})+"
"}return a},TMPL.apc=function(e,t,n){var a='
';a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,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.",a+='

Power Status

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

Power Channels

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

System Overrides

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

Canister

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

Valve

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

Holding Tank

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

Status

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

Dispense

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

Beaker

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

Status

Power:
'+n.link(e.isActive?"On":"Off",e.isActive?"power-off":"close","power",null,e.isBeakerLoaded?null:"disabled")+'
Target:
'+n.link(e.targetTemp+"K","pencil","temperature")+'

Beaker

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

Occupant

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

Cell

Power:
',a+=e.isOperating?""+n.link("On","power-off","off"):""+n.link("Off","close","on"),a+='
Temperature:
'+e.cellTemperature+' K
Door:
',a+=e.isOpen?""+n.link("Open","unlock","close"):""+n.link("Closed","lock","open"),a+=e.autoEject?""+n.link("Auto","sign-out","autoeject"):""+n.link("Manual","sign-in","autoeject"),a+='

Beaker

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

Storage

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

Input

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

Output

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

Status

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

Tracking

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

Devices

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

Status

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

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(a+='
Adjustment:
'+n.link("","fast-backward","temp",{set:-20},e.targetTemp>e.minTemp?null:"disabled")+n.link("","backward","temp",{set:-5},e.targetTemp>e.minTemp?null:"disabled")+n.link("Set","pencil","temp",{set:"custom"},null)+n.link("","forward","temp",{set:5},e.targetTemp
"),a+='
Operational Mode:
',a+=e.open?""+n.link("Heat","long-arrow-up","mode",{mode:"heat"},"heat"!=e.mode?null:"selected")+n.link("Cool","long-arrow-down","mode",{mode:"cool"},"cool"!=e.mode?null:"selected")+n.link("Auto","arrows-v","mode",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?'Heat':"cool"==e.mode?'Cool':'Auto',a+="
"},TMPL.tanks=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a mask.":"The regulator is not connected to a mask.",a+='
Tank Pressure:
'+n.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad",e.tankPressure+" kPa")+'
Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.maskConnected?e.valveOpen?"selected":null:"disabled")+n.link("Close","lock","valuve",null,e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},TMPL._nanotrasen=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a}; \ No newline at end of file