From 200d0a1e6d121d851d92e8bee1407c79957bcf7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Fri, 30 Jun 2023 15:04:20 +0200 Subject: [PATCH] remove flecs-dash --- flecs-dash/etc/apps/browser/browser.js | 97 ---- .../etc/apps/browser/component_properties.js | 13 - .../etc/apps/browser/component_search.js | 48 -- .../etc/apps/browser/entity_component.js | 20 - flecs-dash/etc/apps/browser/entity_data.js | 64 --- flecs-dash/etc/apps/browser/entity_editor.js | 128 ------ flecs-dash/etc/apps/browser/entity_kind.js | 36 -- flecs-dash/etc/apps/browser/entity_search.js | 45 -- flecs-dash/etc/apps/browser/entity_table.js | 85 ---- flecs-dash/etc/apps/browser/entity_tag.js | 16 - flecs-dash/etc/apps/browser/entity_tree.js | 207 --------- .../etc/apps/browser/entity_tree_item.js | 121 ----- flecs-dash/etc/apps/browser/property_value.js | 43 -- flecs-dash/etc/apps/browser/style.css | 420 ------------------ .../etc/apps/overview/delta_time_graph.js | 122 ----- flecs-dash/etc/apps/overview/entity_graph.js | 116 ----- .../etc/apps/overview/operation_graph.js | 149 ------- flecs-dash/etc/apps/overview/overview.js | 190 -------- .../etc/apps/overview/performance_graph.js | 149 ------- flecs-dash/etc/apps/overview/table_graph.js | 140 ------ flecs-dash/etc/apps/systems/style.css | 187 -------- flecs-dash/etc/apps/systems/system.js | 48 -- .../etc/apps/systems/system_component.js | 31 -- .../etc/apps/systems/system_entity_graph.js | 125 ------ .../etc/apps/systems/system_time_graph.js | 170 ------- flecs-dash/etc/apps/systems/systems.js | 173 -------- flecs-dash/etc/css/style.css | 253 ----------- flecs-dash/etc/favicon.png | Bin 22408 -> 0 bytes flecs-dash/etc/images/add.png | Bin 778 -> 0 bytes flecs-dash/etc/images/bar_chart.png | Bin 781 -> 0 bytes flecs-dash/etc/images/clock.png | Bin 2653 -> 0 bytes flecs-dash/etc/images/close.png | Bin 1497 -> 0 bytes flecs-dash/etc/images/delete.png | Bin 1121 -> 0 bytes flecs-dash/etc/images/flecs.png | Bin 16661 -> 0 bytes flecs-dash/etc/images/layers.png | Bin 769 -> 0 bytes flecs-dash/etc/images/nav.png | Bin 937 -> 0 bytes flecs-dash/etc/images/pause.png | Bin 897 -> 0 bytes flecs-dash/etc/images/play.png | Bin 1379 -> 0 bytes flecs-dash/etc/images/save.png | Bin 351 -> 0 bytes flecs-dash/etc/images/stop.png | Bin 867 -> 0 bytes flecs-dash/etc/images/sync.png | Bin 2067 -> 0 bytes flecs-dash/etc/images/table.png | Bin 1201 -> 0 bytes flecs-dash/etc/images/tree.png | Bin 120 -> 0 bytes flecs-dash/etc/images/usage.png | Bin 1161 -> 0 bytes flecs-dash/etc/index.html | 27 -- flecs-dash/etc/js/app.js | 136 ------ flecs-dash/etc/js/appcontent.js | 18 - flecs-dash/etc/js/perf_summary.js | 182 -------- flecs-dash/etc/js/periodic_request.js | 36 -- flecs-dash/etc/js/play_controls.js | 69 --- flecs-dash/etc/js/sidebar-button.js | 46 -- flecs-dash/etc/js/sidebar.js | 59 --- flecs-dash/etc/js/vue.js | 6 - 53 files changed, 3775 deletions(-) delete mode 100644 flecs-dash/etc/apps/browser/browser.js delete mode 100644 flecs-dash/etc/apps/browser/component_properties.js delete mode 100644 flecs-dash/etc/apps/browser/component_search.js delete mode 100644 flecs-dash/etc/apps/browser/entity_component.js delete mode 100644 flecs-dash/etc/apps/browser/entity_data.js delete mode 100644 flecs-dash/etc/apps/browser/entity_editor.js delete mode 100644 flecs-dash/etc/apps/browser/entity_kind.js delete mode 100644 flecs-dash/etc/apps/browser/entity_search.js delete mode 100644 flecs-dash/etc/apps/browser/entity_table.js delete mode 100644 flecs-dash/etc/apps/browser/entity_tag.js delete mode 100644 flecs-dash/etc/apps/browser/entity_tree.js delete mode 100644 flecs-dash/etc/apps/browser/entity_tree_item.js delete mode 100644 flecs-dash/etc/apps/browser/property_value.js delete mode 100644 flecs-dash/etc/apps/browser/style.css delete mode 100644 flecs-dash/etc/apps/overview/delta_time_graph.js delete mode 100644 flecs-dash/etc/apps/overview/entity_graph.js delete mode 100644 flecs-dash/etc/apps/overview/operation_graph.js delete mode 100644 flecs-dash/etc/apps/overview/overview.js delete mode 100644 flecs-dash/etc/apps/overview/performance_graph.js delete mode 100644 flecs-dash/etc/apps/overview/table_graph.js delete mode 100644 flecs-dash/etc/apps/systems/style.css delete mode 100644 flecs-dash/etc/apps/systems/system.js delete mode 100644 flecs-dash/etc/apps/systems/system_component.js delete mode 100644 flecs-dash/etc/apps/systems/system_entity_graph.js delete mode 100644 flecs-dash/etc/apps/systems/system_time_graph.js delete mode 100644 flecs-dash/etc/apps/systems/systems.js delete mode 100644 flecs-dash/etc/css/style.css delete mode 100644 flecs-dash/etc/favicon.png delete mode 100644 flecs-dash/etc/images/add.png delete mode 100644 flecs-dash/etc/images/bar_chart.png delete mode 100644 flecs-dash/etc/images/clock.png delete mode 100644 flecs-dash/etc/images/close.png delete mode 100644 flecs-dash/etc/images/delete.png delete mode 100644 flecs-dash/etc/images/flecs.png delete mode 100644 flecs-dash/etc/images/layers.png delete mode 100644 flecs-dash/etc/images/nav.png delete mode 100644 flecs-dash/etc/images/pause.png delete mode 100644 flecs-dash/etc/images/play.png delete mode 100644 flecs-dash/etc/images/save.png delete mode 100644 flecs-dash/etc/images/stop.png delete mode 100644 flecs-dash/etc/images/sync.png delete mode 100644 flecs-dash/etc/images/table.png delete mode 100644 flecs-dash/etc/images/tree.png delete mode 100644 flecs-dash/etc/images/usage.png delete mode 100644 flecs-dash/etc/index.html delete mode 100644 flecs-dash/etc/js/app.js delete mode 100644 flecs-dash/etc/js/appcontent.js delete mode 100644 flecs-dash/etc/js/perf_summary.js delete mode 100644 flecs-dash/etc/js/periodic_request.js delete mode 100644 flecs-dash/etc/js/play_controls.js delete mode 100644 flecs-dash/etc/js/sidebar-button.js delete mode 100644 flecs-dash/etc/js/sidebar.js delete mode 100644 flecs-dash/etc/js/vue.js diff --git a/flecs-dash/etc/apps/browser/browser.js b/flecs-dash/etc/apps/browser/browser.js deleted file mode 100644 index 3e51e4c..0000000 --- a/flecs-dash/etc/apps/browser/browser.js +++ /dev/null @@ -1,97 +0,0 @@ - -Vue.component('app-browser', { - data: function() { - return { - scope: "", - entity: "", - entity_validated: "", - entity_components: {}, - entity_request: undefined, - error: false - } - }, - methods: { - e_select_entity(event) { - this.entity = event.entity; - this.$refs.editor.select_entity(event.entity); - }, - e_select_scope(event) { - this.scope = event.scope; - this.$refs.data.select_scope(event.scope); - }, - e_select_component(event) { - this.$refs.component_search.activate(event); - } - }, - template: ` -
- - -
- - -
- -
- - -
- - - - - - -
- ` -}); - -// Signal app has loaded & pass on dependencies -app.app_loaded("browser", [{ - name: "entity-tree", - url: "apps/browser/entity_tree.js" - }, { - name: "entity-tree-item", - url: "apps/browser/entity_tree_item.js" - }, { - name: "entity-search", - url: "apps/browser/entity_search.js" - }, { - name: "entity-kind", - url: "apps/browser/entity_kind.js" - }, { - name: "entity-editor", - url: "apps/browser/entity_editor.js" - }, { - name: "entity-component", - url: "apps/browser/entity_component.js" - }, { - name: "component-properties", - url: "apps/browser/component_properties.js" - }, { - name: "property-value", - url: "apps/browser/property_value.js" - }, { - name: "entity-tag", - url: "apps/browser/entity_tag.js" - }, { - name: "component-search", - url: "apps/browser/component_search.js" - }, { - name: "entity-data", - url: "apps/browser/entity_data.js" - }, { - name: "entity-table", - url: "apps/browser/entity_table.js" - }] -); diff --git a/flecs-dash/etc/apps/browser/component_properties.js b/flecs-dash/etc/apps/browser/component_properties.js deleted file mode 100644 index e4e0709..0000000 --- a/flecs-dash/etc/apps/browser/component_properties.js +++ /dev/null @@ -1,13 +0,0 @@ - -Vue.component('component-properties', { - props: [ "name", "value" ], - methods: { - }, - template: ` -
-
{{ name }}
- -
- ` -}); - \ No newline at end of file diff --git a/flecs-dash/etc/apps/browser/component_search.js b/flecs-dash/etc/apps/browser/component_search.js deleted file mode 100644 index 5209994..0000000 --- a/flecs-dash/etc/apps/browser/component_search.js +++ /dev/null @@ -1,48 +0,0 @@ - -Vue.component('component-search', { - data: function() { - return { - entity: "", - visible: false, - callback: undefined - } - }, - methods: { - activate(event) { - this.entity = ""; - this.$refs.tree.reset(); - this.visible = true; - this.callback = event.callback; - }, - deactivate() { - this.visible = false; - this.callback = undefined; - }, - e_set_entity(event) { - this.callback(event.entity); - this.deactivate(); - } - }, - computed: { - visibility: function() { - if (this.visible) { - return "visible"; - } else { - return "hidden"; - } - } - }, - template: ` -
- -
- ` -}); diff --git a/flecs-dash/etc/apps/browser/entity_component.js b/flecs-dash/etc/apps/browser/entity_component.js deleted file mode 100644 index cd2007e..0000000 --- a/flecs-dash/etc/apps/browser/entity_component.js +++ /dev/null @@ -1,20 +0,0 @@ - -Vue.component('entity-component', { - props: [ "name", "value" ], - methods: { - remove_component() { - this.$emit('remove_component', {component: this.name}); - } - }, - template: ` -
-
{{ name }}
- - - - -
- ` -}); diff --git a/flecs-dash/etc/apps/browser/entity_data.js b/flecs-dash/etc/apps/browser/entity_data.js deleted file mode 100644 index cd68ab0..0000000 --- a/flecs-dash/etc/apps/browser/entity_data.js +++ /dev/null @@ -1,64 +0,0 @@ - -Vue.component('entity-data', { - props: [ "filter" ], - mounted: function() { - this.startRequesting(""); - }, - beforeDestroy: function() { - this.stopRequesting(); - }, - data: function() { - return { - scope: "", - scope_pending: "", - data: [], - data_request: undefined, - error: false - } - }, - methods: { - request_data(scope) { - var url = "scope/" + scope + "?include=Name"; - if (this.filter) { - url += "," + this.filter.join(","); - } - - app.get(url, (msg) => { - this.data = msg; - this.error = false; - this.scope = this.scope_pending; - }, (Http) => { - if (Http.status == 404) { - this.error = true; - } - }); - }, - // Stop periodically requesting the scope - stopRequesting() { - this.data = []; - clearInterval(this.data_request); - }, - // Start periodically requesting a scope - startRequesting(scope) { - this.stopRequesting(); - - // Initial request - var scope_url = scope.replace(/\./g, "/"); - this.request_data(scope_url); - - // Start periodic request - this.data_request = window.setInterval(function() { - this.request_data(scope_url); - }.bind(this), 1000); - }, - select_scope(scope) { - this.scope_pending = scope; - this.startRequesting(scope); - } - }, - template: ` -
- -
- ` -}); diff --git a/flecs-dash/etc/apps/browser/entity_editor.js b/flecs-dash/etc/apps/browser/entity_editor.js deleted file mode 100644 index 929c873..0000000 --- a/flecs-dash/etc/apps/browser/entity_editor.js +++ /dev/null @@ -1,128 +0,0 @@ - -Vue.component('entity-editor', { - data: function() { - return { - entity_pending: "", - entity: "", - components: {}, - } - }, - methods: { - entity_url(entity) { - return entity.replace(/\./g, "/"); - }, - request_entity(entity) { - if (!entity || !entity.length) { - this.entity_pending = ""; - this.entity = ""; - this.components = {}; - return; - } - - this.entity_pending = entity; - var entity_url = this.entity_url(entity); - - app.get("entity/" + entity_url, (msg) => { - this.entity = this.entity_pending; - this.components = msg; - this.error = false; - }, (Http) => { - if (Http.status == 404) { - // Entity can no longer be found on URL - this.entity_pending = ""; - this.entity = ""; - this.components = {}; - } - }); - }, - select_entity(entity) { - if (entity != this.entity) { - this.entity_pending = entity; - this.request_entity(entity); - } - }, - entity_hidden() { - if (this.entity) { - return 'visible;'; - } else { - return 'hidden;'; - } - }, - components_hidden() { - if (this.components) { - return 'visible;'; - } else { - return 'hidden;'; - } - }, - e_add(event) { - this.$emit('select-component', { - callback: function(component) { - app.put("entity/" + this.entity_url(this.entity) + "?select=" + component, undefined, (msg) => { - this.request_entity(this.entity); - }); - }.bind(this) - }); - }, - e_sync(event) { - this.request_entity(this.entity); - }, - e_remove_component(event) { - app.delete("entity/" + this.entity_url(this.entity) + "?select=" + event.component, undefined, (msg) => { - this.request_entity(this.entity); - }); - }, - e_delete(event) { - app.delete("entity/" + this.entity_url(this.entity), undefined, (msg) => { - this.request_entity(undefined); - }); - } - }, - computed: { - tags: function() { - var type = this.components.type; - if (!type) { - return []; - } - - var data = this.components.data; - var tags = []; - for (var i = 0; i < type.length; i ++) { - var tag = type[i]; - if (!data.hasOwnProperty(tag)) { - if (Array.isArray(tag)) { - tags.push(type[i].join(" | ")); - } else { - tags.push(tag); - } - } - } - - return tags; - } - }, - template: ` -
-
-
- {{ components.path }} - - - -
- -
- - -
- -
Tags
-
-
- -
-
-
-
- ` -}); diff --git a/flecs-dash/etc/apps/browser/entity_kind.js b/flecs-dash/etc/apps/browser/entity_kind.js deleted file mode 100644 index afdb954..0000000 --- a/flecs-dash/etc/apps/browser/entity_kind.js +++ /dev/null @@ -1,36 +0,0 @@ - -Vue.component('entity-kind', { - props: [ "kind" ], - methods: { - css() { - var result = "entity-kind"; - if (this.kind && this.kind.length) { - result += " entity-kind-" + this.kind; - } - return result; - }, - }, - computed: { - kind_string: function() { - if (this.kind == "Module") { - return "m"; - } else if (this.kind == "Component") { - return "c"; - } else if (this.kind == "System") { - return "s"; - } else if (this.kind == "Type") { - return "t"; - } else if (this.kind == "Prefab") { - return "p"; - } else { - return "e"; - } - } - }, - template: ` - - {{ kind_string }} - - ` - }); - \ No newline at end of file diff --git a/flecs-dash/etc/apps/browser/entity_search.js b/flecs-dash/etc/apps/browser/entity_search.js deleted file mode 100644 index a8e3a1d..0000000 --- a/flecs-dash/etc/apps/browser/entity_search.js +++ /dev/null @@ -1,45 +0,0 @@ - -Vue.component('entity-search', { - props: [ "error", "search_text", "found" ], - data: function() { - return { - search_scope: "" - } - }, - methods: { - css() { - var result = "entity-search"; - if (this.valid) { - result += " entity-search-found"; - } - return result; - }, - add_entity: function(e) { - this.$emit('add-entity', {entity: this.search_scope}); - }, - changed: function(e) { - this.$emit('changed', {entity: e.target.value}); - }, - set_value(scope) { - this.search_scope = scope; - } - }, - computed: { - default_text: function() { - if (this.search_text) { - return this.search_text; - } else { - return "Find an entity"; - } - }, - valid: function() { - return this.found && this.search_scope.length; - } - }, - template: ` -
- - -
- ` -}); diff --git a/flecs-dash/etc/apps/browser/entity_table.js b/flecs-dash/etc/apps/browser/entity_table.js deleted file mode 100644 index 78d7869..0000000 --- a/flecs-dash/etc/apps/browser/entity_table.js +++ /dev/null @@ -1,85 +0,0 @@ - -Vue.component('entity-table', { - props: [ "data" ], - methods: { - component_headers: function(name) { - const value = this.data.data[name][0]; - let headers = []; - for (key in value) { - headers.push(key); - } - return headers; - }, - component_member: function(value) { - if (Array.isArray(value)) { - return "[...]"; - } else if (typeof value === 'object') { - return "{...}"; - } else if (typeof value === 'number') { - return value.toFixed(1); - } else { - return value; - } - }, - type: function(value) { - if (Array.isArray(value)) { - return 'array'; - } else if (typeof value === 'object') { - return 'object'; - } else if (typeof value === 'number') { - return 'number'; - } else if (typeof value === 'boolean') { - return 'boolean'; - } else if (typeof value === 'string') { - return 'string'; - } else { - return ''; - } - }, - value_css: function(value) { - return "property-value-" + this.type(value); - } - }, - template: ` -
-
- - - - - - - - - - - - - - - - - - - - - - - -
IdName
{{ entity }}{{ data.data.Name[i].value }}
-
-
- ` - }); - \ No newline at end of file diff --git a/flecs-dash/etc/apps/browser/entity_tag.js b/flecs-dash/etc/apps/browser/entity_tag.js deleted file mode 100644 index 8c41036..0000000 --- a/flecs-dash/etc/apps/browser/entity_tag.js +++ /dev/null @@ -1,16 +0,0 @@ - -Vue.component('entity-tag', { - props: [ "name" ], - methods: { - remove_component() { - this.$emit('remove_component', {component: this.name}); - } - }, - template: ` - - {{ name }} - - - ` - }); - \ No newline at end of file diff --git a/flecs-dash/etc/apps/browser/entity_tree.js b/flecs-dash/etc/apps/browser/entity_tree.js deleted file mode 100644 index 9f47f14..0000000 --- a/flecs-dash/etc/apps/browser/entity_tree.js +++ /dev/null @@ -1,207 +0,0 @@ -// Component that implements a traversable entity tree -Vue.component('entity-tree', { - props: { - filter: Array, - search_text: String, - auto_update: Boolean - }, - mounted: function() { - this.startRequesting(""); - }, - beforeDestroy: function() { - this.stopRequesting(); - }, - data: function() { - return { - scope_pending: "", - scope: "", - scope_info: {}, - scope_request: undefined, - entities: [], - entity: "", - error: false - } - }, - methods: { - // Send an HTTP request for the current scope - request_scope(scope) { - var url = "browse/" + scope + "?include=Name"; - if (this.filter) { - url += "," + this.filter.join(","); - } - app.get(url, (msg) => { - if (this.scope != this.scope_pending) { - this.$emit("select-scope", {scope: this.scope_pending}); - } - this.scope = this.scope_pending; - this.entities = msg; - this.error = false; - }, (Http) => { - if (Http.status == 404) { - this.error = true; - } - }); - }, - // Send an HTTP request for the current scope - request_scope_info(scope) { - var filter = "" - if (this.filter) { - filter = "?include=" + this.filter.join(","); - } - app.get("info/" + scope + filter, (msg) => { - this.scope_info = msg; - }, (Http) => { - if (Http.status == 404) { - this.error = true; - } - }); - }, - // Send an HTTP request for the current scope - request_add_entity(entity) { - app.post("entity/" + entity, (msg) => { - }, (Http) => { - if (Http.status == 404) { - this.error = true; - } - }); - }, - // Stop periodically requesting the scope - stopRequesting() { - this.scope = undefined; - this.scope_validated = undefined; - clearInterval(this.scope_request); - }, - // Start periodically requesting a scope - startRequesting(scope) { - this.stopRequesting(); - - // Initial request - var scope_url = scope.replace(/\./g, "/"); - this.request_scope(scope_url); - this.request_scope_info(scope_url); - - // Start periodic request - if (this.auto_update) { - this.scope_request = window.setInterval(function() { - this.request_scope(scope_url); - }.bind(this), 1000); - } - }, - // Reset to initial state - reset() { - this.entity = ""; - this.entities = []; - this.scope = ""; - this.scope_pending = ""; - this.$refs.search.set_value(""); - - if (!this.auto_update) { - this.startRequesting(this.scope); - } - }, - // Change current scope to fully qualified path - set_scope(scope) { - this.scope_pending = scope; - this.$refs.search.set_value(scope); - this.startRequesting(scope); - - if (this.entity != "") { - this.select_entity(""); - } - }, - // Event that contains an full path - e_set_scope: function(event) { - this.set_scope(event.entity); - }, - // Event that contains a relative entity id - e_set_scope_relative: function(event) { - var scope = ""; - - if (this.scope && this.scope != "") { - scope = this.scope + "." + event.entity; - } else { - scope = event.entity; - } - - this.set_scope(scope); - }, - - // Select an entity from the tree - select_entity(entity) { - if (entity == this.entity) { - this.entity = ""; - } else { - this.entity = entity; - } - - this.$emit("select-entity", {entity: this.entity}); - }, - // Select the current scope - e_select_scope: function() { - this.select_entity(this.scope); - }, - e_add_entity: function(e) { - this.request_add_entity(e.entity); - this.scope = this.scope_pending; - var parent = this.parent; - this.scope_pending = parent; - this.startRequesting(parent); - this.$refs.search.set_value(parent); - }, - // Select a relative entity identifier - e_select_entity_relative: function(event) { - var entity; - if (this.scope) { - entity = this.scope + "." + event.entity; - } else { - entity = event.entity; - } - this.select_entity(entity); - }, - entity_tree_css() { - var result = "entity-tree-list"; - if (this.show_nav) { - result += " entity-tree-list-container"; - } - return result; - } - }, - computed: { - parent: function() { - if (this.scope && this.scope.indexOf(".")) { - return this.scope.substr(0, this.scope.lastIndexOf(".")); - } else { - return ""; - } - } - }, - template: ` -
- - - -
- - - -
-
- - - - - - -
-
- ` -}); diff --git a/flecs-dash/etc/apps/browser/entity_tree_item.js b/flecs-dash/etc/apps/browser/entity_tree_item.js deleted file mode 100644 index 65e1c64..0000000 --- a/flecs-dash/etc/apps/browser/entity_tree_item.js +++ /dev/null @@ -1,121 +0,0 @@ - -Vue.component('entity-tree-item', { - props: [ "entity", "current", "text", "nav_only", "" ], - data: function() { - return { - clicks: 0, - timer: null - } - }, - methods: { - nav_scope: function() { - this.$emit("nav-scope", {entity: this.entity.name}); - }, - - single_click_nav_scope: function() { - if (this.nav_only) { - this.nav_scope(); - } else { - this.$emit("select-entity", {entity: this.entity.name}); - } - }, - - is_disabled() { - for (var i = 0; i < this.entity.type.length; i ++) { - var el = this.entity.type[i]; - - if (el == "Disabled") { - return true; - } - } - - return false; - }, - - css() { - var result = "entity-tree-item"; - - if (this.is_disabled()) { - result += " entity-tree-item-disabled"; - } - - if (!this.current) { - return result; - } - - var entity = this.entity.name; - var current; - - if (this.current.indexOf(".") != -1) { - var pos = this.current.lastIndexOf(".") + 1; - current = this.current.substr(pos, this.current.length - pos); - } else { - current = this.current; - } - - if (entity === current) { - result += " entity-tree-item-active"; - } - - return result; - }, - - kind() { - var component = ""; - - for (var i = 0; i < this.entity.type.length; i ++) { - var el = this.entity.type[i]; - - if (el == "Module") { - component = el; - break; - } else if (el == "Component") { - component = el; - // Don't break, entity can also be module - } else if (el == "Prefab") { - component = el; - break; - } else if (el == "flecs.system.System") { - component = "System"; - break; - } else if (el == "Type") { - component = el; - break; - } - } - - return component; - } - }, - computed: { - entity_id: function() { - var text = this.text ? this.text : ""; - var entity = ""; - - if (this.entity) { - entity = this.entity.name ? this.entity.name : ""; - } - - // A bit of a convoluted way to makes sure that we show text instead of an - // entity name when provided, except when the text is "." in which case we - // show the entity name when there is one. - if (text.length && (text != "." || !entity.length)) { - return text; - } else { - return entity; - } - }, - show_nav() { - return !this.nav_only && this.text != "."; - } - }, - template: ` -
-
- - - {{entity_id}} -
-
- ` -}); diff --git a/flecs-dash/etc/apps/browser/property_value.js b/flecs-dash/etc/apps/browser/property_value.js deleted file mode 100644 index 9d1c5bd..0000000 --- a/flecs-dash/etc/apps/browser/property_value.js +++ /dev/null @@ -1,43 +0,0 @@ - -Vue.component('property-value', { - props: [ "value" ], - methods: { - css() { - var result = "property-value"; - if (this.type.length) { - result += " property-value-" + this.type; - } - return result; - } - }, - computed: { - type: function() { - if (Array.isArray(this.value)) { - return 'array'; - } else if (typeof this.value === 'object') { - return 'object'; - } else if (typeof this.value === 'number') { - return 'number'; - } else if (typeof this.value === 'boolean') { - return 'boolean'; - } else if (typeof this.value === 'string') { - return 'string'; - } else { - return ''; - } - } - }, - template: ` -
-
- -
-
- -
-
- -
-
- ` -}); diff --git a/flecs-dash/etc/apps/browser/style.css b/flecs-dash/etc/apps/browser/style.css deleted file mode 100644 index 626669f..0000000 --- a/flecs-dash/etc/apps/browser/style.css +++ /dev/null @@ -1,420 +0,0 @@ -div.browser { - width: 100%; - height: 100%; - color: #eee; -} - -div.entity-tree-list-container { - position: absolute; - top: 60px; - height: calc(100% - 200px); -} - -div.entity-data-container { - position: absolute; - top: 0px; - left: 270px; - max-width: calc(100% - 275px); - height: calc(100% - 10px); - overflow-y: auto; -} - -div.entity-table { - margin: 10px; -} - -div.entity-table-header { - background-color: #1E2022; - border-top-left-radius: 5px; - border-top-right-radius: 5px; - border-style: solid; - border-color: #1E2022; - padding: 5px; -} - -div.entity-table-body { - padding-left: 20px; - padding-right: 20px; - padding-bottom: 20px; - overflow-x: auto; -} - -div.entity-table-body table { - color: #eee; - border-collapse: collapse; - - background-color: #303136; - border-radius: 5px; - box-shadow: 3px 5px 10px rgba(0, 0, 0, 0.5); -} - -th.table-component { - background-color: #1E2022; - padding-top: 10px; - padding-left: 16px; - padding-right: 16px; - text-transform: uppercase; - font-size: 14px; - font-weight: bold; -} - -th.table-component:first-child { - border-top-left-radius: 5px; -} - -th.table-component:last-child { - border-top-right-radius: 5px; -} - -.table-separator { - background-color: #37393E !important; - padding: 0.5px !important; -} - -td.table-separator { - border-top-color: #37393E; - border-top-style: solid; - border-top-width: 1px; -} - -th.table-member { - background-color: #1E2022 !important; - color: #aaa !important; - text-align: center; - padding-left: 8px; - padding-right: 8px; - padding-bottom: 5px; - font-weight: normal; -} - -td.table-value { - font-weight: 300; - padding: 8px; - padding-left: 10px; - padding-right: 10px; - text-align: center; - white-space: nowrap; - - border-top-color: #37393E; - border-top-style: solid; - border-top-width: 1px; -} - -div.entity-tree { - position: relative; - top: 0px; - width: 250px; - min-width: 200px; - height: calc(100% - 20px); - padding: 10px; - background-color: #303136; - margin: 0px; - box-shadow: 5px 0px 8px rgba(0, 0, 0, 0.4); -} - -div.entity-tree-list { - position: absolute; - top: 60px; - width: 250px; - min-width: 250px; - height: calc(100% - 60px); - overflow-y: auto; - margin: 0px; -} - -div.entity-tree-item { - position: relative; - font-size: 16px; - padding-left: 10px; - padding-right: 20px; - padding-top: 10px; - padding-bottom: 10px; - min-height: 20px; - cursor: pointer; - - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.entity-tree-separator { - border-top-style: solid; - border-top-color: #37393E; - border-top-width: 1px; - margin-top: 10px; - margin-bottom: 10px; -} - -div.entity-tree-item:hover { - background-color: #37393E; -} - -div.entity-tree-item-disabled { - color: #aaa; -} - -div.entity-tree-item-active { - background-color: #37393E; - color: #eee; -} - -span.entity-item-name { - padding-left: 30px; -} - -span.entity-kind { - position: absolute; - border-style: solid; - border-width: 1px; - border-color: #eee; - border-radius: 4px; - top: 11px; - left: 15px; - padding: 2px; - min-width: 10px; - min-height: 10px; - font-size: 10px; - text-align: center; - text-transform: uppercase; -} - -span.entity-kind-Module { - color: #C7CA6C; - border-color: #C7CA6C; -} - -span.entity-kind-Component { - color: #47B576; - border-color: #47B576; -} - -span.entity-kind-System { - color: #4981B5; - border-color: #4981B5; -} - -span.entity-kind-Type { - color: #4981B5; - border-color: #4981B5; -} - -span.entity-kind-Prefab { - color: #B5488F; - border-color: #B5488F; -} - -div.entity-search { - position: absolute; -} - -div.entity-search input { - background-color: #1E2022; - border-radius: 5px; - border-style: solid; - border-width: 1px; - border-color: #1E2022; - margin: 2px; - width: 246px; - font-size: 16px; - padding: 8px; - color: #eee; - transition: border-color 200ms; -} - -div.entity-search-found input { - border-color: #47B576; -} - -p.list-header { - position: absolute; - text-transform: uppercase; - font-size: 14px; - font-weight: bold; - padding: 10px; -} - -#scope-parent { - position: absolute; - top: 55px; - width: 220px; -} - -#scope-entity { - position: absolute; - top: 95px; - width: 220px; -} - -#header-children { - top: 130px; -} - -div.entity-editor { - background-color: #303136; - position: absolute; - top: 0px; - right: 0px; - width: 350px; - min-width: 350px; - height: calc(100%); - margin: 0px; - box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.5); -} - -div.entity-name { - background-color: #1E2022; - font-size: 14px; - font-weight: bold; - padding: 10px; - padding-top: 5px; -} - -div.entity-component { - position: relative; -} - -div.entity-component-buttons { - position: relative; - padding: 10px; -} - -button { - background-color: #eee; - color: #1E2022; - padding: 6px; - margin-top: 5px; - margin-left: 5px; - border: none; - font-size: 14px; - cursor: pointer; - outline: none; -} - -div.entity-component-name { - font-weight: bold; - padding: 10px; - margin-top: 20px; - border-top-style: solid; - border-top-width: 1px; - border-top-color: #37393E; - text-transform: uppercase; - font-size: 14px; -} - -div.entity-component-value { - padding: 5px; - margin-top: 5px; - margin-bottom: 10px; -} - -span.entity-tag { - position: relative; - background-color: #1E2022; - padding: 8px; - padding-right: 30px; - margin: 2px; - float: left; - cursor: pointer; -} - -div.entity-tags { - margin-left: 20px; -} - -img.entity-icon { - position: relative; - top: 3px; - left: 5px; - width: 18px; - height: 18px; - cursor: pointer; -} - -img.entity-remove-icon { - position: absolute; - top: 8px; - right: 8px; - width: 18px; - height: 18px; - cursor: pointer; -} - -div.component { - position: relative; - padding: 10px; - padding-left: 20px; - margin-top: 5px; - height: 5px; -} - -div.component-key { - position: absolute; - top: 0px; - font-size: 14px; - color: #aaa; -} - -div.property-value { - position: absolute; - top: -5px; - left: 100px; - width: calc(100% - 110px); -} - -div.property-value input { - background-color: #1E2022; - border-radius: 2px; - border-style: solid; - border-width: 1px; - border-color: #1E2022; - font-size: 14px; - margin-bottom: 5px; - width: 100%; -} - -div.property-value-string input { - color: #B56D48; -} - -div.property-value-number input { - color: #67B588; -} - -div.property-value-boolean input { - color: #4981B5; -} - -.property-value-string { - color: #B56D48; -} - -.property-value-number { - color: #67B588; -} - -.property-value-boolean { - color: #4981B5; -} - -div.component-search-darken { - position: absolute; - top: 0px; - left: 0px; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.5); -} - -div.component-search { - background-color: #303136; - position: absolute; - padding-bottom: 10px; - top: 35px; - right: 40px; - height: 400px; - max-width: 270px; - box-shadow: 0px 5px 20px rgba(0, 0, 0, 0.5); -} diff --git a/flecs-dash/etc/apps/overview/delta_time_graph.js b/flecs-dash/etc/apps/overview/delta_time_graph.js deleted file mode 100644 index bf626ec..0000000 --- a/flecs-dash/etc/apps/overview/delta_time_graph.js +++ /dev/null @@ -1,122 +0,0 @@ -const delta_time_chart = { - type: 'line', - data: { - labels: [], - datasets: [ - { - label: 'avg', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#5BE595', - ], - borderWidth: 2, - pointRadius: 0 - }, - { - label: 'min', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#40805B', - ], - borderWidth: 1, - pointRadius: 0 - }, - { - label: 'max', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#40805B', - ], - borderWidth: 1, - pointRadius: 0 - } - ] - }, - options: { - title: { - display: false - }, - responsive: true, - maintainAspectRatio: false, - lineTension: 1, - animation: { - duration: 0 - }, - scales: { - yAxes: [{ - id: 'time', - position: 'right', - ticks: { - beginAtZero: false, - padding: 10, - callback: function(value, index, values) { - return (1000 * value).toFixed(2) + "ms"; - } - } - }], - xAxes: [{ - ticks: { - minRotation: 0, - maxRotation: 0, - maxTicksLimit: 20 - } - }] - } - } - } - - Vue.component('delta-time-graph', { - props: ['tick', 'data'], - updated() { - this.updateChart(); - }, - data: function() { - return { - chart: undefined - } - }, - methods: { - setValues() { - if (!this.data.world) { - return; - } - - if (!this.chart) { - this.createChart(); - } - - var labels = []; - var length = this.data.world.history_1m.frame_time_total.avg.length; - for (var i = 0; i < length; i ++) { - labels.push((length - i) + "s"); - } - - delta_time_chart.data.labels = labels; - delta_time_chart.data.datasets[0].data = this.data.world.history_1m.delta_time.avg; - delta_time_chart.data.datasets[1].data = this.data.world.history_1m.delta_time.min; - delta_time_chart.data.datasets[2].data = this.data.world.history_1m.delta_time.max; - }, - createChart() { - const ctx = document.getElementById('delta-time-graph'); - this.chart = new Chart(ctx, { - type: delta_time_chart.type, - data: delta_time_chart.data, - options: delta_time_chart.options - }); - }, - updateChart() { - if (!this.data.world) { - return; - } - this.setValues(); - this.chart.update(); - } - }, - template: ` -
- -
` - }); diff --git a/flecs-dash/etc/apps/overview/entity_graph.js b/flecs-dash/etc/apps/overview/entity_graph.js deleted file mode 100644 index a0b7185..0000000 --- a/flecs-dash/etc/apps/overview/entity_graph.js +++ /dev/null @@ -1,116 +0,0 @@ - -const entity_chart = { - type: 'line', - data: { - labels: [], - datasets: [ - { - label: 'Total', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#5BE595', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Matched', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#46D9E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - } - ] - }, - options: { - title: { - display: false - }, - responsive: true, - maintainAspectRatio: false, - lineTension: 1, - animation: { - duration: 0 - }, - legend: { - display: true - }, - scales: { - yAxes: [{ - id: 'count', - ticks: { - beginAtZero: true, - padding: 10, - callback: function(value, index, values) { - return value; - } - } - }], - xAxes: [{ - ticks: { - minRotation: 0, - maxRotation: 0, - maxTicksLimit: 20 - } - }] - } - } - } - - Vue.component('entity-graph', { - props: ['tick', 'data'], - updated() { - this.updateChart(); - }, - data: function() { - return { - chart: undefined - } - }, - methods: { - setValues() { - if (!this.data.world) { - return; - } - - if (!this.chart) { - this.createChart(); - } - - var labels = []; - var length = this.data.world.history_1m.frame_time_total.avg.length; - for (var i = 0; i < length; i ++) { - labels.push((length - i) + "s"); - } - - entity_chart.data.labels = labels; - entity_chart.data.datasets[0].data = this.data.world.history_1m.entity_count.avg; - entity_chart.data.datasets[1].data = this.data.world.history_1m.matched_entity_count.avg; - }, - createChart() { - const ctx = document.getElementById('entity-graph'); - this.chart = new Chart(ctx, { - type: entity_chart.type, - data: entity_chart.data, - options: entity_chart.options - }); - }, - updateChart() { - if (!this.data.world) { - return; - } - this.setValues(); - this.chart.update(); - } - }, - template: ` -
- -
` - }); diff --git a/flecs-dash/etc/apps/overview/operation_graph.js b/flecs-dash/etc/apps/overview/operation_graph.js deleted file mode 100644 index bcade48..0000000 --- a/flecs-dash/etc/apps/overview/operation_graph.js +++ /dev/null @@ -1,149 +0,0 @@ -const operation_chart = { - type: 'line', - data: { - labels: [], - datasets: [ - { - label: 'New', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#5BE595', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Delete', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#46D9E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Set', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#2D5BE6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Add', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#6146E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Remove', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#E550E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - } - ] - }, - options: { - title: { - display: false - }, - responsive: true, - maintainAspectRatio: false, - lineTension: 1, - animation: { - duration: 0 - }, - scales: { - yAxes: [{ - id: 'count', - ticks: { - beginAtZero: true, - padding: 10, - callback: function(value, index, values) { - return value + "/s"; - } - } - }], - xAxes: [{ - ticks: { - minRotation: 0, - maxRotation: 0, - maxTicksLimit: 20 - } - }] - } - } - } - - Vue.component('operation-graph', { - props: ['tick', 'data'], - updated() { - this.updateChart(); - }, - data: function() { - return { - chart: undefined - } - }, - methods: { - setValues() { - if (!this.data.world) { - return; - } - - if (!this.chart) { - this.createChart(); - } - - var labels = []; - var length = this.data.world.history_1m.frame_time_total.avg.length; - for (var i = 0; i < length; i ++) { - labels.push((length - i) + "s"); - } - - operation_chart.data.labels = labels; - operation_chart.data.datasets[0].data = this.data.world.history_1m.new_count.avg; - operation_chart.data.datasets[1].data = this.data.world.history_1m.delete_count.avg; - operation_chart.data.datasets[2].data = this.data.world.history_1m.set_count.avg; - operation_chart.data.datasets[3].data = this.data.world.history_1m.add_count.avg; - operation_chart.data.datasets[4].data = this.data.world.history_1m.remove_count.avg; - }, - createChart() { - const ctx = document.getElementById('operation-graph'); - - this.chart = new Chart(ctx, { - type: operation_chart.type, - data: operation_chart.data, - options: operation_chart.options - }); - }, - updateChart() { - if (!this.data.world) { - return; - } - this.setValues(); - this.chart.update(); - } - }, - template: ` -
- -
` - }); diff --git a/flecs-dash/etc/apps/overview/overview.js b/flecs-dash/etc/apps/overview/overview.js deleted file mode 100644 index f64558e..0000000 --- a/flecs-dash/etc/apps/overview/overview.js +++ /dev/null @@ -1,190 +0,0 @@ - -Vue.component('app-overview', { - mounted: function() { - this.startRequesting(""); - }, - beforeDestroy: function() { - this.stopRequesting(); - }, - data: function() { - return { - data: {}, - data_request: undefined, - error: false, - tick: 0 - } - }, - methods: { - request_data() { - var url = "metrics?world=yes"; - - this.tick ++; - - app.get(url, (msg) => { - this.data = msg; - this.error = false; - }, (Http) => { - if (Http.status == 404) { - this.error = true; - } - }); - }, - // Stop periodically requesting the scope - stopRequesting() { - this.data = []; - clearInterval(this.data_request); - }, - // Start periodically requesting a scope - startRequesting(scope) { - this.stopRequesting(); - - // Initial request - this.request_data(); - - // Start periodic request - this.data_request = window.setInterval(function() { - this.request_data(); - }.bind(this), 1000); - }, - entity_count() { - if (!this.data.world) { - return 0; - } - return this.data.world.current.entity_count; - }, - operation_count() { - if (!this.data.world) { - return 0; - } - return (this.data.world.current.add_count + - this.data.world.current.remove_count + - this.data.world.current.clear_count + - this.data.world.current.delete_count + - this.data.world.current.set_count + - this.data.world.current.bulk_new_count).toFixed(0); - }, - system_count() { - if (!this.data.world) { - return 0; - } - return (this.data.world.current.systems_ran).toFixed(0); - }, - component_count() { - if (!this.data.world) { - return 0; - } - return this.data.world.current.component_count; - }, - table_count() { - if (!this.data.world) { - return 0; - } - return this.data.world.current.table_count; - }, - fragmentation() { - if (!this.data.world) { - return 0; - } - - /* Compute global fragmentation as total matched tables divided by total - * matched entities. Subtract one from the tables, so that if there is a - * single entity matching a single table, fragmentation is 0% */ - return (100 * (this.data.world.current.matched_table_count - 1) / - this.data.world.current.matched_entity_count).toFixed(0); - } - }, - template: ` -
-
- -
-
entities
-
- {{entity_count()}} -
-
- -
-
components
-
- {{component_count()}} -
-
- -
-
systems
-
- {{system_count()}} -
-
- -
-
tables
-
- {{table_count()}} -
-
- -
-
fragmentation
-
- {{fragmentation()}}% -
-
- -
- -
-
performance
-
- -
-
- -
-
delta time
-
- -
-
- -
-
operations ({{operation_count()}})
-
- -
-
- -
-
entities ({{entity_count()}})
-
- -
-
- -
-
tables ({{table_count()}})
-
- -
-
-
- ` -}); - -app.app_loaded("overview", [{ - name: "entity-graph", - url: "apps/overview/entity_graph.js" -}, { - name: "performance-graph", - url: "apps/overview/performance_graph.js" -}, { - name: "operation-graph", - url: "apps/overview/operation_graph.js" -}, { - name: "table-graph", - url: "apps/overview/table_graph.js" -}, { - name: "delta-time-graph", - url: "apps/overview/delta_time_graph.js" -}]); diff --git a/flecs-dash/etc/apps/overview/performance_graph.js b/flecs-dash/etc/apps/overview/performance_graph.js deleted file mode 100644 index 74b52cb..0000000 --- a/flecs-dash/etc/apps/overview/performance_graph.js +++ /dev/null @@ -1,149 +0,0 @@ -const performance_chart = { - type: 'line', - data: { - labels: [], - datasets: [ - { - label: 'FPS', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#5BE595', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "fps" - }, - { - label: 'Frame', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#6146E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "time" - }, - { - label: 'Systems', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#46D9E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "time" - }, - { - label: 'Merging', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#E550E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "time" - } - ] - }, - options: { - title: { - display: false - }, - responsive: true, - maintainAspectRatio: false, - lineTension: 1, - animation: { - duration: 0 - }, - scales: { - yAxes: [{ - id: 'fps', - ticks: { - beginAtZero: true, - padding: 10, - callback: function(value, index, values) { - return value + "Hz"; - } - } - }, { - id: 'time', - position: 'right', - ticks: { - beginAtZero: true, - padding: 10, - callback: function(value, index, values) { - return (1000 * value).toFixed(2) + "ms"; - } - } - }], - xAxes: [{ - ticks: { - minRotation: 0, - maxRotation: 0, - maxTicksLimit: 20 - } - }] - } - } - } - - Vue.component('performance-graph', { - props: ['tick', 'data'], - updated() { - this.updateChart(); - }, - data: function() { - return { - chart: undefined - } - }, - methods: { - setValues() { - if (!this.data.world) { - return; - } - - if (!this.chart) { - this.createChart(); - } - - var labels = []; - var length = this.data.world.history_1m.frame_time_total.avg.length; - for (var i = 0; i < length; i ++) { - labels.push((length - i) + "s"); - } - - performance_chart.data.labels = labels; - performance_chart.data.datasets[0].data = this.data.world.history_1m.fps.avg; - performance_chart.data.datasets[1].data = this.data.world.history_1m.frame_time_total.avg; - performance_chart.data.datasets[2].data = this.data.world.history_1m.system_time_total.avg; - performance_chart.data.datasets[3].data = this.data.world.history_1m.merge_time_total.avg; - }, - createChart() { - const ctx = document.getElementById('fps-graph'); - - performance_chart.options.scales.yAxes[1].ticks.suggestedMax = 1.0 / this.data.target_fps; - - this.chart = new Chart(ctx, { - type: performance_chart.type, - data: performance_chart.data, - options: performance_chart.options - }); - }, - updateChart() { - if (!this.data.world) { - return; - } - this.setValues(); - this.chart.update(); - } - }, - template: ` -
- -
` - }); \ No newline at end of file diff --git a/flecs-dash/etc/apps/overview/table_graph.js b/flecs-dash/etc/apps/overview/table_graph.js deleted file mode 100644 index de8e7a4..0000000 --- a/flecs-dash/etc/apps/overview/table_graph.js +++ /dev/null @@ -1,140 +0,0 @@ - -const table_chart = { - type: 'line', - data: { - labels: [], - datasets: [ - { - label: 'Total', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#5BE595', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Matched', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#46D9E6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Singleton', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#4596E5', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - }, - { - label: 'Empty', - data: [], - backgroundColor: [ 'rgba(0,0,0,0)' ], - borderColor: [ - '#2D5BE6', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "count" - } - ] - }, - options: { - title: { - display: false - }, - responsive: true, - maintainAspectRatio: false, - lineTension: 1, - animation: { - duration: 0 - }, - legend: { - display: true - }, - scales: { - yAxes: [{ - id: 'count', - ticks: { - beginAtZero: true, - padding: 10, - callback: function(value, index, values) { - return value; - } - } - }], - xAxes: [{ - ticks: { - minRotation: 0, - maxRotation: 0, - maxTicksLimit: 20 - } - }] - } - } - } - - Vue.component('table-graph', { - props: ['tick', 'data'], - updated() { - this.updateChart(); - }, - data: function() { - return { - chart: undefined - } - }, - methods: { - setValues() { - if (!this.data.world) { - return; - } - - if (!this.chart) { - this.createChart(); - } - - var labels = []; - var length = this.data.world.history_1m.table_count.avg.length; - for (var i = 0; i < length; i ++) { - labels.push((length - i) + "s"); - } - - table_chart.data.labels = labels; - table_chart.data.datasets[0].data = this.data.world.history_1m.table_count.avg; - table_chart.data.datasets[1].data = this.data.world.history_1m.matched_table_count.avg; - table_chart.data.datasets[2].data = this.data.world.history_1m.singleton_table_count.avg; - table_chart.data.datasets[3].data = this.data.world.history_1m.empty_table_count.avg; - }, - createChart() { - const ctx = document.getElementById('table-graph'); - this.chart = new Chart(ctx, { - type: table_chart.type, - data: table_chart.data, - options: table_chart.options - }); - }, - updateChart() { - if (!this.data.world) { - return; - } - this.setValues(); - this.chart.update(); - } - }, - template: ` -
- -
` - }); diff --git a/flecs-dash/etc/apps/systems/style.css b/flecs-dash/etc/apps/systems/style.css deleted file mode 100644 index 4f33e0d..0000000 --- a/flecs-dash/etc/apps/systems/style.css +++ /dev/null @@ -1,187 +0,0 @@ - -div.system-header { - padding-bottom: 10px; -} - -div.systems { - position: relative; -} - -div.system { - position: relative; - background-color: #1E2022; - color: #eee; - font-size: 16px; - padding: 10px; - padding-top: 10px; - padding-bottom: 5px; - margin-left: 10px; - margin-right: 10px; - margin-top: 5px; - height: 20px; - border-left-style: solid; - border-left-width: 5px; - border-left-color: #181a1b; - transition: border-left-color 0.3s; -} - -div.system-query { - position: relative; - background-color: #26292b; - color: #eee; - font-size: 16px; - padding: 10px; - padding-top: 5px; - margin-left: 10px; - margin-right: 10px; - margin-top: 0px; - height: 20px; - border-left-style: solid; - border-left-width: 5px; - border-left-color: #181a1b; - transition: border-left-color 0.3s; -} - -span.system-module { - color: #88949b; - font-size: 14px; - font-weight: normal; - padding-left: 5px; -} - -span.system-metrics { - position: absolute; - top: 6px; - right: 380px; - background-color: #26292b; - color: #88949b; - font-size: 14px; - font-weight: normal; - border-radius: 2px; - margin-left: 5px; - padding: 3px; - padding-left: 5px; - padding-right: 5px; -} - -div.merge { - position: relative; - background-color: #1E2022; - color: #eee; - font-size: 16px; - padding: 10px; - margin-left: 10px; - margin-right: 10px; - margin-top: 5px; - border-left-color: #181818; - border-left-style: solid; - border-left-width: 5px; -} - -div.system-entity-graph { - position: absolute; - top: 7px; - right: 35px; - height: 28px; - width: 300px; - background-color: #26292b; -} - -div.system-time-graph { - position: absolute; - top: 7px; - right: 35px; - height: 28px; - width: 300px -} - -div.system-graph-label { - position: absolute; - top: -5px; - left: -65px; - text-align: right; - padding-top: 8px; - padding-bottom: 8px; - padding-right: 5px; - width: 60px; - font-size: 13px; - color: #888; -} - -div.system-graph-label-filled { - background-color: #26292b; -} - -div.system-graph-label-secondary { - position: absolute; - top: 0px; - left: 295px; - font-size: 13px; -} - -span.system-component { - position: relative; - top: 5px; - background-color: #1E2022; - padding: 4px; - color: #4fa7ff; - margin-right: 5px; - font-size: 14px; -} - -span.system-component-annotation { - position: relative; - left: -5px; - background-color: #181a1b; - padding: 4px; - padding-left: 3px; - padding-right: 0px; - color: #47B576; - margin-right: 0px; - font-size: 14px; -} - -span.system-component-not { - color: #B5494B; -} - -span.system-component-tag { - color: #9546E5; -} - -div.pct-lowest { - color: #888; -} - -div.pct-low { - color: #5BE595; -} - -div.pct-medium { - color: #C6CA50; -} - -div.pct-high { - color: #B56D48; -} - -div.pct-highest { - color: #B5494B; -} - - -div.system-low { - border-left-color: #5BE595; -} - -div.system-medium { - border-left-color: #C6CA50; -} - -div.system-high { - border-left-color: #B56D48; -} - -div.system-highest { - border-left-color: #B5494B; -} diff --git a/flecs-dash/etc/apps/systems/system.js b/flecs-dash/etc/apps/systems/system.js deleted file mode 100644 index 45d70a2..0000000 --- a/flecs-dash/etc/apps/systems/system.js +++ /dev/null @@ -1,48 +0,0 @@ - - -Vue.component('system', { - props: ['tick', 'system', 'system_time'], - methods: { - entity_count() { - return this.system.current.matched_entity_count; - }, - table_count() { - return this.system.current.matched_table_count; - }, - fragmentation() { - return (((this.table_count() - 1) / this.entity_count()) * 100).toFixed(1) + "%"; - }, - percentage() { - return (this.system.current.time_spent / this.system_time) * 100; - }, - percentage_class() { - let pct = this.percentage(); - if (pct < 1.0) { - return "system-lowest"; - } else if (pct < 5.0) { - return "system-low"; - } else if (pct < 10.0) { - return "system-medium"; - } else if (pct < 20.0) { - return "system-high"; - } else { - return "system-highest"; - } - } - }, - template: ` -
-
-
- {{system.name}} - {{system.module}} - T:{{table_count()}} - F:{{fragmentation()}} - -
-
-
- - -
-
` -}); diff --git a/flecs-dash/etc/apps/systems/system_component.js b/flecs-dash/etc/apps/systems/system_component.js deleted file mode 100644 index d7700ee..0000000 --- a/flecs-dash/etc/apps/systems/system_component.js +++ /dev/null @@ -1,31 +0,0 @@ - -Vue.component('system-component', { - props: ['component'], - methods: { - css() { - if (this.component.exclude) { - return "system-component-not"; - } - return ""; - } - }, - template: ` - - - in - - - $ - - - parent - - - ref - - - 0 - - {{component.name}} - ` -}); diff --git a/flecs-dash/etc/apps/systems/system_entity_graph.js b/flecs-dash/etc/apps/systems/system_entity_graph.js deleted file mode 100644 index b8a4be4..0000000 --- a/flecs-dash/etc/apps/systems/system_entity_graph.js +++ /dev/null @@ -1,125 +0,0 @@ - -const system_entity_chart = { - type: 'line', - data: { - labels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 12, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 13, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 14, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 15, 56, 57, 58, 59, 60], - datasets: [ - { - label: 'Matched entities', - data: [], - backgroundColor: [ '#26352c' ], - borderColor: [ '#5BE595', ], - borderWidth: 2, - pointRadius: 0, - fill: true, - yAxisID: "entities" - } - ] - }, - options: { - title: { - display: false - }, - responsive: true, - maintainAspectRatio: false, - lineTension: 1, - animation: { - duration: 0 - }, - hover: { - animationDuration: 0 // duration of animations when hovering an item - }, - responsiveAnimationDuration: 0, - legend: { - display: false - }, - elements: { - line: { - tension: 0 // disables bezier curves - } - }, - scales: { - yAxes: [{ - id: 'entities', - position: 'right', - gridLines: { - display:false - }, - ticks: { - display: false, - beginAtZero: true, - maxTicksLimit: 2 - } - }], - xAxes: [{ - gridLines: { - display:false - }, - ticks: { - display: false - } - }] - } - } -} - -Vue.component('system-entity-graph', { - props: ['tick', 'system'], - updated() { - this.updateChart(); - }, - data: function() { - return { - chart: undefined - } - }, - methods: { - setValues() { - if (!this.system.history_1m) { - return; - } - - if (!this.chart) { - this.createChart(); - } - - system_entity_chart.data.datasets[0].data = this.system.history_1m.matched_entity_count.avg; - }, - - createChart() { - const ctx = document.getElementById('system-entity-' + this.system.name + '-graph'); - this.chart = new Chart(ctx, { - type: system_entity_chart.type, - data: system_entity_chart.data, - options: system_entity_chart.options - }); - }, - - updateChart() { - if (!this.system.history_1m) { - return; - } - this.setValues(); - this.chart.update(); - }, - - entity_count() { - if (!this.system || !this.system.current) { - return; - } - return this.system.current.matched_entity_count; - } - }, - template: ` -
-
- {{entity_count()}} -
- -
` -}); diff --git a/flecs-dash/etc/apps/systems/system_time_graph.js b/flecs-dash/etc/apps/systems/system_time_graph.js deleted file mode 100644 index 5d7db00..0000000 --- a/flecs-dash/etc/apps/systems/system_time_graph.js +++ /dev/null @@ -1,170 +0,0 @@ - -const system_time_chart = { - type: 'line', - data: { - labels: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 12, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 13, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 14, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 15, 56, 57, 58, 59, 60], - datasets: [ - { - label: 'Matched entities', - data: [], - backgroundColor: [ '#26537F' ], - borderColor: [ - '#4596E5', - ], - borderWidth: 2, - pointRadius: 0, - yAxisID: "entities" - } - ] - }, - options: { - title: { - display: false - }, - responsive: true, - maintainAspectRatio: false, - lineTension: 1, - animation: { - duration: 0 - }, - hover: { - animationDuration: 0 // duration of animations when hovering an item - }, - responsiveAnimationDuration: 0, - legend: { - display: false - }, - elements: { - line: { - tension: 0 // disables bezier curves - } - }, - scales: { - yAxes: [{ - id: 'entities', - position: 'right', - gridLines: { - display:false - }, - ticks: { - display: false, - beginAtZero: true, - maxTicksLimit: 2 - } - }], - xAxes: [{ - gridLines: { - display:false - }, - ticks: { - display: false - } - }] - } - } -} - -Vue.component('system-time-graph', { - props: ['tick', 'system', 'system_time', 'percentage'], - updated() { - this.updateChart(); - }, - data: function() { - return { - chart: undefined - } - }, - methods: { - setValues() { - if (!this.system.history_1m) { - return; - } - - if (!this.chart) { - this.createChart(); - } - - system_time_chart.data.datasets[0].data = this.system.history_1m.time_spent.avg; - }, - - createChart() { - const ctx = document.getElementById('system-time-' + this.system.name + '-graph'); - this.chart = new Chart(ctx, { - type: system_time_chart.type, - data: system_time_chart.data, - options: system_time_chart.options - }); - }, - - updateChart() { - if (!this.system.history_1m) { - return; - } - this.setValues(); - this.chart.update(); - }, - - time_spent() { - let time_spent = this.system.current.time_spent; - if (time_spent >= 1.0) { - return time_spent.toFixed(0) + "s"; - } - - time_spent *= 1000; - if (time_spent >= 1.0) { - return time_spent.toFixed(0) + "ms"; - } - - time_spent *= 1000; - if (time_spent >= 1.0) { - return time_spent.toFixed(0) + "us"; - } - - time_spent *= 1000; - if (time_spent >= 1.0) { - return time_spent.toFixed(0) + "ns"; - } else if (time_spent >= 0.01) { - return time_spent.toFixed(2) + "ns"; - } else { - return "0ns"; - } - }, - percentage_formatted() { - let pct = this.percentage; - if (pct > 10.0) { - return pct.toFixed(0) + "%" - } else { - return pct.toFixed(1) + "%" - } - }, - percentage_class() { - let pct = this.percentage; - if (pct < 1.0) { - return "pct-lowest"; - } else if (pct < 5.0) { - return "pct-low"; - } else if (pct < 10.0) { - return "pct-medium"; - } else if (pct < 20.0) { - return "pct-high"; - } else { - return "pct-highest"; - } - } - }, - template: ` -
-
- {{time_spent()}} -
-
- {{percentage_formatted()}} -
- -
` -}); diff --git a/flecs-dash/etc/apps/systems/systems.js b/flecs-dash/etc/apps/systems/systems.js deleted file mode 100644 index aaaa149..0000000 --- a/flecs-dash/etc/apps/systems/systems.js +++ /dev/null @@ -1,173 +0,0 @@ - -Vue.component('app-systems', { - mounted: function() { - this.startRequesting(""); - }, - beforeDestroy: function() { - this.stopRequesting(); - }, - data: function() { - return { - data: {}, - data_request: undefined, - error: false, - tick: 0 - } - }, - methods: { - request_data() { - var url = "metrics?pipeline=yes"; - - this.tick ++; - - app.get(url, (msg) => { - this.data = msg; - this.error = false; - }, (Http) => { - if (Http.status == 404) { - this.error = true; - } - }); - }, - // Stop periodically requesting the scope - stopRequesting() { - this.data = []; - clearInterval(this.data_request); - }, - // Start periodically requesting a scope - startRequesting(scope) { - this.stopRequesting(); - - // Initial request - this.request_data(); - - // Start periodic request - this.data_request = window.setInterval(function() { - this.request_data(); - }.bind(this), 1000); - }, - format_num(val) { - if (val < 1.0) { - return val.toFixed(2); - } else if (val < 10.0) { - return val.toFixed(1); - } else { - return val.toFixed(0); - } - }, - to_unit(val) { - if (val >= 1.0) { - return this.format_num(val) + "s"; - } - - val *= 1000; - if (val >= 1.0) { - return this.format_num(val) + "ms"; - } - - val *= 1000; - if (val >= 1.0) { - return this.format_num(val) + "us"; - } - - val *= 1000; - if (val >= 1.0) { - return this.format_num(val) + "ns"; - } else { - return this.format_num(val) + "ns"; - } - } - }, - computed: { - systems() { - if (!this.data.pipeline) { - return []; - } - return this.data.pipeline.systems; - }, - fps() { - if (!this.data.pipeline) { - return 0; - } - return this.data.pipeline.fps.toFixed(1) + "Hz"; - }, - frame_time() { - if (!this.data.pipeline) { - return 0; - } - return this.to_unit(this.data.pipeline.frame_time_total); - }, - system_time() { - if (!this.data.pipeline) { - return 0; - } - return this.to_unit(this.data.pipeline.system_time_total); - }, - merge_time() { - if (!this.data.pipeline) { - return 0; - } - return this.to_unit(this.data.pipeline.merge_time_total); - } - }, - template: ` -
- - -
-
-
fps
-
- {{fps}} -
-
- -
-
frame time
-
- {{frame_time}} -
-
- -
-
system time
-
- {{system_time}} -
-
- -
-
merge time
-
- {{merge_time}} -
-
-
- -
-
-
- -
-
- Merge -
-
-
-
- ` -}); - -app.app_loaded("systems", [{ - name: "system-entity-graph", - url: "apps/systems/system_entity_graph.js" -}, { - name: "system-time-graph", - url: "apps/systems/system_time_graph.js" -}, { - name: "system", - url: "apps/systems/system.js" -}, { - name: "system-component", - url: "apps/systems/system_component.js" -}]); diff --git a/flecs-dash/etc/css/style.css b/flecs-dash/etc/css/style.css deleted file mode 100644 index 83e7308..0000000 --- a/flecs-dash/etc/css/style.css +++ /dev/null @@ -1,253 +0,0 @@ -body { - font-family: Roboto,Noto Sans,Noto,sans-serif; - font-size: 1.0em; - font-size: 16px; - background-color: #37393E; - color: #eee; - margin: 0px; -} - -#app { - position: relative; -} - -div.sidebar { - position: absolute; - background-color: #1E2022; - top: 40px; - width: 70px; - height: calc(100vh - 50px); - padding-top: 12px; -} - -div.sidebar-button-container { - position: relative; - height: 45px; - margin-bottom: 12px; -} - -div.sidebar-button { - border-radius: 10px; - margin-left: 12px; - width: 45px; - height: 45px; - cursor: pointer; - text-align: center; -} - -div.sidebar-selector { - position: absolute; - background-color: #5BE595; - top: 17px; - left: -5px; - height: 10px; - width: 4px; - border-radius: 0px 4px 4px 0px; - transition: left 100ms, height 150ms, top 150ms; -} - -div.sidebar-selector-active { - top: 2.3px; - height: 40px; - left: 0px; -} - -div.sidebar-selector-hover { - top: 12px; - height: 20px; - left: 0px; -} - -img.sidebar-icon { - width: 40px; - height: 40px; - margin-top: 3; -} - -div.content { - position: absolute; - width: calc(100% - 70px); - height: calc(100vh - 40px); - top: 40px; - left: 70px; - overflow-y: auto; -} - -div.play-controls { - background-color: rgb(23, 24, 26);; - position: absolute; - top: 0px; - width: 100%; - height: 40px; - box-shadow: 0px 3px 5px rgba(0, 0, 0, 0.2); -} - -div.play-buttons { - position: relative; - width: 100px; - margin: 0 auto; - padding: 4px; -} - -div.play-button img { - width: 30px; - height: 30px; - float: left; - cursor: pointer; - background-color: #37393E; - margin: 1px; - border-radius: 2px; - transition: background-color 100ms; -} - -div.player-active img { - background-color: #777; -} - -div.perf-summary { - position: absolute; - top: 0px; - right: 0px; - width: 200px; - height: 40px; -} - -div.perf-clock { - position: relative; - float: left; - margin: 0 auto; - left: 10px; - top: -1px; - - padding: 2px; - padding-left: 10px; - padding-right: 4px; - font-size: 18px; - - border-radius: 5px; - border-color: #37393E; - border-style: solid; - border-width: 1px; - - background-color: #000; - color: #777; -} - -div.perf-clock-active { - color: #5BE595; -} - -div.perf-clock img { - position: relative; - top: 2px; - /* float: left; */ - - height: 17px; -} - -div.perf-fps { - position: relative; - top: 7px; - right: 35px; - width: 80px; - background-color: #000; - border-color: #37393E; - border-style: solid; - border-width: 1px; - border-radius: 5px; - min-height: 25px; -} - -span.perf-fps-value { - position: absolute; - border-radius: 5px; - background-color: #000; - font-size: 18px; - padding: 2px; - padding-left: 8px; -} - -span.perf-label { - position: absolute; - right: 0px; - background-color: #37393E; - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; - font-size: 12px; - padding: 5px; - padding-top: 6px; -} - -span.perf-fps-ok { - color: #5BE595; -} - -div.perf-load { - position: absolute; - right: 10px; - top: 7px; - height: 25px; - width: 130px; - - border-color: #37393E; - border-style: solid; - border-width: 1px; - border-radius: 5px; - background-color: #000; -} - -div.perf-load svg { - position: absolute; - background-color: #000; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -div.metric-row:after { - position: relative; -} - -div.metric-row:after { - content: ""; - display: table; - clear: both; - margin: 0px; - padding: 0px; -} - -div.metric-column { - float: left; - width: 10%; - min-width: 150px; - margin-right: 0px !important; - margin-bottom: 0px !important; -} - -div.metric { - background-color: #1E2022; - color: #eee; - font-size: 18px; - padding: 10px; - margin: 10px; - - border-left-color: #181818; - border-left-style: solid; - border-left-width: 5px; -} - -div.metric-content { - font-size: 36px; - color: #aaa; -} - -div.metric-header { - text-transform: uppercase; -} - -input { - -webkit-appearance: none; - -moz-appearance: none; - border-style: none; - outline: none; - padding: 5px; -} diff --git a/flecs-dash/etc/favicon.png b/flecs-dash/etc/favicon.png deleted file mode 100644 index 1f741c9e2ea28710e586db2a0e0063fba734467d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22408 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 SnWk!k5|^i|pUXO@geCxuya$>9 diff --git a/flecs-dash/etc/images/clock.png b/flecs-dash/etc/images/clock.png deleted file mode 100644 index 3f7f95619cdda5d19f88373882cc002b91733cc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2653 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 diff --git a/flecs-dash/etc/images/close.png b/flecs-dash/etc/images/close.png deleted file mode 100644 index c779968a84a49ad77f3516c33579e246a3344e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1497 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S&s$G2sTJz)0>Qs3=B*LnIRD+5xzcF z$@#f@i7EL>sd^Q;1t0|sHWgMtW^QUpqC!P(PF}H9g{=};g%ywu64qBz04piUwpEJo z4N!2-FG^J~)icpEP_pAvP*AWbN=dT{a&d!d2l8x{GD=Dctn~HE%ggo3jrH=2()A53 zEiLs8jP#9+bb%^#i!1X=5-W7`ij^UTz|3(;Elw`VEGWs$&r<-Io0ybeT4JlD1hNPY zAnq*5Ohed|R}A$Q(1ZFQ8GS=N1AT1TQY$iXXamVWw1NEvvCal$n3aD~W-8FZAZOVb z+JG%U5kol724sqrbAC>KQE)+GawI7L!9 zTZbb!=G~cd0>}IvE_^bz{&Pfir}nq1843)H91aXj0u2l-NX$6l2pzHaFF!xtS{imb zZSzgRryr_!#>~sOYI%X{x6!hbFxH-_BNMIM;;~zGj4L)bS#intM^Ic zV!jZrlibTWCYVi9_cK(`Rmq>T$RTKn-UAW#Q?9SL`Zxokm*_p5!MN3N(Yu4Yz1Ghu zub;W&_kxcte}pzHT<~qdjezr?Uma0@cPrqU#heaJf$$mKPZ}RHO=*78`k3ts+ezW} z&mz6-g$;KyH{Z;8`9Oa5x8>a5nD5?naTfC}m5Iu)<9(D8l=pP%lF;LmwKnpfo5h^^ zpoO`>(TG*(!4AclvCTmRKbm}m^pfv96kky{n_=mr55h)&1q*JeE_vj;hL@RZ+^d6tmEqL@RYnN(Iv77$ndq-|>)9r5DaY*8%l)6j-t0!xF@@j@c z1-Dyo%hadUzbf4O@r!(>=jl4n^K&fpPNAhJaN>Hv%lU`d(YSc7_0EI#ppwti)z4*} HQ$iB}Fe@EY diff --git a/flecs-dash/etc/images/delete.png b/flecs-dash/etc/images/delete.png deleted file mode 100644 index 84e7cd885821d9520a45eb8b33e55ede90593330..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1121 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S&s$G2sTJz)0>Qs3=B*LnIRD+5xzcF z$@#f@i7EL>sd^Q;1t0|sHWgMtW^QUpqC!P(PF}H9g{=};g%ywu64qBz04piUwpEJo z4N!2-FG^J~)icpEP_pAvP*AWbN=dT{a&d!d2l8x{GD=Dctn~HE%ggo3jrH=2()A53 zEiLs8jP#9+bb%^#i!1X=5-W7`ij^UTz|3(;Elw`VEGWs$&r<-Io0ybeT4JlD1hNPY zAnq*5Ohed|R}A$Q(1ZFQ8GS=N1AT1TQY$iXXamVWw1NEvvCal$n3aD~W-8FZAZOVb z+JG%U5kol724sqrbAC>KQE)+Gawjf<44_3s@+B0MNf-R~tar%Ehb7)1JPr zI+|W5f4uN}t=;^e$IcbxGUnEBGqP?`+)%h9{sLP-yRgTDg-pBU7u3aHy(uS^Uup4V z?^ktS-kXe^T)_@kCdf`$V8H4!NVvUa(2xLyNxkR~woONslN?x#=Yw*fr>mdKI;Vst E0D5&*yZ`_I diff --git a/flecs-dash/etc/images/flecs.png b/flecs-dash/etc/images/flecs.png deleted file mode 100644 index c7e3125a1840e288f63fbaacf3fb8032dfca8ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16661 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 IM2!OeAGenY8~^|S diff --git a/flecs-dash/etc/images/layers.png b/flecs-dash/etc/images/layers.png deleted file mode 100644 index 3c0baf3b1fcf7b73a7301248d13c3b92b7940b1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmV+c1OEJpP)=t!w}$Q2rphh2tx<~UW71&03i%v2oORTLI`0PLKucH48z66 z#U}u%@;vqI`QP3Bz5u{E;B$VbrIb=iDW#OsbqNz3V85kt!zPXaaD-d!>Py(gg&#Y^ zc1u?mo?_wG&9T?gu;CWo>E0`>wejkrjN2{!dDz3upLc?z zp=v!bL)Cg>hN|_%3{{JW8LAc%GgK`kW~f?7%uuz6n4xMRF+=iL)gJt$XOWHag;|_VVHEMYG#Le zs%Chrr)s9>P__Q^B~&dZW&u@0%zCPZn4#(%58HJP8+eLo0aZs`F|mo~n6_mIckvZ) zf;$CN9c9JDF3tg8u+=KVV=R2%CH`G*s`g(o@#H6Go#B2PJ52G~?|X*Hl2P@tFEKI2 zTfgtcXtOl#;InSM$NG{`^`tK`v4vCJ`hbmg)%7Q&uh=Q3>S14E;sIv*bubnoU+C8Y zj|!;To0yp3rG72&q>UNwW2Rq+gHv^QVt&%EbL_T?u!S!=HVjoqAZGVIVY5|+DcT!r!Pu16$))TY7a;n~VV%AeN#H^=kh*?k75VM}DA!a>QL(F=rhM4744KWL; z8e$evHN-5WYKU1$)y~9BDW#NBN-3q3QcB+dG%-tQgaxz200000NkvXXu0mjf0%TxG diff --git a/flecs-dash/etc/images/nav.png b/flecs-dash/etc/images/nav.png deleted file mode 100644 index 3dea50894f1bf3f99bef5404b48a1a3ef3195ed5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 937 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D$|0#YM9(|mmy zw18|51|~)!24;{FAY^FIWMBca85q=nGy?F!5O~yx{A(5FO z5hW46K32*3xq68y`AMmI6}bf<1q?P7RzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2g zDap1~itr6kaLzAERWQ{v(KAr8<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O) z@{7{-4J|D#^$m>ljf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6 ztE2?72o50bEXhnm*pycc^%l^B`XCv7Lp=k1xYzt zW_HPXZvRVPR7}+i7dn;4ei7K~G~Ko_jZMVqBP)yXXZ}CT$%m>R^vLrkeke!?XkZdq zz`&~Ez{rKhY!G{~>z%Lgu9G`=p4oL$a@ow+^H#6g74dz;(s`N}?B^`?&rmU5z`|!U zi8J8#w)3ume>#p83P%2HwekGvwRpGw)zZJ}=CxD*>@EJx_VH+LQInVmqs7Vp`X>$4 zPl|XfT%SECNPCJOWxmA_7W6G6GUUDgr{2PHtGm zzsK~G&2`3bW68*AdsWQKZ#CFB9yX9UUU+3;So`g(0&|w>oc@0GtgQIMh6x2%B)K?v z*||6b+1WTm*_k*bkIQn%9tYacCmkRnBfh}H;+ez60-r{uM;aF<$H~e5dKsCvJb&e5 zyXf57u*sQm_O{#?(pOooK4={J|K6^bI@iAcJ#OOr{C3-f!Y%&63c3~DEq#ms?rKrW l+$EA8h#qW+z~mR+!NmXZj)`i1feI+$d%F6$taD0e0svcDDscb+ diff --git a/flecs-dash/etc/images/pause.png b/flecs-dash/etc/images/pause.png deleted file mode 100644 index 760cc559a618b9b84157e7c9bc23dc596fb0e7c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 897 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|0#YM9(|mmy zw18|51|~)!24;{FAY^FIWMBca85q=nGy?DdeyTSmVA(5FO z5hW46K32*3xq68y`AMmI6}bf<1q?P7RzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2g zDap1~itr6kaLzAERWQ{v(KAr8<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O) z@{7{-4J|D#^$m>ljf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6 ztE2?72o50bEXhnm*pycc^%l^B`XCv7Lp=k1xYp+CA)w&Uz`)3ao$+Bk)B3ONvDd#=e(L*dBmeh!{Qmv>{>Cz& z-_FF8Q~P-rgXb1mjtyVWzGhOnSf+5`n)!O}2`;xA8KUp+(Q^>WWgmu$*szBbA`lDdeyTSmVA(5FO z5hW46K32*3xq68y`AMmI6}bf<1q?P7RzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2g zDap1~itr6kaLzAERWQ{v(KAr8<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O) z@{7{-4J|D#^$m>ljf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6 ztE2?72o50bEXhnm*pycc^%l^B`XCv7Lp=k1xYTK&@(Ax4xG2=!p1NZHQP=h1I$F040 za2{{4E;1{Pw`0tKeaFTcD^+PEY7!s+h%o3k2> zW!8kPUVSs?o6murF7~XPOd)2o&kEY=o#cJ*zWCza7b0FZ3pg0J-TUvk_~MRPK5F{g zpZVCYo%Z+Li&gjEShr_w{gt{mZvMC5e_z*@Y8PLUDL6be>eAz=wQlmfo39^!xS=rE z;G4@DhIyZ5g&z5CzWK*3_vJ*xZ#QpG)N?rZXGYYe^zMnF-3)#l*W1pxhWRq3)$dN_@+da%QEj?bnH4r*1ou z<-}0`boYs>ds$o4W+|;!Wh^qcxgrvImh-{g1!|k3L>0=Lf5b=nazD8Hz${5QTZ_p; z(8cZA6qW*|9kcBhDP||_h+o$$Mhr}o(5)#*p<4X`wSSE448fdE#zia zIIy4f#P@>xOWr?kzJ1H7;jl;Ch35yGECM|JHg3*`^?d*m*ft>peN*@J(@`T7nw8;gKbx*FZn?&fVb`Qg_sA{$V# zg-5TbY{n$!MXuh{Dgu0tG6pVAJupLdR+&TO#Yw7iB4@1@oXL4aw1bK)Pgg&ebxsLQ0LL!>WdHyG diff --git a/flecs-dash/etc/images/save.png b/flecs-dash/etc/images/save.png deleted file mode 100644 index 0eb5680e1d61f8481b914277bba095cf196b27bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@Zgyv2U{v#TaSW+oe0xJsfGJU+?V$qC zAq9?Ns}r9%o9EQezjIfSqnPWQy2T0g=L`1D?VPmhcX;0S+H||T=M#758CfU+!J_LG zS`4Aej47fGt0ppR;&Q0-_~)QpwMq=iz3Rab$-2Nwr9r2Gfr&$*;S(b(kOVVf#DXyG zsKsmTZfCf^ohJEWUGD!MZ})yX!B%qhnQdMD%F@UNt6Z}OY|d3F3|U(5Zn(4Wvba;! z%~Mja;}!YC01x>uNXD*`IY{isWvOo^`^(x;@$}Wx?dby16L}mTz0PBYE~i z-(6RiG3U+5{?6lYZ72VvzvY+L-Lxy;a_iUmmdKI;Vst0IbK2C;$Ke diff --git a/flecs-dash/etc/images/stop.png b/flecs-dash/etc/images/stop.png deleted file mode 100644 index 5a988dd44e79867c2ee765d9d16b536ea6d19632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 867 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-D$|0#YM9(|mmy zw18|51|~)!24;{FAY^FIWMBca85q=nGy?DdeyTSmVA(5FO z5hW46K32*3xq68y`AMmI6}bf<1q?P7RzPNMYDuC(MQ%=Bu~mhw5?F;5kPQ;nS5g2g zDap1~itr6kaLzAERWQ{v(KAr8<5EyiuqjGOvkG!?gK7uzY?U%fN(!v>^~=l4^~#O) z@{7{-4J|D#^$m>ljf`}GDs+o0^GXscbn}XpA%?)raY-#sF3Kz@$;{7F0GXSZlwVq6 ztE2?72o50bEXhnm*pycc^%l^B`XCv7Lp=k1xY_nlGe;6vCSwmn})GDZX=G%iAcjpn{7hE5b-*+Bf6i6)640E zlgl|Q(N#!gXo@IClS^``h*R%Yz4gA&^Ld`%@BjOK|KIQL`~N(j&y&mWq^ZLYFaQA5 zUFlRGd88{I6(#xGZ>EkW4X5Js@&6g-i__0lxm9}@3H$BX>|yS=OacKwNzIk& z;F}1VIp-0z*$*yQC@~jtwp!<5P}H2t7j50>_12Al?sEjg%(VI5-Oe`~HP*&oEJd2? zUJTX2z~O^gPkLY(MFCx2suUYC!0N`nIJx9@xlvJv}p1HPU-HGEzpA)$XnFHOt$& z>OPOpmyG4n3h@ zE9*kdjdbJ9VIQvgo7TXlsLBL%rx~J^zeXP;B=vCZ!{f1$I$)Eyd8xdm;f-HeZg{?t$%`_Yw9Beg+Iz;$g zhCXIzM?}X#Mt>f8>2M_VA>*XkA@I?*e)S+WV$9(V9t!lRXI>4=B>5ds&#~#(5HA${ zTU*xBH@20Dp5~n;AGy#omcL&j5R_({&HvQw{V{4kZk8*_!ARZwu39xVHU@Z){f^S1 zOzz1sLI07G#jYJo$4<_h&qp5ET(5K#wEMl!ueI@}v|xUsBY*@vQSp^jvS`0vMg0yH2mAHJa-v z+7yZo1! zT$@Hd?BwckK7t#sUB7;Ps&J`Tzo?lU<=F`r)k;NN2EIjR8*@|C1@nmgM$s^|325mLQv#rZO-i9SLZ=)?a_df-z zb^b!EwW(W^Zdd>Zo90urYL-JecOE_CG7!+?wWXXObq0q}1+CN|RDmmTgesttL0~HT x63*ixW^438zM}j%;c8k;a*S4#Rw7PiRT(E`HoR&6sZjBYb#?ZnRy&4f{0F$WV#5Fc diff --git a/flecs-dash/etc/images/table.png b/flecs-dash/etc/images/table.png deleted file mode 100644 index 406e041eea75dec9317fa612c4582b18a98e7f17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1201 zcmeAS@N?(olHy`uVBq!ia0vp^AwV3!!3HGTe+69!QjEnx?oJHr&dIz4$)rYjruq6Z zXaU(A3`~qd49p-UK*-RZ$-n|;Gcc$DX$A)71&j#U1x#?+kOjl#h zD=EpgRf_NpP;kyKN>wn`Gto0pvg1-vP_QXVNwW%aaf50H@@$ndN=gc>^!3Zj%k|2Q z_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUl_7?}%yCIAPA@U0iuodr630H;HaUD? zoRHh(kn}yYciVNm@il)$0*;>!o?!b(5PTJ&r{&dp3VNt-+%GA z{M+AX=es?h-`xF|_fGF@TKTLD4uu8=rpU&tl?TtJ6^9qkTVWrvfAPNM`@G-!ut)#u z{Pi$v>#v2!k8b18Ix*X8Z&3ZZxPQxhFY7Dr5qb4mwMXqm{F#2PwbPrd?fyBgVApMy zUhCMqH!xoRip0ES$D>O0qXZILvmVv@{<$;j%nhFfHGjTu4NAYia;@mE9I@nN&j-`E z{9h+=Z}~Ip@-LRAQ0|iT`SE8aIc&(PZO>cqO8i3ki!&RxI{p5B?2H0KhJvItL&+Ka zC5*f($;=IXKU+-}G^XS*Trk`}fz4z>4=;n&Gx19eY?C%JIvoGwp$zmF*mE2T1*$A* z&z(_%<>Sm7mrrl zuKKa0ZhcPwmOk$N+p6vc{Jo|B^3eL=x8EoBtzB~|l3ROAi0Q}Wa&jv+2XUX+v-fhE z@MfRvbrA63nR! TzxK(_1Qh_Du6{1-oD!MDD1 diff --git a/flecs-dash/etc/images/tree.png b/flecs-dash/etc/images/tree.png deleted file mode 100644 index bb6367a73fbb548afb7b4024dc4419aca9908347..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^2_Vb}Bp6OT_L>T$m`Z~Df*BafCZDwc@(ev)978G? z&mK1vWMJT7GL(66UzKkkvs9J)whSqOlLt~>*%#W(C<=LRXdv~&-+D$W`>#zM8BC>@ Qgh57ny85}Sb4q9e0NeW_Z~y=R diff --git a/flecs-dash/etc/images/usage.png b/flecs-dash/etc/images/usage.png deleted file mode 100644 index 1fbb26e05d613a2f9279e33b2d359f6b5d2686f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy!M2l#}z0_p!l92{)Xoe%VeV@Z%- zFoS?|@#@9-HaykqZ~wn+AyIxm+x_?V`7G(d2FEwcaI}A(+`s?&_U6OOHT=CFzgH0H zKJ5_xT<3gr{cMx?*Sl4crys1D&d0#OY~tzS7*fIb_WJdrM?NAf57gMrg&dvYHl2Ks zGx_uH{a55yS}kobnf3MF$GhiCeCIXq-fdmlnWELZ+Q)4AaeptdE`F6x?MXUIgW2j@ zBG-N33g4p@D*PjM>lW90TncY@F}^64(-v9B5crEVwpUG3)?wSN3m0ETg>Wb6zgE~5 z)!M@)aF*>+;k*+Tj9WH!9QF)0bojDR&pzP~!!=nAquEzD6Rh}E-zqkLabu0?WjAZ~ znIa@4`pa}PFS~&3;+RGE4>)d7+Ph|DBg0m)+Fcz}7PWu9a*TH~&)#Pp6E?pvGZA?7 zvo&vhKF8O0nF+Ne0$PE~Z!d2)P~P=rpTNu8i%ttWoq4$_!s%dmzaHrIDR#F`gz>T@}rmv(*X&$2}`?#ptIau)3_wk(2^4S@gG5#P8MDZ~JvU|E`~I@Y+0H=lRqo@fSvRv%O4z zNZq={acyP5g?o-SjTZjX72p=`N^3tV>9n)w?-}RLNX45bQ|9x0%yc@KbK-xFuZ#4B z)Q!$6$p=?oU(>ANJzMXal;A3}qXwNC*;O$9pJX=$EYC&&s>YI<{`~XJ^~M_PBO!B2$L>zTL{R8QavRJmKqE za(TbS)D?+IPLcbL-sr15@}NYre`}$@`CDl`?NUkEJS%c;we{WV@@n(UDEg+~v&F;m z!gbC4Mj - - Flecs Dash - - - - - - - -
- - - -
- - - - - - - - - - - - diff --git a/flecs-dash/etc/js/app.js b/flecs-dash/etc/js/app.js deleted file mode 100644 index 848c46d..0000000 --- a/flecs-dash/etc/js/app.js +++ /dev/null @@ -1,136 +0,0 @@ - -Vue.config.devtools = true; - -var app = new Vue({ - el: '#app', - methods: { - // Request - request(method, url, onmsg, onloadend) { - const Http = new XMLHttpRequest(); - - Http.open(method, "http://" + url); - if (onloadend) { - Http.onloadend = function() { onloadend(Http); }; - } - Http.send(); - Http.onreadystatechange = (e)=>{ - if (Http.readyState == 4) { - if (Http.responseText && Http.responseText.length) { - if (onmsg) { - onmsg(JSON.parse(Http.responseText)); - } - } - } - } - }, - - // Request to own server - request_self(method, url, onmsg, onloadend) { - this.request(method, this.host + "/" + url, onmsg, onloadend); - }, - - set_host(host) { - this.host = host; - this.init(); - }, - - get(url, onmsg, onloadend) { - this.request_self("GET", url, onmsg, onloadend); - }, - - put(url, onmsg, onloadend) { - this.request_self("PUT", url, onmsg, onloadend); - }, - - post(url, onmsg, onloadend) { - this.request_self("POST", url, onmsg, onloadend); - }, - - delete(url, onmsg, onloadend) { - this.request_self("DELETE", url, onmsg, onloadend); - }, - - path_to_url(path) { - return path.replace(/\./g, "/"); - }, - - // Initialize application, send initial request for id of self - init() { - this.get("this", (msg) => { - this.server_id = msg.server_id; - this.get("scope/" + this.path_to_url(this.server_id) + "?include=flecs.dash.App", (msg) => { - this.apps = msg; - }); - }); - }, - - // Anything that needs to appen periodically - refresh() { }, - - // App select event selects a different application - app_select(event) { - this.app_load(event.name); - }, - - import(url) { - var app = document.getElementById(url); - if (!app) { - app = document.createElement("script"); - app.setAttribute("id", url); - app.setAttribute("src", url); - document.body.appendChild(app); - - return false - } else { - return true; - } - }, - - component_loaded(id) { - return Vue.options.components[id] != undefined; - }, - - // Load app resources - app_load(app_id) { - if (this.import("apps/" + app_id + "/" + app_id + ".js")) { - this.app_loaded(app_id); - } - }, - - // App is loaded - app_loaded(app_id, dependencies) { - var dependencies_resolved = true; - - // Load dependent components if any - if (dependencies) { - dependencies.forEach(d => { - if (!this.component_loaded(d.name)) { - app.import(d.url); - dependencies_resolved = false; - } - }); - } - - // If all dependencies are resolved, just load the app - if (dependencies_resolved) { - this.app = app_id; - } else { - // If not all dependencies are loaded, try again in a little bit - window.setTimeout(function() { - this.app_loaded(app_id, dependencies); - }.bind(this), 32); - } - } - }, - data: { - host: window.location.host, - app: "", - apps: [], - server_id: "" - } -}); - -window.onload = function() { - app.init(); - window.setInterval(app.refresh, 1000); -} diff --git a/flecs-dash/etc/js/appcontent.js b/flecs-dash/etc/js/appcontent.js deleted file mode 100644 index b132394..0000000 --- a/flecs-dash/etc/js/appcontent.js +++ /dev/null @@ -1,18 +0,0 @@ -Vue.component('appcontent', { - props: ['world', 'app'], - render: function(h) { - if (!this.app || this.app === "") { - return h('div'); - } else { - return h('div', { - attrs: {class: "content"} - }, [ - h('app-' + this.app, { - props: { - world: this.world - } - }) - ]); - } - } -}); diff --git a/flecs-dash/etc/js/perf_summary.js b/flecs-dash/etc/js/perf_summary.js deleted file mode 100644 index 76ab283..0000000 --- a/flecs-dash/etc/js/perf_summary.js +++ /dev/null @@ -1,182 +0,0 @@ - -Vue.component('perf-fps', { - props: ['data'], - data: function() { - return { - last_tick: 0, - last_fps: 0, - last_update: 0, - last_result: 0 - } - }, - computed: { - fps() { - if (!this.data) { - return 0; - } - - var d = new Date(); - var t = d.getTime(); - - if (t - this.last_update < 1000) { - return this.last_result; - } - - this.last_update = t; - - const fps = this.data.data["flecs.dash.monitor.Fps"]; - const tick = this.data.data["flecs.dash.monitor.Tick"]; - - let result = (fps.count - this.last_fps) / (tick.count - this.last_tick); - - this.last_fps = fps.count; - this.last_tick = tick.count; - - if (result < 0) { - result = 0; - } - - if (result > 1000000) { - this.last_result = (result / 1000000).toFixed(2) + "M"; - } else - if (result > 1000) { - this.last_result = (result / 1000).toFixed(2) + "K"; - } else if (result > 100) { - this.last_result = result.toFixed(0); - } else { - this.last_result = result.toFixed(1); - } - - return this.last_result; - }, - css() { - if (!this.data) { - return ""; - } - - const fps = this.data.data["flecs.dash.monitor.Fps"]; - if (this.fps >= fps.target * 0.9) { - return "perf-fps-ok"; - } - } - }, - template: ` -
-
- {{ fps }} - FPS -
-
- ` -}); - -Vue.component('perf-load', { - props: ['data'], - data: function() { - return { - last_total: 0, - last_frame: 0 - } - }, - computed: { - load() { - if (!this.data) { - return 100; - } - - const load = this.data.data["flecs.dash.monitor.Load"]; - - let result = (load.frame_time_count - this.last_frame) / (load.total_time_count - this.last_total); - this.last_frame = load.frame_time_count; - this.last_total = load.total_time_count; - - if (result < 0) { - result = 0; - } - - if (!result) { - result = 1; - } - - return (result * 100); - }, - css() { - return ""; - } - }, - template: ` -
- - - - - - - - - - Load -
- ` -}); - -Vue.component('perf-clock', { - props: ['data'], - methods: { - digit(num) { - if (num < 10) { - return "0" + num; - } else { - return num; - } - } - }, - computed: { - clock() { - if (!this.data) { - return "00:00:00.00"; - } - - const clock = this.data.data["flecs.dash.monitor.WorldClock"]; - - let hours = Math.floor(clock.world_time / 3600); - let minutes = Math.floor((clock.world_time - hours * 3600) / 60); - let seconds = Math.floor(clock.world_time - hours * 3600 - minutes * 60); - let remainder = Math.floor((clock.world_time - Math.floor(clock.world_time)) * 10); - - return this.digit(hours) + ":" + this.digit(minutes) + ":" + - this.digit(seconds) + "." + remainder; - }, - css() { - if (!this.data) { - return ""; - } - - const clock = this.data.data["flecs.dash.monitor.WorldClock"]; - if (clock.world_time != 0) { - return "perf-clock-active"; - } else { - return ""; - } - } - }, - template: ` -
- {{ clock }} - -
- ` -}); - -Vue.component('perf-summary', { - props: ['data'], - template: ` -
- -
- - -
-
- ` -}); diff --git a/flecs-dash/etc/js/periodic_request.js b/flecs-dash/etc/js/periodic_request.js deleted file mode 100644 index c6011cc..0000000 --- a/flecs-dash/etc/js/periodic_request.js +++ /dev/null @@ -1,36 +0,0 @@ - -class PeriodicRequest { - constructor(interval, callback, err_callback) { - this.error = false; - this.timer = undefined; - this.result = undefined; - this.interval = interval; - this.callback = callback; - this.err_callback = err_callback; - } - - request(url) { - app.get(url, (msg) => { - this.result = msg; - this.error = false; - this.callback(msg); - }, (Http) => { - if (!Http.status || Http.status >= 400) { - this.err_callback(Http.status); - this.error = true; - } - }); - } - - stopRequesting() { - this.result = undefined; - clearInterval(this.timer); - } - - startRequesting(url) { - this.stopRequesting(); - this.timer = window.setInterval(function() { - this.request(url); - }.bind(this), this.interval); - } -} diff --git a/flecs-dash/etc/js/play_controls.js b/flecs-dash/etc/js/play_controls.js deleted file mode 100644 index 3924eea..0000000 --- a/flecs-dash/etc/js/play_controls.js +++ /dev/null @@ -1,69 +0,0 @@ - -Vue.component('play-button', { - props: ["state", "icon"], - methods: { - clicked: function() { - this.$emit('click', {event: this.icon}); - }, - css() { - let result = "play-button"; - if (this.state == this.icon) { - result += " player-active"; - } - return result; - } - }, - template: ` -
- -
- ` -}); - -Vue.component('play-controls', { - mounted: function() { - this.request.startRequesting("entity/flecs/core/World"); - }, - beforeDestroy: function() { - this.stopRequesting(); - }, - data: function() { - return { - state: undefined, - request: new PeriodicRequest(100, this.on_recv_world, this.on_recv_err), - data: undefined - } - }, - methods: { - play: function(e) { - this.state = e.event; - app.put("player/" + e.event, (msg) => { }); - }, - on_recv_world(data) { - this.data = data; - if (!this.state) { - const state = this.data.data["flecs.player.Player"]; - if (state.state == "EcsPlayerPlay") { - this.state = "play"; - } else if (state.state == "EcsPlayerStop") { - this.state = "stop"; - } else if (state.state == "EcsPlayerPause") { - this.state = "pause"; - } - } - }, - on_recv_err() { - this.state = undefined; - } - }, - template: ` -
-
- - - -
- -
- ` - }); diff --git a/flecs-dash/etc/js/sidebar-button.js b/flecs-dash/etc/js/sidebar-button.js deleted file mode 100644 index d5ee4ca..0000000 --- a/flecs-dash/etc/js/sidebar-button.js +++ /dev/null @@ -1,46 +0,0 @@ -Vue.component('sidebar-button', { - props: { - app: String, - icon: String, - active_app: String - }, - data: function() { - return { - hover: false - } - }, - methods: { - selector_css() { - let result = "sidebar-selector"; - if (this.app == this.active_app) { - result += " sidebar-selector-active"; - } else if (this.hover) { - result += " sidebar-selector-hover"; - } - return result; - }, - button_css() { - return "sidebar-button"; - }, - select_app: function() { - this.$emit('select-app', {name: this.app}); - }, - set_hover(hover) { - this.hover = hover; - } - }, - template: ` - - ` -}); diff --git a/flecs-dash/etc/js/sidebar.js b/flecs-dash/etc/js/sidebar.js deleted file mode 100644 index 707d2e5..0000000 --- a/flecs-dash/etc/js/sidebar.js +++ /dev/null @@ -1,59 +0,0 @@ -Vue.component('sidebar', { - props: { - app: String, - apps: Array - }, - methods: { - select_app(event) { - this.$emit("app-select", event); - } - }, - computed: { - app_names: function() { - let ids = []; - - if (!this.apps) { - return; - } - - this.apps.forEach((table) => { - if (table.data && table.data.Name) { - table.data.Name.forEach((app) => { - ids.push(app.value); - }); - } - }); - - return ids; - }, - app_icons: function() { - let ids = []; - - if (!this.apps) { - return; - } - - this.apps.forEach((table) => { - if (table.data && table.data["flecs.dash.App"]) { - table.data["flecs.dash.App"].forEach((app) => { - ids.push(app.icon); - }); - } - }); - - return ids; - } - }, - template: ` - - ` -}); - \ No newline at end of file diff --git a/flecs-dash/etc/js/vue.js b/flecs-dash/etc/js/vue.js deleted file mode 100644 index 41094e0..0000000 --- a/flecs-dash/etc/js/vue.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Vue.js v2.6.12 - * (c) 2014-2020 Evan You - * Released under the MIT License. - */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!z&&!V&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Pe(String,i.type);(c<0||s0&&(st((u=e(u,(a||"")+"_"+c))[0])&&st(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?st(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):st(u)&&st(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function st(e){return n(e)&&n(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=pt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=dt(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function pt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function dt(e,t){return function(){return e[t]}}function vt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(sn=function(){return cn.now()})}function un(){var e,t;for(an=sn(),rn=!0,Qt.sort(function(e,t){return e.id-t.id}),on=0;onon&&Qt[n].id>e.id;)n--;Qt.splice(n+1,0,e)}else Qt.push(e);nn||(nn=!0,Ye(un))}}(this)},fn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){Re(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},fn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},fn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},fn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var pn={enumerable:!0,configurable:!0,get:S,set:S};function dn(e,t,n){pn.get=function(){return this[t][n]},pn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,pn)}function vn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Me(o,t,n,e);xe(r,o,a),o in e||dn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return Re(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&dn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new fn(e,a||S,S,hn)),i in e||mn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function An(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=xn(a.componentOptions);s&&!t(s)&&On(n,o,r,i)}}}function On(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=bn++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De($n(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&qt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=ut(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Pt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Pt(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Yt(n,"beforeCreate"),function(e){var t=ct(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),vn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Yt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(wn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return _n(this,e,t,n);(n=n||{}).user=!0;var r=new fn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){Re(e,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(wn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&On(a,s[0],s,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Ye,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),M.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Tn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),Cn(e),function(e){M.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(wn),Object.defineProperty(wn.prototype,"$isServer",{get:te}),Object.defineProperty(wn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(wn,"FunctionalRenderContext",{value:Tt}),wn.version="2.6.12";var En=p("style,class"),Nn=p("input,textarea,option,select,progress"),jn=function(e,t,n){return"value"===n&&Nn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Dn=p("contenteditable,draggable,spellcheck"),Ln=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Hn(t)||"false"===t?"false":"contenteditable"===e&&Ln(t)?t:"true"},In=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Fn="http://www.w3.org/1999/xlink",Pn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Rn=function(e){return Pn(e)?e.slice(6,e.length):""},Hn=function(e){return null==e||!1===e};function Bn(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Un(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Un(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Vn(t));return""}(t.staticClass,t.class)}function Un(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Vn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?hr(e,t,n):In(t)?Hn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Dn(t)?e.setAttribute(t,Mn(t,n)):Pn(t)?Hn(n)?e.removeAttributeNS(Fn,Rn(t)):e.setAttributeNS(Fn,t,n):hr(e,t,n)}function hr(e,t,n){if(Hn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var mr={create:dr,update:dr};function yr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Bn(r),c=i._transitionClasses;n(c)&&(s=zn(s,Vn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var gr,_r,br,$r,wr,Cr,xr={create:yr,update:yr},kr=/[\w).+\-_$\]]/;function Ar(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&kr.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,$r),key:'"'+e.slice($r+1)+'"'}:{exp:e,key:null};_r=e,$r=wr=Cr=0;for(;!zr();)Vr(br=Ur())?Jr(br):91===br&&Kr(br);return{exp:e.slice(0,wr),key:e.slice(wr+1,Cr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Ur(){return _r.charCodeAt(++$r)}function zr(){return $r>=gr}function Vr(e){return 34===e||39===e}function Kr(e){var t=1;for(wr=$r;!zr();)if(Vr(e=Ur()))Jr(e);else if(91===e&&t++,93===e&&t--,0===t){Cr=$r;break}}function Jr(e){for(var t=e;!zr()&&(e=Ur())!==t;);}var qr,Wr="__r",Zr="__c";function Gr(e,t,n){var r=qr;return function i(){null!==t.apply(null,arguments)&&Qr(e,i,n,r)}}var Xr=Ve&&!(X&&Number(X[1])<=53);function Yr(e,t,n,r){if(Xr){var i=an,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}qr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Qr(e,t,n,r){(r||qr).removeEventListener(e,t._wrapper||t,n)}function ei(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};qr=r.elm,function(e){if(n(e[Wr])){var t=q?"change":"input";e[t]=[].concat(e[Wr],e[t]||[]),delete e[Wr]}n(e[Zr])&&(e.change=[].concat(e[Zr],e.change||[]),delete e[Zr])}(i),rt(i,o,Yr,Qr,Gr,r.context),qr=void 0}}var ti,ni={create:ei,update:ei};function ri(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);ii(a,u)&&(a.value=u)}else if("innerHTML"===i&&qn(a.tagName)&&t(a.innerHTML)){(ti=ti||document.createElement("div")).innerHTML=""+o+"";for(var l=ti.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function ii(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var oi={create:ri,update:ri},ai=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function si(e){var t=ci(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ci(e){return Array.isArray(e)?O(e):"string"==typeof e?ai(e):e}var ui,li=/^--/,fi=/\s*!important$/,pi=function(e,t,n){if(li.test(t))e.style.setProperty(t,n);else if(fi.test(n))e.style.setProperty(C(t),n.replace(fi,""),"important");else{var r=vi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(yi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function _i(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(yi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function bi(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,$i(e.name||"v")),A(t,e),t}return"string"==typeof e?$i(e):void 0}}var $i=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),wi=z&&!W,Ci="transition",xi="animation",ki="transition",Ai="transitionend",Oi="animation",Si="animationend";wi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ki="WebkitTransition",Ai="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Oi="WebkitAnimation",Si="webkitAnimationEnd"));var Ti=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ti(function(){Ti(e)})}function Ni(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),gi(e,t))}function ji(e,t){e._transitionClasses&&h(e._transitionClasses,t),_i(e,t)}function Di(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ci?Ai:Si,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=Ci,l=a,f=o.length):t===xi?u>0&&(n=xi,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?Ci:xi:null)?n===Ci?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===Ci&&Li.test(r[ki+"Property"])}}function Ii(e,t){for(;e.length1}function Ui(e,t){!0!==t.data.show&&Pi(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(N(Wi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function qi(e,t){return t.every(function(t){return!N(t,e)})}function Wi(e){return"_value"in e?e._value:e.value}function Zi(e){e.target.composing=!0}function Gi(e){e.target.composing&&(e.target.composing=!1,Xi(e.target,"input"))}function Xi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Yi(e){return!e.componentInstance||e.data&&e.data.transition?e:Yi(e.componentInstance._vnode)}var Qi={model:Vi,show:{bind:function(e,t,n){var r=t.value,i=(n=Yi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Pi(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Yi(n)).data&&n.data.transition?(n.data.show=!0,r?Pi(n,function(){e.style.display=e.__vOriginalDisplay}):Ri(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},eo={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function to(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?to(zt(t.children)):e}function no(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function ro(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var io=function(e){return e.tag||Ut(e)},oo=function(e){return"show"===e.name},ao={name:"transition",props:eo,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(io)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=to(o);if(!a)return o;if(this._leaving)return ro(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=no(this),u=this._vnode,l=to(u);if(a.data.directives&&a.data.directives.some(oo)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!Ut(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,it(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),ro(e,o);if("in-out"===r){if(Ut(a))return u;var p,d=function(){p()};it(c,"afterEnter",d),it(c,"enterCancelled",d),it(f,"delayLeave",function(e){p=e})}}return o}}},so=A({tag:String,moveClass:String},eo);function co(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function uo(e){e.data.newPos=e.elm.getBoundingClientRect()}function lo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete so.mode;var fo={Transition:ao,TransitionGroup:{props:so,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Zt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=no(this),s=0;s-1?Gn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Gn[e]=/HTMLUnknownElement/.test(t.toString())},A(wn.options.directives,Qi),A(wn.options.components,fo),wn.prototype.__patch__=z?zi:S,wn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Yt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new fn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Yt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Yt(e,"mounted")),e}(this,e=e&&z?Yn(e):void 0,t)},z&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",wn)},0);var po=/\{\{((?:.|\r?\n)+?)\}\}/g,vo=/[-.*+?^${}()|[\]\/\\]/g,ho=g(function(e){var t=e[0].replace(vo,"\\$&"),n=e[1].replace(vo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var mo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Fr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Ir(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var yo,go={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Fr(e,"style");n&&(e.staticStyle=JSON.stringify(ai(n)));var r=Ir(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},_o=function(e){return(yo=yo||document.createElement("div")).innerHTML=e,yo.textContent},bo=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),$o=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),wo=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),Co=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,xo=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Ao="((?:"+ko+"\\:)?"+ko+")",Oo=new RegExp("^<"+Ao),So=/^\s*(\/?)>/,To=new RegExp("^<\\/"+Ao+"[^>]*>"),Eo=/^]+>/i,No=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Io=/&(?:lt|gt|quot|amp|#39);/g,Fo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Po=p("pre,textarea",!0),Ro=function(e,t){return e&&Po(e)&&"\n"===t[0]};function Ho(e,t){var n=t?Fo:Io;return e.replace(n,function(e){return Mo[e]})}var Bo,Uo,zo,Vo,Ko,Jo,qo,Wo,Zo=/^@|^v-on:/,Go=/^v-|^@|^:|^#/,Xo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Yo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,Qo=/^\(|\)$/g,ea=/^\[.*\]$/,ta=/:(.*)$/,na=/^:|^\.|^v-bind:/,ra=/\.[^.\]]+(?=[^\]]*$)/g,ia=/^v-slot(:|$)|^#/,oa=/[\r\n]/,aa=/\s+/g,sa=g(_o),ca="_empty_";function ua(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ma(t),rawAttrsMap:{},parent:n,children:[]}}function la(e,t){Bo=t.warn||Sr,Jo=t.isPreTag||T,qo=t.mustUseProp||T,Wo=t.getTagNamespace||T;t.isReservedTag;zo=Tr(t.modules,"transformNode"),Vo=Tr(t.modules,"preTransformNode"),Ko=Tr(t.modules,"postTransformNode"),Uo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=fa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&da(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&da(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),Jo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Do(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ro(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(No.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(jo.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(To);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ro(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(To.test($)||Oo.test($)||No.test($)||jo.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(Oo);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(So))&&(r=e.match(xo)||e.match(Co));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&wo(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Bo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Wo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Ar(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Br(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Br(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Br(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Ir(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Br(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Wr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Br(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Hr(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:bo,mustUseProp:jn,canBeLeftOpenTag:$o,isReservedTag:Wn,getTagNamespace:Zn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}(ba)},xa=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function ka(e,t){e&&($a=xa(t.staticKeys||""),wa=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!wa(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every($a)))}(t);if(1===t.type){if(!wa(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,Oa=/\([^)]*?\);*$/,Sa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Ta={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},Na=function(e){return"if("+e+")return null;"},ja={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:Na("$event.target !== $event.currentTarget"),ctrl:Na("!$event.ctrlKey"),shift:Na("!$event.shiftKey"),alt:Na("!$event.altKey"),meta:Na("!$event.metaKey"),left:Na("'button' in $event && $event.button !== 0"),middle:Na("'button' in $event && $event.button !== 1"),right:Na("'button' in $event && $event.button !== 2")};function Da(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=La(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function La(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return La(e)}).join(",")+"]";var t=Sa.test(e.value),n=Aa.test(e.value),r=Sa.test(e.value.replace(Oa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(ja[s])o+=ja[s],Ta[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=Na(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+"($event)":n?"return ("+e.value+")($event)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Ta[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Ia={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Fa=function(e){this.options=e,this.warn=e.warn||Sr,this.transforms=Tr(e.modules,"transformCode"),this.dataGenFns=Tr(e.modules,"genData"),this.directives=A(A({},Ia),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Pa(e,t){var n=new Fa(t);return{render:"with(this){return "+(e?Ra(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ra(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ha(e,t);if(e.once&&!e.onceProcessed)return Ba(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Ua(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=qa(e,t),i="_t("+n+(r?","+r:""),o=e.attrs||e.dynamicAttrs?Ga((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:qa(t,n,!0);return"_c("+e+","+Va(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Va(e,t));var i=e.inlineTemplate?null:qa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Pa(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Ga(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ka(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ka))}function Ja(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Ua(e,t,Ja,"null");if(e.for&&!e.forProcessed)return za(e,t,Ja);var r=e.slotScope===ca?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(qa(e,t)||"undefined")+":undefined":qa(e,t)||"undefined":Ra(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function qa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ra)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
',ts.innerHTML.indexOf(" ")>0}var os=!!z&&is(!1),as=!!z&&is(!0),ss=g(function(e){var t=Yn(e);return t&&t.innerHTML}),cs=wn.prototype.$mount;return wn.prototype.$mount=function(e,t){if((e=e&&Yn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=ss(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=rs(r,{outputSourceRange:!1,shouldDecodeNewlines:os,shouldDecodeNewlinesForHref:as,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return cs.call(this,e,t)},wn.compile=rs,wn}); \ No newline at end of file