cosmosc2-tool-limitsmonitor 5.0.3 → 5.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/tools/limitsmonitor/js/508.js +1 -1
- data/tools/limitsmonitor/js/508.js.map +1 -1
- data/tools/limitsmonitor/js/95.js +4 -0
- data/tools/limitsmonitor/js/95.js.map +1 -0
- data/tools/limitsmonitor/js/app.js +1 -1
- data/tools/limitsmonitor/js/app.js.map +1 -1
- metadata +5 -5
- data/tools/limitsmonitor/js/974.js +0 -2
- data/tools/limitsmonitor/js/974.js.map +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"js/508.js","mappings":"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","sources":["webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsMonitor.vue?d0ab","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?0899","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?cd0d","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/Widget.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?f72a","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?1e32","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?800c","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?26e5","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/VWidget.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?88c8","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?7eb0","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?fdbd","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?5139","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?0a72","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?4fd8","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?19fc","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?00b3","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?2de4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?584c","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?56ec","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?cc59","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?495e","webpack://@cosmosc2/tool-limitsmonitor/src/tools/LimitsMonitor/LimitsControl.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?24af","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?0d0a","webpack://@cosmosc2/tool-limitsmonitor/src/tools/LimitsMonitor/LimitsEvents.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?ced5","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?228d","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/services/cable.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?d129","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?b667","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?6158","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?36c2","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?e52f","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?65b7","webpack://@cosmosc2/tool-limitsmonitor/src/tools/LimitsMonitor/LimitsMonitor.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsMonitor.vue?0b10","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsMonitor.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?82b3","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?6b70","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?8476","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?cdf2","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?9001","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?a2c4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?dfc1","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?5429","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?b8ed","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?fee4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?30f4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?2dbb","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?dd36"],"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('v-card',[_c('v-tabs',{attrs:{\"fixed-tabs\":\"\"},model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.tabs),function(tab,index){return _c('v-tab',{key:index},[_vm._v(_vm._s(tab))])}),1),_c('v-tabs-items',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},[_c('v-tab-item',{attrs:{\"eager\":\"\"}},[_c('keep-alive',[_c('limits-control',{key:_vm.renderKey,ref:\"control\",model:{value:(_vm.ignored),callback:function ($$v) {_vm.ignored=$$v},expression:\"ignored\"}})],1)],1),_c('v-tab-item',{attrs:{\"eager\":\"\"}},[_c('keep-alive',[_c('limits-events',{ref:\"events\"})],1)],1)],1)],1),(_vm.openConfig)?_c('open-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":_vm.openConfiguration},model:{value:(_vm.openConfig),callback:function ($$v) {_vm.openConfig=$$v},expression:\"openConfig\"}}):_vm._e(),(_vm.saveConfig)?_c('save-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":_vm.saveConfiguration},model:{value:(_vm.saveConfig),callback:function ($$v) {_vm.saveConfig=$$v},expression:\"saveConfig\"}}):_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-container',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-text-field',{class:_vm.textFieldClass,attrs:{\"width\":\"200\",\"dense\":\"\",\"outlined\":\"\",\"readonly\":\"\",\"label\":\"Overall Limits State\",\"value\":_vm.overallStateFormatted,\"data-test\":\"overall-state\"}})],1),_vm._l((_vm.items),function(item,index){return _c('div',{key:item.key},[_c('v-row',{staticClass:\"my-0\",attrs:{\"data-test\":\"limits-row\"}},[_c('v-col',{staticClass:\"py-1\"},[(item.limits)?_c('labelvaluelimitsbar-widget',{attrs:{\"parameters\":item.parameters,\"settings\":[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'],\n ['2', 'WIDTH', '200'] ]}}):_c('labelvalue-widget',{attrs:{\"parameters\":item.parameters,\"settings\":[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'] ]}})],1),_c('v-col',{staticClass:\"py-1\",attrs:{\"cols\":\"2\"}},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mr-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.ignorePacket(item.key)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\" mdi-close-circle-multiple \")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Ignore Entire Packet\")])]),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mr-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.ignoreItem(item.key)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\" mdi-close-circle \")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Ignore Item\")])]),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mr-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.removeItem(item.key)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\" mdi-eye-off \")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Temporarily Hide Item\")])])],1)],1),(index < _vm.items.length - 1)?_c('v-divider',{key:index}):_vm._e()],1)})],2),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.ignoredItemsDialog),callback:function ($$v) {_vm.ignoredItemsDialog=$$v},expression:\"ignoredItemsDialog\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Ignored Items\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"my-2\"},[_vm._l((_vm.ignoredFormatted),function(item,index){return _c('div',{key:index},[_c('v-row',{staticClass:\"ma-1\"},[_c('span',{staticClass:\"font-weight-black\"},[_vm._v(\" \"+_vm._s(item)+\" \")]),_c('v-spacer'),_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\",\"data-test\":(\"remove-ignore-\" + index)},on:{\"click\":function($event){return _vm.restoreItem(item, index)}}},[_c('v-icon',[_vm._v(\" mdi-delete \")])],1)],1),(index < _vm.ignoredFormatted.length - 1)?_c('v-divider',{key:index}):_vm._e()],1)}),_c('v-row',{staticClass:\"mt-2\"},[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"color\":\"primary\"},on:{\"click\":function($event){_vm.ignoredItemsDialog = false}}},[_vm._v(\" Ok \")])],1),(_vm.index < _vm.items.length - 1)?_c('v-divider',{key:_vm.index}):_vm._e()],2)])],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\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?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\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 get_all_telemetry_list(target_name) {\n return this.exec('get_all_telemetry_list', [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_all_commands_list(target_name) {\n return this.exec('get_all_commands_list', [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',{ref:\"container\",staticClass:\"d-flex flex-row\"},[_c('label-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.labelName,\"settings\":_vm.settings,\"widget-index\":0}}),_c('value-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widget-index\":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\nexport default {\n props: {\n widgetIndex: {\n type: Number,\n default: null,\n },\n parameters: {\n type: Array,\n default: () => [],\n },\n settings: {\n type: Array,\n default: () => [],\n },\n },\n computed: {\n computedStyle() {\n let style = {}\n this.settings.forEach((setting) => {\n const index = parseInt(setting[0])\n if (this.widgetIndex !== null) {\n if (this.widgetIndex === index) {\n setting = setting.slice(1)\n } else {\n return\n }\n }\n switch (setting[0]) {\n case 'TEXTALIGN':\n style['text-align'] = setting[1].toLowerCase()\n break\n case 'PADDING':\n style['padding'] = setting[1] + 'px !important'\n break\n case 'MARGIN':\n style['margin'] = setting[1] + 'px !important'\n break\n case 'BACKCOLOR':\n style['background-color'] = this.getColor(setting.slice(1))\n break\n case 'TEXTCOLOR':\n style['color'] = this.getColor(setting.slice(1))\n break\n case 'BORDERCOLOR':\n style['border-width'] = '1px'\n style['border-style'] = 'solid'\n style['border-color'] = this.getColor(setting.slice(1))\n break\n case 'WIDTH':\n style['width'] = setting[1] + 'px !important'\n break\n case 'HEIGHT':\n style['height'] = setting[1] + 'px !important'\n break\n case 'RAW':\n style[setting[1].toLowerCase()] = setting[2]\n break\n }\n })\n return style\n },\n },\n methods: {\n // Expects an array, can either be a single color or 3 rgb values\n getColor(setting) {\n switch (setting.length) {\n case 1:\n return setting[0].toLowerCase()\n case 3:\n return `rgb(${setting[0]},${setting[1]},${setting[2]})`\n }\n },\n },\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"pa-1 mt-1 label\",style:([_vm.cssProps, _vm.computedStyle]),attrs:{\"data-test\":\"label\"}},[_vm._v(\" \"+_vm._s(_vm.labelText)+\" \")])}\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 <span\n data-test=\"label\"\n class=\"pa-1 mt-1 label\"\n :style=\"[cssProps, computedStyle]\"\n >\n {{ labelText }}\n </span>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n fontFamily: null,\n fontSize: null,\n fontWeight: 'normal',\n fontStyle: 'normal',\n }\n },\n computed: {\n labelText() {\n return this.parameters[0]\n },\n cssProps() {\n var size = null\n if (this.fontSize) {\n size = this.fontSize + 'px'\n }\n return {\n '--font-family': this.fontFamily,\n '--font-size': size,\n '--font-weight': this.fontWeight,\n '--font-style': this.fontStyle,\n }\n },\n },\n created() {\n if (this.parameters[1]) {\n this.fontFamily = this.parameters[1]\n }\n if (this.parameters[2]) {\n this.fontSize = this.parameters[2]\n }\n if (this.parameters[3]) {\n this.fontWeight = this.parameters[3]\n }\n if (this.parameters[4]) {\n this.fontStyle = this.parameters[4]\n }\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-family: var(--font-family);\n font-size: var(--font-size);\n font-weight: var(--font-weight);\n font-style: var(--font-style);\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!./LabelWidget.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!./LabelWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelWidget.vue?vue&type=template&id=1ff40000&scoped=true&\"\nimport script from \"./LabelWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LabelWidget.vue?vue&type=style&index=0&id=1ff40000&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 \"1ff40000\",\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('div',{staticClass:\"value-widget-container\"},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-text-field',_vm._g(_vm._b({class:_vm.valueClass,style:(_vm.computedStyle),attrs:{\"solo\":\"\",\"dense\":\"\",\"readonly\":\"\",\"single-line\":\"\",\"hide-no-data\":\"\",\"hide-details\":\"\",\"placeholder\":\"Value\",\"value\":_vm._value,\"data-test\":\"value\"},on:{\"contextmenu\":_vm.showContextMenu}},'v-text-field',attrs,false),on))]}}])},[_c('span',[_vm._v(_vm._s(_vm.fullName))])]),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.parameters[0],\"packet-name\":_vm.parameters[1],\"item-name\":_vm.parameters[2]},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}})],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 Widget from './Widget'\nimport 'sprintf-js'\nexport default {\n mixins: [Widget],\n // ValueWidget can either get it's value and limitsState directly through props\n // or it will register itself in the Vuex store and be updated asyncronously\n props: {\n value: {\n default: null,\n },\n limitsState: {\n type: String,\n default: null,\n },\n formatString: null,\n },\n data() {\n return {\n valueId: null,\n colorBlind: false,\n viewDetails: false,\n contextMenuShown: false,\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n {\n title: 'Graph',\n action: () => {\n window.open(\n '/tools/tlmgrapher/' +\n this.parameters[0] +\n '/' +\n this.parameters[1] +\n '/' +\n this.parameters[2],\n '_blank'\n )\n },\n },\n ],\n }\n },\n computed: {\n _value: function () {\n let value = this.value\n if (value === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n value = this.$store.state.tlmViewerValues[this.valueId][0]\n } else {\n value = null\n }\n }\n const formatted = this.formatValue(value)\n if (localStorage.colorblindMode === 'true' && this.limitsLetter !== '') {\n return `${formatted} (${this.limitsLetter})`\n }\n return formatted\n },\n valueClass: function () {\n return 'value shrink pa-1 ' + 'cosmos-' + this.limitsColor\n },\n limitsColor() {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n limitsState = this.$store.state.tlmViewerValues[this.valueId][1]\n } else {\n limitsState = null\n }\n }\n if (limitsState != null) {\n switch (limitsState) {\n case 'GREEN':\n case 'GREEN_HIGH':\n case 'GREEN_LOW':\n return 'green'\n case 'YELLOW':\n case 'YELLOW_HIGH':\n case 'YELLOW_LOW':\n return 'yellow'\n case 'RED':\n case 'RED_HIGH':\n case 'RED_LOW':\n return 'red'\n case 'BLUE':\n return 'blue'\n case 'STALE':\n return 'purple'\n default:\n return 'white'\n }\n }\n return ''\n },\n limitsLetter() {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n limitsState = this.$store.state.tlmViewerValues[this.valueId][1]\n } else {\n limitsState = null\n }\n }\n if (limitsState != null) {\n let c = limitsState.charAt(0)\n if (limitsState.endsWith('_LOW')) {\n c = c.toLowerCase()\n }\n return c\n }\n return ''\n },\n },\n created() {\n // If they're not passing us the value and limitsState we have to register\n if (this.value === null || this.limitsState === null) {\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.getType()}`\n\n this.$store.commit('tlmViewerAddItem', this.valueId)\n }\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n methods: {\n getType() {\n var type = 'WITH_UNITS'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n formatValue(value) {\n if (Object.prototype.toString.call(value).slice(8, -1) === 'Array') {\n let result = '['\n for (let i = 0; i < value.length; i++) {\n if (\n Object.prototype.toString.call(value[i]).slice(8, -1) === 'String'\n ) {\n result += '\"' + value[i] + '\"'\n } else {\n result += value[i]\n }\n if (i != value.length - 1) {\n result += ', '\n }\n }\n result += ']'\n return result\n } else if (\n Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n ) {\n return ''\n } else {\n if (this.formatString && value) {\n return sprintf(this.formatString, value)\n } else {\n return '' + value\n }\n }\n },\n showContextMenu(e) {\n e.preventDefault()\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n },\n}\n","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-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Details \")]),_c('v-spacer')],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.packetName)+\" \"+_vm._s(_vm.itemName)+\" \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.details.description))]),_c('v-card-text',[_c('v-container',{attrs:{\"fluid\":\"\"}},[(_vm.type === 'tlm')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Item Values\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Raw Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.rawValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Converted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.convertedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Formatted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.formattedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"With Units Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.unitsValue))])],1)],1)],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Offset\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_offset))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_size))])],1),(_vm.details.array_size)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Array Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.array_size))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Data Type\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.data_type))])],1),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Minimum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.minimum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Maximum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.maximum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Default\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.default))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Format String\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.format_string))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Read Conversion\")]),(_vm.details.read_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.read_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.read_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Write Conversion\")]),(_vm.details.write_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.write_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.write_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Id Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.id_value))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Full\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units_full))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Abbr\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Endianness\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.endianness))])],1),(_vm.details.states)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.states),function(state,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(state.value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.limits)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.limits),function(limit,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_vm._v(\" \"+_vm._s(_vm.formatLimit(limit))+\" \"),_c('v-col')],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.meta)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.meta),function(value,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col',[_vm._v(\"None\")])],1)],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\" width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Details </span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-title>\n {{ targetName }} {{ packetName }} {{ itemName }}\n </v-card-title>\n <v-card-subtitle>{{ details.description }}</v-card-subtitle>\n <v-card-text>\n <v-container fluid>\n <v-row no-gutters v-if=\"type === 'tlm'\">\n <v-col cols=\"3\" class=\"label\">Item Values</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Raw Value</v-col>\n <v-col>{{ rawValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Converted Value</v-col>\n <v-col>{{ convertedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Formatted Value</v-col>\n <v-col>{{ formattedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">With Units Value</v-col>\n <v-col>{{ unitsValue }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Offset</v-col>\n <v-col>{{ details.bit_offset }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Size</v-col>\n <v-col>{{ details.bit_size }}</v-col>\n </v-row>\n <v-row v-if=\"details.array_size\" no-gutters>\n <v-col cols=\"3\" class=\"label\">Array Size</v-col>\n <v-col>{{ details.array_size }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Data Type</v-col>\n <v-col>{{ details.data_type }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Minimum</v-col>\n <v-col>{{ details.minimum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Maximum</v-col>\n <v-col>{{ details.maximum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Default</v-col>\n <v-col>{{ details.default }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Format String</v-col>\n <v-col>{{ details.format_string }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Read Conversion</v-col>\n <v-col v-if=\"details.read_conversion\">\n Class: {{ details.read_conversion.class }}\n <br />\n Params:\n {{ details.read_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Write Conversion</v-col>\n <v-col v-if=\"details.write_conversion\">\n Class: {{ details.write_conversion.class }}\n <br />\n Params:\n {{ details.write_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Id Value</v-col>\n <v-col>{{ details.id_value }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Full</v-col>\n <v-col>{{ details.units_full }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Abbr</v-col>\n <v-col>{{ details.units }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Endianness</v-col>\n <v-col>{{ details.endianness }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.states\">\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(state, key) in details.states\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ state.value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.limits\">\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(limit, key) in details.limits\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n {{ formatLimit(limit) }}\n <v-col></v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.meta\">\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters v-for=\"(value, key) in details.meta\" :key=\"key\">\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row v-else no-gutters>\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col>None</v-col>\n </v-row>\n </v-container>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n type: {\n default: 'tlm',\n validator: function (value) {\n // The value must match one of these strings\n return ['cmd', 'tlm'].indexOf(value) !== -1\n },\n },\n targetName: String,\n packetName: String,\n itemName: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n details: Object,\n updater: null,\n rawValue: null,\n convertedValue: null,\n formattedValue: null,\n unitsValue: null,\n }\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 created() {\n this.api = new CosmosApi()\n },\n beforeDestroy() {\n clearInterval(this.updater)\n this.updater = null\n },\n watch: {\n // Create a watcher on value which is the indicator to display the dialog\n // If value is true we request the details from the server\n // If this is a tlm dialog we setup an interval to get the telemetry values\n value: function (newValue, oldValue) {\n if (newValue) {\n this.requestDetails()\n if (this.type === 'tlm') {\n this.updater = setInterval(() => {\n this.api\n .get_tlm_values([\n `${this.targetName}__${this.packetName}__${this.itemName}__RAW`,\n `${this.targetName}__${this.packetName}__${this.itemName}__CONVERTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__FORMATTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__WITH_UNITS`,\n ])\n .then((values) => {\n this.rawValue = values[0][0]\n this.convertedValue = values[1][0]\n this.formattedValue = values[2][0]\n this.unitsValue = values[3][0]\n })\n }, 1000)\n }\n } else {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n },\n methods: {\n requestDetails() {\n if (this.type === 'tlm') {\n this.api\n .get_item(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n } else {\n this.api\n .get_parameter(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n }\n },\n formatLimit(limit) {\n if (limit.green_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high +\n ' GL/' +\n limit.green_low +\n ' GH/' +\n limit.green_high\n )\n } else if (limit.red_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high\n )\n } else {\n return limit\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-weight: bold;\n text-transform: capitalize;\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!./DetailsDialog.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!./DetailsDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DetailsDialog.vue?vue&type=template&id=3eb9665d&scoped=true&\"\nimport script from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&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 \"3eb9665d\",\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 class=\"value-widget-container\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-text-field\n solo\n dense\n readonly\n single-line\n hide-no-data\n hide-details\n placeholder=\"Value\"\n :value=\"_value\"\n :class=\"valueClass\"\n :style=\"computedStyle\"\n data-test=\"value\"\n @contextmenu=\"showContextMenu\"\n v-bind=\"attrs\"\n v-on=\"on\"\n />\n </template>\n <span>{{ fullName }}</span>\n </v-tooltip>\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n v-model=\"viewDetails\"\n />\n </div>\n</template>\n\n<script>\nimport VWidget from './VWidget'\nimport DetailsDialog from '../../components/DetailsDialog'\nexport default {\n components: {\n DetailsDialog,\n },\n mixins: [VWidget],\n computed: {\n fullName() {\n return (\n this.parameters[0] + ' ' + this.parameters[1] + ' ' + this.parameters[2]\n )\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.value-widget-container {\n min-height: 34px;\n}\n.value ::v-deep div {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n// TODO: These cosmos styles are also defined in assets/stylesheets/layout/_overrides.scss\n// Can they somehow be reused here? We need to force the style down into the input\n.cosmos-green ::v-deep input {\n color: rgb(0, 150, 0);\n}\n.cosmos-yellow ::v-deep input {\n color: rgb(190, 135, 0);\n}\n.cosmos-red ::v-deep input {\n color: red;\n}\n.cosmos-blue ::v-deep input {\n color: rgb(0, 100, 255);\n}\n.cosmos-purple ::v-deep input {\n color: rgb(200, 0, 200);\n}\n.cosmos-black ::v-deep input {\n color: black;\n}\n.cosmos-white ::v-deep input {\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!./ValueWidget.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!./ValueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ValueWidget.vue?vue&type=template&id=d1470e40&scoped=true&\"\nimport script from \"./ValueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ValueWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ValueWidget.vue?vue&type=style&index=0&id=d1470e40&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 \"d1470e40\",\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 ref=\"container\" class=\"d-flex flex-row\">\n <label-widget\n :parameters=\"labelName\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"0\"\n />\n <value-widget\n :parameters=\"parameters\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport LabelWidget from './LabelWidget.vue'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelWidget,\n ValueWidget,\n },\n computed: {\n labelName() {\n // LabelWidget uses index 0 from the parameters prop\n // so create an array with the label text in the first position\n return [this.parameters[2] + ':']\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!./LabelvalueWidget.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!./LabelvalueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvalueWidget.vue?vue&type=template&id=13602869&\"\nimport script from \"./LabelvalueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvalueWidget.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('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:([_vm.defaultStyle, _vm.computedStyle])},[_c('labelvalue-widget',{attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings}}),_c('limitsbar-widget',{attrs:{\"parameters\":_vm.limitsBarParameters,\"settings\":_vm.settings.filter(function (x) { return x[0] == 1; }).map(function (x) { return x.slice(1); }),\"widget-index\":3}})],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',{staticClass:\"limitsbar\",style:([_vm.cssProps, _vm.computedStyle])},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"limitsbar__container\"},[_c('div',{staticClass:\"limitsbar__redlow\"}),_c('div',{staticClass:\"limitsbar__redhigh\"}),_c('div',{staticClass:\"limitsbar__yellowlow\"}),_c('div',{staticClass:\"limitsbar__yellowhigh\"}),_c('div',{staticClass:\"limitsbar__greenlow\"}),_c('div',{staticClass:\"limitsbar__greenhigh\"}),_c('div',{staticClass:\"limitsbar__blue\"}),_c('div',{staticClass:\"limitsbar__line\"}),_c('div',{staticClass:\"limitsbar__arrow\"})])}]\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 class=\"limitsbar\" :style=\"[cssProps, computedStyle]\">\n <div class=\"limitsbar__container\">\n <div class=\"limitsbar__redlow\" />\n <div class=\"limitsbar__redhigh\" />\n <div class=\"limitsbar__yellowlow\" />\n <div class=\"limitsbar__yellowhigh\" />\n <div class=\"limitsbar__greenlow\" />\n <div class=\"limitsbar__greenhigh\" />\n <div class=\"limitsbar__blue\" />\n\n <div class=\"limitsbar__line\" />\n <div class=\"limitsbar__arrow\" />\n </div>\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport { CosmosApi } from '../../services/cosmos-api.js'\n\nconst DEFAULT_LIMITS_SET = 'DEFAULT'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n width: '100%', // users will override with px\n height: 20, // px\n minValue: null,\n maxValue: null,\n scale: 0,\n redLow: 0,\n yellowLow: 0,\n greenLow: 0,\n greenHigh: 0,\n yellowHigh: 0,\n redHigh: 0,\n blue: 0,\n api: null,\n limitsSettings: {\n DEFAULT: [],\n },\n currentLimitsSet: DEFAULT_LIMITS_SET,\n currentSetRefreshInterval: null,\n }\n },\n computed: {\n cssProps: function () {\n const value = this.$store.state.tlmViewerValues[this.valueId][0]\n let limits = this.modifyLimits(\n this.limitsSettings[this.selectedLimitsSet]\n )\n this.calcLimits(limits)\n return {\n '--height': this.height + 'px',\n '--width': this.width,\n '--container-height': this.height - 5 + 'px',\n '--position': this.calcPosition(value, limits) + '%',\n '--redlow-width': this.redLow + '%',\n '--redhigh-width': this.redHigh + '%',\n '--yellowlow-width': this.yellowLow + '%',\n '--yellowhigh-width': this.yellowHigh + '%',\n '--greenlow-width': this.greenLow + '%',\n '--greenhigh-width': this.greenHigh + '%',\n '--blue-width': this.blue + '%',\n }\n },\n selectedLimitsSet: function () {\n return this.limitsSettings.hasOwnProperty(this.currentLimitsSet)\n ? this.currentLimitsSet\n : DEFAULT_LIMITS_SET\n },\n },\n created() {\n this.api = new CosmosApi()\n this.api\n .get_limits(this.parameters[0], this.parameters[1], this.parameters[2])\n .then((data) => {\n this.limitsSettings = data\n })\n this.getCurrentLimitsSet()\n this.currentSetRefreshInterval = setInterval(\n this.getCurrentLimitsSet,\n 60 * 1000\n )\n\n this.settings.forEach((setting) => {\n if (setting[0] === 'MIN_VALUE') {\n this.minValue = parseInt(setting[1])\n }\n if (setting[0] === 'MAX_VALUE') {\n this.maxValue = parseInt(setting[1])\n }\n })\n\n let type = 'CONVERTED'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__${type}`\n\n this.$store.commit('tlmViewerAddItem', this.valueId)\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n clearInterval(this.currentSetRefreshInterval)\n },\n methods: {\n modifyLimits(limitsSettings) {\n // By default the red bars take 10% of the display\n this.redLow = 10\n this.redHigh = 10\n\n // Modify values to respect the user defined minimum\n if (this.minValue) {\n if (limitsSettings[0] <= this.minValue) {\n limitsSettings[0] = this.minValue\n // No red low will be displayed\n this.redLow = 0\n }\n if (limitsSettings[1] <= this.minValue) {\n limitsSettings[1] = this.minValue\n }\n if (limitsSettings[2] <= this.minValue) {\n limitsSettings[2] = this.minValue\n }\n if (limitsSettings[3] <= this.minValue) {\n limitsSettings[3] = this.minValue\n }\n if (limitsSettings.length > 4 && limitsSettings[4] <= this.minValue) {\n limitsSettings[4] = this.minValue\n }\n if (limitsSettings.length > 4 && limitsSettings[5] <= this.minValue) {\n limitsSettings[5] = this.minValue\n }\n }\n if (this.maxValue) {\n if (limitsSettings[0] >= this.maxValue) {\n limitsSettings[0] = this.maxValue\n }\n if (limitsSettings[1] >= this.maxValue) {\n limitsSettings[1] = this.maxValue\n }\n if (limitsSettings[2] >= this.maxValue) {\n limitsSettings[2] = this.maxValue\n }\n if (limitsSettings[3] >= this.maxValue) {\n limitsSettings[3] = this.maxValue\n // No red high will be displayed\n this.redHigh = 0\n }\n if (limitsSettings.length > 4 && limitsSettings[4] >= this.maxValue) {\n limitsSettings[4] = this.maxValue\n }\n if (limitsSettings.length > 4 && limitsSettings[5] >= this.maxValue) {\n limitsSettings[5] = this.maxValue\n }\n }\n // If the red low matches yellow low there is no red low\n if (limitsSettings[0] == limitsSettings[1]) {\n this.redLow = 0\n }\n // If the red high matches yellow high there is no red high\n if (limitsSettings[2] == limitsSettings[3]) {\n this.redHigh = 0\n }\n\n let divisor = 80\n if (this.redLow == 0) {\n divisor += 10\n }\n if (this.redHigh == 0) {\n divisor += 10\n }\n this.scale = (limitsSettings[3] - limitsSettings[0]) / divisor\n\n return limitsSettings\n },\n calcPosition(value, limitsSettings) {\n if (!value || !limitsSettings) {\n return\n }\n let lowValue = limitsSettings[0] - 10 * this.scale\n if (this.minValue && this.minValue == limitsSettings[0]) {\n lowValue = limitsSettings[0]\n }\n let highValue = limitsSettings[3] - 10 * this.scale\n if (this.maxValue && this.maxValue == limitsSettings[3]) {\n highValue = limitsSettings[3]\n }\n\n if (value.raw) {\n if (value.raw === '-Infinity') {\n return 0\n } else {\n // NaN and Infinity\n return 100\n }\n }\n if (value < this.min) {\n return 0\n } else if (value > this.max) {\n return 100\n } else {\n const result = parseInt((value - lowValue) / this.scale)\n if (result > 100) {\n return 100\n } else if (result < 0) {\n return 0\n } else {\n return result\n }\n }\n },\n calcLimits(limitsSettings) {\n if (!limitsSettings) {\n return\n }\n\n this.yellowLow = Math.round(\n (limitsSettings[1] - limitsSettings[0]) / this.scale\n )\n this.yellowHigh = Math.round(\n (limitsSettings[3] - limitsSettings[2]) / this.scale\n )\n if (limitsSettings.length > 4) {\n this.greenLow = Math.round(\n (limitsSettings[4] - limitsSettings[1]) / this.scale\n )\n this.greenHigh = Math.round(\n (limitsSettings[2] - limitsSettings[5]) / this.scale\n )\n this.blue = Math.round(\n 100 -\n this.redLow -\n this.yellowLow -\n this.greenLow -\n this.greenHigh -\n this.yellowHigh -\n this.redHigh\n )\n } else {\n this.greenLow = Math.round(\n 100 - this.redLow - this.yellowLow - this.yellowHigh - this.redHigh\n )\n this.greenHigh = 0\n this.blue = 0\n }\n },\n getCurrentLimitsSet: function () {\n this.api.get_limits_set().then((result) => {\n this.currentLimitsSet = result\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.limitsbar {\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 5px;\n width: var(--width);\n}\n.limitsbar__container {\n position: relative;\n flex: 1;\n height: var(--container-height);\n border: 1px solid black;\n background-color: white;\n}\n.limitsbar__redlow {\n position: absolute;\n top: -1px;\n left: 0px;\n width: var(--redlow-width);\n height: var(--container-height);\n background-color: red;\n}\n.limitsbar__redhigh {\n position: absolute;\n top: -1px;\n right: 0px;\n width: var(--redhigh-width);\n height: var(--container-height);\n background-color: red;\n}\n.limitsbar__yellowlow {\n position: absolute;\n top: -1px;\n left: var(--redlow-width);\n width: var(--yellowlow-width);\n height: var(--container-height);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__yellowhigh {\n position: absolute;\n top: -1px;\n right: var(--redhigh-width);\n width: var(--yellowhigh-width);\n height: var(--container-height);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__greenlow {\n position: absolute;\n top: -1px;\n left: calc(var(--redlow-width) + var(--yellowlow-width));\n width: var(--greenlow-width);\n height: var(--container-height);\n background-color: green;\n}\n.limitsbar__greenhigh {\n position: absolute;\n top: -1px;\n right: calc(var(--redhigh-width) + var(--yellowhigh-width));\n width: var(--greenhigh-width);\n height: var(--container-height);\n background-color: green;\n}\n.limitsbar__blue {\n position: absolute;\n top: -1px;\n left: calc(\n var(--redlow-width) + var(--yellowlow-width) + var(--greenlow-width)\n );\n width: var(--blue-width);\n height: var(--container-height);\n background-color: blue;\n}\n.limitsbar__line {\n position: absolute;\n left: var(--position);\n width: 1px;\n height: var(--container-height);\n background-color: rgb(128, 128, 128);\n}\n$arrow-size: 5px;\n.limitsbar__arrow {\n position: absolute;\n top: -$arrow-size;\n left: var(--position);\n width: 0;\n height: 0;\n transform: translateX(-$arrow-size); // Transform so it sits over the line\n border-left: $arrow-size solid transparent;\n border-right: $arrow-size solid transparent;\n border-top: $arrow-size solid rgb(128, 128, 128);\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!./LimitsbarWidget.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!./LimitsbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsbarWidget.vue?vue&type=template&id=4d506ea0&scoped=true&\"\nimport script from \"./LimitsbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsbarWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitsbarWidget.vue?vue&type=style&index=0&id=4d506ea0&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 \"4d506ea0\",\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 ref=\"container\"\n class=\"d-flex flex-row\"\n :style=\"[defaultStyle, computedStyle]\"\n >\n <labelvalue-widget :parameters=\"parameters\" :settings=\"settings\" />\n <limitsbar-widget\n :parameters=\"limitsBarParameters\"\n :settings=\"settings.filter((x) => x[0] == 1).map((x) => x.slice(1))\"\n :widget-index=\"3\"\n />\n </div>\n</template>\n\n<script>\nimport LabelvalueWidget from './LabelvalueWidget.vue'\nimport LimitsbarWidget from './LimitsbarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelvalueWidget,\n LimitsbarWidget,\n },\n data() {\n return {\n overallWidth: '300px',\n }\n },\n created() {\n // Determine if any sub-setting widths have been given\n // If so calculate the overall width, if not the default will be used\n let width = 0\n this.settings.forEach((setting) => {\n if (setting[1] === 'WIDTH') {\n width += parseInt(setting[2])\n }\n })\n if (width != 0) {\n this.overallWidth = width + 'px'\n }\n },\n computed: {\n limitsBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'CONVERTED',\n ]\n },\n defaultStyle() {\n return {\n width: this.overallWidth,\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!./LabelvaluelimitsbarWidget.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!./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvaluelimitsbarWidget.vue?vue&type=template&id=272e68bc&\"\nimport script from \"./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvaluelimitsbarWidget.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 <v-container>\n <v-row no-gutters>\n <v-text-field\n width=\"200\"\n dense\n outlined\n readonly\n label=\"Overall Limits State\"\n :value=\"overallStateFormatted\"\n :class=\"textFieldClass\"\n data-test=\"overall-state\"\n />\n </v-row>\n\n <div v-for=\"(item, index) in items\" :key=\"item.key\">\n <v-row data-test=\"limits-row\" class=\"my-0\">\n <v-col class=\"py-1\">\n <labelvaluelimitsbar-widget\n v-if=\"item.limits\"\n :parameters=\"item.parameters\"\n :settings=\"[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'],\n ['2', 'WIDTH', '200'],\n ]\"\n />\n <labelvalue-widget\n v-else\n :parameters=\"item.parameters\"\n :settings=\"[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'],\n ]\"\n />\n </v-col>\n <v-col cols=\"2\" class=\"py-1\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n class=\"mr-2\"\n @click=\"ignorePacket(item.key)\"\n v-bind=\"attrs\"\n v-on=\"on\"\n >\n <v-icon> mdi-close-circle-multiple </v-icon>\n </v-btn>\n </template>\n <span>Ignore Entire Packet</span>\n </v-tooltip>\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n class=\"mr-2\"\n @click=\"ignoreItem(item.key)\"\n v-bind=\"attrs\"\n v-on=\"on\"\n >\n <v-icon> mdi-close-circle </v-icon>\n </v-btn>\n </template>\n <span>Ignore Item</span>\n </v-tooltip>\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n class=\"mr-2\"\n @click=\"removeItem(item.key)\"\n v-bind=\"attrs\"\n v-on=\"on\"\n >\n <v-icon> mdi-eye-off </v-icon>\n </v-btn>\n </template>\n <span>Temporarily Hide Item</span>\n </v-tooltip>\n </v-col>\n </v-row>\n <v-divider v-if=\"index < items.length - 1\" :key=\"index\" />\n </div>\n </v-container>\n <v-dialog v-model=\"ignoredItemsDialog\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span>Ignored Items</span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"my-2\">\n <div v-for=\"(item, index) in ignoredFormatted\" :key=\"index\">\n <v-row class=\"ma-1\">\n <span class=\"font-weight-black\"> {{ item }} </span>\n <v-spacer />\n <v-btn\n @click=\"restoreItem(item, index)\"\n small\n icon\n :data-test=\"`remove-ignore-${index}`\"\n >\n <v-icon> mdi-delete </v-icon>\n </v-btn>\n </v-row>\n <v-divider\n v-if=\"index < ignoredFormatted.length - 1\"\n :key=\"index\"\n />\n </div>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n @click=\"ignoredItemsDialog = false\"\n class=\"mx-2\"\n color=\"primary\"\n >\n Ok\n </v-btn>\n </v-row>\n <v-divider v-if=\"index < items.length - 1\" :key=\"index\" />\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport LabelvalueWidget from '@cosmosc2/tool-common/src/components/widgets/LabelvalueWidget'\nimport LabelvaluelimitsbarWidget from '@cosmosc2/tool-common/src/components/widgets/LabelvaluelimitsbarWidget'\n\nexport default {\n components: {\n LabelvalueWidget,\n LabelvaluelimitsbarWidget,\n },\n props: {\n value: {\n type: Array,\n default: () => [],\n },\n },\n data() {\n return {\n api: null,\n ignored: [],\n ignoredItemsDialog: false,\n overallState: 'GREEN',\n items: [],\n itemList: [],\n }\n },\n computed: {\n textFieldClass() {\n if (this.overallState) {\n return `textfield-${this.overallState.toLowerCase()}`\n } else {\n return ''\n }\n },\n overallStateFormatted() {\n if (this.ignored.length === 0) {\n return this.overallState\n } else {\n return `${this.overallState} (Some items ignored)`\n }\n },\n ignoredFormatted() {\n return this.ignored.map((x) => x.split('__').join(' '))\n },\n },\n created() {\n this.api = new CosmosApi()\n for (let item of this.value) {\n if (item.match(/.+__.+__.+/)) {\n // TARGET__PACKET__ITEM\n this.ignoreItem(item, true)\n } else {\n // TARGET__PACKET\n this.ignorePacket(item, true)\n }\n }\n this.updateOutOfLimits()\n },\n mounted() {\n this.updater = setInterval(() => {\n this.update()\n }, 1000)\n },\n destroyed() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n methods: {\n updateOutOfLimits() {\n this.api.get_out_of_limits().then((items) => {\n for (const item of items) {\n let itemName = item.join('__')\n // Skip ignored and existing items\n if (\n this.itemList.includes(itemName) ||\n this.ignored.find((ignored) => itemName.includes(ignored))\n ) {\n continue\n }\n\n this.itemList.push(itemName)\n let itemInfo = {\n key: item.slice(0, 3).join('__'),\n parameters: item.slice(0, 3),\n }\n if (item[3].includes('YELLOW') && this.overallState !== 'RED') {\n this.overallState = 'YELLOW'\n }\n if (item[3].includes('RED')) {\n this.overallState = 'RED'\n }\n if (item[3] == 'YELLOW' || item[3] == 'RED') {\n itemInfo['limits'] = false\n } else {\n itemInfo['limits'] = true\n }\n this.items.push(itemInfo)\n }\n this.calcOverallState()\n })\n },\n calcOverallState() {\n let overall = 'GREEN'\n for (let item of this.itemList) {\n if (this.ignored.find((ignored) => item.includes(ignored))) {\n continue\n }\n\n if (item.includes('YELLOW') && overall !== 'RED') {\n overall = 'YELLOW'\n }\n if (item.includes('RED')) {\n overall = 'RED'\n break\n }\n }\n this.overallState = overall\n },\n ignorePacket(item, noUpdate) {\n let [target_name, packet_name, item_name] = item.split('__')\n let newIgnored = `${target_name}__${packet_name}`\n this.ignored.push(newIgnored)\n noUpdate || this.updateIgnored()\n\n while (true) {\n let index = this.itemList.findIndex((item) => item.includes(newIgnored))\n if (index === -1) {\n break\n } else {\n let underIndex = this.itemList[index].lastIndexOf('__')\n this.removeItem(this.itemList[index].substring(0, underIndex))\n }\n }\n this.calcOverallState()\n },\n ignoreItem(item, noUpdate) {\n this.ignored.push(item)\n noUpdate || this.updateIgnored()\n this.removeItem(item)\n this.calcOverallState()\n },\n restoreItem(item, index) {\n this.ignored.splice(index, 1)\n this.updateIgnored()\n this.updateOutOfLimits()\n },\n removeItem(item) {\n const index = this.itemList.findIndex((arrayItem) =>\n arrayItem.includes(item)\n )\n this.items.splice(index, 1)\n this.itemList.splice(index, 1)\n },\n updateIgnored() {\n this.$emit('input', this.ignored)\n },\n update() {\n if (this.$store.state.tlmViewerItems.length !== 0) {\n this.api\n .get_tlm_values(this.$store.state.tlmViewerItems)\n .then((data) => {\n this.$store.commit('tlmViewerUpdateValues', data)\n })\n }\n },\n handleMessages(messages) {\n for (let message of messages) {\n // We only want to handle LIMITS_CHANGE messages\n // NOTE: The channel also sends LIMITS_SETTINGS and LIMITS_SET messages\n if (message.type != 'LIMITS_CHANGE') {\n continue\n }\n\n let itemName = `${message.target_name}__${message.packet_name}__${message.item_name}`\n const index = this.itemList.findIndex((arrayItem) =>\n arrayItem.includes(itemName)\n )\n // If we find an existing item we update the state and re-calc overall state\n if (index !== -1) {\n this.itemList[index] = `${itemName}__${message.new_limits_state}`\n this.calcOverallState()\n continue\n }\n // Skip ignored items\n if (this.ignored.find((ignored) => itemName.includes(ignored))) {\n continue\n }\n // Only process items who have gone out of limits\n if (\n message.new_limits_state &&\n !(\n message.new_limits_state.includes('YELLOW') ||\n message.new_limits_state.includes('RED')\n )\n ) {\n continue\n }\n let itemInfo = {\n key: itemName,\n parameters: [\n message.target_name,\n message.packet_name,\n message.item_name,\n ],\n }\n if (\n message.new_limits_state == 'YELLOW' ||\n message.new_limits_state == 'RED'\n ) {\n itemInfo['limits'] = false\n } else {\n itemInfo['limits'] = true\n }\n this.itemList.push(`${itemName}__${message.new_limits_state}`)\n this.items.push(itemInfo)\n this.calcOverallState()\n }\n },\n\n // Menu options\n showIgnored() {\n this.ignoredItemsDialog = true\n },\n },\n}\n</script>\n\n<style scoped>\n/* TODO: Color the border */\n.textfield-green >>> .v-text-field__slot input,\n.textfield-green >>> .v-text-field__slot label {\n color: green;\n}\n.textfield-yellow >>> .v-text-field__slot input,\n.textfield-yellow >>> .v-text-field__slot label {\n color: yellow;\n}\n.textfield-red >>> .v-text-field__slot input,\n.textfield-red >>> .v-text-field__slot label {\n color: red;\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!./LimitsControl.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!./LimitsControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsControl.vue?vue&type=template&id=62d2bb56&scoped=true&\"\nimport script from \"./LimitsControl.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsControl.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitsControl.vue?vue&type=style&index=0&id=62d2bb56&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 \"62d2bb56\",\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-card',{staticClass:\"card-height\"},[_c('v-card-title',[_vm._v(\" Limits Events \"),_c('v-spacer'),_c('v-text-field',{attrs:{\"append-icon\":\"mdi-magnify\",\"label\":\"Search\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.data,\"search\":_vm.search,\"calculate-widths\":\"\",\"disable-pagination\":\"\",\"hide-default-footer\":\"\",\"multi-sort\":\"\",\"dense\":\"\",\"height\":_vm.calcTableHeight()},scopedSlots:_vm._u([{key:\"item.time_nsec\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',[_vm._v(_vm._s(_vm.formatDate(item.time_nsec)))])]}},{key:\"item.message\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',{class:_vm.getColorClass(item.message)},[_vm._v(_vm._s(item.message))])]}}])})],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-card class=\"card-height\">\n <v-card-title>\n Limits Events\n <v-spacer />\n <v-text-field\n v-model=\"search\"\n append-icon=\"mdi-magnify\"\n label=\"Search\"\n single-line\n hide-details\n />\n </v-card-title>\n <v-data-table\n :headers=\"headers\"\n :items=\"data\"\n :search=\"search\"\n calculate-widths\n disable-pagination\n hide-default-footer\n multi-sort\n dense\n :height=\"calcTableHeight()\"\n >\n <template v-slot:item.time_nsec=\"{ item }\">\n <span>{{ formatDate(item.time_nsec) }}</span>\n </template>\n <template v-slot:item.message=\"{ item }\">\n <span :class=\"getColorClass(item.message)\">{{ item.message }}</span>\n </template>\n </v-data-table>\n </v-card>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\n\nexport default {\n props: {\n history_count: {\n type: Number,\n default: 1000,\n },\n },\n data() {\n return {\n data: [],\n search: '',\n headers: [\n { text: 'Time', value: 'time_nsec', width: 250 },\n { text: 'Message', value: 'message' },\n ],\n }\n },\n methods: {\n handleMessages(messages) {\n for (let i = 0; i < messages.length; i++) {\n this.data.unshift(messages[i])\n }\n if (this.data.length > this.history_count) {\n this.data.length = this.history_count\n }\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1_000_000),\n 'yyyy-MM-dd HH:mm:ss.SSS'\n )\n },\n getColorClass(message) {\n if (message.includes('GREEN')) {\n return 'cosmos-green'\n } else if (message.includes('YELLOW')) {\n return 'cosmos-yellow'\n } else if (message.includes('RED')) {\n return 'cosmos-red'\n } else if (message.includes('BLUE')) {\n return 'cosmos-blue'\n }\n if (this.$vuetify.theme.dark) {\n return 'cosmos-white'\n } else {\n return 'cosmos-black'\n }\n },\n calcTableHeight() {\n // TODO: 250 is a magic number but seems to work well\n return window.innerHeight - 250\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.card-height {\n // TODO: 150 is a magic number but seems to work well\n // Can this be calculated by the size of the table search box?\n height: calc(100vh - 150px);\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!./LimitsEvents.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!./LimitsEvents.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsEvents.vue?vue&type=template&id=e10911ac&scoped=true&\"\nimport script from \"./LimitsEvents.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsEvents.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitsEvents.vue?vue&type=style&index=0&id=e10911ac&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 \"e10911ac\",\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","/*\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","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","<!--\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 <v-card>\n <v-tabs v-model=\"curTab\" fixed-tabs>\n <v-tab v-for=\"(tab, index) in tabs\" :key=\"index\">{{ tab }}</v-tab>\n </v-tabs>\n <v-tabs-items v-model=\"curTab\">\n <v-tab-item eager>\n <keep-alive>\n <limits-control ref=\"control\" v-model=\"ignored\" :key=\"renderKey\" />\n </keep-alive>\n </v-tab-item>\n <v-tab-item eager>\n <keep-alive>\n <limits-events ref=\"events\" />\n </keep-alive>\n </v-tab-item>\n </v-tabs-items>\n </v-card>\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=\"openConfig\"\n v-model=\"openConfig\"\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=\"saveConfig\"\n v-model=\"saveConfig\"\n :tool=\"toolName\"\n @success=\"saveConfiguration\"\n />\n </div>\n</template>\n\n<script>\nimport LimitsControl from '@/tools/LimitsMonitor/LimitsControl'\nimport LimitsEvents from '@/tools/LimitsMonitor/LimitsEvents'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\nimport Cable from '@cosmosc2/tool-common/src/services/cable.js'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport OpenConfigDialog from '@cosmosc2/tool-common/src/components/OpenConfigDialog'\nimport SaveConfigDialog from '@cosmosc2/tool-common/src/components/SaveConfigDialog'\n\nexport default {\n components: {\n LimitsControl,\n LimitsEvents,\n TopBar,\n OpenConfigDialog,\n SaveConfigDialog,\n },\n data() {\n return {\n title: 'Limits Monitor',\n toolName: 'limits-monitor',\n curTab: null,\n tabs: ['Limits', 'Log'],\n api: new CosmosApi(),\n cable: new Cable(),\n subscription: null,\n renderKey: 0,\n ignored: [],\n openConfig: false,\n saveConfig: false,\n menus: [\n {\n label: 'File',\n items: [\n {\n label: 'Show Ignored',\n command: () => {\n this.$refs.control.showIgnored()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Open Configuration',\n command: () => {\n this.openConfig = true\n },\n },\n {\n label: 'Save Configuration',\n command: () => {\n this.saveConfig = true\n },\n },\n ],\n },\n ],\n }\n },\n created() {\n this.cable\n .createSubscription(\n 'LimitsEventsChannel',\n localStorage.scope,\n {\n received: (data) => {\n const parsed = JSON.parse(data)\n this.$refs.control.handleMessages(parsed)\n this.$refs.events.handleMessages(parsed)\n },\n },\n {\n history_count: 1000,\n }\n )\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n destroyed() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n },\n methods: {\n async openConfiguration(name) {\n const response = await this.api.load_config(this.toolName, name)\n this.ignored = JSON.parse(response)\n this.renderKey++ // Trigger re-render\n },\n saveConfiguration(name) {\n this.api.save_config(this.toolName, name, JSON.stringify(this.ignored))\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!./LimitsMonitor.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!./LimitsMonitor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsMonitor.vue?vue&type=template&id=558b68e6&\"\nimport script from \"./LimitsMonitor.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsMonitor.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","// 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, \".label[data-v-3eb9665d]{font-weight:700;text-transform:capitalize}\", \"\"]);\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, \".label[data-v-1ff40000]{font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);font-style:var(--font-style)}\", \"\"]);\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, \".textfield-green[data-v-62d2bb56] .v-text-field__slot input,.textfield-green[data-v-62d2bb56] .v-text-field__slot label{color:green}.textfield-yellow[data-v-62d2bb56] .v-text-field__slot input,.textfield-yellow[data-v-62d2bb56] .v-text-field__slot label{color:#ff0}.textfield-red[data-v-62d2bb56] .v-text-field__slot input,.textfield-red[data-v-62d2bb56] .v-text-field__slot label{color:red}\", \"\"]);\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, \".limitsbar[data-v-4d506ea0]{cursor:default;display:flex;justify-content:center;align-items:center;padding:5px;width:var(--width)}.limitsbar__container[data-v-4d506ea0]{position:relative;flex:1;height:var(--container-height);border:1px solid #000;background-color:#fff}.limitsbar__redlow[data-v-4d506ea0]{left:0;width:var(--redlow-width)}.limitsbar__redhigh[data-v-4d506ea0],.limitsbar__redlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:red}.limitsbar__redhigh[data-v-4d506ea0]{right:0;width:var(--redhigh-width)}.limitsbar__yellowlow[data-v-4d506ea0]{left:var(--redlow-width);width:var(--yellowlow-width)}.limitsbar__yellowhigh[data-v-4d506ea0],.limitsbar__yellowlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:#ffdc00}.limitsbar__yellowhigh[data-v-4d506ea0]{right:var(--redhigh-width);width:var(--yellowhigh-width)}.limitsbar__greenlow[data-v-4d506ea0]{left:calc(var(--redlow-width) + var(--yellowlow-width));width:var(--greenlow-width)}.limitsbar__greenhigh[data-v-4d506ea0],.limitsbar__greenlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:green}.limitsbar__greenhigh[data-v-4d506ea0]{right:calc(var(--redhigh-width) + var(--yellowhigh-width));width:var(--greenhigh-width)}.limitsbar__blue[data-v-4d506ea0]{top:-1px;left:calc(var(--redlow-width) + var(--yellowlow-width) + var(--greenlow-width));width:var(--blue-width);background-color:blue}.limitsbar__blue[data-v-4d506ea0],.limitsbar__line[data-v-4d506ea0]{position:absolute;height:var(--container-height)}.limitsbar__line[data-v-4d506ea0]{left:var(--position);width:1px;background-color:gray}.limitsbar__arrow[data-v-4d506ea0]{position:absolute;top:-5px;left:var(--position);width:0;height:0;-webkit-transform:translateX(-5px);transform:translateX(-5px);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid gray}\", \"\"]);\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, \".value-widget-container[data-v-d1470e40]{min-height:34px}.value[data-v-d1470e40] div{min-height:24px!important;display:flex!important;align-items:center!important}.cosmos-green[data-v-d1470e40] input{color:#009600}.cosmos-yellow[data-v-d1470e40] input{color:#be8700}.cosmos-red[data-v-d1470e40] input{color:red}.cosmos-blue[data-v-d1470e40] input{color:#0064ff}.cosmos-purple[data-v-d1470e40] input{color:#c800c8}.cosmos-black[data-v-d1470e40] input{color:#000}.cosmos-white[data-v-d1470e40] input{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, \".card-height[data-v-e10911ac]{height:calc(100vh - 150px)}\", \"\"]);\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!./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&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(\"7c1e213a\", 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-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!./LabelWidget.vue?vue&type=style&index=0&id=1ff40000&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(\"27aab41a\", 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!./LimitsControl.vue?vue&type=style&index=0&id=62d2bb56&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(\"9ea19714\", 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!./LimitsbarWidget.vue?vue&type=style&index=0&id=4d506ea0&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(\"fbeb2792\", 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!./ValueWidget.vue?vue&type=style&index=0&id=d1470e40&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(\"10f1e48f\", 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!./LimitsEvents.vue?vue&type=style&index=0&id=e10911ac&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(\"0ccf8824\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","menus","title","model","value","callback","$$v","curTab","expression","_l","tab","index","key","_v","_s","renderKey","ref","ignored","toolName","on","openConfiguration","openConfig","_e","saveConfiguration","saveConfig","staticRenderFns","class","textFieldClass","overallStateFormatted","item","staticClass","parameters","scopedSlots","_u","fn","_g","_b","$event","ignorePacket","ignoreItem","removeItem","items","length","ignoredItemsDialog","restoreItem","ignoredFormatted","vueInstance","Vue","axiosInstance","axios","baseURL","location","origin","timeout","params","interceptors","response","use","error","status","localStorage","cosmosToken","CosmosAuth","login","href","body","statusText","config","data","message","exception","$notify","serious","CosmosApi","method","kwparams","updateToken","defaultMinValidity","id","scope","jsonrpc","keyword_params","headers","Authorization","result","err","Error","name","request","val","json_class","raw","NaN","Infinity","Number","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","target","packet","log_writer_name","limits_set","target_name","packet_name","value_type","type","len","converted","i","decode_cosmos_type","item_name","command_name","parameter_name","param_list","Object","prototype","hasOwnProperty","call","encode_cosmos_type","undefined","_cmd","tool","array","style","labelName","settings","props","widgetIndex","default","Array","computed","computedStyle","forEach","setting","parseInt","slice","toLowerCase","getColor","methods","cssProps","labelText","mixins","fontFamily","fontSize","fontWeight","fontStyle","size","created","component","valueClass","_value","showContextMenu","fullName","x","y","contextMenuShown","stopPropagation","action","apply","arguments","viewDetails","Widget","limitsState","String","formatString","valueId","colorBlind","contextMenuOptions","window","open","$store","state","tlmViewerValues","formatted","formatValue","colorblindMode","limitsLetter","limitsColor","c","charAt","endsWith","getType","commit","destroyed","toString","sprintf","e","preventDefault","clientX","clientY","$nextTick","show","targetName","packetName","itemName","details","description","rawValue","convertedValue","formattedValue","unitsValue","bit_offset","bit_size","array_size","data_type","minimum","maximum","format_string","read_conversion","write_conversion","id_value","units_full","units","endianness","limit","formatLimit","validator","updater","get","set","beforeDestroy","clearInterval","watch","get_tlm_values","then","requestDetails","get_item","get_parameter","components","DetailsDialog","LabelWidget","ValueWidget","defaultStyle","limitsBarParameters","filter","map","_m","width","height","minValue","maxValue","scale","redLow","yellowLow","greenLow","greenHigh","yellowHigh","redHigh","blue","api","limitsSettings","DEFAULT","currentLimitsSet","currentSetRefreshInterval","selectedLimitsSet","DEFAULT_LIMITS_SET","get_limits","modifyLimits","divisor","calcPosition","lowValue","highValue","calcLimits","getCurrentLimitsSet","LabelvalueWidget","LimitsbarWidget","overallWidth","LabelvaluelimitsbarWidget","overallState","itemList","mounted","updateOutOfLimits","itemInfo","calcOverallState","overall","noUpdate","updateIgnored","update","handleMessages","messages","showIgnored","search","calcTableHeight","formatDate","time_nsec","getColorClass","history_count","text","nanoSecs","toDate","menu","formatDT","domProps","label","radioGroup","option","j","disabled","command","checked","icon","radio","checkbox","Cable","url","_cable","ActionCable","disconnect","channel","callbacks","additionalOptions","subscriptions","create","token","indexOf","_k","keyCode","cancel","success","configs","itemSelected","slot","select","deleteConfig","directives","rawName","align","sortable","selectedItem","list_configs","configId","catch","confirm","okText","cancelText","configName","LimitsControl","LimitsEvents","TopBar","OpenConfigDialog","SaveConfigDialog","tabs","cable","subscription","divider","createSubscription","received","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","add"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"js/508.js","mappings":"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","sources":["webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsMonitor.vue?d0ab","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?0899","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?cd0d","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/Widget.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?f72a","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?1e32","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?800c","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?26e5","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/VWidget.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?88c8","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?7eb0","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?fdbd","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?5139","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?0a72","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?4fd8","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvalueWidget.vue?19fc","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?00b3","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?2de4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?584c","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?56ec","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?cc59","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelvaluelimitsbarWidget.vue?495e","webpack://@cosmosc2/tool-limitsmonitor/src/tools/LimitsMonitor/LimitsControl.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?24af","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?0d0a","webpack://@cosmosc2/tool-limitsmonitor/src/tools/LimitsMonitor/LimitsEvents.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?ced5","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?228d","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/services/cable.js","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?d129","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?b667","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/OpenConfigDialog.vue?6158","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?36c2","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?e52f","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/SaveConfigDialog.vue?65b7","webpack://@cosmosc2/tool-limitsmonitor/src/tools/LimitsMonitor/LimitsMonitor.vue","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsMonitor.vue?0b10","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsMonitor.vue","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?82b3","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?6b70","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?8476","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?cdf2","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?9001","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?a2c4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/DetailsDialog.vue?dfc1","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/TopBar.vue?5429","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LabelWidget.vue?b8ed","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsControl.vue?fee4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/LimitsbarWidget.vue?30f4","webpack://@cosmosc2/tool-limitsmonitor/../cosmosc2-tool-common/src/components/widgets/ValueWidget.vue?2dbb","webpack://@cosmosc2/tool-limitsmonitor/./src/tools/LimitsMonitor/LimitsEvents.vue?dd36"],"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('v-card',[_c('v-tabs',{attrs:{\"fixed-tabs\":\"\"},model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.tabs),function(tab,index){return _c('v-tab',{key:index},[_vm._v(_vm._s(tab))])}),1),_c('v-tabs-items',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},[_c('v-tab-item',{attrs:{\"eager\":\"\"}},[_c('keep-alive',[_c('limits-control',{key:_vm.renderKey,ref:\"control\",model:{value:(_vm.ignored),callback:function ($$v) {_vm.ignored=$$v},expression:\"ignored\"}})],1)],1),_c('v-tab-item',{attrs:{\"eager\":\"\"}},[_c('keep-alive',[_c('limits-events',{ref:\"events\"})],1)],1)],1)],1),(_vm.openConfig)?_c('open-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":_vm.openConfiguration},model:{value:(_vm.openConfig),callback:function ($$v) {_vm.openConfig=$$v},expression:\"openConfig\"}}):_vm._e(),(_vm.saveConfig)?_c('save-config-dialog',{attrs:{\"tool\":_vm.toolName},on:{\"success\":_vm.saveConfiguration},model:{value:(_vm.saveConfig),callback:function ($$v) {_vm.saveConfig=$$v},expression:\"saveConfig\"}}):_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-container',[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-text-field',{class:_vm.textFieldClass,attrs:{\"width\":\"200\",\"dense\":\"\",\"outlined\":\"\",\"readonly\":\"\",\"label\":\"Overall Limits State\",\"value\":_vm.overallStateFormatted,\"data-test\":\"overall-state\"}})],1),_vm._l((_vm.items),function(item,index){return _c('div',{key:item.key},[_c('v-row',{staticClass:\"my-0\",attrs:{\"data-test\":\"limits-row\"}},[_c('v-col',{staticClass:\"py-1\"},[(item.limits)?_c('labelvaluelimitsbar-widget',{attrs:{\"parameters\":item.parameters,\"settings\":[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'],\n ['2', 'WIDTH', '200'] ]}}):_c('labelvalue-widget',{attrs:{\"parameters\":item.parameters,\"settings\":[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'] ]}})],1),_c('v-col',{staticClass:\"py-1\",attrs:{\"cols\":\"2\"}},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mr-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.ignorePacket(item.key)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\" mdi-close-circle-multiple \")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Ignore Entire Packet\")])]),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mr-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.ignoreItem(item.key)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\" mdi-close-circle \")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Ignore Item\")])]),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mr-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.removeItem(item.key)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\" mdi-eye-off \")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Temporarily Hide Item\")])])],1)],1),(index < _vm.items.length - 1)?_c('v-divider',{key:index}):_vm._e()],1)})],2),_c('v-dialog',{attrs:{\"max-width\":\"600\"},model:{value:(_vm.ignoredItemsDialog),callback:function ($$v) {_vm.ignoredItemsDialog=$$v},expression:\"ignoredItemsDialog\"}},[_c('v-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\"Ignored Items\")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"my-2\"},[_vm._l((_vm.ignoredFormatted),function(item,index){return _c('div',{key:index},[_c('v-row',{staticClass:\"ma-1\"},[_c('span',{staticClass:\"font-weight-black\"},[_vm._v(\" \"+_vm._s(item)+\" \")]),_c('v-spacer'),_c('v-btn',{attrs:{\"small\":\"\",\"icon\":\"\",\"data-test\":(\"remove-ignore-\" + index)},on:{\"click\":function($event){return _vm.restoreItem(item, index)}}},[_c('v-icon',[_vm._v(\" mdi-delete \")])],1)],1),(index < _vm.ignoredFormatted.length - 1)?_c('v-divider',{key:index}):_vm._e()],1)}),_c('v-row',{staticClass:\"mt-2\"},[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"color\":\"primary\"},on:{\"click\":function($event){_vm.ignoredItemsDialog = false}}},[_vm._v(\" Ok \")])],1),(_vm.index < _vm.items.length - 1)?_c('v-divider',{key:_vm.index}):_vm._e()],2)])],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\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?.statusText) {\n body += `${error.response.statusText} `\n }\n if (error.response?.config?.data) {\n body += `${error.response.config.data} `\n }\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 get_all_telemetry_list(target_name) {\n return this.exec('get_all_telemetry_list', [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_all_commands_list(target_name) {\n return this.exec('get_all_commands_list', [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',{ref:\"container\",staticClass:\"d-flex flex-row\"},[_c('label-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.labelName,\"settings\":_vm.settings,\"widget-index\":0}}),_c('value-widget',{style:(_vm.computedStyle),attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings,\"widget-index\":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\nexport default {\n props: {\n widgetIndex: {\n type: Number,\n default: null,\n },\n parameters: {\n type: Array,\n default: () => [],\n },\n settings: {\n type: Array,\n default: () => [],\n },\n },\n computed: {\n computedStyle() {\n let style = {}\n this.settings.forEach((setting) => {\n const index = parseInt(setting[0])\n if (this.widgetIndex !== null) {\n if (this.widgetIndex === index) {\n setting = setting.slice(1)\n } else {\n return\n }\n }\n switch (setting[0]) {\n case 'TEXTALIGN':\n style['text-align'] = setting[1].toLowerCase()\n break\n case 'PADDING':\n style['padding'] = setting[1] + 'px !important'\n break\n case 'MARGIN':\n style['margin'] = setting[1] + 'px !important'\n break\n case 'BACKCOLOR':\n style['background-color'] = this.getColor(setting.slice(1))\n break\n case 'TEXTCOLOR':\n style['color'] = this.getColor(setting.slice(1))\n break\n case 'BORDERCOLOR':\n style['border-width'] = '1px'\n style['border-style'] = 'solid'\n style['border-color'] = this.getColor(setting.slice(1))\n break\n case 'WIDTH':\n style['width'] = setting[1] + 'px !important'\n break\n case 'HEIGHT':\n style['height'] = setting[1] + 'px !important'\n break\n case 'RAW':\n style[setting[1].toLowerCase()] = setting[2]\n break\n }\n })\n return style\n },\n },\n methods: {\n // Expects an array, can either be a single color or 3 rgb values\n getColor(setting) {\n switch (setting.length) {\n case 1:\n return setting[0].toLowerCase()\n case 3:\n return `rgb(${setting[0]},${setting[1]},${setting[2]})`\n }\n },\n },\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"pa-1 mt-1 label\",style:([_vm.cssProps, _vm.computedStyle]),attrs:{\"data-test\":\"label\"}},[_vm._v(\" \"+_vm._s(_vm.labelText)+\" \")])}\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 <span\n data-test=\"label\"\n class=\"pa-1 mt-1 label\"\n :style=\"[cssProps, computedStyle]\"\n >\n {{ labelText }}\n </span>\n</template>\n\n<script>\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n fontFamily: null,\n fontSize: null,\n fontWeight: 'normal',\n fontStyle: 'normal',\n }\n },\n computed: {\n labelText() {\n return this.parameters[0]\n },\n cssProps() {\n var size = null\n if (this.fontSize) {\n size = this.fontSize + 'px'\n }\n return {\n '--font-family': this.fontFamily,\n '--font-size': size,\n '--font-weight': this.fontWeight,\n '--font-style': this.fontStyle,\n }\n },\n },\n created() {\n if (this.parameters[1]) {\n this.fontFamily = this.parameters[1]\n }\n if (this.parameters[2]) {\n this.fontSize = this.parameters[2]\n }\n if (this.parameters[3]) {\n this.fontWeight = this.parameters[3]\n }\n if (this.parameters[4]) {\n this.fontStyle = this.parameters[4]\n }\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-family: var(--font-family);\n font-size: var(--font-size);\n font-weight: var(--font-weight);\n font-style: var(--font-style);\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!./LabelWidget.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!./LabelWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelWidget.vue?vue&type=template&id=1ff40000&scoped=true&\"\nimport script from \"./LabelWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LabelWidget.vue?vue&type=style&index=0&id=1ff40000&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 \"1ff40000\",\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('div',{staticClass:\"value-widget-container\"},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-text-field',_vm._g(_vm._b({class:_vm.valueClass,style:(_vm.computedStyle),attrs:{\"solo\":\"\",\"dense\":\"\",\"readonly\":\"\",\"single-line\":\"\",\"hide-no-data\":\"\",\"hide-details\":\"\",\"placeholder\":\"Value\",\"value\":_vm._value,\"data-test\":\"value\"},on:{\"contextmenu\":_vm.showContextMenu}},'v-text-field',attrs,false),on))]}}])},[_c('span',[_vm._v(_vm._s(_vm.fullName))])]),_c('v-menu',{attrs:{\"position-x\":_vm.x,\"position-y\":_vm.y,\"absolute\":\"\",\"offset-y\":\"\"},model:{value:(_vm.contextMenuShown),callback:function ($$v) {_vm.contextMenuShown=$$v},expression:\"contextMenuShown\"}},[_c('v-list',_vm._l((_vm.contextMenuOptions),function(item,index){return _c('v-list-item',{key:index,on:{\"click\":function($event){$event.stopPropagation();return item.action.apply(null, arguments)}}},[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)}),1)],1),_c('details-dialog',{attrs:{\"target-name\":_vm.parameters[0],\"packet-name\":_vm.parameters[1],\"item-name\":_vm.parameters[2]},model:{value:(_vm.viewDetails),callback:function ($$v) {_vm.viewDetails=$$v},expression:\"viewDetails\"}})],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 Widget from './Widget'\nimport 'sprintf-js'\nexport default {\n mixins: [Widget],\n // ValueWidget can either get it's value and limitsState directly through props\n // or it will register itself in the Vuex store and be updated asyncronously\n props: {\n value: {\n default: null,\n },\n limitsState: {\n type: String,\n default: null,\n },\n formatString: null,\n },\n data() {\n return {\n valueId: null,\n colorBlind: false,\n viewDetails: false,\n contextMenuShown: false,\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n {\n title: 'Graph',\n action: () => {\n window.open(\n '/tools/tlmgrapher/' +\n this.parameters[0] +\n '/' +\n this.parameters[1] +\n '/' +\n this.parameters[2],\n '_blank'\n )\n },\n },\n ],\n }\n },\n computed: {\n _value: function () {\n let value = this.value\n if (value === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n value = this.$store.state.tlmViewerValues[this.valueId][0]\n } else {\n value = null\n }\n }\n const formatted = this.formatValue(value)\n if (localStorage.colorblindMode === 'true' && this.limitsLetter !== '') {\n return `${formatted} (${this.limitsLetter})`\n }\n return formatted\n },\n valueClass: function () {\n return 'value shrink pa-1 ' + 'cosmos-' + this.limitsColor\n },\n limitsColor() {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n limitsState = this.$store.state.tlmViewerValues[this.valueId][1]\n } else {\n limitsState = null\n }\n }\n if (limitsState != null) {\n switch (limitsState) {\n case 'GREEN':\n case 'GREEN_HIGH':\n case 'GREEN_LOW':\n return 'green'\n case 'YELLOW':\n case 'YELLOW_HIGH':\n case 'YELLOW_LOW':\n return 'yellow'\n case 'RED':\n case 'RED_HIGH':\n case 'RED_LOW':\n return 'red'\n case 'BLUE':\n return 'blue'\n case 'STALE':\n return 'purple'\n default:\n return 'white'\n }\n }\n return ''\n },\n limitsLetter() {\n let limitsState = this.limitsState\n if (limitsState === null) {\n if (this.$store.state.tlmViewerValues[this.valueId]) {\n limitsState = this.$store.state.tlmViewerValues[this.valueId][1]\n } else {\n limitsState = null\n }\n }\n if (limitsState != null) {\n let c = limitsState.charAt(0)\n if (limitsState.endsWith('_LOW')) {\n c = c.toLowerCase()\n }\n return c\n }\n return ''\n },\n },\n created() {\n // If they're not passing us the value and limitsState we have to register\n if (this.value === null || this.limitsState === null) {\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${\n this.parameters[2]\n }__${this.getType()}`\n\n this.$store.commit('tlmViewerAddItem', this.valueId)\n }\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n },\n methods: {\n getType() {\n var type = 'WITH_UNITS'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n return type\n },\n formatValue(value) {\n if (Object.prototype.toString.call(value).slice(8, -1) === 'Array') {\n let result = '['\n for (let i = 0; i < value.length; i++) {\n if (\n Object.prototype.toString.call(value[i]).slice(8, -1) === 'String'\n ) {\n result += '\"' + value[i] + '\"'\n } else {\n result += value[i]\n }\n if (i != value.length - 1) {\n result += ', '\n }\n }\n result += ']'\n return result\n } else if (\n Object.prototype.toString.call(value).slice(8, -1) === 'Object'\n ) {\n return ''\n } else {\n if (this.formatString && value) {\n return sprintf(this.formatString, value)\n } else {\n return '' + value\n }\n }\n },\n showContextMenu(e) {\n e.preventDefault()\n this.contextMenuShown = false\n this.x = e.clientX\n this.y = e.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n },\n}\n","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-card',[_c('v-system-bar',[_c('v-spacer'),_c('span',[_vm._v(\" Details \")]),_c('v-spacer')],1),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.targetName)+\" \"+_vm._s(_vm.packetName)+\" \"+_vm._s(_vm.itemName)+\" \")]),_c('v-card-subtitle',[_vm._v(_vm._s(_vm.details.description))]),_c('v-card-text',[_c('v-container',{attrs:{\"fluid\":\"\"}},[(_vm.type === 'tlm')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Item Values\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},[_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Raw Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.rawValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Converted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.convertedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"Formatted Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.formattedValue))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(\"With Units Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.unitsValue))])],1)],1)],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Offset\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_offset))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Bit Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.bit_size))])],1),(_vm.details.array_size)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Array Size\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.array_size))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Data Type\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.data_type))])],1),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Minimum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.minimum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Maximum\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.maximum))])],1):_vm._e(),(_vm.type === 'cmd')?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Default\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.default))])],1):_vm._e(),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Format String\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.format_string))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Read Conversion\")]),(_vm.details.read_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.read_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.read_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Write Conversion\")]),(_vm.details.write_conversion)?_c('v-col',[_vm._v(\" Class: \"+_vm._s(_vm.details.write_conversion.class)+\" \"),_c('br'),_vm._v(\" Params: \"+_vm._s(_vm.details.write_conversion.params)+\" \")]):_c('v-col')],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Id Value\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.id_value))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Full\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units_full))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Units Abbr\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.units))])],1),_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Endianness\")]),_c('v-col',[_vm._v(_vm._s(_vm.details.endianness))])],1),(_vm.details.states)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.states),function(state,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(state.value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"States\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.limits)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.limits),function(limit,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_vm._v(\" \"+_vm._s(_vm.formatLimit(limit))+\" \"),_c('v-col')],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Limits\")]),_c('v-col',[_vm._v(\"None\")])],1),(_vm.details.meta)?_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col'),_c('v-container',{staticClass:\"ml-5 pa-0\",attrs:{\"fluid\":\"\"}},_vm._l((_vm.details.meta),function(value,key){return _c('v-row',{key:key,attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"4\"}},[_vm._v(_vm._s(key))]),_c('v-col',[_vm._v(_vm._s(value))])],1)}),1)],1):_c('v-row',{attrs:{\"no-gutters\":\"\"}},[_c('v-col',{staticClass:\"label\",attrs:{\"cols\":\"3\"}},[_vm._v(\"Meta\")]),_c('v-col',[_vm._v(\"None\")])],1)],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\" width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> Details </span>\n <v-spacer />\n </v-system-bar>\n\n <v-card-title>\n {{ targetName }} {{ packetName }} {{ itemName }}\n </v-card-title>\n <v-card-subtitle>{{ details.description }}</v-card-subtitle>\n <v-card-text>\n <v-container fluid>\n <v-row no-gutters v-if=\"type === 'tlm'\">\n <v-col cols=\"3\" class=\"label\">Item Values</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Raw Value</v-col>\n <v-col>{{ rawValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Converted Value</v-col>\n <v-col>{{ convertedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">Formatted Value</v-col>\n <v-col>{{ formattedValue }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"4\" class=\"label\">With Units Value</v-col>\n <v-col>{{ unitsValue }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Offset</v-col>\n <v-col>{{ details.bit_offset }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Bit Size</v-col>\n <v-col>{{ details.bit_size }}</v-col>\n </v-row>\n <v-row v-if=\"details.array_size\" no-gutters>\n <v-col cols=\"3\" class=\"label\">Array Size</v-col>\n <v-col>{{ details.array_size }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Data Type</v-col>\n <v-col>{{ details.data_type }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Minimum</v-col>\n <v-col>{{ details.minimum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Maximum</v-col>\n <v-col>{{ details.maximum }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"type === 'cmd'\">\n <v-col cols=\"3\" class=\"label\">Default</v-col>\n <v-col>{{ details.default }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Format String</v-col>\n <v-col>{{ details.format_string }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Read Conversion</v-col>\n <v-col v-if=\"details.read_conversion\">\n Class: {{ details.read_conversion.class }}\n <br />\n Params:\n {{ details.read_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Write Conversion</v-col>\n <v-col v-if=\"details.write_conversion\">\n Class: {{ details.write_conversion.class }}\n <br />\n Params:\n {{ details.write_conversion.params }}\n </v-col>\n <v-col v-else></v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Id Value</v-col>\n <v-col>{{ details.id_value }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Full</v-col>\n <v-col>{{ details.units_full }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Units Abbr</v-col>\n <v-col>{{ details.units }}</v-col>\n </v-row>\n <v-row no-gutters>\n <v-col cols=\"3\" class=\"label\">Endianness</v-col>\n <v-col>{{ details.endianness }}</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.states\">\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col />\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(state, key) in details.states\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ state.value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">States</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.limits\">\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row\n no-gutters\n v-for=\"(limit, key) in details.limits\"\n :key=\"key\"\n >\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n {{ formatLimit(limit) }}\n <v-col></v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row no-gutters v-else>\n <v-col cols=\"3\" class=\"label\">Limits</v-col>\n <v-col>None</v-col>\n </v-row>\n <v-row no-gutters v-if=\"details.meta\">\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col></v-col>\n <v-container fluid class=\"ml-5 pa-0\">\n <v-row no-gutters v-for=\"(value, key) in details.meta\" :key=\"key\">\n <v-col cols=\"4\" class=\"label\">{{ key }}</v-col>\n <v-col>{{ value }}</v-col>\n </v-row>\n </v-container>\n </v-row>\n <v-row v-else no-gutters>\n <v-col cols=\"3\" class=\"label\">Meta</v-col>\n <v-col>None</v-col>\n </v-row>\n </v-container>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { CosmosApi } from '../services/cosmos-api.js'\n\nexport default {\n props: {\n type: {\n default: 'tlm',\n validator: function (value) {\n // The value must match one of these strings\n return ['cmd', 'tlm'].indexOf(value) !== -1\n },\n },\n targetName: String,\n packetName: String,\n itemName: String,\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n details: Object,\n updater: null,\n rawValue: null,\n convertedValue: null,\n formattedValue: null,\n unitsValue: null,\n }\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 created() {\n this.api = new CosmosApi()\n },\n beforeDestroy() {\n clearInterval(this.updater)\n this.updater = null\n },\n watch: {\n // Create a watcher on value which is the indicator to display the dialog\n // If value is true we request the details from the server\n // If this is a tlm dialog we setup an interval to get the telemetry values\n value: function (newValue, oldValue) {\n if (newValue) {\n this.requestDetails()\n if (this.type === 'tlm') {\n this.updater = setInterval(() => {\n this.api\n .get_tlm_values([\n `${this.targetName}__${this.packetName}__${this.itemName}__RAW`,\n `${this.targetName}__${this.packetName}__${this.itemName}__CONVERTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__FORMATTED`,\n `${this.targetName}__${this.packetName}__${this.itemName}__WITH_UNITS`,\n ])\n .then((values) => {\n this.rawValue = values[0][0]\n this.convertedValue = values[1][0]\n this.formattedValue = values[2][0]\n this.unitsValue = values[3][0]\n })\n }, 1000)\n }\n } else {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n },\n methods: {\n requestDetails() {\n if (this.type === 'tlm') {\n this.api\n .get_item(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n } else {\n this.api\n .get_parameter(this.targetName, this.packetName, this.itemName)\n .then((details) => {\n this.details = details\n })\n }\n },\n formatLimit(limit) {\n if (limit.green_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high +\n ' GL/' +\n limit.green_low +\n ' GH/' +\n limit.green_high\n )\n } else if (limit.red_low) {\n return (\n 'RL/' +\n limit.red_low +\n ' YL/' +\n limit.yellow_low +\n ' YH/' +\n limit.yellow_high +\n ' RH/' +\n limit.red_high\n )\n } else {\n return limit\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.label {\n font-weight: bold;\n text-transform: capitalize;\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!./DetailsDialog.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!./DetailsDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DetailsDialog.vue?vue&type=template&id=3eb9665d&scoped=true&\"\nimport script from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./DetailsDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&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 \"3eb9665d\",\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 class=\"value-widget-container\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-text-field\n solo\n dense\n readonly\n single-line\n hide-no-data\n hide-details\n placeholder=\"Value\"\n :value=\"_value\"\n :class=\"valueClass\"\n :style=\"computedStyle\"\n data-test=\"value\"\n @contextmenu=\"showContextMenu\"\n v-bind=\"attrs\"\n v-on=\"on\"\n />\n </template>\n <span>{{ fullName }}</span>\n </v-tooltip>\n <v-menu\n v-model=\"contextMenuShown\"\n :position-x=\"x\"\n :position-y=\"y\"\n absolute\n offset-y\n >\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n :target-name=\"parameters[0]\"\n :packet-name=\"parameters[1]\"\n :item-name=\"parameters[2]\"\n v-model=\"viewDetails\"\n />\n </div>\n</template>\n\n<script>\nimport VWidget from './VWidget'\nimport DetailsDialog from '../../components/DetailsDialog'\nexport default {\n components: {\n DetailsDialog,\n },\n mixins: [VWidget],\n computed: {\n fullName() {\n return (\n this.parameters[0] + ' ' + this.parameters[1] + ' ' + this.parameters[2]\n )\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.value-widget-container {\n min-height: 34px;\n}\n.value ::v-deep div {\n min-height: 24px !important;\n display: flex !important;\n align-items: center !important;\n}\n// TODO: These cosmos styles are also defined in assets/stylesheets/layout/_overrides.scss\n// Can they somehow be reused here? We need to force the style down into the input\n.cosmos-green ::v-deep input {\n color: rgb(0, 150, 0);\n}\n.cosmos-yellow ::v-deep input {\n color: rgb(190, 135, 0);\n}\n.cosmos-red ::v-deep input {\n color: red;\n}\n.cosmos-blue ::v-deep input {\n color: rgb(0, 100, 255);\n}\n.cosmos-purple ::v-deep input {\n color: rgb(200, 0, 200);\n}\n.cosmos-black ::v-deep input {\n color: black;\n}\n.cosmos-white ::v-deep input {\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!./ValueWidget.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!./ValueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ValueWidget.vue?vue&type=template&id=d1470e40&scoped=true&\"\nimport script from \"./ValueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./ValueWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ValueWidget.vue?vue&type=style&index=0&id=d1470e40&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 \"d1470e40\",\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 ref=\"container\" class=\"d-flex flex-row\">\n <label-widget\n :parameters=\"labelName\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"0\"\n />\n <value-widget\n :parameters=\"parameters\"\n :settings=\"settings\"\n :style=\"computedStyle\"\n :widget-index=\"1\"\n />\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport LabelWidget from './LabelWidget.vue'\nimport ValueWidget from './ValueWidget.vue'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelWidget,\n ValueWidget,\n },\n computed: {\n labelName() {\n // LabelWidget uses index 0 from the parameters prop\n // so create an array with the label text in the first position\n return [this.parameters[2] + ':']\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!./LabelvalueWidget.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!./LabelvalueWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvalueWidget.vue?vue&type=template&id=13602869&\"\nimport script from \"./LabelvalueWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvalueWidget.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('div',{ref:\"container\",staticClass:\"d-flex flex-row\",style:([_vm.defaultStyle, _vm.computedStyle])},[_c('labelvalue-widget',{attrs:{\"parameters\":_vm.parameters,\"settings\":_vm.settings}}),_c('limitsbar-widget',{attrs:{\"parameters\":_vm.limitsBarParameters,\"settings\":_vm.settings.filter(function (x) { return x[0] == 1; }).map(function (x) { return x.slice(1); }),\"widget-index\":3}})],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',{staticClass:\"limitsbar\",style:([_vm.cssProps, _vm.computedStyle])},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"limitsbar__container\"},[_c('div',{staticClass:\"limitsbar__redlow\"}),_c('div',{staticClass:\"limitsbar__redhigh\"}),_c('div',{staticClass:\"limitsbar__yellowlow\"}),_c('div',{staticClass:\"limitsbar__yellowhigh\"}),_c('div',{staticClass:\"limitsbar__greenlow\"}),_c('div',{staticClass:\"limitsbar__greenhigh\"}),_c('div',{staticClass:\"limitsbar__blue\"}),_c('div',{staticClass:\"limitsbar__line\"}),_c('div',{staticClass:\"limitsbar__arrow\"})])}]\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 class=\"limitsbar\" :style=\"[cssProps, computedStyle]\">\n <div class=\"limitsbar__container\">\n <div class=\"limitsbar__redlow\" />\n <div class=\"limitsbar__redhigh\" />\n <div class=\"limitsbar__yellowlow\" />\n <div class=\"limitsbar__yellowhigh\" />\n <div class=\"limitsbar__greenlow\" />\n <div class=\"limitsbar__greenhigh\" />\n <div class=\"limitsbar__blue\" />\n\n <div class=\"limitsbar__line\" />\n <div class=\"limitsbar__arrow\" />\n </div>\n </div>\n</template>\n\n<script>\nimport Widget from './Widget'\nimport { CosmosApi } from '../../services/cosmos-api.js'\n\nconst DEFAULT_LIMITS_SET = 'DEFAULT'\n\nexport default {\n mixins: [Widget],\n data() {\n return {\n width: '100%', // users will override with px\n height: 20, // px\n minValue: null,\n maxValue: null,\n scale: 0,\n redLow: 0,\n yellowLow: 0,\n greenLow: 0,\n greenHigh: 0,\n yellowHigh: 0,\n redHigh: 0,\n blue: 0,\n api: null,\n limitsSettings: {\n DEFAULT: [],\n },\n currentLimitsSet: DEFAULT_LIMITS_SET,\n currentSetRefreshInterval: null,\n }\n },\n computed: {\n cssProps: function () {\n const value = this.$store.state.tlmViewerValues[this.valueId][0]\n let limits = this.modifyLimits(\n this.limitsSettings[this.selectedLimitsSet]\n )\n this.calcLimits(limits)\n return {\n '--height': this.height + 'px',\n '--width': this.width,\n '--container-height': this.height - 5 + 'px',\n '--position': this.calcPosition(value, limits) + '%',\n '--redlow-width': this.redLow + '%',\n '--redhigh-width': this.redHigh + '%',\n '--yellowlow-width': this.yellowLow + '%',\n '--yellowhigh-width': this.yellowHigh + '%',\n '--greenlow-width': this.greenLow + '%',\n '--greenhigh-width': this.greenHigh + '%',\n '--blue-width': this.blue + '%',\n }\n },\n selectedLimitsSet: function () {\n return this.limitsSettings.hasOwnProperty(this.currentLimitsSet)\n ? this.currentLimitsSet\n : DEFAULT_LIMITS_SET\n },\n },\n created() {\n this.api = new CosmosApi()\n this.api\n .get_limits(this.parameters[0], this.parameters[1], this.parameters[2])\n .then((data) => {\n this.limitsSettings = data\n })\n this.getCurrentLimitsSet()\n this.currentSetRefreshInterval = setInterval(\n this.getCurrentLimitsSet,\n 60 * 1000\n )\n\n this.settings.forEach((setting) => {\n if (setting[0] === 'MIN_VALUE') {\n this.minValue = parseInt(setting[1])\n }\n if (setting[0] === 'MAX_VALUE') {\n this.maxValue = parseInt(setting[1])\n }\n })\n\n let type = 'CONVERTED'\n if (this.parameters[3]) {\n type = this.parameters[3]\n }\n this.valueId = `${this.parameters[0]}__${this.parameters[1]}__${this.parameters[2]}__${type}`\n\n this.$store.commit('tlmViewerAddItem', this.valueId)\n },\n destroyed() {\n this.$store.commit('tlmViewerDeleteItem', this.valueId)\n clearInterval(this.currentSetRefreshInterval)\n },\n methods: {\n modifyLimits(limitsSettings) {\n // By default the red bars take 10% of the display\n this.redLow = 10\n this.redHigh = 10\n\n // Modify values to respect the user defined minimum\n if (this.minValue) {\n if (limitsSettings[0] <= this.minValue) {\n limitsSettings[0] = this.minValue\n // No red low will be displayed\n this.redLow = 0\n }\n if (limitsSettings[1] <= this.minValue) {\n limitsSettings[1] = this.minValue\n }\n if (limitsSettings[2] <= this.minValue) {\n limitsSettings[2] = this.minValue\n }\n if (limitsSettings[3] <= this.minValue) {\n limitsSettings[3] = this.minValue\n }\n if (limitsSettings.length > 4 && limitsSettings[4] <= this.minValue) {\n limitsSettings[4] = this.minValue\n }\n if (limitsSettings.length > 4 && limitsSettings[5] <= this.minValue) {\n limitsSettings[5] = this.minValue\n }\n }\n if (this.maxValue) {\n if (limitsSettings[0] >= this.maxValue) {\n limitsSettings[0] = this.maxValue\n }\n if (limitsSettings[1] >= this.maxValue) {\n limitsSettings[1] = this.maxValue\n }\n if (limitsSettings[2] >= this.maxValue) {\n limitsSettings[2] = this.maxValue\n }\n if (limitsSettings[3] >= this.maxValue) {\n limitsSettings[3] = this.maxValue\n // No red high will be displayed\n this.redHigh = 0\n }\n if (limitsSettings.length > 4 && limitsSettings[4] >= this.maxValue) {\n limitsSettings[4] = this.maxValue\n }\n if (limitsSettings.length > 4 && limitsSettings[5] >= this.maxValue) {\n limitsSettings[5] = this.maxValue\n }\n }\n // If the red low matches yellow low there is no red low\n if (limitsSettings[0] == limitsSettings[1]) {\n this.redLow = 0\n }\n // If the red high matches yellow high there is no red high\n if (limitsSettings[2] == limitsSettings[3]) {\n this.redHigh = 0\n }\n\n let divisor = 80\n if (this.redLow == 0) {\n divisor += 10\n }\n if (this.redHigh == 0) {\n divisor += 10\n }\n this.scale = (limitsSettings[3] - limitsSettings[0]) / divisor\n\n return limitsSettings\n },\n calcPosition(value, limitsSettings) {\n if (!value || !limitsSettings) {\n return\n }\n let lowValue = limitsSettings[0] - 10 * this.scale\n if (this.minValue && this.minValue == limitsSettings[0]) {\n lowValue = limitsSettings[0]\n }\n let highValue = limitsSettings[3] - 10 * this.scale\n if (this.maxValue && this.maxValue == limitsSettings[3]) {\n highValue = limitsSettings[3]\n }\n\n if (value.raw) {\n if (value.raw === '-Infinity') {\n return 0\n } else {\n // NaN and Infinity\n return 100\n }\n }\n if (value < this.min) {\n return 0\n } else if (value > this.max) {\n return 100\n } else {\n const result = parseInt((value - lowValue) / this.scale)\n if (result > 100) {\n return 100\n } else if (result < 0) {\n return 0\n } else {\n return result\n }\n }\n },\n calcLimits(limitsSettings) {\n if (!limitsSettings) {\n return\n }\n\n this.yellowLow = Math.round(\n (limitsSettings[1] - limitsSettings[0]) / this.scale\n )\n this.yellowHigh = Math.round(\n (limitsSettings[3] - limitsSettings[2]) / this.scale\n )\n if (limitsSettings.length > 4) {\n this.greenLow = Math.round(\n (limitsSettings[4] - limitsSettings[1]) / this.scale\n )\n this.greenHigh = Math.round(\n (limitsSettings[2] - limitsSettings[5]) / this.scale\n )\n this.blue = Math.round(\n 100 -\n this.redLow -\n this.yellowLow -\n this.greenLow -\n this.greenHigh -\n this.yellowHigh -\n this.redHigh\n )\n } else {\n this.greenLow = Math.round(\n 100 - this.redLow - this.yellowLow - this.yellowHigh - this.redHigh\n )\n this.greenHigh = 0\n this.blue = 0\n }\n },\n getCurrentLimitsSet: function () {\n this.api.get_limits_set().then((result) => {\n this.currentLimitsSet = result\n })\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.limitsbar {\n cursor: default;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 5px;\n width: var(--width);\n}\n.limitsbar__container {\n position: relative;\n flex: 1;\n height: var(--container-height);\n border: 1px solid black;\n background-color: white;\n}\n.limitsbar__redlow {\n position: absolute;\n top: -1px;\n left: 0px;\n width: var(--redlow-width);\n height: var(--container-height);\n background-color: red;\n}\n.limitsbar__redhigh {\n position: absolute;\n top: -1px;\n right: 0px;\n width: var(--redhigh-width);\n height: var(--container-height);\n background-color: red;\n}\n.limitsbar__yellowlow {\n position: absolute;\n top: -1px;\n left: var(--redlow-width);\n width: var(--yellowlow-width);\n height: var(--container-height);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__yellowhigh {\n position: absolute;\n top: -1px;\n right: var(--redhigh-width);\n width: var(--yellowhigh-width);\n height: var(--container-height);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__greenlow {\n position: absolute;\n top: -1px;\n left: calc(var(--redlow-width) + var(--yellowlow-width));\n width: var(--greenlow-width);\n height: var(--container-height);\n background-color: green;\n}\n.limitsbar__greenhigh {\n position: absolute;\n top: -1px;\n right: calc(var(--redhigh-width) + var(--yellowhigh-width));\n width: var(--greenhigh-width);\n height: var(--container-height);\n background-color: green;\n}\n.limitsbar__blue {\n position: absolute;\n top: -1px;\n left: calc(\n var(--redlow-width) + var(--yellowlow-width) + var(--greenlow-width)\n );\n width: var(--blue-width);\n height: var(--container-height);\n background-color: blue;\n}\n.limitsbar__line {\n position: absolute;\n left: var(--position);\n width: 1px;\n height: var(--container-height);\n background-color: rgb(128, 128, 128);\n}\n$arrow-size: 5px;\n.limitsbar__arrow {\n position: absolute;\n top: -$arrow-size;\n left: var(--position);\n width: 0;\n height: 0;\n transform: translateX(-$arrow-size); // Transform so it sits over the line\n border-left: $arrow-size solid transparent;\n border-right: $arrow-size solid transparent;\n border-top: $arrow-size solid rgb(128, 128, 128);\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!./LimitsbarWidget.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!./LimitsbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsbarWidget.vue?vue&type=template&id=4d506ea0&scoped=true&\"\nimport script from \"./LimitsbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsbarWidget.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitsbarWidget.vue?vue&type=style&index=0&id=4d506ea0&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 \"4d506ea0\",\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 ref=\"container\"\n class=\"d-flex flex-row\"\n :style=\"[defaultStyle, computedStyle]\"\n >\n <labelvalue-widget :parameters=\"parameters\" :settings=\"settings\" />\n <limitsbar-widget\n :parameters=\"limitsBarParameters\"\n :settings=\"settings.filter((x) => x[0] == 1).map((x) => x.slice(1))\"\n :widget-index=\"3\"\n />\n </div>\n</template>\n\n<script>\nimport LabelvalueWidget from './LabelvalueWidget.vue'\nimport LimitsbarWidget from './LimitsbarWidget.vue'\nimport Widget from './Widget'\n\nexport default {\n mixins: [Widget],\n components: {\n LabelvalueWidget,\n LimitsbarWidget,\n },\n data() {\n return {\n overallWidth: '300px',\n }\n },\n created() {\n // Determine if any sub-setting widths have been given\n // If so calculate the overall width, if not the default will be used\n let width = 0\n this.settings.forEach((setting) => {\n if (setting[1] === 'WIDTH') {\n width += parseInt(setting[2])\n }\n })\n if (width != 0) {\n this.overallWidth = width + 'px'\n }\n },\n computed: {\n limitsBarParameters() {\n return [\n this.parameters[0],\n this.parameters[1],\n this.parameters[2],\n 'CONVERTED',\n ]\n },\n defaultStyle() {\n return {\n width: this.overallWidth,\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!./LabelvaluelimitsbarWidget.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!./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LabelvaluelimitsbarWidget.vue?vue&type=template&id=272e68bc&\"\nimport script from \"./LabelvaluelimitsbarWidget.vue?vue&type=script&lang=js&\"\nexport * from \"./LabelvaluelimitsbarWidget.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 <v-container>\n <v-row no-gutters>\n <v-text-field\n width=\"200\"\n dense\n outlined\n readonly\n label=\"Overall Limits State\"\n :value=\"overallStateFormatted\"\n :class=\"textFieldClass\"\n data-test=\"overall-state\"\n />\n </v-row>\n\n <div v-for=\"(item, index) in items\" :key=\"item.key\">\n <v-row data-test=\"limits-row\" class=\"my-0\">\n <v-col class=\"py-1\">\n <labelvaluelimitsbar-widget\n v-if=\"item.limits\"\n :parameters=\"item.parameters\"\n :settings=\"[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'],\n ['2', 'WIDTH', '200'],\n ]\"\n />\n <labelvalue-widget\n v-else\n :parameters=\"item.parameters\"\n :settings=\"[\n ['0', 'WIDTH', '150'],\n ['1', 'WIDTH', '200'],\n ]\"\n />\n </v-col>\n <v-col cols=\"2\" class=\"py-1\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n class=\"mr-2\"\n @click=\"ignorePacket(item.key)\"\n v-bind=\"attrs\"\n v-on=\"on\"\n >\n <v-icon> mdi-close-circle-multiple </v-icon>\n </v-btn>\n </template>\n <span>Ignore Entire Packet</span>\n </v-tooltip>\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n class=\"mr-2\"\n @click=\"ignoreItem(item.key)\"\n v-bind=\"attrs\"\n v-on=\"on\"\n >\n <v-icon> mdi-close-circle </v-icon>\n </v-btn>\n </template>\n <span>Ignore Item</span>\n </v-tooltip>\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n icon\n class=\"mr-2\"\n @click=\"removeItem(item.key)\"\n v-bind=\"attrs\"\n v-on=\"on\"\n >\n <v-icon> mdi-eye-off </v-icon>\n </v-btn>\n </template>\n <span>Temporarily Hide Item</span>\n </v-tooltip>\n </v-col>\n </v-row>\n <v-divider v-if=\"index < items.length - 1\" :key=\"index\" />\n </div>\n </v-container>\n <v-dialog v-model=\"ignoredItemsDialog\" max-width=\"600\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span>Ignored Items</span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"my-2\">\n <div v-for=\"(item, index) in ignoredFormatted\" :key=\"index\">\n <v-row class=\"ma-1\">\n <span class=\"font-weight-black\"> {{ item }} </span>\n <v-spacer />\n <v-btn\n @click=\"restoreItem(item, index)\"\n small\n icon\n :data-test=\"`remove-ignore-${index}`\"\n >\n <v-icon> mdi-delete </v-icon>\n </v-btn>\n </v-row>\n <v-divider\n v-if=\"index < ignoredFormatted.length - 1\"\n :key=\"index\"\n />\n </div>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n @click=\"ignoredItemsDialog = false\"\n class=\"mx-2\"\n color=\"primary\"\n >\n Ok\n </v-btn>\n </v-row>\n <v-divider v-if=\"index < items.length - 1\" :key=\"index\" />\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport LabelvalueWidget from '@cosmosc2/tool-common/src/components/widgets/LabelvalueWidget'\nimport LabelvaluelimitsbarWidget from '@cosmosc2/tool-common/src/components/widgets/LabelvaluelimitsbarWidget'\n\nexport default {\n components: {\n LabelvalueWidget,\n LabelvaluelimitsbarWidget,\n },\n props: {\n value: {\n type: Array,\n default: () => [],\n },\n },\n data() {\n return {\n api: null,\n ignored: [],\n ignoredItemsDialog: false,\n overallState: 'GREEN',\n items: [],\n itemList: [],\n }\n },\n computed: {\n textFieldClass() {\n if (this.overallState) {\n return `textfield-${this.overallState.toLowerCase()}`\n } else {\n return ''\n }\n },\n overallStateFormatted() {\n if (this.ignored.length === 0) {\n return this.overallState\n } else {\n return `${this.overallState} (Some items ignored)`\n }\n },\n ignoredFormatted() {\n return this.ignored.map((x) => x.split('__').join(' '))\n },\n },\n created() {\n this.api = new CosmosApi()\n for (let item of this.value) {\n if (item.match(/.+__.+__.+/)) {\n // TARGET__PACKET__ITEM\n this.ignoreItem(item, true)\n } else {\n // TARGET__PACKET\n this.ignorePacket(item, true)\n }\n }\n this.updateOutOfLimits()\n },\n mounted() {\n this.updater = setInterval(() => {\n this.update()\n }, 1000)\n },\n destroyed() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n methods: {\n updateOutOfLimits() {\n this.api.get_out_of_limits().then((items) => {\n for (const item of items) {\n let itemName = item.join('__')\n // Skip ignored and existing items\n if (\n this.itemList.includes(itemName) ||\n this.ignored.find((ignored) => itemName.includes(ignored))\n ) {\n continue\n }\n\n this.itemList.push(itemName)\n let itemInfo = {\n key: item.slice(0, 3).join('__'),\n parameters: item.slice(0, 3),\n }\n if (item[3].includes('YELLOW') && this.overallState !== 'RED') {\n this.overallState = 'YELLOW'\n }\n if (item[3].includes('RED')) {\n this.overallState = 'RED'\n }\n if (item[3] == 'YELLOW' || item[3] == 'RED') {\n itemInfo['limits'] = false\n } else {\n itemInfo['limits'] = true\n }\n this.items.push(itemInfo)\n }\n this.calcOverallState()\n })\n },\n calcOverallState() {\n let overall = 'GREEN'\n for (let item of this.itemList) {\n if (this.ignored.find((ignored) => item.includes(ignored))) {\n continue\n }\n\n if (item.includes('YELLOW') && overall !== 'RED') {\n overall = 'YELLOW'\n }\n if (item.includes('RED')) {\n overall = 'RED'\n break\n }\n }\n this.overallState = overall\n },\n ignorePacket(item, noUpdate) {\n let [target_name, packet_name, item_name] = item.split('__')\n let newIgnored = `${target_name}__${packet_name}`\n this.ignored.push(newIgnored)\n noUpdate || this.updateIgnored()\n\n while (true) {\n let index = this.itemList.findIndex((item) => item.includes(newIgnored))\n if (index === -1) {\n break\n } else {\n let underIndex = this.itemList[index].lastIndexOf('__')\n this.removeItem(this.itemList[index].substring(0, underIndex))\n }\n }\n this.calcOverallState()\n },\n ignoreItem(item, noUpdate) {\n this.ignored.push(item)\n noUpdate || this.updateIgnored()\n this.removeItem(item)\n this.calcOverallState()\n },\n restoreItem(item, index) {\n this.ignored.splice(index, 1)\n this.updateIgnored()\n this.updateOutOfLimits()\n },\n removeItem(item) {\n const index = this.itemList.findIndex((arrayItem) =>\n arrayItem.includes(item)\n )\n this.items.splice(index, 1)\n this.itemList.splice(index, 1)\n },\n updateIgnored() {\n this.$emit('input', this.ignored)\n },\n update() {\n if (this.$store.state.tlmViewerItems.length !== 0) {\n this.api\n .get_tlm_values(this.$store.state.tlmViewerItems)\n .then((data) => {\n this.$store.commit('tlmViewerUpdateValues', data)\n })\n }\n },\n handleMessages(messages) {\n for (let message of messages) {\n // We only want to handle LIMITS_CHANGE messages\n // NOTE: The channel also sends LIMITS_SETTINGS and LIMITS_SET messages\n if (message.type != 'LIMITS_CHANGE') {\n continue\n }\n\n let itemName = `${message.target_name}__${message.packet_name}__${message.item_name}`\n const index = this.itemList.findIndex((arrayItem) =>\n arrayItem.includes(itemName)\n )\n // If we find an existing item we update the state and re-calc overall state\n if (index !== -1) {\n this.itemList[index] = `${itemName}__${message.new_limits_state}`\n this.calcOverallState()\n continue\n }\n // Skip ignored items\n if (this.ignored.find((ignored) => itemName.includes(ignored))) {\n continue\n }\n // Only process items who have gone out of limits\n if (\n message.new_limits_state &&\n !(\n message.new_limits_state.includes('YELLOW') ||\n message.new_limits_state.includes('RED')\n )\n ) {\n continue\n }\n let itemInfo = {\n key: itemName,\n parameters: [\n message.target_name,\n message.packet_name,\n message.item_name,\n ],\n }\n if (\n message.new_limits_state == 'YELLOW' ||\n message.new_limits_state == 'RED'\n ) {\n itemInfo['limits'] = false\n } else {\n itemInfo['limits'] = true\n }\n this.itemList.push(`${itemName}__${message.new_limits_state}`)\n this.items.push(itemInfo)\n this.calcOverallState()\n }\n },\n\n // Menu options\n showIgnored() {\n this.ignoredItemsDialog = true\n },\n },\n}\n</script>\n\n<style scoped>\n/* TODO: Color the border */\n.textfield-green >>> .v-text-field__slot input,\n.textfield-green >>> .v-text-field__slot label {\n color: green;\n}\n.textfield-yellow >>> .v-text-field__slot input,\n.textfield-yellow >>> .v-text-field__slot label {\n color: yellow;\n}\n.textfield-red >>> .v-text-field__slot input,\n.textfield-red >>> .v-text-field__slot label {\n color: red;\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!./LimitsControl.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!./LimitsControl.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsControl.vue?vue&type=template&id=62d2bb56&scoped=true&\"\nimport script from \"./LimitsControl.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsControl.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitsControl.vue?vue&type=style&index=0&id=62d2bb56&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 \"62d2bb56\",\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-card',{staticClass:\"card-height\"},[_c('v-card-title',[_vm._v(\" Limits Events \"),_c('v-spacer'),_c('v-text-field',{attrs:{\"append-icon\":\"mdi-magnify\",\"label\":\"Search\",\"single-line\":\"\",\"hide-details\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.data,\"search\":_vm.search,\"calculate-widths\":\"\",\"disable-pagination\":\"\",\"hide-default-footer\":\"\",\"multi-sort\":\"\",\"dense\":\"\",\"height\":_vm.calcTableHeight()},scopedSlots:_vm._u([{key:\"item.time_nsec\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',[_vm._v(_vm._s(_vm.formatDate(item.time_nsec)))])]}},{key:\"item.message\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',{class:_vm.getColorClass(item.message)},[_vm._v(_vm._s(item.message))])]}}])})],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-card class=\"card-height\">\n <v-card-title>\n Limits Events\n <v-spacer />\n <v-text-field\n v-model=\"search\"\n append-icon=\"mdi-magnify\"\n label=\"Search\"\n single-line\n hide-details\n />\n </v-card-title>\n <v-data-table\n :headers=\"headers\"\n :items=\"data\"\n :search=\"search\"\n calculate-widths\n disable-pagination\n hide-default-footer\n multi-sort\n dense\n :height=\"calcTableHeight()\"\n >\n <template v-slot:item.time_nsec=\"{ item }\">\n <span>{{ formatDate(item.time_nsec) }}</span>\n </template>\n <template v-slot:item.message=\"{ item }\">\n <span :class=\"getColorClass(item.message)\">{{ item.message }}</span>\n </template>\n </v-data-table>\n </v-card>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\n\nexport default {\n props: {\n history_count: {\n type: Number,\n default: 1000,\n },\n },\n data() {\n return {\n data: [],\n search: '',\n headers: [\n { text: 'Time', value: 'time_nsec', width: 250 },\n { text: 'Message', value: 'message' },\n ],\n }\n },\n methods: {\n handleMessages(messages) {\n for (let i = 0; i < messages.length; i++) {\n this.data.unshift(messages[i])\n }\n if (this.data.length > this.history_count) {\n this.data.length = this.history_count\n }\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1_000_000),\n 'yyyy-MM-dd HH:mm:ss.SSS'\n )\n },\n getColorClass(message) {\n if (message.includes('GREEN')) {\n return 'cosmos-green'\n } else if (message.includes('YELLOW')) {\n return 'cosmos-yellow'\n } else if (message.includes('RED')) {\n return 'cosmos-red'\n } else if (message.includes('BLUE')) {\n return 'cosmos-blue'\n }\n if (this.$vuetify.theme.dark) {\n return 'cosmos-white'\n } else {\n return 'cosmos-black'\n }\n },\n calcTableHeight() {\n // TODO: 250 is a magic number but seems to work well\n return window.innerHeight - 250\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.card-height {\n // TODO: 150 is a magic number but seems to work well\n // Can this be calculated by the size of the table search box?\n height: calc(100vh - 150px);\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!./LimitsEvents.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!./LimitsEvents.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsEvents.vue?vue&type=template&id=e10911ac&scoped=true&\"\nimport script from \"./LimitsEvents.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsEvents.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LimitsEvents.vue?vue&type=style&index=0&id=e10911ac&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 \"e10911ac\",\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","/*\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 '@rails/actioncable'\n//ActionCable.logger.enabled = true\nActionCable.ConnectionMonitor.staleThreshold = 60\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","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","<!--\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 <v-card>\n <v-tabs v-model=\"curTab\" fixed-tabs>\n <v-tab v-for=\"(tab, index) in tabs\" :key=\"index\">{{ tab }}</v-tab>\n </v-tabs>\n <v-tabs-items v-model=\"curTab\">\n <v-tab-item eager>\n <keep-alive>\n <limits-control ref=\"control\" v-model=\"ignored\" :key=\"renderKey\" />\n </keep-alive>\n </v-tab-item>\n <v-tab-item eager>\n <keep-alive>\n <limits-events ref=\"events\" />\n </keep-alive>\n </v-tab-item>\n </v-tabs-items>\n </v-card>\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=\"openConfig\"\n v-model=\"openConfig\"\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=\"saveConfig\"\n v-model=\"saveConfig\"\n :tool=\"toolName\"\n @success=\"saveConfiguration\"\n />\n </div>\n</template>\n\n<script>\nimport LimitsControl from '@/tools/LimitsMonitor/LimitsControl'\nimport LimitsEvents from '@/tools/LimitsMonitor/LimitsEvents'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\nimport Cable from '@cosmosc2/tool-common/src/services/cable.js'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport OpenConfigDialog from '@cosmosc2/tool-common/src/components/OpenConfigDialog'\nimport SaveConfigDialog from '@cosmosc2/tool-common/src/components/SaveConfigDialog'\n\nexport default {\n components: {\n LimitsControl,\n LimitsEvents,\n TopBar,\n OpenConfigDialog,\n SaveConfigDialog,\n },\n data() {\n return {\n title: 'Limits Monitor',\n toolName: 'limits-monitor',\n curTab: null,\n tabs: ['Limits', 'Log'],\n api: new CosmosApi(),\n cable: new Cable(),\n subscription: null,\n renderKey: 0,\n ignored: [],\n openConfig: false,\n saveConfig: false,\n menus: [\n {\n label: 'File',\n items: [\n {\n label: 'Show Ignored',\n command: () => {\n this.$refs.control.showIgnored()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Open Configuration',\n command: () => {\n this.openConfig = true\n },\n },\n {\n label: 'Save Configuration',\n command: () => {\n this.saveConfig = true\n },\n },\n ],\n },\n ],\n }\n },\n created() {\n this.cable\n .createSubscription(\n 'LimitsEventsChannel',\n localStorage.scope,\n {\n received: (data) => {\n const parsed = JSON.parse(data)\n this.$refs.control.handleMessages(parsed)\n this.$refs.events.handleMessages(parsed)\n },\n },\n {\n history_count: 1000,\n }\n )\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n destroyed() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n },\n methods: {\n async openConfiguration(name) {\n const response = await this.api.load_config(this.toolName, name)\n this.ignored = JSON.parse(response)\n this.renderKey++ // Trigger re-render\n },\n saveConfiguration(name) {\n this.api.save_config(this.toolName, name, JSON.stringify(this.ignored))\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!./LimitsMonitor.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!./LimitsMonitor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LimitsMonitor.vue?vue&type=template&id=558b68e6&\"\nimport script from \"./LimitsMonitor.vue?vue&type=script&lang=js&\"\nexport * from \"./LimitsMonitor.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","// 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, \".label[data-v-3eb9665d]{font-weight:700;text-transform:capitalize}\", \"\"]);\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, \".label[data-v-1ff40000]{font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight);font-style:var(--font-style)}\", \"\"]);\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, \".textfield-green[data-v-62d2bb56] .v-text-field__slot input,.textfield-green[data-v-62d2bb56] .v-text-field__slot label{color:green}.textfield-yellow[data-v-62d2bb56] .v-text-field__slot input,.textfield-yellow[data-v-62d2bb56] .v-text-field__slot label{color:#ff0}.textfield-red[data-v-62d2bb56] .v-text-field__slot input,.textfield-red[data-v-62d2bb56] .v-text-field__slot label{color:red}\", \"\"]);\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, \".limitsbar[data-v-4d506ea0]{cursor:default;display:flex;justify-content:center;align-items:center;padding:5px;width:var(--width)}.limitsbar__container[data-v-4d506ea0]{position:relative;flex:1;height:var(--container-height);border:1px solid #000;background-color:#fff}.limitsbar__redlow[data-v-4d506ea0]{left:0;width:var(--redlow-width)}.limitsbar__redhigh[data-v-4d506ea0],.limitsbar__redlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:red}.limitsbar__redhigh[data-v-4d506ea0]{right:0;width:var(--redhigh-width)}.limitsbar__yellowlow[data-v-4d506ea0]{left:var(--redlow-width);width:var(--yellowlow-width)}.limitsbar__yellowhigh[data-v-4d506ea0],.limitsbar__yellowlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:#ffdc00}.limitsbar__yellowhigh[data-v-4d506ea0]{right:var(--redhigh-width);width:var(--yellowhigh-width)}.limitsbar__greenlow[data-v-4d506ea0]{left:calc(var(--redlow-width) + var(--yellowlow-width));width:var(--greenlow-width)}.limitsbar__greenhigh[data-v-4d506ea0],.limitsbar__greenlow[data-v-4d506ea0]{position:absolute;top:-1px;height:var(--container-height);background-color:green}.limitsbar__greenhigh[data-v-4d506ea0]{right:calc(var(--redhigh-width) + var(--yellowhigh-width));width:var(--greenhigh-width)}.limitsbar__blue[data-v-4d506ea0]{top:-1px;left:calc(var(--redlow-width) + var(--yellowlow-width) + var(--greenlow-width));width:var(--blue-width);background-color:blue}.limitsbar__blue[data-v-4d506ea0],.limitsbar__line[data-v-4d506ea0]{position:absolute;height:var(--container-height)}.limitsbar__line[data-v-4d506ea0]{left:var(--position);width:1px;background-color:gray}.limitsbar__arrow[data-v-4d506ea0]{position:absolute;top:-5px;left:var(--position);width:0;height:0;-webkit-transform:translateX(-5px);transform:translateX(-5px);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid gray}\", \"\"]);\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, \".value-widget-container[data-v-d1470e40]{min-height:34px}.value[data-v-d1470e40] div{min-height:24px!important;display:flex!important;align-items:center!important}.cosmos-green[data-v-d1470e40] input{color:#009600}.cosmos-yellow[data-v-d1470e40] input{color:#be8700}.cosmos-red[data-v-d1470e40] input{color:red}.cosmos-blue[data-v-d1470e40] input{color:#0064ff}.cosmos-purple[data-v-d1470e40] input{color:#c800c8}.cosmos-black[data-v-d1470e40] input{color:#000}.cosmos-white[data-v-d1470e40] input{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, \".card-height[data-v-e10911ac]{height:calc(100vh - 150px)}\", \"\"]);\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!./DetailsDialog.vue?vue&type=style&index=0&id=3eb9665d&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(\"7c1e213a\", 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-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!./LabelWidget.vue?vue&type=style&index=0&id=1ff40000&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(\"27aab41a\", 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!./LimitsControl.vue?vue&type=style&index=0&id=62d2bb56&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(\"9ea19714\", 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!./LimitsbarWidget.vue?vue&type=style&index=0&id=4d506ea0&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(\"fbeb2792\", 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!./ValueWidget.vue?vue&type=style&index=0&id=d1470e40&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(\"10f1e48f\", 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!./LimitsEvents.vue?vue&type=style&index=0&id=e10911ac&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(\"0ccf8824\", content, true, {\"sourceMap\":false,\"shadowMode\":false});"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","menus","title","model","value","callback","$$v","curTab","expression","_l","tab","index","key","_v","_s","renderKey","ref","ignored","toolName","on","openConfiguration","openConfig","_e","saveConfiguration","saveConfig","staticRenderFns","class","textFieldClass","overallStateFormatted","item","staticClass","parameters","scopedSlots","_u","fn","_g","_b","$event","ignorePacket","ignoreItem","removeItem","items","length","ignoredItemsDialog","restoreItem","ignoredFormatted","vueInstance","Vue","axiosInstance","axios","baseURL","location","origin","timeout","params","interceptors","response","use","error","status","localStorage","cosmosToken","CosmosAuth","login","href","body","statusText","config","data","message","exception","$notify","serious","CosmosApi","method","kwparams","updateToken","defaultMinValidity","id","scope","jsonrpc","keyword_params","headers","Authorization","result","err","Error","name","request","val","json_class","raw","NaN","Infinity","Number","isNaN","POSITIVE_INFINITY","NEGATIVE_INFINITY","exec","interface_name","router_name","target","packet","log_writer_name","limits_set","target_name","packet_name","value_type","type","len","converted","i","decode_cosmos_type","item_name","command_name","parameter_name","param_list","Object","prototype","hasOwnProperty","call","encode_cosmos_type","undefined","_cmd","tool","array","style","labelName","settings","props","widgetIndex","default","Array","computed","computedStyle","forEach","setting","parseInt","slice","toLowerCase","getColor","methods","cssProps","labelText","mixins","fontFamily","fontSize","fontWeight","fontStyle","size","created","component","valueClass","_value","showContextMenu","fullName","x","y","contextMenuShown","stopPropagation","action","apply","arguments","viewDetails","Widget","limitsState","String","formatString","valueId","colorBlind","contextMenuOptions","window","open","$store","state","tlmViewerValues","formatted","formatValue","colorblindMode","limitsLetter","limitsColor","c","charAt","endsWith","getType","commit","destroyed","toString","sprintf","e","preventDefault","clientX","clientY","$nextTick","show","targetName","packetName","itemName","details","description","rawValue","convertedValue","formattedValue","unitsValue","bit_offset","bit_size","array_size","data_type","minimum","maximum","format_string","read_conversion","write_conversion","id_value","units_full","units","endianness","limit","formatLimit","validator","updater","get","set","beforeDestroy","clearInterval","watch","get_tlm_values","then","requestDetails","get_item","get_parameter","components","DetailsDialog","LabelWidget","ValueWidget","defaultStyle","limitsBarParameters","filter","map","_m","width","height","minValue","maxValue","scale","redLow","yellowLow","greenLow","greenHigh","yellowHigh","redHigh","blue","api","limitsSettings","DEFAULT","currentLimitsSet","currentSetRefreshInterval","selectedLimitsSet","DEFAULT_LIMITS_SET","get_limits","modifyLimits","divisor","calcPosition","lowValue","highValue","calcLimits","getCurrentLimitsSet","LabelvalueWidget","LimitsbarWidget","overallWidth","LabelvaluelimitsbarWidget","overallState","itemList","mounted","updateOutOfLimits","itemInfo","calcOverallState","overall","noUpdate","updateIgnored","update","handleMessages","messages","showIgnored","search","calcTableHeight","formatDate","time_nsec","getColorClass","history_count","text","nanoSecs","toDate","menu","formatDT","domProps","label","radioGroup","option","j","disabled","command","checked","icon","radio","checkbox","ActionCable","Cable","url","_cable","disconnect","channel","callbacks","additionalOptions","subscriptions","create","token","indexOf","_k","keyCode","cancel","success","configs","itemSelected","slot","select","deleteConfig","directives","rawName","align","sortable","selectedItem","list_configs","configId","catch","confirm","okText","cancelText","configName","LimitsControl","LimitsEvents","TopBar","OpenConfigDialog","SaveConfigDialog","tabs","cable","subscription","divider","createSubscription","received","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","add"],"sourceRoot":""}
|