cosmosc2-tool-tlmgrapher 5.0.2 → 5.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +0,0 @@
1
- {"version":3,"file":"js/208.js","mappings":"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","sources":["webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/TlmGrapher.vue?b4fa","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/Graph.vue?a605","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/DateTimeChooser.vue?40c6","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/DateTimeChooser.vue","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/DateTimeChooser.vue?2f38","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/DateTimeChooser.vue?f834","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/services/cable.js","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/Graph.vue","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/Graph.vue?25dc","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/Graph.vue?0667","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?d129","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?b667","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?6158","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?36c2","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?e52f","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?65b7","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?b5c7","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?44cd","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TargetPacketItemChooser.vue?b395","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TopBar.vue?228d","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/SettingsDialog.vue?2b81","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/services/api.js","webpack://@cosmosc2/tool-tlmgrapher/src/tools/TlmGrapher/SettingsDialog.vue","webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/SettingsDialog.vue?844c","webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/SettingsDialog.vue","webpack://@cosmosc2/tool-tlmgrapher/src/tools/TlmGrapher/TlmGrapher.vue","webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/TlmGrapher.vue?70c2","webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/TlmGrapher.vue","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/Graph.vue?55b2","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/TlmGrapher.vue?7978","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/Graph.vue?9ac1","webpack://@cosmosc2/tool-tlmgrapher/../cosmosc2-tool-common/src/components/TopBar.vue?5429","webpack://@cosmosc2/tool-tlmgrapher/./src/tools/TlmGrapher/TlmGrapher.vue?547c"],"sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('top-bar',{attrs:{\"menus\":_vm.menus,\"title\":_vm.title}}),_c('div',[_c('v-snackbar',{attrs:{\"top\":\"\",\"type\":_vm.alertType,\"icon\":_vm.alertType,\"timeout\":5000},scopedSlots:_vm._u([{key:\"action\",fn:function(ref){\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._b({attrs:{\"text\":\"\"},on:{\"click\":function () {\n _vm.showAlert = false\n }}},'v-btn',attrs,false),[_vm._v(\" Close \")])]}}]),model:{value:(_vm.showAlert),callback:function ($$v) {_vm.showAlert=$$v},expression:\"showAlert\"}},[_c('v-icon',[_vm._v(\" mdi-\"+_vm._s(_vm.alertType)+\" \")]),_vm._v(\" \"+_vm._s(_vm.alert)+\" \")],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(this.selectedGraphId === null),expression:\"this.selectedGraphId === null\"}]},[_c('v-row',{staticClass:\"my-5\"},[_c('v-spacer'),_c('span',[_vm._v(\" Add a graph from the menu bar or select an existing graph to continue \")]),_c('v-spacer')],1)],1),_c('v-row',{directives:[{name:\"show\",rawName:\"v-show\",value:(this.selectedGraphId !== null),expression:\"this.selectedGraphId !== null\"}],attrs:{\"justify\":\"space-between\"}},[_c('v-col',{attrs:{\"cols\":\"11\"}},[_c('target-packet-item-chooser',{attrs:{\"initial-target-name\":this.$route.params.target,\"initial-packet-name\":this.$route.params.packet,\"initial-item-name\":this.$route.params.item,\"button-text\":\"Add Item\",\"choose-item\":\"\"},on:{\"click\":_vm.addItem}})],1),_c('v-col',{attrs:{\"cols\":\"1\"}},[_c('v-btn',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.state === 'pause'),expression:\"state === 'pause'\"}],staticClass:\"pulse\",attrs:{\"color\":\"primary\",\"fab\":\"\",\"data-test\":\"start-graph\"},on:{\"click\":function () {\n _vm.state = 'start'\n }}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(\"mdi-play\")])],1),_c('v-btn',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.state === 'start'),expression:\"state === 'start'\"}],attrs:{\"color\":\"primary\",\"fab\":\"\",\"data-test\":\"pause-graph\"},on:{\"click\":function () {\n _vm.state = 'pause'\n }}},[_c('v-icon',{attrs:{\"large\":\"\"}},[_vm._v(\"mdi-pause\")])],1)],1)],1),_c('div',{staticClass:\"grid\"},_vm._l((_vm.graphs),function(graph){return _c('div',{key:graph,ref:(\"gridItem\" + graph),refInFor:true,staticClass:\"item\",attrs:{\"id\":(\"gridItem\" + graph)}},[_c('div',{staticClass:\"item-content\"},[_c('graph',{ref:(\"graph\" + graph),refInFor:true,attrs:{\"id\":graph,\"state\":_vm.state,\"start-time\":_vm.startTime,\"selected-graph-id\":_vm.selectedGraphId,\"seconds-graphed\":_vm.settings.secondsGraphed.value,\"points-saved\":_vm.settings.pointsSaved.value,\"points-graphed\":_vm.settings.pointsGraphed.value},on:{\"close-graph\":function () { return _vm.closeGraph(graph); },\"min-max-graph\":function () { return _vm.minMaxGraph(graph); },\"resize\":function () { return _vm.resize(graph); },\"click\":function () { return _vm.graphSelected(graph); },\"mousedown\":_vm.mousedown,\"started\":_vm.graphStarted}})],1)])}),0)],1),(_vm.showOpenConfig)?_c('open-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":_vm.openConfiguration},model:{value:(_vm.showOpenConfig),callback:function ($$v) {_vm.showOpenConfig=$$v},expression:\"showOpenConfig\"}}):_vm._e(),(_vm.showSaveConfig)?_c('save-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":_vm.saveConfiguration},model:{value:(_vm.showSaveConfig),callback:function ($$v) {_vm.showSaveConfig=$$v},expression:\"showSaveConfig\"}}):_vm._e(),_c('settings-dialog',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showSettingsDialog),expression:\"showSettingsDialog\"}],attrs:{\"settings\":_vm.settings},model:{value:(_vm.showSettingsDialog),callback:function ($$v) {_vm.showSettingsDialog=$$v},expression:\"showSettingsDialog\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from 'axios'\nimport Vue from 'vue'\n\nconst vueInstance = new Vue()\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 10000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\n let body = `HTTP ${error.response.status} - `\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n vueInstance.$notify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n }\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nexport class CosmosApi {\n id = 1\n\n constructor() {}\n\n // This is hacky Json-rpc for now. Should probably use a jsonrpc library.\n async exec(method, params, kwparams = {}) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = localStorage.scope\n const response = await axios.post(\n '/cosmos-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.cosmosToken,\n 'Content-Type': 'application/json-rpc',\n },\n }\n )\n // var data = response.data\n // if (data.error) {\n // var err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n var err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n err.name = 'Unknown error'\n }\n //console.log(error)\n throw err\n }\n }\n\n decode_cosmos_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_cosmos_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n connect_interface(interface_name) {\n return this.exec('connect_interface', [interface_name])\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_all_target_info() {\n return this.exec('get_all_target_info', [])\n }\n\n get_all_cmd_info() {\n return this.exec('get_all_cmd_info', [])\n }\n\n get_all_tlm_info() {\n return this.exec('get_all_tlm_info', [])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_parameter(target, packet, item) {\n return this.exec('get_parameter', [target, packet, item])\n }\n\n get_all_packet_logger_info() {\n return this.exec('get_all_packet_logger_info', [])\n }\n\n start_logging() {\n return this.exec('start_logging', [])\n }\n\n stop_logging() {\n return this.exec('stop_logging', [])\n }\n\n start_cmd_log(log_writer_name) {\n return this.exec('start_cmd_log', [log_writer_name])\n }\n\n start_tlm_log(log_writer_name) {\n return this.exec('start_tlm_log', [log_writer_name])\n }\n\n stop_cmd_log(log_writer_name) {\n return this.exec('stop_cmd_log', [log_writer_name])\n }\n\n stop_tlm_log(log_writer_name) {\n return this.exec('stop_tlm_log', [log_writer_name])\n }\n\n get_server_status() {\n return this.exec('get_server_status', [])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n get_background_tasks() {\n return this.exec('get_background_tasks', [])\n }\n\n start_background_task(name) {\n return this.exec('start_background_task', [name])\n }\n\n stop_background_task(name) {\n return this.exec('stop_background_task', [name])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_oldest_logfile() {\n return this.exec('get_oldest_logfile', [])\n }\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_list() {\n return this.exec('get_target_list', [])\n }\n\n get_telemetry(target_name, packet_name) {\n return this.exec('get_telemetry', [target_name, packet_name])\n }\n\n get_all_telemetry(target_name) {\n return this.exec('get_all_telemetry', [target_name])\n }\n\n // Called by PacketViewerComponent\n async get_tlm_packet(target_name, packet_name, value_type) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n var len = data.length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n // Called by PacketViewerComponent\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n // Called by CmdTlmServer Tlm Packets tab\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n // Called by CosmosScreenComponent\n async get_tlm_values(items) {\n const data = await this.exec('get_tlm_values', [items])\n var len = data[0].length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n return data\n }\n\n // Called by LimitsbarWidget\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n // Called by LimitsMonitorComponent\n async tlm(target_name, packet_name, item_name) {\n const data = await this.exec('tlm', [target_name, packet_name, item_name])\n var converted = this.decode_cosmos_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n get_all_commands(target_name) {\n return this.exec('get_all_commands', [target_name])\n }\n\n get_command(target_name, command_name) {\n return this.exec('get_command', [target_name, command_name])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED'\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n // Called by CmdTlmServer Cmd Packets tab\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list) {\n var converted = null\n for (var key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_cosmos_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(method, [target_name, command_name, param_list])\n }\n\n // Called by CmdSenderComponent\n get_cmd_hazardous(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name)\n } else {\n return this._cmd('cmd', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name)\n } else {\n return this._cmd('cmd_raw', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name)\n } else {\n return this._cmd('cmd_no_checks', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n // Called by CmdSenderComponent\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name) {\n return this.exec('get_setting', [name])\n }\n\n get_settings(array) {\n return this.exec('get_settings', array)\n }\n\n save_setting(name, data) {\n return this.exec('save_setting', [name, data])\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-card',{nativeOn:{\"click\":function($event){return _vm.$emit('click')}}},[_c('v-system-bar',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hideSystemBar),expression:\"!hideSystemBar\"}],class:_vm.selectedGraphId === _vm.id ? 'active' : 'inactive'},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.errors.length !== 0),expression:\"errors.length !== 0\"}],staticClass:\"mx-2\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"error-graph-icon\"},on:{\"click\":function($event){_vm.errorDialog = true}}},[_vm._v(\" mdi-alert \")])],1)]}}])},[_c('span',[_vm._v(\" Errors \")])])],1),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"edit-graph-icon\"},on:{\"click\":function($event){_vm.editGraph = true}}},[_vm._v(\" mdi-pencil \")])],1)]}}])},[_c('span',[_vm._v(\" Edit \")])]),_c('v-spacer'),_c('span',[_vm._v(_vm._s(_vm.title))]),_c('v-spacer'),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.calcFullSize),expression:\"calcFullSize\"}],attrs:{\"data-test\":\"collapse-all\"},on:{\"click\":_vm.collapseAll}},[_vm._v(\" mdi-arrow-collapse \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.calcFullSize),expression:\"!calcFullSize\"}],attrs:{\"data-test\":\"expand-all\"},on:{\"click\":_vm.expandAll}},[_vm._v(\" mdi-arrow-expand \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.calcFullSize),expression:\"calcFullSize\"}]},[_vm._v(\" Collapse \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.calcFullSize),expression:\"!calcFullSize\"}]},[_vm._v(\" Expand \")])])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullWidth),expression:\"fullWidth\"}],attrs:{\"data-test\":\"collapse-width\"},on:{\"click\":_vm.collapseWidth}},[_vm._v(\" mdi-arrow-collapse-horizontal \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullWidth),expression:\"!fullWidth\"}],attrs:{\"data-test\":\"expand-width\"},on:{\"click\":_vm.expandWidth}},[_vm._v(\" mdi-arrow-expand-horizontal \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullWidth),expression:\"fullWidth\"}]},[_vm._v(\" Collapse Width \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullWidth),expression:\"!fullWidth\"}]},[_vm._v(\" Expand Width \")])])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullHeight),expression:\"fullHeight\"}],attrs:{\"data-test\":\"collapse-height\"},on:{\"click\":_vm.collapseHeight}},[_vm._v(\" mdi-arrow-collapse-vertical \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullHeight),expression:\"!fullHeight\"}],attrs:{\"data-test\":\"expand-height\"},on:{\"click\":_vm.expandHeight}},[_vm._v(\" mdi-arrow-expand-vertical \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullHeight),expression:\"fullHeight\"}]},[_vm._v(\" Collapse Height \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullHeight),expression:\"!fullHeight\"}]},[_vm._v(\" Expand Height \")])])],1),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],attrs:{\"data-test\":\"minimize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-minimize \")]),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}],attrs:{\"data-test\":\"maximize-screen-icon\"},on:{\"click\":_vm.minMaxTransition}},[_vm._v(\" mdi-window-maximize \")])],1)]}}])},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}]},[_vm._v(\" Minimize \")]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.expand),expression:\"!expand\"}]},[_vm._v(\" Maximize \")])]),_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"close-graph-icon\"},on:{\"click\":function($event){return _vm.$emit('close-graph')}}},[_vm._v(\" mdi-close-box \")])],1)]}}])},[_c('span',[_vm._v(\" Close \")])])],1),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.expand),expression:\"expand\"}],ref:\"chart\",staticClass:\"pa-1\",attrs:{\"id\":\"chart\"}},[_c('div',{attrs:{\"id\":(\"chart\" + _vm.id)},on:{\"mousedown\":_vm.mousedown}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hideOverview),expression:\"!hideOverview\"}],attrs:{\"id\":(\"overview\" + _vm.id)},on:{\"mousedown\":_vm.mousedown}})])])],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.$emit('input')},\"input\":function($event){return _vm.editGraphClose()}},model:{value:(_vm.editGraph),callback:function ($$v) {_vm.editGraph=$$v},expression:\"editGraph\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Edit Graph\")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{staticClass:\"pb-2\",attrs:{\"label\":\"Title\",\"hide-details\":\"\",\"data-test\":\"edit-graph-title\"},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}})],1),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Select a start date/time for the graph. Leave blank for start now. \")]),_c('date-time-chooser',{attrs:{\"required\":false,\"date-label\":\"Start Date\",\"time-label\":\"Start Time\"},on:{\"date-time\":function($event){_vm.graphStartDateTime = $event}}}),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Select a end date/time for the graph. Leave blank for continuous real-time graphing. \")]),_c('date-time-chooser',{attrs:{\"date-label\":\"End Date\",\"time-label\":\"End Time\"},on:{\"date-time\":function($event){_vm.graphEndDateTime = $event}}}),_c('v-card-text',{staticClass:\"pa-0\"},[_vm._v(\" Optional Y axis settings. \")]),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"px-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Min Y\",\"type\":\"number\",\"data-test\":\"graph-min-y\"},model:{value:(_vm.graphMinY),callback:function ($$v) {_vm.graphMinY=$$v},expression:\"graphMinY\"}})],1),_c('v-col',{staticClass:\"px-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Max Y\",\"type\":\"number\",\"data-test\":\"graph-max-y\"},model:{value:(_vm.graphMaxY),callback:function ($$v) {_vm.graphMaxY=$$v},expression:\"graphMaxY\"}})],1)],1),_c('v-data-table',{staticClass:\"elevation-1 my-2\",attrs:{\"item-key\":\"itemId\",\"headers\":_vm.itemHeaders,\"items\":_vm.editItems,\"items-per-page\":5,\"footer-props\":{\n 'items-per-page-options': [5],\n }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\n var item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-btn',{attrs:{\"icon\":\"\",\"data-test\":(\"delete-item-icon\" + (item.itemId))},on:{\"click\":function () { return _vm.removeItems([item]); }}},[_c('v-icon',[_vm._v(\" mdi-delete \")])],1)],1)]}}],null,true)},[_c('span',[_vm._v(\" Remove \")])])]}},{key:\"no-data\",fn:function(){return [_c('span',[_vm._v(\"Currently no items on this graph\")])]},proxy:true}])}),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){return _vm.editGraphClose()}}},[_vm._v(\" Ok \")])],1)],1)],1),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.errorDialog),callback:function ($$v) {_vm.errorDialog=$$v},expression:\"errorDialog\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Errors\")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{staticClass:\"pb-2\",attrs:{\"readonly\":\"\",\"hide-details\":\"\",\"label\":\"Graph Title\"},model:{value:(_vm.title),callback:function ($$v) {_vm.title=$$v},expression:\"title\"}})],1),_c('v-row',{staticClass:\"my-3\"},[_c('v-textarea',{attrs:{\"readonly\":\"\",\"rows\":\"8\",\"value\":_vm.error}})],1),_c('v-row',[_c('v-btn',{attrs:{\"block\":\"\"},on:{\"click\":_vm.clearErrors}},[_vm._v(\" Clear \")])],1)],1)],1),(_vm.editGraphMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.editGraphMenuX,\"position-y\":_vm.editGraphMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.editGraphMenu),callback:function ($$v) {_vm.editGraphMenu=$$v},expression:\"editGraphMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){_vm.editGraph = true}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Edit \"+_vm._s(_vm.title)+\" \")])],1)],1)],1):_vm._e(),(_vm.editItem)?_c('v-dialog',{attrs:{\"max-width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }_vm.editItem = false}},model:{value:(_vm.editItem),callback:function ($$v) {_vm.editItem=$$v},expression:\"editItem\"}},[_c('v-card',{staticClass:\"pa-3\"},[_c('v-card-title',{staticClass:\"headline\"},[_vm._v(\"Edit Item\")]),_c('v-select',{attrs:{\"outlined\":\"\",\"hide-details\":\"\",\"label\":\"Value Type\",\"items\":_vm.valueTypes},on:{\"change\":function($event){return _vm.changeType($event)}},model:{value:(_vm.selectedItem.valueType),callback:function ($$v) {_vm.$set(_vm.selectedItem, \"valueType\", $$v)},expression:\"selectedItem.valueType\"}}),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"primary\"},on:{\"click\":function($event){_vm.editItem = false}}},[_vm._v(\"Ok\")])],1)],1)],1):_vm._e(),(_vm.itemMenu)?_c('v-menu',{attrs:{\"position-x\":_vm.itemMenuX,\"position-y\":_vm.itemMenuY,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.itemMenu),callback:function ($$v) {_vm.itemMenu=$$v},expression:\"itemMenu\"}},[_c('v-list',[_c('v-list-item',{on:{\"click\":function($event){_vm.editItem = true}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Edit \"+_vm._s(_vm.selectedItem.itemName)+\" \")])],1),_c('v-list-item',{on:{\"click\":function($event){return _vm.removeItems([_vm.selectedItem])}}},[_c('v-list-item-title',{staticStyle:{\"cursor\":\"pointer\"}},[_vm._v(\" Delete \"+_vm._s(_vm.selectedItem.itemName)+\" \")])],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-row',[_c('v-col',[_c('v-menu',{attrs:{\"close-on-content-click\":\"\",\"transition\":\"scale-transition\",\"offset-y\":\"\",\"max-width\":\"290px\",\"min-width\":\"290px\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-text-field',_vm._g({attrs:{\"label\":_vm.dateLabel,\"name\":(\"date\" + (Date.now())),\"rules\":_vm.dateRules,\"type\":\"date\",\"data-test\":\"date-chooser\"},model:{value:(_vm.date),callback:function ($$v) {_vm.date=$$v},expression:\"date\"}},on))]}}])})],1),_c('v-col',[_c('v-text-field',{attrs:{\"label\":_vm.timeLabel,\"name\":(\"time\" + (Date.now())),\"rules\":_vm.timeRules,\"type\":\"time\",\"step\":\"1\",\"data-test\":\"time-chooser\"},on:{\"change\":_vm.onChange},model:{value:(_vm.time),callback:function ($$v) {_vm.time=$$v},expression:\"time\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-row>\n <v-col>\n <v-menu\n close-on-content-click\n transition=\"scale-transition\"\n offset-y\n max-width=\"290px\"\n min-width=\"290px\"\n >\n <template v-slot:activator=\"{ on }\">\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n :label=\"dateLabel\"\n :name=\"`date${Date.now()}`\"\n :rules=\"dateRules\"\n v-model=\"date\"\n v-on=\"on\"\n type=\"date\"\n data-test=\"date-chooser\"\n />\n </template>\n </v-menu>\n </v-col>\n <v-col>\n <!-- We set the :name attribute to be unique to avoid auto-completion -->\n <v-text-field\n :label=\"timeLabel\"\n :name=\"`time${Date.now()}`\"\n :rules=\"timeRules\"\n v-model=\"time\"\n type=\"time\"\n step=\"1\"\n @change=\"onChange\"\n data-test=\"time-chooser\"\n />\n </v-col>\n </v-row>\n </div>\n</template>\n\n<script>\nimport { isValid, parse, format, getTime } from 'date-fns'\n\nexport default {\n props: {\n required: {\n type: Boolean,\n default: true,\n },\n initialDate: {\n type: Date,\n default: null,\n },\n initialTime: {\n type: Date,\n default: null,\n },\n dateLabel: {\n type: String,\n default: 'Date',\n },\n timeLabel: {\n type: String,\n default: 'Time',\n },\n },\n data() {\n return {\n date: null,\n time: null,\n rules: {\n required: (value) => !!value || 'Required',\n date: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'yyyy-MM-dd', new Date())) ||\n 'Invalid date (YYYY-MM-DD)'\n )\n } catch (e) {\n return 'Invalid date (YYYY-MM-DD)'\n }\n },\n time: (value) => {\n if (!value) return true\n try {\n return (\n isValid(parse(value, 'HH:mm:ss', new Date())) ||\n 'Invalid time (HH:MM:SS)'\n )\n } catch (e) {\n return 'Invalid time (HH:MM:SS)'\n }\n },\n },\n }\n },\n computed: {\n dateRules() {\n let result = [this.rules.date]\n if (this.time || this.required) {\n result.push(this.rules.required)\n }\n return result\n },\n timeRules() {\n let result = [this.rules.time]\n if (this.date || this.required) {\n result.push(this.rules.required)\n }\n return result\n },\n },\n methods: {\n onChange() {\n if (!!this.date && !!this.time) {\n this.$emit('date-time', this.date + ' ' + this.time)\n } else {\n this.$emit('date-time', null)\n }\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DateTimeChooser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./DateTimeChooser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DateTimeChooser.vue?vue&type=template&id=37777c5e&\"\nimport script from \"./DateTimeChooser.vue?vue&type=script&lang=js&\"\nexport * from \"./DateTimeChooser.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport * as ActionCable from 'actioncable'\n\nexport default class Cable {\n constructor(url = '/cosmos-api/cable') {\n this._cable = ActionCable.createConsumer(url)\n }\n disconnect() {\n this._cable.disconnect()\n }\n createSubscription(channel, scope, callbacks = {}, additionalOptions = {}) {\n return CosmosAuth.updateToken(CosmosAuth.defaultMinValidity).then(() => {\n return this._cable.subscriptions.create(\n {\n channel,\n scope,\n token: localStorage.cosmosToken,\n ...additionalOptions,\n },\n callbacks\n )\n })\n }\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <v-card @click.native=\"$emit('click')\">\n <v-system-bar\n :class=\"selectedGraphId === id ? 'active' : 'inactive'\"\n v-show=\"!hideSystemBar\"\n >\n <div v-show=\"errors.length !== 0\" class=\"mx-2\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"error-graph-icon\" @click=\"errorDialog = true\">\n mdi-alert\n </v-icon>\n </div>\n </template>\n <span> Errors </span>\n </v-tooltip>\n </div>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"edit-graph-icon\" @click=\"editGraph = true\">\n mdi-pencil\n </v-icon>\n </div>\n </template>\n <span> Edit </span>\n </v-tooltip>\n\n <v-spacer />\n <span>{{ title }}</span>\n <v-spacer />\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-all\"\n v-show=\"calcFullSize\"\n @click=\"collapseAll\"\n >\n mdi-arrow-collapse\n </v-icon>\n <v-icon\n data-test=\"expand-all\"\n v-show=\"!calcFullSize\"\n @click=\"expandAll\"\n >\n mdi-arrow-expand\n </v-icon>\n </div>\n </template>\n <span v-show=\"calcFullSize\"> Collapse </span>\n <span v-show=\"!calcFullSize\"> Expand </span>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-width\"\n v-show=\"fullWidth\"\n @click=\"collapseWidth\"\n >\n mdi-arrow-collapse-horizontal\n </v-icon>\n <v-icon\n data-test=\"expand-width\"\n v-show=\"!fullWidth\"\n @click=\"expandWidth\"\n >\n mdi-arrow-expand-horizontal\n </v-icon>\n </div>\n </template>\n <span v-show=\"fullWidth\"> Collapse Width </span>\n <span v-show=\"!fullWidth\"> Expand Width </span>\n </v-tooltip>\n </div>\n\n <div v-show=\"expand\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"collapse-height\"\n v-show=\"fullHeight\"\n @click=\"collapseHeight\"\n >\n mdi-arrow-collapse-vertical\n </v-icon>\n <v-icon\n data-test=\"expand-height\"\n v-show=\"!fullHeight\"\n @click=\"expandHeight\"\n >\n mdi-arrow-expand-vertical\n </v-icon>\n </div>\n </template>\n <span v-show=\"fullHeight\"> Collapse Height </span>\n <span v-show=\"!fullHeight\"> Expand Height </span>\n </v-tooltip>\n </div>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"expand\"\n >\n mdi-window-minimize\n </v-icon>\n <v-icon\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"!expand\"\n >\n mdi-window-maximize\n </v-icon>\n </div>\n </template>\n <span v-show=\"expand\"> Minimize </span>\n <span v-show=\"!expand\"> Maximize </span>\n </v-tooltip>\n\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"close-graph-icon\" @click=\"$emit('close-graph')\">\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span> Close </span>\n </v-tooltip>\n </v-system-bar>\n\n <v-expand-transition>\n <div class=\"pa-1\" id=\"chart\" ref=\"chart\" v-show=\"expand\">\n <div :id=\"`chart${id}`\" @mousedown=\"mousedown\"></div>\n <div\n :id=\"`overview${id}`\"\n v-show=\"!hideOverview\"\n @mousedown=\"mousedown\"\n ></div>\n </div>\n </v-expand-transition>\n </v-card>\n\n <!-- Edit dialog -->\n <v-dialog\n v-model=\"editGraph\"\n @keydown.esc=\"$emit('input')\"\n @input=\"editGraphClose()\"\n max-width=\"600\"\n >\n <v-system-bar>\n <v-spacer />\n <span>Edit Graph</span>\n <v-spacer />\n </v-system-bar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n class=\"pb-2\"\n label=\"Title\"\n v-model=\"title\"\n hide-details\n data-test=\"edit-graph-title\"\n />\n </v-row>\n <v-card-text class=\"pa-0\">\n Select a start date/time for the graph. Leave blank for start now.\n </v-card-text>\n <date-time-chooser\n :required=\"false\"\n date-label=\"Start Date\"\n time-label=\"Start Time\"\n @date-time=\"graphStartDateTime = $event\"\n />\n <v-card-text class=\"pa-0\">\n Select a end date/time for the graph. Leave blank for continuous\n real-time graphing.\n </v-card-text>\n <date-time-chooser\n date-label=\"End Date\"\n time-label=\"End Time\"\n @date-time=\"graphEndDateTime = $event\"\n />\n <v-card-text class=\"pa-0\"> Optional Y axis settings. </v-card-text>\n <v-row dense>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Min Y\"\n v-model=\"graphMinY\"\n type=\"number\"\n data-test=\"graph-min-y\"\n />\n </v-col>\n <v-col class=\"px-2\">\n <v-text-field\n hide-details\n label=\"Max Y\"\n v-model=\"graphMaxY\"\n type=\"number\"\n data-test=\"graph-max-y\"\n />\n </v-col>\n </v-row>\n <v-data-table\n item-key=\"itemId\"\n class=\"elevation-1 my-2\"\n :headers=\"itemHeaders\"\n :items=\"editItems\"\n :items-per-page=\"5\"\n :footer-props=\"{\n 'items-per-page-options': [5],\n }\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-btn\n icon\n :data-test=\"`delete-item-icon${item.itemId}`\"\n @click=\"() => removeItems([item])\"\n >\n <v-icon> mdi-delete </v-icon>\n </v-btn>\n </div>\n </template>\n <span> Remove </span>\n </v-tooltip>\n </template>\n <template v-slot:no-data>\n <span>Currently no items on this graph</span>\n </template>\n </v-data-table>\n <v-card-actions>\n <v-btn color=\"primary\" @click=\"editGraphClose()\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" max-width=\"600\">\n <v-system-bar>\n <v-spacer />\n <span>Errors</span>\n <v-spacer />\n </v-system-bar>\n <v-card class=\"pa-3\">\n <v-row dense>\n <v-text-field\n readonly\n hide-details\n v-model=\"title\"\n class=\"pb-2\"\n label=\"Graph Title\"\n />\n </v-row>\n <v-row class=\"my-3\">\n <v-textarea readonly rows=\"8\" :value=\"error\" />\n </v-row>\n <v-row>\n <v-btn block @click=\"clearErrors\"> Clear </v-btn>\n </v-row>\n </v-card>\n </v-dialog>\n\n <!-- Edit right click context menu -->\n <v-menu\n v-if=\"editGraphMenu\"\n v-model=\"editGraphMenu\"\n :position-x=\"editGraphMenuX\"\n :position-y=\"editGraphMenuY\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editGraph = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ title }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <!-- Edit Item dialog -->\n <v-dialog\n max-width=\"600\"\n v-if=\"editItem\"\n v-model=\"editItem\"\n @keydown.esc=\"editItem = false\"\n >\n <v-card class=\"pa-3\">\n <v-card-title class=\"headline\">Edit Item</v-card-title>\n <v-select\n outlined\n hide-details\n label=\"Value Type\"\n :items=\"valueTypes\"\n v-model=\"selectedItem.valueType\"\n @change=\"changeType($event)\"\n />\n <v-card-actions>\n <v-btn color=\"primary\" @click=\"editItem = false\">Ok</v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <!-- Edit Item right click context menu -->\n <v-menu\n v-if=\"itemMenu\"\n v-model=\"itemMenu\"\n :position-x=\"itemMenuX\"\n :position-y=\"itemMenuY\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item @click=\"editItem = true\">\n <v-list-item-title style=\"cursor: pointer\">\n Edit {{ selectedItem.itemName }}\n </v-list-item-title>\n </v-list-item>\n <v-list-item @click=\"removeItems([selectedItem])\">\n <v-list-item-title style=\"cursor: pointer\">\n Delete {{ selectedItem.itemName }}\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n </div>\n</template>\n\n<script>\nimport DateTimeChooser from './DateTimeChooser'\nimport uPlot from 'uplot'\nimport bs from 'binary-search'\nimport { toDate, format, getTime } from 'date-fns'\nimport Cable from '../services/cable.js'\n\nrequire('uplot/dist/uPlot.min.css')\n\nexport default {\n components: {\n DateTimeChooser,\n },\n props: {\n id: {\n type: Number,\n required: true,\n },\n selectedGraphId: {\n type: Number,\n // Not required because we pass null\n },\n state: {\n type: String,\n required: true,\n },\n // start time in nanoseconds to start the graph\n // this allows multiple graphs to be synchronized\n startTime: {\n type: Number,\n },\n secondsGraphed: {\n type: Number,\n required: true,\n },\n pointsSaved: {\n type: Number,\n required: true,\n },\n pointsGraphed: {\n type: Number,\n required: true,\n },\n hideSystemBar: {\n type: Boolean,\n default: false,\n },\n hideOverview: {\n type: Boolean,\n default: false,\n },\n initialItems: {\n type: Array,\n },\n // These allow the parent to force a specific height and/or width\n height: {\n type: Number,\n },\n width: {\n type: Number,\n },\n },\n data() {\n return {\n itemHeaders: [\n { text: 'Target Name', value: 'targetName' },\n { text: 'Packet Name', value: 'packetName' },\n { text: 'Item Name', value: 'itemName' },\n { text: 'Actions', value: 'actions', sortable: false },\n ],\n valueTypes: ['CONVERTED', 'RAW'],\n active: true,\n expand: true,\n fullWidth: false,\n fullHeight: true,\n graph: null,\n editGraph: false,\n editGraphMenu: false,\n editGraphMenuX: 0,\n editGraphMenuY: 0,\n editItem: false,\n itemMenu: false,\n itemMenuX: 0,\n itemMenuY: 0,\n selectedItem: null,\n title: '',\n overview: null,\n data: [[]],\n graphMinY: '',\n graphMaxY: '',\n graphStartDateTime: this.startTime,\n graphEndDateTime: null,\n indexes: {},\n items: this.initialItems || [],\n drawInterval: null,\n zoomChart: false,\n zoomOverview: false,\n cable: new Cable(),\n subscription: null,\n needToUpdate: false,\n errorDialog: false,\n errors: [],\n colors: [\n 'blue',\n 'red',\n 'green',\n 'darkorange',\n 'purple',\n 'cornflowerblue',\n 'lime',\n 'gold',\n 'hotpink',\n 'tan',\n 'cyan',\n 'peru',\n 'maroon',\n 'coral',\n 'navy',\n 'teal',\n 'brown',\n 'crimson',\n 'lightblue',\n 'black',\n ],\n }\n },\n computed: {\n calcFullSize: function () {\n return this.fullWidth || this.fullHeight\n },\n editItems: function () {\n if (!this.items) return []\n let itemId = 0\n return this.items.map((item) => {\n itemId += 1\n return { ...item, itemId }\n })\n },\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n return JSON.stringify(this.errors, null, 4)\n }\n return null\n },\n },\n created() {\n this.title = `Graph ${this.id}`\n for (const [index, item] of this.items.entries()) {\n this.data.push([]) // initialize the empty data arrays\n this.indexes[this.subscriptionKey(item)] = index + 1\n }\n },\n mounted() {\n // This code allows for temporary pulling in a patched uPlot\n // Also note you need to add 'async' before the mounted method for await\n // const plugin = document.createElement('script')\n // plugin.setAttribute(\n // 'src',\n // 'https://leeoniya.github.io/uPlot/dist/uPlot.iife.min.js'\n // )\n // plugin.async = true\n // document.head.appendChild(plugin)\n // await new Promise(r => setTimeout(r, 500)) // Allow the js to load\n\n // TODO: This is demo / performance code of multiple items with many data points\n // 10 items at 500,000 each renders immediately and uses 180MB in Chrome\n // Refresh still works, chrome is sluggish but once you pause it is very performant\n // 500,000 pts at 1Hz is 138.9hrs .. almost 6 days\n //\n // 10 items at 100,000 each is very performant ... 1,000,000 pts is Qt TlmGrapher default\n // 100,000 pts at 1Hz is 27.8hrs\n //\n // 100,000 takes 40ms, Chrome uses 160MB\n // this.data = []\n // const dataPoints = 100000\n // const items = 10\n // let pts = new Array(dataPoints)\n // let times = new Array(dataPoints)\n // let time = 1589398007\n // let series = [{}]\n // for (let i = 0; i < dataPoints; i++) {\n // times[i] = time\n // pts[i] = i\n // time += 1\n // }\n // this.data.push(times)\n // for (let i = 0; i < items; i++) {\n // this.data.push(pts.map(x => x + i))\n // series.push({\n // label: 'Item' + i,\n // stroke: this.colors[i]\n // })\n // }\n\n const { chartSeries, overviewSeries } = this.items.reduce(\n (seriesObj, item) => {\n const commonProps = {\n spanGaps: true,\n stroke: this.colors.shift(),\n }\n seriesObj.chartSeries.push({\n ...commonProps,\n item: item,\n label: item.itemName,\n value: (self, rawValue) =>\n rawValue == null ? '--' : rawValue.toFixed(2),\n })\n seriesObj.overviewSeries.push({\n ...commonProps,\n })\n return seriesObj\n },\n { chartSeries: [], overviewSeries: [] }\n )\n\n let chartOpts = {\n ...this.getSize('chart'),\n ...this.getScales(),\n ...this.getAxes('chart'),\n // series: series, // TODO: Uncomment with the performance code\n series: [\n {\n label: 'Time',\n value: (u, v) =>\n // Convert the unix timestamp into a formatted date / time\n v == null ? '--' : format(toDate(v * 1000), 'yyyy-MM-dd HH:mm:ss'),\n },\n ...chartSeries,\n ],\n cursor: {\n drag: {\n x: true,\n y: false,\n },\n // Sync the cursor across graphs so mouseovers are synced\n sync: {\n key: 'cosmos',\n // setSeries links graphs so clicking an item to hide it also hides the other graph item\n // setSeries: true,\n },\n },\n hooks: {\n setScale: [\n (chart, key) => {\n if (key == 'x' && !this.zoomOverview && this.overview) {\n this.zoomChart = true\n let left = Math.round(\n this.overview.valToPos(chart.scales.x.min, 'x')\n )\n let right = Math.round(\n this.overview.valToPos(chart.scales.x.max, 'x')\n )\n this.overview.setSelect({ left, width: right - left })\n this.zoomChart = false\n }\n },\n ],\n ready: [\n (u) => {\n let clientX\n let clientY\n let canvas = u.root.querySelector('canvas')\n canvas.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.editGraphMenuX = e.clientX\n this.editGraphMenuY = e.clientY\n this.editGraphMenu = true\n })\n let legend = u.root.querySelector('.u-legend')\n legend.addEventListener('contextmenu', (e) => {\n e.preventDefault()\n this.itemMenuX = e.clientX\n this.itemMenuY = e.clientY\n // Grab the closest series and then figure out which index it is\n let seriesEl = e.target.closest('.u-series')\n let seriesIdx = Array.prototype.slice\n .call(legend.childNodes)\n .indexOf(seriesEl)\n let series = u.series[seriesIdx]\n if (series.item) {\n this.selectedItem = series.item\n this.itemMenu = true\n }\n return false\n })\n },\n ],\n },\n }\n // console.time('chart')\n this.graph = new uPlot(\n chartOpts,\n this.data,\n document.getElementById(`chart${this.id}`)\n )\n\n const overviewOpts = {\n ...this.getSize('overview'),\n ...this.getScales(),\n ...this.getAxes('overview'),\n // series: series, // TODO: Uncomment with the performance code\n series: [...overviewSeries],\n cursor: {\n y: false,\n points: {\n show: false, // TODO: This isn't working\n },\n drag: {\n setScale: false,\n x: true,\n y: false,\n },\n },\n legend: {\n show: false,\n },\n hooks: {\n setSelect: [\n (chart) => {\n if (!this.zoomChart) {\n this.zoomOverview = true\n let min = chart.posToVal(chart.select.left, 'x')\n let max = chart.posToVal(\n chart.select.left + chart.select.width,\n 'x'\n )\n this.graph.setScale('x', { min, max })\n this.zoomOverview = false\n }\n },\n ],\n },\n }\n this.overview = new uPlot(\n overviewOpts,\n this.data,\n document.getElementById(`overview${this.id}`)\n )\n //console.timeEnd('chart')\n\n // Allow the charts to dynamically resize when the window resizes\n window.addEventListener('resize', this.handleResize)\n\n if (this.state !== 'stop') {\n this.subscribe()\n }\n },\n beforeDestroy: function () {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n window.removeEventListener('resize', this.handleResize)\n },\n watch: {\n state: function (newState, oldState) {\n switch (newState) {\n case 'start':\n // Only subscribe if we were previously stopped\n // If we were paused we do nothing ... see the data function\n if (oldState === 'stop') {\n this.subscribe()\n }\n break\n // case 'pause': Nothing to do ... see the data function\n case 'stop':\n this.subscription.unsubscribe()\n this.subscription = null\n break\n }\n },\n data: function (newData, oldData) {\n // Ignore changes to the data while we're paused\n if (this.state === 'pause') {\n return\n }\n this.graph.setData(newData)\n this.overview.setData(newData)\n let max = newData[0][newData[0].length - 1]\n let ptsMin = newData[0][newData[0].length - this.pointsGraphed]\n let min = newData[0][0]\n if (min < max - this.secondsGraphed) {\n min = max - this.secondsGraphed\n }\n if (ptsMin > min) {\n min = ptsMin\n }\n this.graph.setScale('x', { min, max })\n },\n graphMinY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMinY = val\n }\n this.setGraphRange()\n },\n graphMaxY: function (newVal, oldVal) {\n let val = parseFloat(newVal)\n if (!isNaN(val)) {\n this.graphMaxY = val\n }\n this.setGraphRange()\n },\n graphStartDateTime: function (val) {\n this.needToUpdate = true\n if (val && typeof val === 'string') {\n this.graphStartDateTime =\n new Date(this.graphStartDateTime).getTime() * 1_000_000\n }\n },\n graphEndDateTime: function (val) {\n this.needToUpdate = true\n if (val && typeof val === 'string') {\n this.graphEndDateTime =\n new Date(this.graphEndDateTime).getTime() * 1_000_000\n }\n },\n },\n methods: {\n mousedown: function ($event) {\n this.$emit('mousedown', $event) // Bubble from the two graph divs\n },\n clearErrors: function () {\n this.errors = []\n },\n editGraphClose: function () {\n this.editGraph = false\n if (this.needToUpdate) {\n this.removeItemsFromSubscription()\n this.addItemsToSubscription()\n this.needToUpdate = false\n }\n },\n handleResize: function () {\n // TODO: Should this method be throttled?\n this.graph.setSize(this.getSize('chart'))\n this.overview.setSize(this.getSize('overview'))\n },\n resize: function () {\n this.graph.setSize(this.getSize('chart'))\n this.overview.setSize(this.getSize('overview'))\n this.$emit('resize', this.id)\n },\n expandAll: function () {\n this.fullWidth = true\n this.fullHeight = true\n this.resize()\n },\n collapseAll: function () {\n this.fullWidth = false\n this.fullHeight = false\n this.resize()\n },\n expandWidth: function () {\n this.fullWidth = true\n this.resize()\n },\n collapseWidth: function () {\n this.fullWidth = false\n this.resize()\n },\n expandHeight: function () {\n this.fullHeight = true\n this.resize()\n },\n collapseHeight: function () {\n this.fullHeight = false\n this.resize()\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-graph', this.id)\n },\n setGraphRange: function () {\n let pad = 0.1\n if (\n this.graphMinY ||\n this.graphMinY === 0 ||\n this.graphMaxY ||\n this.graphMaxY === 0\n ) {\n pad = 0\n }\n this.graph.scales.y.range = (u, dataMin, dataMax) => {\n let min = dataMin\n if (this.graphMinY || this.graphMinY === 0) {\n min = this.graphMinY\n }\n let max = dataMax\n if (this.graphMaxY || this.graphMaxY === 0) {\n max = this.graphMaxY\n }\n return uPlot.rangeNum(min, max, pad, true)\n }\n },\n subscribe: function (endTime = null) {\n this.cable\n .createSubscription('StreamingChannel', localStorage.scope, {\n received: (data) => this.received(data),\n connected: () => {\n this.addItemsToSubscription(this.items, endTime)\n },\n disconnected: () => {\n this.errors.push({\n type: 'disconnected',\n message: 'COSMOS backend connection disconnected',\n time: new Date().getTime(),\n })\n },\n rejected: () => {\n this.errors.push({\n type: 'rejected',\n message: 'COSMOS backend connection rejected',\n time: new Date().getTime(),\n })\n },\n })\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n // throttle(cb, limit) {\n // var wait = false\n // return () => {\n // if (!wait) {\n // requestAnimationFrame(cb)\n // wait = true\n // setTimeout(() => {\n // wait = false\n // }, limit)\n // }\n // }\n // },\n getSize: function (type) {\n const navDrawer = document.getElementById('cosmos-nav-drawer')\n const navDrawerWidth = navDrawer.classList.contains(\n 'v-navigation-drawer--open'\n )\n ? navDrawer.clientWidth\n : 0\n const viewWidth =\n Math.max(document.documentElement.clientWidth, window.innerWidth || 0) -\n navDrawerWidth\n const viewHeight = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n )\n\n const chooser = document.getElementsByClassName('c-chooser')[0]\n let height = 100\n if (type === 'overview') {\n if (!this.fullHeight) {\n height = 0\n }\n } else if (chooser) {\n // Height of chart is viewportSize - chooser - overview - fudge factor (primarily padding)\n height = viewHeight - chooser.clientHeight - height - 190\n if (!this.fullHeight) {\n height = height / 2.0 + 10 // 5px padding top and bottom\n }\n }\n let width = viewWidth - 60 // 30px padding left and right\n if (!this.fullWidth) {\n width = width / 2.0 - 10 // 5px padding left and right\n }\n return {\n width: this.width || width,\n height: this.height || height,\n }\n },\n getScales: function () {\n return {\n scales: {\n x: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [1566453600, 1566497660]\n return [dataMin, dataMax]\n },\n },\n y: {\n range(u, dataMin, dataMax) {\n if (dataMin == null) return [-100, 100]\n return uPlot.rangeNum(dataMin, dataMax, 0.1, true)\n },\n },\n },\n }\n },\n getAxes: function (type) {\n let strokeColor = 'rgba(0, 0, 0, .1)'\n let axisColor = 'black'\n if (this.$vuetify.theme.dark) {\n strokeColor = 'rgba(255, 255, 255, .1)'\n axisColor = 'white'\n }\n return {\n axes: [\n {\n stroke: axisColor,\n grid: {\n show: true,\n stroke: strokeColor,\n width: 2,\n },\n },\n {\n size: 70, // This size supports values up to 99 million\n stroke: axisColor,\n grid: {\n show: type === 'overview' ? false : true,\n stroke: strokeColor,\n width: 2,\n },\n },\n ],\n }\n },\n changeType: function (event) {\n this.removeItems([this.selectedItem])\n this.addItems([this.selectedItem], event)\n },\n addItems: function (itemArray, type = 'CONVERTED') {\n for (const item of itemArray) {\n item.valueType ||= type // set the default type\n this.items.push(item)\n const index = this.data.length\n const color = this.colors.shift()\n this.graph.addSeries(\n {\n spanGaps: true,\n item: item,\n label: item.itemName,\n stroke: color,\n value: (self, rawValue) =>\n rawValue == null ? '--' : rawValue.toFixed(2),\n },\n index\n )\n this.overview.addSeries({ spanGaps: true, stroke: color }, index)\n let newData = Array(this.data[0].length)\n this.data.splice(index, 0, newData)\n this.indexes[this.subscriptionKey(item)] = index\n }\n this.addItemsToSubscription(itemArray)\n },\n addItemsToSubscription: function (\n itemArray = this.items,\n endTime = this.graphEndDateTime\n ) {\n if (this.subscription) {\n CosmosAuth.updateToken(CosmosAuth.defaultMinValidity).then(() => {\n this.subscription.perform('add', {\n scope: localStorage.scope,\n mode: 'DECOM',\n token: localStorage.cosmosToken,\n items: itemArray.map(this.subscriptionKey),\n start_time: this.graphStartDateTime,\n end_time: endTime,\n })\n })\n }\n },\n removeItems: function (itemArray) {\n this.removeItemsFromSubscription(itemArray)\n\n for (const key of itemArray.map(this.subscriptionKey)) {\n const index = this.reorderIndexes(key)\n // Put back the color so it's available for new series\n this.colors.unshift(this.graph.series[index].stroke)\n this.items.splice(index - 1, 1)\n this.data.splice(index, 1)\n this.graph.delSeries(index)\n this.overview.delSeries(index)\n this.graph.setData(this.data)\n this.overview.setData(this.data)\n }\n },\n removeItemsFromSubscription: function (itemArray = this.items) {\n if (this.subscription) {\n this.subscription.perform('remove', {\n scope: localStorage.scope,\n items: itemArray.map(this.subscriptionKey),\n })\n }\n },\n reorderIndexes: function (key) {\n let index = this.indexes[key]\n delete this.indexes[key]\n for (var i in this.indexes) {\n if (this.indexes[i] > index) {\n this.indexes[i] -= 1\n }\n }\n return index\n },\n received: function (json_data) {\n // TODO: Shouldn't get errors but should we handle this every time?\n // if (json_data.error) {\n // console.log(json_data.error)\n // return\n // }\n let data = JSON.parse(json_data)\n for (let i = 0; i < data.length; i++) {\n let time = data[i].time / 1_000_000_000.0 // Time in seconds\n let length = data[0].length\n if (length == 0 || time > data[0][length - 1]) {\n // Nominal case - append new data to end\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].push(null)\n }\n this.set_data_at_index(this.data[0].length - 1, time, data[i])\n } else {\n let index = bs(this.data[0], time, this.bs_comparator)\n if (index >= 0) {\n // Found the slot in the existing data\n this.set_data_at_index(index, time, data[i])\n } else {\n // Insert a new null slot at the ideal index\n let ideal_index = -index - 1\n for (let j = 0; j < this.data.length; j++) {\n this.data[j].splice(ideal_index, 0, null)\n }\n this.set_data_at_index(ideal_index, time, data[i])\n }\n }\n }\n // If we weren't passed a startTime notify grapher of our start\n if (this.startTime === null) {\n this.graphStartDateTime = this.data[0][0] * 1_000_000_000\n this.$emit('started', this.graphStartDateTime)\n }\n },\n bs_comparator: function (element, needle) {\n return element - needle\n },\n set_data_at_index: function (index, time, new_data) {\n this.data[0][index] = time\n for (const [key, value] of Object.entries(new_data)) {\n if (key == 'time') {\n continue\n }\n let key_index = this.indexes[key]\n if (key_index) {\n let array = this.data[key_index]\n if (!value.raw) {\n array[index] = value\n } else {\n array[index] = null\n }\n }\n }\n },\n subscriptionKey: function (item) {\n return `TLM__${item.targetName}__${item.packetName}__${item.itemName}__${item.valueType}`\n },\n },\n}\n</script>\n\n<style scoped>\n#chart {\n background-color: var(--v-tertiary-darken2);\n}\n#chart >>> .u-legend {\n text-align: left;\n}\n#chart >>> .u-inline {\n max-width: fit-content;\n}\n/* TODO: Get this to work with white theme, values would be 0 in white */\n#chart >>> .u-select {\n background-color: rgba(255, 255, 255, 0.07);\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Graph.vue?vue&type=template&id=2adbed0c&scoped=true&\"\nimport script from \"./Graph.vue?vue&type=script&lang=js&\"\nexport * from \"./Graph.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Graph.vue?vue&type=style&index=0&id=2adbed0c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2adbed0c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancel.apply(null, arguments)}},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Open Configuration\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"label\":\"search\",\"type\":\"text\",\"data-test\":\"search\",\"prepend-icon\":\"mdi-magnify\",\"clear-icon\":\"mdi-close-circle-outline\",\"clearable\":\"\",\"autofocus\":\"\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"show-select\":\"\",\"single-select\":\"\",\"item-key\":\"configId\",\"search\":_vm.search,\"headers\":_vm.headers,\"items\":_vm.configs,\"items-per-page\":5,\"footer-props\":{ 'items-per-page-options': [5] }},on:{\"item-selected\":_vm.itemSelected,\"click:row\":function (item, slot) { return slot.select(item); }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-btn',{staticClass:\"mt-1\",attrs:{\"data-test\":\"item-delete\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.deleteConfig(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)]}}])}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"ma-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',[_c('v-btn',{attrs:{\"type\":\"submit\",\"color\":\"success\",\"data-test\":\"open-config-submit-btn\",\"disabled\":!!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" Ok \")]),_c('v-spacer'),_c('v-btn',{attrs:{\"color\":\"primary\",\"data-test\":\"open-config-cancel-btn\"},on:{\"click\":_vm.cancel}},[_vm._v(\" Cancel \")])],1)],1)])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span>Open Configuration</span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-icon=\"mdi-magnify\"\n clear-icon=\"mdi-close-circle-outline\"\n clearable\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n show-select\n single-select\n item-key=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :footer-props=\"{ 'items-per-page-options': [5] }\"\n @item-selected=\"itemSelected\"\n @click:row=\"(item, slot) => slot.select(item)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n class=\"mt-1\"\n data-test=\"item-delete\"\n icon\n @click=\"deleteConfig(item)\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n </v-data-table>\n <v-row dense>\n <span class=\"ma-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"success\"\n data-test=\"open-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n <v-spacer />\n <v-btn\n @click=\"cancel\"\n color=\"primary\"\n data-test=\"open-config-cancel-btn\"\n >\n Cancel\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n tool: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n configs: [],\n headers: [\n {\n text: 'Configuration',\n value: 'config',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedItem: null,\n }\n },\n computed: {\n error: function () {\n if (this.selectedItem === '' || this.selectedItem === null) {\n return 'Must select a config'\n }\n return null\n },\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new CosmosApi()\n .list_configs(this.tool)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to Cosmos. ${error}`)\n })\n },\n methods: {\n itemSelected: function (item) {\n if (item.value) {\n this.selectedItem = item.item\n } else {\n this.selectedItem = null\n }\n },\n success: function () {\n this.$emit('success', this.selectedItem.config)\n this.show = false\n this.search = null\n this.selectedItem = null\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedItem = null\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.selectedItem.config === item.config) {\n this.selectedItem = null\n }\n this.configs.splice(this.configs.indexOf(item), 1)\n new CosmosApi().delete_config(this.tool, item.config)\n })\n .catch((error) => {\n if (error) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`\n )\n }\n })\n },\n },\n}\n</script>\n\n<style scoped></style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenConfigDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./OpenConfigDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./OpenConfigDialog.vue?vue&type=template&id=4f9dd098&scoped=true&\"\nimport script from \"./OpenConfigDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./OpenConfigDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f9dd098\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancel.apply(null, arguments)}},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-card',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Save Configuration\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"label\":\"search\",\"type\":\"text\",\"data-test\":\"search\",\"prepend-icon\":\"mdi-magnify\",\"clear-icon\":\"mdi-close-circle-outline\",\"clearable\":\"\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"show-select\":\"\",\"single-select\":\"\",\"item-key\":\"configId\",\"search\":_vm.search,\"headers\":_vm.headers,\"items\":_vm.configs,\"items-per-page\":5,\"footer-props\":{ 'items-per-page-options': [5] }},on:{\"item-selected\":_vm.itemSelected,\"click:row\":function (item, slot) { return slot.select(item); }},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-btn',{staticClass:\"mt-1\",attrs:{\"icon\":\"\",\"data-test\":\"item-delete\"},on:{\"click\":function($event){return _vm.deleteConfig(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete\")])],1)]}}])}),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"autofocus\":\"\",\"disabled\":!!_vm.selectedItem,\"label\":\"Configuration Name\",\"data-test\":\"name-input-save-config-dialog\"},model:{value:(_vm.configName),callback:function ($$v) {_vm.configName=$$v},expression:\"configName\"}})],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"ma-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\"},on:{\"click\":_vm.cancel}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"type\":\"submit\",\"color\":\"primary\",\"data-test\":\"save-config-submit-btn\",\"disabled\":!!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" Ok \")])],1)],1)])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span>Save Configuration</span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-icon=\"mdi-magnify\"\n clear-icon=\"mdi-close-circle-outline\"\n clearable\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n show-select\n single-select\n item-key=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :footer-props=\"{ 'items-per-page-options': [5] }\"\n @item-selected=\"itemSelected\"\n @click:row=\"(item, slot) => slot.select(item)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n icon\n class=\"mt-1\"\n data-test=\"item-delete\"\n @click=\"deleteConfig(item)\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n </v-data-table>\n <v-row dense>\n <v-text-field\n v-model=\"configName\"\n hide-details\n autofocus\n :disabled=\"!!selectedItem\"\n label=\"Configuration Name\"\n data-test=\"name-input-save-config-dialog\"\n />\n </v-row>\n <v-row dense>\n <span class=\"ma-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn outlined class=\"mx-2\" @click=\"cancel\"> Cancel </v-btn>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"save-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n tool: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n configName: '',\n configs: [],\n headers: [\n {\n text: 'Configuration',\n value: 'config',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedItem: null,\n }\n },\n computed: {\n error: function () {\n if (this.configName === '') {\n return 'Config must have a name'\n }\n return null\n },\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new CosmosApi()\n .list_configs(this.tool)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to Cosmos. ${error}`)\n })\n },\n methods: {\n itemSelected: function (item) {\n if (item.value) {\n this.selectedItem = item.item\n this.configName = item.item.config\n } else {\n this.selectedItem = null\n this.configName = ''\n }\n },\n success: function () {\n this.$emit('success', this.configName)\n this.show = false\n this.search = null\n this.selectedItem = null\n this.configName = ''\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedItem = null\n this.configName = ''\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.configName === item.config) {\n this.selectedItem = null\n this.configName = ''\n }\n this.configs.splice(this.configs.indexOf(item.config), 1)\n new CosmosApi().delete_config(this.tool, item.config)\n })\n .catch((error) => {\n if (error) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`\n )\n }\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveConfigDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SaveConfigDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SaveConfigDialog.vue?vue&type=template&id=7685694e&\"\nimport script from \"./SaveConfigDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./SaveConfigDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{staticClass:\"c-chooser px-0\"},[_c('v-row',[_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-target\"}},[_c('v-select',{attrs:{\"label\":\"Select Target\",\"hide-details\":\"\",\"dense\":\"\",\"items\":_vm.targetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.targetNameChanged},model:{value:(_vm.selectedTargetName),callback:function ($$v) {_vm.selectedTargetName=$$v},expression:\"selectedTargetName\"}})],1),_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-packet\"}},[_c('v-select',{attrs:{\"label\":\"Select Packet\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.packetsDisabled,\"items\":_vm.packetNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":_vm.packetNameChanged},model:{value:(_vm.selectedPacketName),callback:function ($$v) {_vm.selectedPacketName=$$v},expression:\"selectedPacketName\"}})],1),(_vm.chooseItem && !_vm.buttonDisabled)?_c('v-col',{attrs:{\"cols\":_vm.colSize,\"data-test\":\"select-item\"}},[_c('v-select',{attrs:{\"label\":\"Select Item\",\"hide-details\":\"\",\"dense\":\"\",\"disabled\":_vm.itemsDisabled,\"items\":_vm.itemNames,\"item-text\":\"label\",\"item-value\":\"value\"},on:{\"change\":function($event){return _vm.itemNameChanged($event)}},model:{value:(_vm.selectedItemName),callback:function ($$v) {_vm.selectedItemName=$$v},expression:\"selectedItemName\"}})],1):_vm._e(),(_vm.buttonText)?_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_c('v-btn',{attrs:{\"disabled\":_vm.buttonDisabled,\"block\":\"\",\"color\":\"primary\",\"data-test\":\"select-send\"},on:{\"click\":_vm.buttonPressed}},[_vm._v(\" \"+_vm._s(_vm.actualButtonText)+\" \")])],1):_vm._e()],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{attrs:{\"cols\":_vm.colSize}},[_vm._v(\"Description: \"+_vm._s(_vm.description))])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-container class=\"c-chooser px-0\">\n <v-row>\n <v-col :cols=\"colSize\" data-test=\"select-target\">\n <v-select\n label=\"Select Target\"\n hide-details\n dense\n @change=\"targetNameChanged\"\n :items=\"targetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedTargetName\"\n />\n </v-col>\n <v-col :cols=\"colSize\" data-test=\"select-packet\">\n <v-select\n label=\"Select Packet\"\n hide-details\n dense\n @change=\"packetNameChanged\"\n :disabled=\"packetsDisabled\"\n :items=\"packetNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedPacketName\"\n />\n </v-col>\n <v-col\n v-if=\"chooseItem && !buttonDisabled\"\n :cols=\"colSize\"\n data-test=\"select-item\"\n >\n <v-select\n label=\"Select Item\"\n hide-details\n dense\n @change=\"itemNameChanged($event)\"\n :disabled=\"itemsDisabled\"\n :items=\"itemNames\"\n item-text=\"label\"\n item-value=\"value\"\n v-model=\"selectedItemName\"\n />\n </v-col>\n <v-col v-if=\"buttonText\" :cols=\"colSize\">\n <v-btn\n :disabled=\"buttonDisabled\"\n block\n color=\"primary\"\n data-test=\"select-send\"\n @click=\"buttonPressed\"\n >\n {{ actualButtonText }}\n </v-btn>\n </v-col>\n </v-row>\n <v-row no-gutters>\n <v-col :cols=\"colSize\">Description: {{ description }}</v-col>\n </v-row>\n </v-container>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api'\nexport default {\n props: {\n allowAll: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: null,\n },\n chooseItem: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n initialTargetName: {\n type: String,\n default: '',\n },\n initialPacketName: {\n type: String,\n default: '',\n },\n initialItemName: {\n type: String,\n default: '',\n },\n mode: {\n type: String,\n default: 'tlm',\n // TODO: add validators throughout\n validator: (propValue) => {\n return ['cmd', 'tlm'].includes(propValue)\n },\n },\n reduced: {\n type: String,\n default: 'DECOM',\n validator: (propValue) => {\n return [\n 'REDUCED_DAY',\n 'REDUCED_HOUR',\n 'REDUCED_MINUTE',\n 'DECOM',\n ].includes(propValue)\n },\n },\n unknown: {\n type: Boolean,\n default: false,\n },\n vertical: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n targetNames: [],\n packetNames: [],\n itemNames: [],\n selectedTargetName: this.initialTargetName?.toUpperCase(),\n selectedPacketName: this.initialPacketName?.toUpperCase(),\n selectedItemName: this.initialItemName?.toUpperCase(),\n description: '',\n internalDisabled: false,\n packetsDisabled: false,\n itemsDisabled: false,\n api: null,\n ALL: {\n label: '[ ALL ]',\n value: 'ALL',\n description: 'ALL',\n }, // Constant to indicate all packets or items\n UNKNOWN: {\n label: '[ UNKNOWN ]',\n value: 'UNKNOWN',\n description: 'UNKNOWN',\n },\n }\n },\n created() {\n this.internalDisabled = true\n this.api = new CosmosApi()\n this.api.get_target_list().then((result) => {\n this.targetNames = result.map((target) => {\n return { label: target, value: target }\n })\n if (!this.selectedTargetName) {\n this.selectedTargetName = this.targetNames[0].value\n this.targetNameChanged(this.selectedTargetName)\n }\n this.updatePackets()\n if (this.unknown) {\n this.targetNames.push(this.UNKNOWN)\n }\n })\n },\n computed: {\n actualButtonText: function () {\n if (this.selectedPacketName === 'ALL') {\n return 'Add Target'\n }\n if (this.selectedItemName === 'ALL') {\n return 'Add Packet'\n }\n return this.buttonText\n },\n buttonDisabled: function () {\n return this.disabled || this.internalDisabled\n },\n targetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '49%', float: 'left' }\n }\n },\n packetChooserStyle: function () {\n if (this.chooseItem || this.buttonText) {\n return { width: '25%', float: 'left', 'margin-right': '5px' }\n } else {\n return { width: '50%', float: 'right' }\n }\n },\n colSize: function () {\n return this.vertical ? 12 : false\n },\n },\n watch: {\n mode: function (newVal, oldVal) {\n this.updatePackets()\n this.itemNames = []\n },\n reduced: function (newVal, oldVal) {\n this.updateItems()\n },\n },\n methods: {\n updatePackets: function () {\n if (this.selectedTargetName === 'UNKNOWN') {\n this.packetNames = [this.UNKNOWN]\n this.selectedPacketName = this.packetNames[0].value\n this.packetNameChanged(this.UNKNOWN.value)\n this.description = 'UNKNOWN'\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_all_telemetry' : 'get_all_commands'\n this.api[cmd](this.selectedTargetName).then((packets) => {\n this.packetNames = packets.map((packet) => {\n return {\n label: packet.packet_name,\n value: packet.packet_name,\n description: packet.description,\n }\n })\n if (this.allowAll) {\n this.packetNames.unshift(this.ALL)\n }\n if (!this.selectedPacketName) {\n this.selectedPacketName = this.packetNames[0].value\n this.packetNameChanged(this.selectedPacketName)\n }\n const item = this.packetNames.find((packet) => {\n return packet.value === this.selectedPacketName\n })\n this.description = item.description\n if (this.chooseItem) {\n this.updateItems()\n }\n this.internalDisabled = false\n })\n },\n\n updateItems: function () {\n if (this.selectedPacketName === 'ALL') {\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.itemNames = packet.items.map((item) => {\n if (this.reduced === 'DECOM') {\n return [{\n label: item.name,\n value: item.name,\n description: item.description,\n }]\n } else {\n return this.makeReducedItems(item)\n }\n }).reduce((result, item) => { return result.concat(item) }, [])\n if (this.allowAll) {\n this.itemNames.unshift(this.ALL)\n }\n if (!this.selectedItemName) {\n this.selectedItemName = this.itemNames[0].value\n }\n this.description = this.itemNames[0].description\n this.internalDisabled = false\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n }\n )\n },\n\n makeReducedItems: function (item) {\n const reducedOptions = !item.array_size && !item.states\n if (\n reducedOptions && ['UINT', 'INT', 'FLOAT'].includes(item.data_type)\n ) {\n return ['MIN', 'MAX', 'AVG', 'STDDEV'].map((ext) => {\n return {\n label: `${item.name}_${ext}`,\n value: `${item.name}_${ext}`,\n description: `${ext} ${item.description}`,\n }\n })\n }\n return []\n },\n\n targetNameChanged: function (value) {\n this.selectedTargetName = value\n this.selectedPacketName = ''\n this.selectedItemName = ''\n this.updatePackets()\n },\n\n packetNameChanged: function (value) {\n if (value === 'ALL') {\n this.itemsDisabled = true\n this.internalDisabled = false\n } else {\n this.itemsDisabled = false\n const packet = this.packetNames.find((packet) => {\n return value === packet.value\n })\n this.selectedPacketName = packet.value\n this.description = packet.description\n }\n if (this.chooseItem) {\n this.selectedItemName = ''\n this.updateItems()\n } else {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n itemNameChanged: function (value) {\n const item = this.itemNames.find((item) => {\n return value === item.value\n })\n this.selectedItemName = item.value\n this.description = item.description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n },\n\n buttonPressed: function () {\n if (this.selectedPacketName === 'ALL') {\n this.allTargetPacketItems()\n } else if (this.selectedItemName === 'ALL') {\n this.allPacketItems()\n } else if (this.chooseItem) {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemName,\n reduced: this.reduced,\n })\n } else {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n reduced: this.reduced,\n })\n }\n },\n\n allTargetPacketItems: function () {\n this.packetNames.forEach((packetName) => {\n if (packetName === this.ALL) return\n const cmd = this.mode === 'tlm' ? 'get_telemetry' : 'get_command'\n this.api[cmd](this.selectedTargetName, packetName.value).then(\n (packet) => {\n packet.items.forEach((item) => {\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: packetName.value,\n itemName: item['name'],\n reduced: this.reduced,\n })\n })\n }\n )\n })\n },\n\n allPacketItems: function () {\n this.itemNames.forEach((item) => {\n if (item === this.ALL) return\n this.$emit('click', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: item.value,\n reduced: this.reduced,\n })\n })\n },\n },\n}\n</script>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TargetPacketItemChooser.vue?vue&type=template&id=dc196880&\"\nimport script from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\nexport * from \"./TargetPacketItemChooser.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('mounting-portal',{attrs:{\"mount-to\":\"#cosmos-menu\",\"append\":\"\"}},[_c('div',{staticClass:\"v-toolbar__content\"},[_vm._l((_vm.menus),function(menu,i){return _c('v-menu',{key:i,attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-1\",attrs:{\"outlined\":\"\",\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label)))}},'v-btn',attrs,false),on),[_c('span',{domProps:{\"textContent\":_vm._s(menu.label)}}),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\" mdi-menu-down \")])],1)]}}],null,true)},[_c('v-list',[_c('v-radio-group',{staticClass:\"ma-0 pa-0\",attrs:{\"value\":menu.radioGroup,\"hide-details\":\"\",\"dense\":\"\"}},[_vm._l((menu.items),function(option,j){return [(option.divider)?_c('v-divider',{key:j}):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled},domProps:{\"textContent\":_vm._s(option.icon)}})],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')),domProps:{\"textContent\":_vm._s(option.label)}}):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',{domProps:{\"textContent\":_vm._s(_vm.title)}}),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <mounting-portal mount-to=\"#cosmos-menu\" append>\n <div class=\"v-toolbar__content\">\n <v-menu offset-y v-for=\"(menu, i) in menus\" :key=\"i\">\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n outlined\n v-bind=\"attrs\"\n v-on=\"on\"\n class=\"mx-1\"\n :data-test=\"formatDT(`${title} ${menu.label}`)\"\n >\n <span v-text=\"menu.label\" />\n <v-icon right> mdi-menu-down </v-icon>\n </v-btn>\n </template>\n <v-list>\n <!-- The radio-group is necessary in case the application wants radio buttons -->\n <v-radio-group\n :value=\"menu.radioGroup\"\n hide-details\n dense\n class=\"ma-0 pa-0\"\n >\n <template v-for=\"(option, j) in menu.items\">\n <v-divider v-if=\"option.divider\" :key=\"j\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :key=\"j\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n >\n <v-list-item-action\n v-if=\"option.radio\"\n >\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action\n v-if=\"option.checkbox\"\n >\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon v-text=\"option.icon\" :disabled=\"option.disabled\" />\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n v-text=\"option.label\"\n />\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title v-text=\"title\" />\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function(string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n }\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=e3bb7458&scoped=true&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TopBar.vue?vue&type=style&index=0&id=e3bb7458&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3bb7458\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"TlmGrapher Settings\")]),_c('v-spacer')],1),_c('v-card',{staticClass:\"pa-3\"},[_c('v-card-text',[_vm._l((_vm.settings),function(item){return _c('div',{key:item.title},[_c('v-row',{staticClass:\"my-5\"},[_c('v-text-field',{attrs:{\"hide-details\":\"auto\",\"type\":\"number\",\"rules\":item.rules,\"label\":item.title},model:{value:(item.value),callback:function ($$v) {_vm.$set(item, \"value\", _vm._n($$v))},expression:\"item.value\"}})],1)],1)}),_c('v-row',[_c('span',{staticClass:\"red--text\"},[_vm._v(\" Increasing these values may cause issues \")])])],2)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nconst request = async function (\n method,\n url,\n { data, params = {}, headers, noAuth = false, noScope = false } = {}\n) {\n if (!noAuth) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n headers['Authorization'] = localStorage.cosmosToken\n }\n if (!noScope && !params['scope']) {\n params['scope'] = localStorage.scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('get', path, { params, headers, noScope, noAuth })\n },\n\n put: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('put', path, { data, params, headers, noScope, noAuth })\n },\n\n post: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('post', path, { data, params, headers, noScope, noAuth })\n },\n\n delete: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('delete', path, { params, headers, noScope, noAuth })\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-system-bar>\n <v-spacer />\n <span>TlmGrapher Settings</span>\n <v-spacer />\n </v-system-bar>\n <v-card class=\"pa-3\">\n <v-card-text>\n <div v-for=\"item in settings\" :key=\"item.title\">\n <v-row class=\"my-5\">\n <v-text-field\n hide-details=\"auto\"\n type=\"number\"\n :rules=\"item.rules\"\n :label=\"item.title\"\n v-model.number=\"item.value\"\n />\n </v-row>\n </div>\n <v-row>\n <span class=\"red--text\">\n Increasing these values may cause issues\n </span>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport Api from '@cosmosc2/tool-common/src/services/api'\n\nexport default {\n props: {\n settings: {\n type: Object,\n required: true,\n },\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {}\n },\n computed: {\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n methods: {},\n}\n</script>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SettingsDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./SettingsDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsDialog.vue?vue&type=template&id=282aa6a6&\"\nimport script from \"./SettingsDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <div>\n <top-bar :menus=\"menus\" :title=\"title\" />\n <div>\n <v-snackbar\n v-model=\"showAlert\"\n top\n :type=\"alertType\"\n :icon=\"alertType\"\n :timeout=\"5000\"\n >\n <v-icon> mdi-{{ alertType }} </v-icon>\n {{ alert }}\n <template v-slot:action=\"{ attrs }\">\n <v-btn\n text\n v-bind=\"attrs\"\n @click=\"\n () => {\n showAlert = false\n }\n \"\n >\n Close\n </v-btn>\n </template>\n </v-snackbar>\n\n <div v-show=\"this.selectedGraphId === null\">\n <v-row class=\"my-5\">\n <v-spacer />\n <span>\n Add a graph from the menu bar or select an existing graph to\n continue\n </span>\n <v-spacer />\n </v-row>\n </div>\n\n <v-row justify=\"space-between\" v-show=\"this.selectedGraphId !== null\">\n <v-col cols=\"11\">\n <target-packet-item-chooser\n :initial-target-name=\"this.$route.params.target\"\n :initial-packet-name=\"this.$route.params.packet\"\n :initial-item-name=\"this.$route.params.item\"\n @click=\"addItem\"\n button-text=\"Add Item\"\n choose-item\n />\n </v-col>\n <v-col cols=\"1\">\n <v-btn\n v-show=\"state === 'pause'\"\n class=\"pulse\"\n v-on:click=\"\n () => {\n state = 'start'\n }\n \"\n color=\"primary\"\n fab\n data-test=\"start-graph\"\n >\n <v-icon large>mdi-play</v-icon>\n </v-btn>\n <v-btn\n v-show=\"state === 'start'\"\n v-on:click=\"\n () => {\n state = 'pause'\n }\n \"\n color=\"primary\"\n fab\n data-test=\"pause-graph\"\n >\n <v-icon large>mdi-pause</v-icon>\n </v-btn>\n </v-col>\n </v-row>\n\n <div class=\"grid\">\n <div\n class=\"item\"\n v-for=\"graph in graphs\"\n :key=\"graph\"\n :id=\"`gridItem${graph}`\"\n :ref=\"`gridItem${graph}`\"\n >\n <div class=\"item-content\">\n <graph\n :ref=\"`graph${graph}`\"\n :id=\"graph\"\n :state=\"state\"\n :start-time=\"startTime\"\n :selected-graph-id=\"selectedGraphId\"\n :seconds-graphed=\"settings.secondsGraphed.value\"\n :points-saved=\"settings.pointsSaved.value\"\n :points-graphed=\"settings.pointsGraphed.value\"\n @close-graph=\"() => closeGraph(graph)\"\n @min-max-graph=\"() => minMaxGraph(graph)\"\n @resize=\"() => resize(graph)\"\n @click=\"() => graphSelected(graph)\"\n @mousedown=\"mousedown\"\n @started=\"graphStarted\"\n />\n </div>\n </div>\n </div>\n </div>\n <!-- Note we're using v-if here so it gets re-created each time and refreshes the list -->\n <open-config-dialog\n v-if=\"showOpenConfig\"\n v-model=\"showOpenConfig\"\n :tool=\"toolName\"\n @success=\"openConfiguration\"\n />\n <!-- Note we're using v-if here so it gets re-created each time and refreshes the list -->\n <save-config-dialog\n v-if=\"showSaveConfig\"\n v-model=\"showSaveConfig\"\n :tool=\"toolName\"\n @success=\"saveConfiguration\"\n />\n <!-- Note we're using v-if here so it gets re-created each time and refreshes the list -->\n <settings-dialog\n v-show=\"showSettingsDialog\"\n v-model=\"showSettingsDialog\"\n :settings=\"settings\"\n />\n </div>\n</template>\n\n<script>\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport Graph from '@cosmosc2/tool-common/src/components/Graph.vue'\nimport OpenConfigDialog from '@cosmosc2/tool-common/src/components/OpenConfigDialog'\nimport SaveConfigDialog from '@cosmosc2/tool-common/src/components/SaveConfigDialog'\nimport TargetPacketItemChooser from '@cosmosc2/tool-common/src/components/TargetPacketItemChooser'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\nimport Muuri from 'muuri'\n\nimport SettingsDialog from '@/tools/TlmGrapher/SettingsDialog'\n\nconst MURRI_REFRESH_TIME = 250\nexport default {\n components: {\n Graph,\n OpenConfigDialog,\n SaveConfigDialog,\n SettingsDialog,\n TargetPacketItemChooser,\n TopBar,\n },\n data() {\n return {\n alert: '',\n alertType: 'success',\n showAlert: false,\n title: 'Telemetry Grapher',\n toolName: 'telemetry-grapher',\n showOpenConfig: false,\n showSaveConfig: false,\n showSettingsDialog: false,\n grid: null,\n state: 'stop', // Valid: stop, start, pause\n startTime: null, // Start time in nanoseconds\n // Setup defaults to show an initial graph\n graphs: [0],\n selectedGraphId: 0,\n counter: 1,\n menus: [\n {\n label: 'File',\n items: [\n {\n label: 'Open Configuration',\n icon: 'mdi-folder-open',\n command: () => {\n this.showOpenConfig = true\n },\n },\n {\n label: 'Save Configuration',\n icon: 'mdi-content-save',\n command: () => {\n this.showSaveConfig = true\n },\n },\n ],\n },\n {\n label: 'Graph',\n items: [\n {\n label: 'Add Graph',\n icon: 'mdi-plus',\n command: () => {\n this.addGraph()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Start / Resume',\n icon: 'mdi-play',\n command: () => {\n this.state = 'start'\n },\n },\n {\n label: 'Pause',\n icon: 'mdi-pause',\n command: () => {\n this.state = 'pause'\n },\n },\n {\n label: 'Stop',\n icon: 'mdi-stop',\n command: () => {\n this.state = 'stop'\n },\n },\n {\n divider: true,\n },\n {\n label: 'Settings',\n icon: 'mdi-cog',\n command: () => {\n this.showSettingsDialog = true\n },\n },\n ],\n },\n ],\n settings: {\n secondsGraphed: {\n title: 'Seconds Graphed',\n value: 1000,\n rules: [(value) => !!value || 'Required'],\n },\n pointsSaved: {\n title: 'Points Saved',\n value: 1000000,\n rules: [(value) => !!value || 'Required'],\n },\n pointsGraphed: {\n title: 'Points Graphed',\n value: 1000,\n rules: [(value) => !!value || 'Required'],\n },\n },\n }\n },\n mounted: function () {\n this.grid = new Muuri('.grid', {\n dragEnabled: true,\n layoutOnResize: true,\n // Only allow drags starting from the v-system-bar title\n dragHandle: '.v-system-bar',\n })\n // Sometimes when we move graphs, other graphs become non-interactive\n // This seems to fix that issue\n this.grid.on('move', function (data) {\n data.item.getGrid().synchronize()\n })\n const previousConfig = this.getLocalStorageConfig()\n // If we're passed in the route then manually addItem\n if (\n this.$route.params.target &&\n this.$route.params.packet &&\n this.$route.params.item\n ) {\n this.addItem({\n targetName: this.$route.params.target.toUpperCase(),\n packetName: this.$route.params.packet.toUpperCase(),\n itemName: this.$route.params.item.toUpperCase(),\n })\n } else if (previousConfig) {\n this.openConfiguration(previousConfig)\n }\n },\n methods: {\n mousedown: function ($event) {\n // Only respond to left button mousedown events\n if ($event.button === 0 || $event.which === 1) {\n this.state = 'pause'\n }\n },\n alertHandler: function (event) {\n this.alert = event.text\n this.alertType = event.type\n this.showAlert = true\n },\n setLocalStorageConfig: function (value) {\n localStorage['lastconfig__telemetry_grapher'] = value\n },\n getLocalStorageConfig: function () {\n return localStorage['lastconfig__telemetry_grapher']\n },\n graphSelected: function (id) {\n this.selectedGraphId = id\n },\n addItem: function (item, startGraphing = true) {\n this.$refs[`graph${this.selectedGraphId}`][0].addItems([item])\n if (startGraphing === true) {\n this.state = 'start'\n }\n },\n addGraph: function () {\n const id = this.counter\n this.graphs.push(id)\n this.counter += 1\n this.$nextTick(function () {\n var items = this.grid.add(this.$refs[`gridItem${id}`], {\n active: false,\n })\n this.grid.show(items)\n this.selectedGraphId = id\n setTimeout(() => {\n this.grid.refreshItems().layout()\n }, MURRI_REFRESH_TIME)\n })\n },\n closeGraph: function (id) {\n var items = this.grid.getItems([document.getElementById(`gridItem${id}`)])\n this.grid.remove(items)\n this.graphs.splice(this.graphs.indexOf(id), 1)\n this.selectedGraphId = null\n },\n closeAllGraphs: function () {\n // Make a copy of this.graphs to iterate on since closeGraph modifies in place\n for (let graph of [...this.graphs]) {\n this.closeGraph(graph)\n }\n this.counter = 0\n },\n minMaxGraph: function (id) {\n this.selectedGraphId = id\n setTimeout(\n () => {\n this.grid.refreshItems().layout()\n },\n MURRI_REFRESH_TIME * 2 // Double the time since there is more animation\n )\n },\n resize: function (id) {\n this.selectedGraphId = id\n setTimeout(\n () => {\n this.grid.refreshItems().layout()\n },\n MURRI_REFRESH_TIME * 2 // Double the time since there is more animation\n )\n },\n graphStarted: function (time) {\n // Only set startTime once when notified by the first graph to start\n // This allows us to have a uniform start time on all graphs\n if (this.startTime === null) {\n this.startTime = time\n }\n },\n saveConfiguration: function (name) {\n const config = this.grid.getItems().map((item) => {\n // Map the gridItem id to the graph id\n const graphId = `graph${item.getElement().id.substring(8)}`\n const vueGraph = this.$refs[graphId][0]\n return {\n items: vueGraph.items,\n title: vueGraph.title,\n fullWidth: vueGraph.fullWidth,\n fullHeight: vueGraph.fullHeight,\n graphMinX: vueGraph.graphMinX,\n graphMaxX: vueGraph.graphMaxX,\n }\n })\n new CosmosApi()\n .save_config(this.toolName, name, JSON.stringify(config))\n .then((response) => {\n this.setLocalStorageConfig(name)\n this.alertHandler({\n text: `Saved configuration: ${name}`,\n type: 'success',\n })\n })\n .catch((error) => {\n if (error) {\n this.alertHandler({\n text: `Failed to save configuration: ${name}. ${error}`,\n type: 'error',\n })\n }\n })\n },\n openConfiguration: function (name) {\n this.setLocalStorageConfig(name)\n new CosmosApi()\n .load_config(this.toolName, name)\n .then((response) => {\n if (response) {\n this.loadConfiguration(response)\n }\n })\n .catch((error) => {\n if (error) {\n this.alertHandler({\n text: `Failed to open configuration: ${name}. ${error}`,\n type: 'error',\n })\n this.setLocalStorageConfig(null)\n }\n })\n },\n async loadConfiguration(configStr) {\n this.closeAllGraphs()\n await this.$nextTick()\n const config = JSON.parse(configStr)\n for (let graph of config) {\n this.addGraph()\n }\n await this.$nextTick()\n const that = this\n config.forEach(function (graph, i) {\n let vueGraph = that.$refs[`graph${i}`][0]\n vueGraph.title = graph.title\n vueGraph.fullWidth = graph.fullWidth\n vueGraph.fullHeight = graph.fullHeight\n vueGraph.graphMinX = graph.graphMinX\n vueGraph.graphMaxX = graph.graphMaxX\n vueGraph.resize()\n vueGraph.addItems([...graph.items])\n })\n this.state = 'start'\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.v-navigation-drawer {\n z-index: 2;\n}\n.theme--dark.v-navigation-drawer {\n background-color: var(--v-primary-darken2);\n}\n.grid {\n position: relative;\n}\n.item {\n position: absolute;\n z-index: 1;\n}\n.item.muuri-item-dragging {\n z-index: 3;\n}\n.item.muuri-item-releasing {\n z-index: 2;\n}\n.item.muuri-item-hidden {\n z-index: 0;\n}\n.item-content {\n position: relative;\n cursor: pointer;\n border-radius: 6px;\n margin: 5px;\n}\n\n.pulse {\n animation: pulse 1s infinite;\n}\n\n@keyframes pulse {\n 0% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.5;\n }\n}\n</style>\n","import mod from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TlmGrapher.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TlmGrapher.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TlmGrapher.vue?vue&type=template&id=7d21b316&scoped=true&\"\nimport script from \"./TlmGrapher.vue?vue&type=script&lang=js&\"\nexport * from \"./TlmGrapher.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TlmGrapher.vue?vue&type=style&index=0&id=7d21b316&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7d21b316\",\n null\n \n)\n\nexport default component.exports","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#chart[data-v-2adbed0c]{background-color:var(--v-tertiary-darken2)}#chart[data-v-2adbed0c] .u-legend{text-align:left}#chart[data-v-2adbed0c] .u-inline{max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content}#chart[data-v-2adbed0c] .u-select{background-color:hsla(0,0%,100%,.07)}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-list[data-v-e3bb7458] .v-label{margin-left:5px}.v-list-item__icon[data-v-e3bb7458]{margin-right:15px!important}.v-list-item__title[data-v-e3bb7458]{color:#fff}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".v-navigation-drawer[data-v-7d21b316]{z-index:2}.theme--dark.v-navigation-drawer[data-v-7d21b316]{background-color:var(--v-primary-darken2)}.grid[data-v-7d21b316]{position:relative}.item[data-v-7d21b316]{position:absolute;z-index:1}.item.muuri-item-dragging[data-v-7d21b316]{z-index:3}.item.muuri-item-releasing[data-v-7d21b316]{z-index:2}.item.muuri-item-hidden[data-v-7d21b316]{z-index:0}.item-content[data-v-7d21b316]{position:relative;cursor:pointer;border-radius:6px;margin:5px}.pulse[data-v-7d21b316]{-webkit-animation:pulse-data-v-7d21b316 1s infinite;animation:pulse-data-v-7d21b316 1s infinite}@-webkit-keyframes pulse-data-v-7d21b316{0%{opacity:1}50%{opacity:.5}}@keyframes pulse-data-v-7d21b316{0%{opacity:1}50%{opacity:.5}}\", \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./Graph.vue?vue&type=style&index=0&id=2adbed0c&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"412332c4\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[2]!../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12[0].rules[0].use[3]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=style&index=0&id=e3bb7458&scoped=true&lang=css&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"a2f2c426\", content, true, {\"sourceMap\":false,\"shadowMode\":false});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[1]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[2]!../../../../../node_modules/@vue/cli-service/node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[3]!../../../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22[0].rules[0].use[4]!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TlmGrapher.vue?vue&type=style&index=0&id=7d21b316&lang=scss&scoped=true&\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"2e272655\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","menus","title","alertType","scopedSlots","_u","key","fn","ref","_b","on","showAlert","_v","model","value","callback","$$v","expression","_s","alert","directives","name","rawName","selectedGraphId","staticClass","$route","params","target","packet","item","addItem","state","_l","graph","refInFor","startTime","settings","secondsGraphed","pointsSaved","pointsGraphed","closeGraph","minMaxGraph","resize","graphSelected","mousedown","graphStarted","toolName","openConfiguration","showOpenConfig","_e","saveConfiguration","showSaveConfig","showSettingsDialog","staticRenderFns","vueInstance","Vue","axiosInstance","axios","baseURL","location","origin","timeout","interceptors","response","use","error","status","localStorage","cosmosToken","CosmosAuth","login","href","body","data","message","exception","class","$notify","serious","CosmosApi","method","kwparams","updateToken","defaultMinValidity","id","scope","jsonrpc","keyword_params","headers","Authorization","result","err","Error","request","val","json_class","raw","NaN","Infinity","Number","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","log_writer_name","limits_set","target_name","packet_name","value_type","type","len","length","converted","i","decode_cosmos_type","items","item_name","command_name","parameter_name","param_list","Object","prototype","hasOwnProperty","call","encode_cosmos_type","undefined","_cmd","tool","ignored","array","nativeOn","$event","$emit","hideSystemBar","errors","_g","errorDialog","editGraph","collapseAll","calcFullSize","expandAll","collapseWidth","fullWidth","expandWidth","collapseHeight","fullHeight","expandHeight","minMaxTransition","expand","hideOverview","indexOf","_k","keyCode","editGraphClose","graphStartDateTime","graphEndDateTime","graphMinY","graphMaxY","itemHeaders","editItems","removeItems","proxy","clearErrors","editGraphMenuX","editGraphMenuY","editGraphMenu","staticStyle","editItem","valueTypes","changeType","selectedItem","$set","itemMenuX","itemMenuY","itemMenu","itemName","dateLabel","Date","now","dateRules","date","timeLabel","timeRules","onChange","time","props","required","Boolean","default","initialDate","initialTime","String","rules","isValid","computed","push","methods","component","Cable","url","_cable","ActionCable","disconnect","channel","callbacks","additionalOptions","then","subscriptions","create","token","require","components","DateTimeChooser","initialItems","Array","height","width","text","sortable","active","overview","indexes","drawInterval","zoomChart","zoomOverview","cable","subscription","needToUpdate","colors","map","itemId","JSON","stringify","created","mounted","spanGaps","stroke","seriesObj","commonProps","label","rawValue","chartSeries","overviewSeries","series","v","cursor","drag","x","y","sync","hooks","setScale","left","ready","canvas","e","legend","seriesEl","chartOpts","document","points","show","setSelect","chart","min","max","overviewOpts","window","addEventListener","handleResize","subscribe","beforeDestroy","unsubscribe","removeEventListener","watch","newState","oldState","setData","newData","ptsMin","setGraphRange","removeItemsFromSubscription","addItemsToSubscription","setSize","getSize","pad","scales","range","createSubscription","received","connected","disconnected","rejected","navDrawer","Math","navDrawerWidth","viewHeight","chooser","clientHeight","getScales","u","dataMin","dataMax","getAxes","$vuetify","theme","dark","strokeColor","axisColor","axes","grid","size","addItems","event","itemArray","color","index","endTime","mode","start_time","end_time","perform","subscriptionKey","reorderIndexes","j","set_data_at_index","ideal_index","bs_comparator","element","needle","key_index","cancel","apply","arguments","preventDefault","success","search","configs","itemSelected","slot","select","deleteConfig","domProps","align","get","set","list_configs","configId","config","catch","$dialog","confirm","okText","cancelText","configName","colSize","targetNames","targetNameChanged","selectedTargetName","packetsDisabled","packetNames","packetNameChanged","selectedPacketName","chooseItem","buttonDisabled","itemsDisabled","itemNames","itemNameChanged","selectedItemName","buttonPressed","actualButtonText","description","allowAll","buttonText","disabled","initialTargetName","initialPacketName","initialItemName","validator","includes","propValue","reduced","unknown","vertical","internalDisabled","api","ALL","UNKNOWN","get_target_list","targetChooserStyle","float","packetChooserStyle","updatePackets","updateItems","cmd","reduce","targetName","packetName","makeReducedItems","reducedOptions","allTargetPacketItems","allPacketItems","forEach","menu","formatDT","radioGroup","option","command","checked","icon","radio","checkbox","style","string","replaceAll","toLowerCase","_n","acceptOnlyDefaultHeaders","Accept","Graph","OpenConfigDialog","SaveConfigDialog","SettingsDialog","TargetPacketItemChooser","TopBar","graphs","counter","divider","dragEnabled","layoutOnResize","dragHandle","getGrid","synchronize","toUpperCase","alertHandler","setLocalStorageConfig","getLocalStorageConfig","$refs","startGraphing","addGraph","$nextTick","setTimeout","MURRI_REFRESH_TIME","remove","splice","closeAllGraphs","vueGraph","graphMinX","graphMaxX","save_config","load_config","configStr","that","___CSS_LOADER_EXPORT___","module","content","__esModule","locals","exports","add"],"sourceRoot":""}