cosmosc2-tool-tablemanager 5.0.2.pre.beta2 → 5.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- {"version":3,"file":"js/550.js","mappings":"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","sources":["webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableManager.vue?6f1b","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/services/api.js","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?228d","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableRow.vue?74a6","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableItem.vue?d63b","webpack://@cosmosc2/tool-tablemanager/src/tools/TableManager/TableItem.vue","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableItem.vue?0e88","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableItem.vue","webpack://@cosmosc2/tool-tablemanager/src/tools/TableManager/TableRow.vue","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableRow.vue?a252","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableRow.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue?6ad0","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue?4db4","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue?819c","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue?451f","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue?88d9","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue?3eda","webpack://@cosmosc2/tool-tablemanager/src/tools/TableManager/TableManager.vue","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableManager.vue?af17","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableManager.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?5429"],"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-snackbar',{attrs:{\"top\":\"\",\"timeout\":-1,\"color\":\"orange\"},scopedSlots:_vm._u([{key:\"action\",fn:function(ref){\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._b({attrs:{\"text\":\"\",\"color\":\"danger\",\"data-test\":\"unlock-button\"},on:{\"click\":_vm.confirmLocalUnlock}},'v-btn',attrs,false),[_vm._v(\" Unlock \")]),_c('v-btn',_vm._b({attrs:{\"text\":\"\"},on:{\"click\":function () {\n _vm.showReadOnlyToast = false\n }}},'v-btn',attrs,false),[_vm._v(\" dismiss \")])]}}]),model:{value:(_vm.showReadOnlyToast),callback:function ($$v) {_vm.showReadOnlyToast=$$v},expression:\"showReadOnlyToast\"}},[_c('v-icon',[_vm._v(\" mdi-pencil-off \")]),_vm._v(\" \"+_vm._s(_vm.lockedBy)+\" is editing this script. Editor is in read-only mode \")],1),_c('v-file-input',{ref:\"fileInput\",staticStyle:{\"position\":\"fixed\",\"top\":\"-100%\"},attrs:{\"show-size\":\"\",\"accept\":\".bin\",\"data-test\":\"file-input\"},model:{value:(_vm.fileInput),callback:function ($$v) {_vm.fileInput=$$v},expression:\"fileInput\"}}),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"readonly\":\"\",\"hide-details\":\"\",\"label\":\"Definition\",\"id\":\"definition-filename\",\"data-test\":\"definition-filename\"},model:{value:(_vm.definitionFilename),callback:function ($$v) {_vm.definitionFilename=$$v},expression:\"definitionFilename\"}}),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"readonly\":\"\",\"hide-details\":\"\",\"label\":\"Filename\",\"id\":\"filename\",\"data-test\":\"filename\"},model:{value:(_vm.fullFilename),callback:function ($$v) {_vm.fullFilename=$$v},expression:\"fullFilename\"}}),_c('v-card',[_c('v-card-title',[_vm._v(\" Items \"),_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-tabs',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.tables),function(table,index){return _c('v-tab',{key:index},[_vm._v(\" \"+_vm._s(table.name)+\" \")])}),1),_c('v-tabs-items',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.tables),function(table,index){return _c('v-tab-item',{key:(\"\" + _vm.filename + index)},[_c('v-data-table',{attrs:{\"headers\":table.headers,\"items\":table.rows,\"search\":_vm.search,\"calculate-widths\":\"\",\"disable-pagination\":\"\",\"hide-default-footer\":\"\",\"multi-sort\":\"\",\"dense\":\"\"},scopedSlots:_vm._u([{key:\"item\",fn:function(ref){\n var item = ref.item;\nreturn [_c('table-row',{key:JSON.stringify(item[0]),attrs:{\"items\":item},on:{\"change\":function($event){return _vm.onChange(item, $event)}}})]}}],null,true)})],1)}),1)],1),(_vm.fileOpen)?_c('file-open-save-dialog',{attrs:{\"type\":\"open\",\"api-url\":\"/cosmos-api/tables\"},on:{\"file\":function($event){return _vm.setFile($event)},\"error\":function($event){return _vm.setError($event)}},model:{value:(_vm.fileOpen),callback:function ($$v) {_vm.fileOpen=$$v},expression:\"fileOpen\"}}):_vm._e(),(_vm.showSaveAs)?_c('file-open-save-dialog',{attrs:{\"type\":\"save\",\"require-target-parent-dir\":\"\",\"api-url\":\"/cosmos-api/tables\",\"input-filename\":_vm.filename},on:{\"filename\":function($event){return _vm.saveAsFilename($event)},\"error\":function($event){return _vm.setError($event)}},model:{value:(_vm.showSaveAs),callback:function ($$v) {_vm.showSaveAs=$$v},expression:\"showSaveAs\"}}):_vm._e(),_c('simple-text-dialog',{attrs:{\"title\":_vm.errorTitle,\"text\":_vm.errorText},model:{value:(_vm.showError),callback:function ($$v) {_vm.showError=$$v},expression:\"showError\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from 'axios'\nimport Vue from 'vue'\n\nconst vueInstance = new Vue()\n\nconst axiosInstance = axios.create({\n baseURL: location.origin,\n timeout: 10000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\n let body = `HTTP ${error.response.status} - `\n if (error.response?.data?.message) {\n body += `${error.response.data.message}`\n } else if (error.response?.data?.exception) {\n body += `${error.response.data.exception}`\n } else if (error.response?.data?.error?.message) {\n if (error.response.data.error.class) {\n body += `${error.response.data.error.class} `\n }\n body += `${error.response.data.error.message}`\n } else {\n body += `${error.response?.data}`\n }\n vueInstance.$notify.serious({\n title: 'Network error',\n body,\n })\n }\n throw error\n }\n)\n\nexport default axiosInstance\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nconst request = async function (\n method,\n url,\n { data, params = {}, headers, noAuth = false, noScope = false } = {}\n) {\n if (!noAuth) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n headers['Authorization'] = localStorage.cosmosToken\n }\n if (!noScope && !params['scope']) {\n params['scope'] = localStorage.scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('get', path, { params, headers, noScope, noAuth })\n },\n\n put: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('put', path, { data, params, headers, noScope, noAuth })\n },\n\n post: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('post', path, { data, params, headers, noScope, noAuth })\n },\n\n delete: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('delete', path, { params, headers, noScope, noAuth })\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\nimport axios from './axios.js'\n\nexport class CosmosApi {\n id = 1\n\n constructor() {}\n\n // This is hacky Json-rpc for now. Should probably use a jsonrpc library.\n async exec(method, params, kwparams = {}) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n this.id = this.id + 1\n try {\n kwparams['scope'] = localStorage.scope\n const response = await axios.post(\n '/cosmos-api/api',\n {\n jsonrpc: '2.0',\n method: method,\n params: params,\n id: this.id,\n keyword_params: kwparams,\n },\n {\n headers: {\n Authorization: localStorage.cosmosToken,\n 'Content-Type': 'application/json-rpc',\n },\n }\n )\n // var data = response.data\n // if (data.error) {\n // var err = new Error()\n // err.name = data.error.data.class\n // err.message = data.error.data.message\n // console.log(data.error.data.backtrace.join('\\n'))\n // throw err\n // }\n return response.data.result\n } catch (error) {\n var err = new Error()\n if (error.response) {\n // The request was made and the server responded with a\n // status code that falls out of the range of 2xx\n err.name = error.response.data.error.data.class\n err.message = error.response.data.error.data.message\n } else if (error.request) {\n // The request was made but no response was received, `error.request`\n // is an instance of XMLHttpRequest in the browser and an instance\n // of http.ClientRequest in Node.js\n err.name = 'Request error'\n err.message = 'Request error, no response received'\n } else {\n // Something happened in setting up the request and triggered an Error\n err.name = 'Unknown error'\n }\n //console.log(error)\n throw err\n }\n }\n\n decode_cosmos_type(val) {\n if (val !== null && typeof val === 'object') {\n if (val.json_class == 'Float' && val.raw) {\n if (val.raw == 'NaN') {\n return NaN\n } else if (val.raw == 'Infinity') {\n return Infinity\n } else if (val.raw == '-Infinity') {\n return -Infinity\n }\n }\n }\n return null\n }\n\n encode_cosmos_type(val) {\n if (Number.isNaN(val)) {\n return { json_class: 'Float', raw: 'NaN' }\n } else if (val == Number.POSITIVE_INFINITY) {\n return { json_class: 'Float', raw: 'Infinity' }\n } else if (val == Number.NEGATIVE_INFINITY) {\n return { json_class: 'Float', raw: '-Infinity' }\n }\n return null\n }\n\n // ***********************************************\n // The following APIs are used by the CmdTlmServer\n // ***********************************************\n get_all_interface_info() {\n return this.exec('get_all_interface_info', [])\n }\n\n connect_interface(interface_name) {\n return this.exec('connect_interface', [interface_name])\n }\n\n disconnect_interface(interface_name) {\n return this.exec('disconnect_interface', [interface_name])\n }\n\n get_all_router_info() {\n return this.exec('get_all_router_info', [])\n }\n\n connect_router(router_name) {\n return this.exec('connect_router', [router_name])\n }\n\n disconnect_router(router_name) {\n return this.exec('disconnect_router', [router_name])\n }\n\n get_all_target_info() {\n return this.exec('get_all_target_info', [])\n }\n\n get_all_cmd_info() {\n return this.exec('get_all_cmd_info', [])\n }\n\n get_all_tlm_info() {\n return this.exec('get_all_tlm_info', [])\n }\n\n get_item(target, packet, item) {\n return this.exec('get_item', [target, packet, item])\n }\n\n get_parameter(target, packet, item) {\n return this.exec('get_parameter', [target, packet, item])\n }\n\n get_all_packet_logger_info() {\n return this.exec('get_all_packet_logger_info', [])\n }\n\n start_logging() {\n return this.exec('start_logging', [])\n }\n\n stop_logging() {\n return this.exec('stop_logging', [])\n }\n\n start_cmd_log(log_writer_name) {\n return this.exec('start_cmd_log', [log_writer_name])\n }\n\n start_tlm_log(log_writer_name) {\n return this.exec('start_tlm_log', [log_writer_name])\n }\n\n stop_cmd_log(log_writer_name) {\n return this.exec('stop_cmd_log', [log_writer_name])\n }\n\n stop_tlm_log(log_writer_name) {\n return this.exec('stop_tlm_log', [log_writer_name])\n }\n\n get_server_status() {\n return this.exec('get_server_status', [])\n }\n\n get_limits_sets() {\n return this.exec('get_limits_sets', [])\n }\n\n get_limits_set() {\n return this.exec('get_limits_set', [])\n }\n\n set_limits_set(limits_set) {\n return this.exec('set_limits_set', [limits_set])\n }\n\n get_background_tasks() {\n return this.exec('get_background_tasks', [])\n }\n\n start_background_task(name) {\n return this.exec('start_background_task', [name])\n }\n\n stop_background_task(name) {\n return this.exec('stop_background_task', [name])\n }\n\n // ***********************************************\n // End CmdTlmServer APIs\n // ***********************************************\n\n get_oldest_logfile() {\n return this.exec('get_oldest_logfile', [])\n }\n\n get_target(target_name) {\n return this.exec('get_target', [target_name])\n }\n\n get_target_list() {\n return this.exec('get_target_list', [])\n }\n\n get_telemetry(target_name, packet_name) {\n return this.exec('get_telemetry', [target_name, packet_name])\n }\n\n get_all_telemetry(target_name) {\n return this.exec('get_all_telemetry', [target_name])\n }\n\n // Called by PacketViewerComponent\n async get_tlm_packet(target_name, packet_name, value_type) {\n const data = await this.exec('get_tlm_packet', [target_name, packet_name], {\n type: value_type,\n })\n // Make sure data isn't null or undefined. Note this is the only valid use of == or !=\n if (data != null) {\n var len = data.length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[i][1])\n if (converted !== null) {\n data[i][1] = converted\n }\n }\n }\n return data\n }\n\n // Called by PacketViewerComponent\n get_packet_derived_items(target_name, packet_name) {\n return this.exec('get_packet_derived_items', [target_name, packet_name])\n }\n\n // Called by CmdTlmServer Tlm Packets tab\n get_tlm_buffer(target_name, packet_name) {\n return this.exec('get_tlm_buffer', [target_name, packet_name])\n }\n\n // Called by CosmosScreenComponent\n async get_tlm_values(items) {\n const data = await this.exec('get_tlm_values', [items])\n var len = data[0].length\n var converted = null\n for (var i = 0; i < len; i++) {\n converted = this.decode_cosmos_type(data[0][i])\n if (converted !== null) {\n data[0][i] = converted\n }\n }\n return data\n }\n\n // Called by LimitsbarWidget\n get_limits(target_name, packet_name, item_name) {\n return this.exec('get_limits', [target_name, packet_name, item_name])\n }\n\n // Called by LimitsMonitorComponent\n async tlm(target_name, packet_name, item_name) {\n const data = await this.exec('tlm', [target_name, packet_name, item_name])\n var converted = this.decode_cosmos_type(data)\n if (converted !== null) {\n data = converted\n }\n return data\n }\n\n get_all_commands(target_name) {\n return this.exec('get_all_commands', [target_name])\n }\n\n get_command(target_name, command_name) {\n return this.exec('get_command', [target_name, command_name])\n }\n\n get_cmd_value(\n target_name,\n packet_name,\n parameter_name,\n value_type = 'CONVERTED'\n ) {\n return this.exec('get_cmd_value', [\n target_name,\n packet_name,\n parameter_name,\n value_type,\n ])\n }\n\n // Called by CmdTlmServer Cmd Packets tab\n get_cmd_buffer(target_name, packet_name) {\n return this.exec('get_cmd_buffer', [target_name, packet_name])\n }\n\n // Implementation of functionality shared by cmd methods with param_lists.\n _cmd(method, target_name, command_name, param_list) {\n var converted = null\n for (var key in param_list) {\n if (Object.prototype.hasOwnProperty.call(param_list, key)) {\n converted = this.encode_cosmos_type(param_list[key])\n if (converted !== null) {\n param_list[key] = converted\n }\n }\n }\n return this.exec(method, [target_name, command_name, param_list])\n }\n\n // Called by CmdSenderComponent\n get_cmd_hazardous(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('get_cmd_hazardous', target_name)\n } else {\n return this._cmd(\n 'get_cmd_hazardous',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd', target_name)\n } else {\n return this._cmd('cmd', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw', target_name)\n } else {\n return this._cmd('cmd_raw', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_range_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_range_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_range_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_no_checks', target_name)\n } else {\n return this._cmd('cmd_no_checks', target_name, command_name, param_list)\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_hazardous_check(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_hazardous_check', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_hazardous_check',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n cmd_raw_no_checks(target_name, command_name, param_list) {\n if (command_name === undefined) {\n return this.exec('cmd_raw_no_checks', target_name)\n } else {\n return this._cmd(\n 'cmd_raw_no_checks',\n target_name,\n command_name,\n param_list\n )\n }\n }\n\n // Called by CmdSenderComponent\n get_interface_names() {\n return this.exec('get_interface_names', [])\n }\n\n // Called by CmdSenderComponent\n send_raw(interface_name, data) {\n return this.exec('send_raw', [interface_name, data])\n }\n\n list_configs(tool) {\n return this.exec('list_configs', [tool])\n }\n\n load_config(tool, name) {\n return this.exec('load_config', [tool, name])\n }\n\n save_config(tool, name, data) {\n return this.exec('save_config', [tool, name, data])\n }\n\n delete_config(tool, name) {\n return this.exec('delete_config', [tool, name])\n }\n\n get_out_of_limits() {\n return this.exec('get_out_of_limits', [])\n }\n\n get_overall_limits_state(ignored) {\n return this.exec('get_overall_limits_state', [ignored])\n }\n\n list_settings() {\n return this.exec('list_settings', [])\n }\n\n get_all_settings() {\n return this.exec('get_all_settings', [])\n }\n\n get_setting(name) {\n return this.exec('get_setting', [name])\n }\n\n get_settings(array) {\n return this.exec('get_settings', array)\n }\n\n save_setting(name, data) {\n return this.exec('save_setting', [name, data])\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('mounting-portal',{attrs:{\"mount-to\":\"#cosmos-menu\",\"append\":\"\"}},[_c('div',{staticClass:\"v-toolbar__content\"},[_vm._l((_vm.menus),function(menu,i){return _c('v-menu',{key:i,attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-1\",attrs:{\"outlined\":\"\",\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label)))}},'v-btn',attrs,false),on),[_c('span',{domProps:{\"textContent\":_vm._s(menu.label)}}),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\" mdi-menu-down \")])],1)]}}],null,true)},[_c('v-list',[_c('v-radio-group',{staticClass:\"ma-0 pa-0\",attrs:{\"value\":menu.radioGroup,\"hide-details\":\"\",\"dense\":\"\"}},[_vm._l((menu.items),function(option,j){return [(option.divider)?_c('v-divider',{key:j}):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled},domProps:{\"textContent\":_vm._s(option.icon)}})],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')),domProps:{\"textContent\":_vm._s(option.label)}}):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',{domProps:{\"textContent\":_vm._s(_vm.title)}}),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <mounting-portal mount-to=\"#cosmos-menu\" append>\n <div class=\"v-toolbar__content\">\n <v-menu offset-y v-for=\"(menu, i) in menus\" :key=\"i\">\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n outlined\n v-bind=\"attrs\"\n v-on=\"on\"\n class=\"mx-1\"\n :data-test=\"formatDT(`${title} ${menu.label}`)\"\n >\n <span v-text=\"menu.label\" />\n <v-icon right> mdi-menu-down </v-icon>\n </v-btn>\n </template>\n <v-list>\n <!-- The radio-group is necessary in case the application wants radio buttons -->\n <v-radio-group\n :value=\"menu.radioGroup\"\n hide-details\n dense\n class=\"ma-0 pa-0\"\n >\n <template v-for=\"(option, j) in menu.items\">\n <v-divider v-if=\"option.divider\" :key=\"j\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :key=\"j\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n >\n <v-list-item-action\n v-if=\"option.radio\"\n >\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action\n v-if=\"option.checkbox\"\n >\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon v-text=\"option.icon\" :disabled=\"option.disabled\" />\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n v-text=\"option.label\"\n />\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title v-text=\"title\" />\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function(string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n }\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=e3bb7458&scoped=true&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TopBar.vue?vue&type=style&index=0&id=e3bb7458&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3bb7458\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('td',{staticClass:\"text-start\"},[_vm._v(_vm._s(_vm.dataItems[0].index))]),(_vm.oneDimensional)?_c('td',{staticClass:\"text-start\"},[_vm._v(_vm._s(_vm.dataItems[0].name))]):_vm._e(),_vm._l((_vm.dataItems),function(item,index){return _c('table-item',{key:item.name,attrs:{\"item\":item},on:{\"change\":function($event){return _vm.onChange(item, index, $event)}}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('td',[(_vm.isCheckbox)?_c('v-checkbox',{attrs:{\"dense\":\"\",\"hide-details\":\"\",\"disabled\":!_vm.dataItem.editable},on:{\"change\":_vm.checkboxChange},model:{value:(_vm.checkValue),callback:function ($$v) {_vm.checkValue=$$v},expression:\"checkValue\"}}):(_vm.dataItem.states)?_c('v-select',{attrs:{\"dense\":\"\",\"hide-details\":\"\",\"items\":_vm.itemStates,\"disabled\":!_vm.dataItem.editable},on:{\"change\":_vm.stateChange},model:{value:(_vm.stateValue),callback:function ($$v) {_vm.stateValue=$$v},expression:\"stateValue\"}}):_c('v-text-field',{attrs:{\"solo\":\"\",\"dense\":\"\",\"single-line\":\"\",\"hide-no-data\":\"\",\"hide-details\":\"\",\"disabled\":!_vm.dataItem.editable},on:{\"change\":_vm.textChange},model:{value:(_vm.dataItem.value),callback:function ($$v) {_vm.$set(_vm.dataItem, \"value\", $$v)},expression:\"dataItem.value\"}})],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 <td>\n <v-checkbox\n v-if=\"isCheckbox\"\n dense\n hide-details\n v-model=\"checkValue\"\n @change=\"checkboxChange\"\n :disabled=\"!dataItem.editable\"\n />\n <v-select\n v-else-if=\"dataItem.states\"\n dense\n hide-details\n v-model=\"stateValue\"\n :items=\"itemStates\"\n @change=\"stateChange\"\n :disabled=\"!dataItem.editable\"\n />\n <v-text-field\n v-else\n solo\n dense\n single-line\n hide-no-data\n hide-details\n v-model=\"dataItem.value\"\n @change=\"textChange\"\n :disabled=\"!dataItem.editable\"\n />\n </td>\n</template>\n\n<script>\nexport default {\n props: {\n item: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n dataItem: this.item,\n stateValue: null,\n checkValue: false,\n }\n },\n created() {\n if (this.dataItem.states) {\n this.stateValue = this.dataItem.states[this.dataItem.value]\n }\n if (this.isCheckbox) {\n this.checkValue = this.stateValue === 1\n }\n },\n computed: {\n isCheckbox: function () {\n let result = true\n if (this.dataItem.states) {\n for (const state of Object.keys(this.dataItem.states)) {\n if (state !== 'CHECKED' && state !== 'UNCHECKED') {\n result = false\n }\n }\n } else {\n result = false\n }\n return result\n },\n itemStates: function () {\n let result = []\n for (const [text, value] of Object.entries(this.dataItem.states)) {\n result.push({ text: text, value: value })\n }\n return result\n },\n },\n methods: {\n checkboxChange: function () {\n if (this.checkValue) {\n this.$emit('change', 'CHECKED')\n } else {\n this.$emit('change', 'UNCHECKED')\n }\n },\n stateChange: function () {\n // Lookup the state key that corresponds to the value\n let state = Object.keys(this.dataItem.states).find(\n (key) => this.dataItem.states[key] === this.stateValue\n )\n this.$emit('change', state)\n },\n textChange: function () {\n this.$emit('change', this.dataItem.value)\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!./TableItem.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!./TableItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TableItem.vue?vue&type=template&id=3ff34eb6&\"\nimport script from \"./TableItem.vue?vue&type=script&lang=js&\"\nexport * from \"./TableItem.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 <tr>\n <td class=\"text-start\">{{ dataItems[0].index }}</td>\n <td class=\"text-start\" v-if=\"oneDimensional\">{{ dataItems[0].name }}</td>\n <table-item\n v-for=\"(item, index) in dataItems\"\n :key=\"item.name\"\n :item=\"item\"\n @change=\"onChange(item, index, $event)\"\n />\n </tr>\n</template>\n\n<script>\nimport TableItem from '@/tools/TableManager/TableItem'\n\nexport default {\n components: {\n TableItem,\n },\n props: {\n items: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n dataItems: this.items,\n }\n },\n computed: {\n oneDimensional() {\n if (this.dataItems.length === 1) {\n return true\n } else {\n return false\n }\n },\n },\n methods: {\n onChange: function (item, index, event) {\n this.$emit('change', { index: index, event: event })\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!./TableRow.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!./TableRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TableRow.vue?vue&type=template&id=23f038a6&\"\nimport script from \"./TableRow.vue?vue&type=script&lang=js&\"\nexport * from \"./TableRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},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(\" \"+_vm._s(_vm.title)+\" \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"flat\":\"\",\"autofocus\":\"\",\"solo-inverted\":\"\",\"hide-details\":\"\",\"clearable\":\"\",\"label\":\"Search\",\"data-test\":\"file-open-save-search\"},on:{\"input\":_vm.handleSearch},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-row',{staticClass:\"mt-2\",attrs:{\"dense\":\"\"}},[_c('v-treeview',{ref:\"tree\",staticStyle:{\"width\":\"100%\"},attrs:{\"dense\":\"\",\"activatable\":\"\",\"return-object\":\"\",\"items\":_vm.items,\"search\":_vm.search,\"open-on-click\":_vm.type === 'open'},on:{\"update:active\":_vm.activeFile},scopedSlots:_vm._u([{key:\"prepend\",fn:function(ref){\nvar item = ref.item;\nvar open = ref.open;\nreturn [(!item.file)?_c('v-icon',[_vm._v(\" \"+_vm._s(open ? 'mdi-folder-open' : 'mdi-folder')+\" \")]):_c('v-icon',[_vm._v(\" \"+_vm._s('mdi-language-ruby')+\" \")])]}}]),model:{value:(_vm.tree),callback:function ($$v) {_vm.tree=$$v},expression:\"tree\"}})],1),_c('v-row',{staticClass:\"my-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Filename\",\"data-test\":\"file-open-save-filename\",\"disabled\":_vm.type === 'open'},model:{value:(_vm.selectedFile),callback:function ($$v) {_vm.selectedFile=$$v},expression:\"selectedFile\"}})],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"my-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',{staticClass:\"mt-2\"},[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\",\"data-test\":\"file-open-save-cancel-btn\",\"disabled\":_vm.disableButtons},on:{\"click\":function($event){_vm.show = false}}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"type\":\"submit\",\"color\":\"primary\",\"data-test\":\"file-open-save-submit-btn\",\"disabled\":_vm.disableButtons || !!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.submit)+\" \")])],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 <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n @input=\"handleSearch\"\n v-model=\"search\"\n flat\n autofocus\n solo-inverted\n hide-details\n clearable\n label=\"Search\"\n data-test=\"file-open-save-search\"\n />\n </v-row>\n <v-row dense class=\"mt-2\">\n <v-treeview\n v-model=\"tree\"\n @update:active=\"activeFile\"\n dense\n activatable\n return-object\n ref=\"tree\"\n style=\"width: 100%\"\n :items=\"items\"\n :search=\"search\"\n :open-on-click=\"type === 'open'\"\n >\n <template v-slot:prepend=\"{ item, open }\">\n <v-icon v-if=\"!item.file\">\n {{ open ? 'mdi-folder-open' : 'mdi-folder' }}\n </v-icon>\n <v-icon v-else>\n {{ 'mdi-language-ruby' }}\n </v-icon>\n </template>\n </v-treeview>\n </v-row>\n <v-row class=\"my-2\">\n <v-text-field\n v-model=\"selectedFile\"\n hide-details\n label=\"Filename\"\n data-test=\"file-open-save-filename\"\n :disabled=\"type === 'open'\"\n />\n </v-row>\n <v-row dense>\n <span class=\"my-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n @click=\"show = false\"\n outlined\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"file-open-save-submit-btn\"\n :disabled=\"disableButtons || !!error\"\n >\n {{ submit }}\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 Api from '../services/api'\n\nexport default {\n props: {\n type: {\n type: String,\n required: true,\n validator: function (value) {\n // The value must match one of these strings\n return ['open', 'save'].indexOf(value) !== -1\n },\n },\n apiUrl: String, // Base API URL for use with scripts or cmd-tlm\n requireTargetParentDir: Boolean, // Require that the save filename be nested in a directory with the name of a target\n inputFilename: String, // passed if this is a 'save' dialog\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n tree: [],\n items: [],\n id: 1,\n search: null,\n selectedFile: null,\n disableButtons: false,\n targets: [],\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 title: function () {\n if (this.type === 'open') {\n return 'File Open'\n } else {\n return 'File Save As...'\n }\n },\n submit: function () {\n if (this.type === 'open') {\n return 'OPEN'\n } else {\n return 'SAVE'\n }\n },\n error: function () {\n if (this.selectedFile === '' || this.selectedFile === null) {\n return 'No file selected must select a file'\n }\n if (\n !this.selectedFile.match(this.validFilenameRegex) ||\n this.selectedFile.match(/\\.\\.|\\/\\/|\\.\\/|\\/\\./) // Block .'s and /'s next to each other (block path traversal)\n ) {\n let message = `${this.selectedFile} is not a valid filename. Must `\n if (this.requireTargetParentDir) {\n message += 'be in a target directory and '\n }\n message += \"only contain alphanumeric characters and / ! - _ . * ' ( )\"\n return message\n }\n return null\n },\n validFilenameRegex: function () {\n const alphanumeric = '0-9a-zA-Z'\n const charset = `${alphanumeric}\\\\/\\\\!\\\\-\\\\_\\\\.\\\\*\\\\'\\\\(\\\\)` // From https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html a-z A-Z 0-9 / ! - _ . * ' ( )\n let expression = `[${charset}]+\\\\.[${alphanumeric}]+`\n if (this.requireTargetParentDir) {\n const targets = `(${this.targets.join('|')})`\n expression = `\\\\/?${targets}\\\\/${expression}`\n }\n return new RegExp(expression)\n },\n },\n created() {\n Api.get(this.apiUrl)\n .then((response) => {\n this.items = []\n this.id = 1\n for (let file of response.data) {\n this.filepath = file\n this.insertFile(this.items, 1, file)\n this.id++\n }\n if (this.inputFilename) {\n this.selectedFile = this.inputFilename\n }\n })\n .catch((error) => {\n this.$emit('error', `Failed to connect to Cosmos. ${error}`)\n })\n if (this.requireTargetParentDir) {\n Api.get('/cosmos-api/targets').then((response) => {\n this.targets = response.data\n })\n }\n },\n methods: {\n clear: function () {\n this.show = false\n this.overwrite = false\n this.disableButtons = false\n },\n handleSearch: function (input) {\n if (input) {\n this.$refs.tree.updateAll(true)\n } else {\n this.$refs.tree.updateAll(false)\n }\n },\n activeFile: function (file) {\n if (file.length === 0) {\n this.selectedFile = null\n } else {\n this.selectedFile = file[0].path\n }\n },\n exists: function (root, name) {\n let found = false\n for (let item of root) {\n if (item.path === name) {\n return true\n }\n if (item.children) {\n found = found || this.exists(item.children, name)\n }\n }\n return found\n },\n success: function () {\n if (this.type === 'open') {\n this.openSuccess()\n } else {\n this.saveSuccess()\n }\n },\n openSuccess: function () {\n // Disable the buttons because the API call can take a bit\n this.disableButtons = true\n Api.get(`${this.apiUrl}/${this.selectedFile}`)\n .then((response) => {\n const file = {\n name: this.selectedFile,\n contents: response.data.contents,\n }\n if (response.data.suites) {\n file['suites'] = JSON.parse(response.data.suites)\n }\n if (response.data.error) {\n file['error'] = response.data.error\n }\n if (response.data.success) {\n file['success'] = response.data.success\n }\n const locked = response.data.locked\n const breakpoints = response.data.breakpoints\n this.$emit('file', { file, locked, breakpoints })\n this.clear()\n })\n .catch((error) => {\n this.$emit('error', `Failed to open ${this.selectedFile}. ${error}`)\n this.clear()\n })\n },\n saveSuccess: function () {\n const found = this.exists(this.items, this.selectedFile)\n if (found) {\n this.$dialog\n .confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {\n okText: 'Overwrite',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('filename', this.selectedFile)\n this.clear()\n })\n } else {\n this.$emit('filename', this.selectedFile)\n this.clear()\n }\n },\n insertFile: function (root, level, path) {\n var parts = path.split('/')\n // When there is only 1 part we're at the root so push the filename\n if (parts.length === 1) {\n root.push({\n id: this.id,\n name: parts[0],\n file: 'ruby',\n path: this.filepath,\n })\n this.id++\n return\n }\n // Look for the first part of the path\n const index = root.findIndex((item) => item.name === parts[0])\n if (index === -1) {\n // Name not found so push the item and add a children array\n root.push({\n id: this.id,\n name: parts[0],\n children: [],\n path: this.filepath.split('/').slice(0, level).join('/'),\n })\n this.id++\n this.insertFile(\n root[root.length - 1].children, // Start from the node we just added\n level + 1,\n parts.slice(1).join('/') // Strip the first part of the path\n )\n } else {\n // We already have something at this level so recursively\n // call the insertPart using the node we found and adjust the path\n this.insertFile(\n root[index].children,\n level + 1,\n parts.slice(1).join('/')\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!./FileOpenSaveDialog.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!./FileOpenSaveDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FileOpenSaveDialog.vue?vue&type=template&id=16b9fb88&\"\nimport script from \"./FileOpenSaveDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./FileOpenSaveDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":_vm.width},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(\" \"+_vm._s(_vm.title)+\" \")]),_c('v-spacer'),_c('div',{staticClass:\"mx-2\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"downloadIcon\"},on:{\"click\":_vm.download}},[_vm._v(\" mdi-download \")])],1)]}}])},[_c('span',[_vm._v(\" Download \")])])],1)],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('span',{staticStyle:{\"white-space\":\"pre-wrap\"}},[_vm._v(_vm._s(_vm.text))])])]),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"color\":\"primary\"},on:{\"click\":function($event){_vm.show = !_vm.show}}},[_vm._v(\" Ok \")])],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=\"width\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n <div class=\"mx-2\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"downloadIcon\" @click=\"download\">\n mdi-download\n </v-icon>\n </div>\n </template>\n <span> Download </span>\n </v-tooltip>\n </div>\n </v-system-bar>\n <v-card-text>\n <div class=\"pa-3\">\n <span style=\"white-space: pre-wrap\">{{ text }}</span>\n </div>\n </v-card-text>\n <v-card-actions>\n <v-spacer />\n <v-btn class=\"mx-2\" color=\"primary\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n value: Boolean, // value is the default prop when using v-model\n text: String,\n title: String,\n width: 800,\n },\n computed: {\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n methods: {\n download: function () {\n const blob = new Blob([this.text], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', `${this.title}.txt`)\n link.click()\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!./SimpleTextDialog.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!./SimpleTextDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SimpleTextDialog.vue?vue&type=template&id=8003a1c6&\"\nimport script from \"./SimpleTextDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./SimpleTextDialog.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-snackbar v-model=\"showReadOnlyToast\" top :timeout=\"-1\" color=\"orange\">\n <v-icon> mdi-pencil-off </v-icon>\n {{ lockedBy }} is editing this script. Editor is in read-only mode\n <template v-slot:action=\"{ attrs }\">\n <v-btn\n text\n v-bind=\"attrs\"\n color=\"danger\"\n @click=\"confirmLocalUnlock\"\n data-test=\"unlock-button\"\n >\n Unlock\n </v-btn>\n <v-btn\n text\n v-bind=\"attrs\"\n @click=\"\n () => {\n showReadOnlyToast = false\n }\n \"\n >\n dismiss\n </v-btn>\n </template>\n </v-snackbar>\n <v-file-input\n show-size\n v-model=\"fileInput\"\n ref=\"fileInput\"\n accept=\".bin\"\n data-test=\"file-input\"\n style=\"position: fixed; top: -100%\"\n />\n <v-text-field\n outlined\n dense\n readonly\n hide-details\n label=\"Definition\"\n v-model=\"definitionFilename\"\n id=\"definition-filename\"\n data-test=\"definition-filename\"\n />\n <v-text-field\n outlined\n dense\n readonly\n hide-details\n label=\"Filename\"\n v-model=\"fullFilename\"\n id=\"filename\"\n data-test=\"filename\"\n />\n <v-card>\n <v-card-title>\n Items\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-tabs v-model=\"curTab\">\n <v-tab v-for=\"(table, index) in tables\" :key=\"index\">\n {{ table.name }}\n </v-tab>\n </v-tabs>\n <v-tabs-items v-model=\"curTab\">\n <v-tab-item\n v-for=\"(table, index) in tables\"\n :key=\"`${filename}${index}`\"\n >\n <v-data-table\n :headers=\"table.headers\"\n :items=\"table.rows\"\n :search=\"search\"\n calculate-widths\n disable-pagination\n hide-default-footer\n multi-sort\n dense\n >\n <template v-slot:item=\"{ item }\">\n <table-row\n :items=\"item\"\n :key=\"JSON.stringify(item[0])\"\n @change=\"onChange(item, $event)\"\n />\n </template>\n </v-data-table>\n </v-tab-item>\n </v-tabs-items>\n </v-card>\n <file-open-save-dialog\n v-if=\"fileOpen\"\n v-model=\"fileOpen\"\n type=\"open\"\n api-url=\"/cosmos-api/tables\"\n @file=\"setFile($event)\"\n @error=\"setError($event)\"\n />\n <file-open-save-dialog\n v-if=\"showSaveAs\"\n v-model=\"showSaveAs\"\n type=\"save\"\n require-target-parent-dir\n api-url=\"/cosmos-api/tables\"\n :input-filename=\"filename\"\n @filename=\"saveAsFilename($event)\"\n @error=\"setError($event)\"\n />\n <simple-text-dialog\n v-model=\"showError\"\n :title=\"errorTitle\"\n :text=\"errorText\"\n />\n </div>\n</template>\n\n<script>\nimport Api from '@cosmosc2/tool-common/src/services/api'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\nimport TableRow from '@/tools/TableManager/TableRow'\nimport FileOpenSaveDialog from '@cosmosc2/tool-common/src/components/FileOpenSaveDialog'\nimport SimpleTextDialog from '@cosmosc2/tool-common/src/components/SimpleTextDialog'\n\nexport default {\n components: {\n TopBar,\n TableRow,\n FileOpenSaveDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n title: 'Table Manager',\n search: '',\n curTab: null,\n tables: [],\n api: null,\n definition: null,\n fileInput: '',\n definitionFilename: '',\n fileNew: false,\n filename: '',\n fileModified: '',\n lockedBy: null,\n fileOpen: false,\n showSave: false,\n showSaveAs: false,\n showError: false,\n errorTitle: '',\n errorText: '',\n }\n },\n computed: {\n readOnly: function () {\n return !!this.lockedBy\n },\n fullFilename() {\n return `${this.filename} ${this.fileModified}`.trim()\n },\n menus: function () {\n return [\n {\n label: 'File',\n items: [\n {\n label: 'New File',\n icon: 'mdi-file-plus',\n command: () => {\n this.newFile()\n },\n },\n {\n label: 'Open File',\n icon: 'mdi-folder-open',\n command: () => {\n this.openFile()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Save File',\n icon: 'mdi-content-save',\n command: () => {\n this.saveFile()\n },\n },\n {\n label: 'Save As...',\n icon: 'mdi-content-save',\n command: () => {\n this.saveAs()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Upload',\n icon: 'mdi-cloud-upload',\n command: () => {\n this.upload()\n },\n },\n {\n label: 'Download',\n icon: 'mdi-cloud-download',\n command: () => {\n this.download()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Delete File',\n icon: 'mdi-delete',\n command: () => {\n this.delete()\n },\n },\n ],\n },\n ]\n },\n },\n created() {\n this.api = new CosmosApi()\n },\n methods: {\n // File menu actions\n newFile: function () {\n this.fileModified = ''\n this.fileNew = true\n this.fileOpen = true\n },\n openFile: function () {\n this.fileOpen = true\n },\n // Called by the FileOpenDialog to set the file contents\n setFile: function ({ file, locked }) {\n // They opened a definition file so create a new binary\n if (file.name.includes('.txt')) {\n if (this.fileNew) {\n this.buildNewBinary(file)\n this.fileNew = false\n } else {\n this.getDefinition(file.name)\n }\n } else {\n this.unlockFile() // first unlock what was just being edited\n // Split off the ' *' which indicates a file is modified on the server\n this.filename = file.name.split('*')[0]\n this.fileModified = ''\n this.lockedBy = locked\n\n this.getDefinition()\n }\n },\n // Called by the FileOpenSaveDialog on error\n setError(event) {\n this.errorTitle = 'Error'\n this.errorText = `Error: ${event}`\n this.errorText = response.data.message\n this.showError = true\n },\n saveFile: function () {\n // Save a file by posting the new contents\n this.showSave = true\n\n const formData = new FormData()\n formData.append('binary', this.filename)\n formData.append('definition', this.definitionFilename)\n formData.append('tables', JSON.stringify(this.tables))\n Api.post(`/cosmos-api/tables/${this.filename}`, {\n data: formData,\n })\n .then((response) => {\n this.fileModified = ''\n setTimeout(() => {\n this.showSave = false\n }, 2000)\n })\n .catch(({ response }) => {\n this.showSave = false\n this.errorTitle = 'Save Error'\n this.errorText = response.data.message\n this.showError = true\n })\n this.lockFile() // Ensure this file is locked for editing\n },\n saveAs: function () {\n this.showSaveAs = true\n },\n saveAsFilename: function (filename) {\n this.filename = filename\n this.saveFile()\n },\n delete: function () {\n if (this.filename !== '') {\n this.$dialog\n .confirm(`Permanently delete file: ${this.filename}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/cosmos-api/tables/${this.filename}`, {\n data: {},\n })\n })\n .then((response) => {\n this.newFile()\n })\n .catch((error) => {\n if (error) {\n this.$notify.caution({\n title: 'Error',\n body: `Error deleting file: ${error}`,\n })\n }\n })\n }\n },\n download: function () {\n if (this.filename !== '') {\n Api.get(`/cosmos-api/tables/${this.filename}`).then((response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n // Return BLOB image after conversion\n const blob = new Blob([uInt8Array], {\n type: 'application/octet-stream',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute(\n 'download',\n this.filename.substring(this.filename.lastIndexOf('/') + 1)\n )\n link.click()\n })\n }\n },\n async upload() {\n this.fileInput = ''\n this.$refs.fileInput.$refs.input.click()\n // Wait for the file to be set by the dialog so upload works\n while (this.fileInput === '') {\n await new Promise((resolve) => setTimeout(resolve, 500))\n }\n this.filename = this.fileInput.name\n this.saveAs()\n },\n confirmLocalUnlock: function () {\n this.$dialog\n .confirm(\n 'Are you sure you want to unlock this file for editing? If another user is editing this file, your changes might conflict with each other.',\n {\n okText: 'Force Unlock',\n cancelText: 'Cancel',\n }\n )\n .then(() => {\n this.lockedBy = null\n return this.lockFile() // Re-lock it as this user so it's locked for anyone else who opens it\n })\n },\n lockFile: function () {\n return Api.post(`/cosmos-api/tables/${this.filename}/lock`)\n },\n unlockFile: function () {\n if (this.filename !== '' && !this.readOnly) {\n Api.post(`/cosmos-api/tables/${this.filename}/unlock`)\n }\n },\n getDefinition: function (definitionFilename = null) {\n if (!definitionFilename) {\n definitionFilename = this.filename\n .replace('/bin/', '/config/')\n .replace('.bin', '_def.txt')\n }\n const formData = new FormData()\n formData.append('binary', this.filename)\n formData.append('definition', definitionFilename)\n Api.post(`/cosmos-api/tables/load`, {\n data: formData,\n })\n .then((response) => {\n this.definitionFilename = definitionFilename\n this.tables = response.data.tables.map((table) => {\n return {\n ...table,\n // Build up the headers for proper searching\n headers: table.headers.map((text, i) => {\n const header = {\n text,\n filterable: text !== 'INDEX',\n }\n if (table.numColumns === 1) {\n // In the 1D table the searchable value is the first value in the row\n // Note the names in 1D are INDEX, NAME, VALUE\n return {\n ...header,\n value: `[0].${text.toLowerCase()}`,\n }\n } else {\n // In the 2D table the searchable value is always in the value attribute\n // of the current column item\n return {\n ...header,\n value: `[${i}].value`,\n }\n }\n }),\n }\n })\n\n if (response.data['errors']) {\n this.$notify.caution({\n title: 'Warning',\n body: response.data['errors'],\n })\n }\n })\n .catch((error) => {\n if (error.response.status == 404) {\n this.$notify.normal({\n title: 'Definition File Not Found',\n body: `Definition file ${definitionFilename} not found. Please select definition file.`,\n })\n this.fileOpen = true\n } else {\n this.$notify.serious({\n title: 'Error',\n body: `Error loading due to ${error.response.statusText}. Status: ${error.response.status}`,\n })\n }\n })\n },\n buildNewBinary: function (file) {\n const formData = new FormData()\n formData.append('contents', file.contents)\n Api.post(`/cosmos-api/tables/${file.name}/generate`, {\n data: formData,\n }).then((response) => {\n this.filename = response.data.filename\n this.getDefinition(file.name)\n })\n },\n onChange: function (item, { index, event }) {\n this.fileModified = '*'\n item[index].value = event\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!./TableManager.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!./TableManager.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TableManager.vue?vue&type=template&id=440d3459&\"\nimport script from \"./TableManager.vue?vue&type=script&lang=js&\"\nexport * from \"./TableManager.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, \".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","// 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});"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","menus","title","scopedSlots","_u","key","fn","ref","_b","on","confirmLocalUnlock","_v","showReadOnlyToast","model","value","callback","$$v","expression","_s","lockedBy","staticStyle","fileInput","definitionFilename","fullFilename","search","curTab","_l","table","index","name","filename","headers","rows","item","JSON","stringify","$event","onChange","setFile","setError","fileOpen","_e","saveAsFilename","showSaveAs","errorTitle","errorText","showError","staticRenderFns","vueInstance","Vue","axiosInstance","axios","baseURL","location","origin","timeout","params","interceptors","response","use","error","status","localStorage","cosmosToken","CosmosAuth","login","href","body","data","message","exception","class","$notify","serious","request","method","url","noAuth","noScope","updateToken","defaultMinValidity","scope","acceptOnlyDefaultHeaders","Accept","fullDefaultHeaders","get","path","put","post","delete","CosmosApi","kwparams","id","jsonrpc","keyword_params","Authorization","result","err","Error","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","length","converted","i","decode_cosmos_type","items","item_name","command_name","parameter_name","param_list","Object","prototype","hasOwnProperty","call","encode_cosmos_type","undefined","_cmd","tool","ignored","array","staticClass","menu","_g","formatDT","domProps","label","radioGroup","option","j","disabled","command","checked","icon","radio","checkbox","style","props","Array","default","String","methods","string","replaceAll","toLowerCase","component","dataItems","dataItem","editable","checkboxChange","checkValue","itemStates","stateChange","stateValue","textChange","$set","required","created","states","isCheckbox","computed","push","text","$emit","state","components","TableItem","oneDimensional","event","show","preventDefault","success","apply","arguments","handleSearch","activeFile","open","file","tree","selectedFile","directives","rawName","disableButtons","submit","validator","indexOf","apiUrl","requireTargetParentDir","Boolean","inputFilename","targets","set","validFilenameRegex","RegExp","Api","then","catch","clear","overwrite","input","$refs","updateAll","exists","root","found","openSuccess","saveSuccess","contents","locked","breakpoints","$dialog","confirm","okText","cancelText","insertFile","parts","split","filepath","children","slice","level","join","width","download","link","URL","createObjectURL","blob","setAttribute","click","TopBar","TableRow","FileOpenSaveDialog","SimpleTextDialog","tables","api","definition","fileNew","fileModified","showSave","readOnly","divider","newFile","openFile","includes","buildNewBinary","getDefinition","unlockFile","saveFile","formData","append","setTimeout","lockFile","saveAs","uInt8Array","decodedData","charCodeAt","replace","filterable","header","___CSS_LOADER_EXPORT___","module","content","__esModule","locals","exports","add"],"sourceRoot":""}
1
+ {"version":3,"file":"js/550.js","mappings":"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","sources":["webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableManager.vue?6f1b","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/services/axios.js","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/services/api.js","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/services/cosmos-api.js","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?228d","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?adab","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?dfc0","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableRow.vue?74a6","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableItem.vue?d63b","webpack://@cosmosc2/tool-tablemanager/src/tools/TableManager/TableItem.vue","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableItem.vue?0e88","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableItem.vue","webpack://@cosmosc2/tool-tablemanager/src/tools/TableManager/TableRow.vue","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableRow.vue?a252","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableRow.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue?6ad0","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue?4db4","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/FileOpenSaveDialog.vue?819c","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue?451f","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue?88d9","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/SimpleTextDialog.vue?3eda","webpack://@cosmosc2/tool-tablemanager/src/tools/TableManager/TableManager.vue","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableManager.vue?af17","webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableManager.vue","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?b2db","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?5429"],"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-snackbar',{attrs:{\"top\":\"\",\"timeout\":-1,\"color\":\"orange\"},scopedSlots:_vm._u([{key:\"action\",fn:function(ref){\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._b({attrs:{\"text\":\"\",\"color\":\"danger\",\"data-test\":\"unlock-button\"},on:{\"click\":_vm.confirmLocalUnlock}},'v-btn',attrs,false),[_vm._v(\" Unlock \")]),_c('v-btn',_vm._b({attrs:{\"text\":\"\"},on:{\"click\":function () {\n _vm.showReadOnlyToast = false\n }}},'v-btn',attrs,false),[_vm._v(\" dismiss \")])]}}]),model:{value:(_vm.showReadOnlyToast),callback:function ($$v) {_vm.showReadOnlyToast=$$v},expression:\"showReadOnlyToast\"}},[_c('v-icon',[_vm._v(\" mdi-pencil-off \")]),_vm._v(\" \"+_vm._s(_vm.lockedBy)+\" is editing this script. Editor is in read-only mode \")],1),_c('v-file-input',{ref:\"fileInput\",staticStyle:{\"position\":\"fixed\",\"top\":\"-100%\"},attrs:{\"show-size\":\"\",\"accept\":\".bin\",\"data-test\":\"file-input\"},model:{value:(_vm.fileInput),callback:function ($$v) {_vm.fileInput=$$v},expression:\"fileInput\"}}),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"readonly\":\"\",\"hide-details\":\"\",\"label\":\"Definition\",\"id\":\"definition-filename\",\"data-test\":\"definition-filename\"},model:{value:(_vm.definitionFilename),callback:function ($$v) {_vm.definitionFilename=$$v},expression:\"definitionFilename\"}}),_c('v-text-field',{attrs:{\"outlined\":\"\",\"dense\":\"\",\"readonly\":\"\",\"hide-details\":\"\",\"label\":\"Filename\",\"id\":\"filename\",\"data-test\":\"filename\"},model:{value:(_vm.fullFilename),callback:function ($$v) {_vm.fullFilename=$$v},expression:\"fullFilename\"}}),_c('v-card',[_c('v-card-title',[_vm._v(\" Items \"),_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-tabs',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.tables),function(table,index){return _c('v-tab',{key:index},[_vm._v(\" \"+_vm._s(table.name)+\" \")])}),1),_c('v-tabs-items',{model:{value:(_vm.curTab),callback:function ($$v) {_vm.curTab=$$v},expression:\"curTab\"}},_vm._l((_vm.tables),function(table,index){return _c('v-tab-item',{key:(\"\" + _vm.filename + index)},[_c('v-data-table',{attrs:{\"headers\":table.headers,\"items\":table.rows,\"search\":_vm.search,\"calculate-widths\":\"\",\"disable-pagination\":\"\",\"hide-default-footer\":\"\",\"multi-sort\":\"\",\"dense\":\"\"},scopedSlots:_vm._u([{key:\"item\",fn:function(ref){\n var item = ref.item;\nreturn [_c('table-row',{key:JSON.stringify(item[0]),attrs:{\"items\":item},on:{\"change\":function($event){return _vm.onChange(item, $event)}}})]}}],null,true)})],1)}),1)],1),(_vm.fileOpen)?_c('file-open-save-dialog',{attrs:{\"type\":\"open\",\"api-url\":\"/cosmos-api/tables\"},on:{\"file\":function($event){return _vm.setFile($event)},\"error\":function($event){return _vm.setError($event)}},model:{value:(_vm.fileOpen),callback:function ($$v) {_vm.fileOpen=$$v},expression:\"fileOpen\"}}):_vm._e(),(_vm.showSaveAs)?_c('file-open-save-dialog',{attrs:{\"type\":\"save\",\"require-target-parent-dir\":\"\",\"api-url\":\"/cosmos-api/tables\",\"input-filename\":_vm.filename},on:{\"filename\":function($event){return _vm.saveAsFilename($event)},\"error\":function($event){return _vm.setError($event)}},model:{value:(_vm.showSaveAs),callback:function ($$v) {_vm.showSaveAs=$$v},expression:\"showSaveAs\"}}):_vm._e(),_c('simple-text-dialog',{attrs:{\"title\":_vm.errorTitle,\"text\":_vm.errorText},model:{value:(_vm.showError),callback:function ($$v) {_vm.showError=$$v},expression:\"showError\"}})],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\nconst request = async function (\n method,\n url,\n { data, params = {}, headers, noAuth = false, noScope = false } = {}\n) {\n if (!noAuth) {\n try {\n await CosmosAuth.updateToken(CosmosAuth.defaultMinValidity)\n } catch (error) {\n CosmosAuth.login()\n }\n headers['Authorization'] = localStorage.cosmosToken\n }\n if (!noScope && !params['scope']) {\n params['scope'] = localStorage.scope\n }\n return axios({\n method,\n url,\n data,\n params,\n headers,\n })\n}\n\nconst acceptOnlyDefaultHeaders = {\n Accept: 'application/json',\n}\n\nconst fullDefaultHeaders = {\n ...acceptOnlyDefaultHeaders,\n 'Content-Type': 'application/json',\n}\n\nexport default {\n get: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('get', path, { params, headers, noScope, noAuth })\n },\n\n put: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('put', path, { data, params, headers, noScope, noAuth })\n },\n\n post: function (\n path,\n { data, params, headers = fullDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('post', path, { data, params, headers, noScope, noAuth })\n },\n\n delete: function (\n path,\n { params, headers = acceptOnlyDefaultHeaders, noScope, noAuth } = {}\n ) {\n return request('delete', path, { params, headers, noScope, noAuth })\n },\n}\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n*/\n\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('mounting-portal',{attrs:{\"mount-to\":\"#cosmos-menu\",\"append\":\"\"}},[_c('div',{staticClass:\"v-toolbar__content\"},[_vm._l((_vm.menus),function(menu,i){return _c('v-menu',{key:i,attrs:{\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"mx-1\",attrs:{\"outlined\":\"\",\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label)))}},'v-btn',attrs,false),on),[_c('span',{domProps:{\"textContent\":_vm._s(menu.label)}}),_c('v-icon',{attrs:{\"right\":\"\"}},[_vm._v(\" mdi-menu-down \")])],1)]}}],null,true)},[_c('v-list',[_c('v-radio-group',{staticClass:\"ma-0 pa-0\",attrs:{\"value\":menu.radioGroup,\"hide-details\":\"\",\"dense\":\"\"}},[_vm._l((menu.items),function(option,j){return [(option.divider)?_c('v-divider',{key:j}):_c('v-list-item',{key:j,attrs:{\"disabled\":option.disabled,\"data-test\":_vm.formatDT((_vm.title + \" \" + (menu.label) + \" \" + (option.label)))},on:{\"click\":option.command}},[(option.radio)?_c('v-list-item-action',[_c('v-radio',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label}})],1):_vm._e(),(option.checkbox)?_c('v-list-item-action',[_c('v-checkbox',{attrs:{\"color\":\"secondary\",\"label\":option.label,\"value\":option.label},model:{value:(_vm.checked),callback:function ($$v) {_vm.checked=$$v},expression:\"checked\"}})],1):_vm._e(),(option.icon)?_c('v-list-item-icon',[_c('v-icon',{attrs:{\"disabled\":option.disabled},domProps:{\"textContent\":_vm._s(option.icon)}})],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')),domProps:{\"textContent\":_vm._s(option.label)}}):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',{domProps:{\"textContent\":_vm._s(_vm.title)}}),_c('v-spacer')],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This program may also be used under the terms of a commercial or\n# enterprise edition license of COSMOS if purchased from the\n# copyright holder\n-->\n\n<template>\n <mounting-portal mount-to=\"#cosmos-menu\" append>\n <div class=\"v-toolbar__content\">\n <v-menu offset-y v-for=\"(menu, i) in menus\" :key=\"i\">\n <template v-slot:activator=\"{ on, attrs }\">\n <v-btn\n outlined\n v-bind=\"attrs\"\n v-on=\"on\"\n class=\"mx-1\"\n :data-test=\"formatDT(`${title} ${menu.label}`)\"\n >\n <span v-text=\"menu.label\" />\n <v-icon right> mdi-menu-down </v-icon>\n </v-btn>\n </template>\n <v-list>\n <!-- The radio-group is necessary in case the application wants radio buttons -->\n <v-radio-group\n :value=\"menu.radioGroup\"\n hide-details\n dense\n class=\"ma-0 pa-0\"\n >\n <template v-for=\"(option, j) in menu.items\">\n <v-divider v-if=\"option.divider\" :key=\"j\" />\n <v-list-item\n v-else\n @click=\"option.command\"\n :key=\"j\"\n :disabled=\"option.disabled\"\n :data-test=\"formatDT(`${title} ${menu.label} ${option.label}`)\"\n >\n <v-list-item-action\n v-if=\"option.radio\"\n >\n <v-radio\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-action\n v-if=\"option.checkbox\"\n >\n <v-checkbox\n v-model=\"checked\"\n color=\"secondary\"\n :label=\"option.label\"\n :value=\"option.label\"\n />\n </v-list-item-action>\n <v-list-item-icon v-if=\"option.icon\">\n <v-icon v-text=\"option.icon\" :disabled=\"option.disabled\" />\n </v-list-item-icon>\n <v-list-item-title\n v-if=\"!option.radio && !option.checkbox\"\n :style=\"\n 'cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : '')\n \"\n v-text=\"option.label\"\n />\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title v-text=\"title\" />\n <v-spacer />\n </div>\n </mounting-portal>\n</template>\n\n<script>\nexport default {\n props: {\n menus: {\n type: Array,\n default: function () {\n return []\n },\n },\n title: {\n type: String,\n default: '',\n },\n },\n methods: {\n // Convert the string to a standard data-test format\n formatDT: function(string) {\n return string.replaceAll(' ', '-').toLowerCase()\n },\n }\n}\n</script>\n\n<style scoped>\n.v-list >>> .v-label {\n margin-left: 5px;\n}\n.v-list-item__icon {\n /* For some reason the default margin-right is huge */\n margin-right: 15px !important;\n}\n.v-list-item__title {\n color: white;\n}\n</style>\n","import mod from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/@vue/cli-plugin-babel/node_modules/thread-loader/dist/cjs.js!../../../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js??clonedRuleSet-40[0].rules[0].use[1]!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TopBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TopBar.vue?vue&type=template&id=e3bb7458&scoped=true&\"\nimport script from \"./TopBar.vue?vue&type=script&lang=js&\"\nexport * from \"./TopBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./TopBar.vue?vue&type=style&index=0&id=e3bb7458&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e3bb7458\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',[_c('td',{staticClass:\"text-start\"},[_vm._v(_vm._s(_vm.dataItems[0].index))]),(_vm.oneDimensional)?_c('td',{staticClass:\"text-start\"},[_vm._v(_vm._s(_vm.dataItems[0].name))]):_vm._e(),_vm._l((_vm.dataItems),function(item,index){return _c('table-item',{key:item.name,attrs:{\"item\":item},on:{\"change\":function($event){return _vm.onChange(item, index, $event)}}})})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('td',[(_vm.isCheckbox)?_c('v-checkbox',{attrs:{\"dense\":\"\",\"hide-details\":\"\",\"disabled\":!_vm.dataItem.editable},on:{\"change\":_vm.checkboxChange},model:{value:(_vm.checkValue),callback:function ($$v) {_vm.checkValue=$$v},expression:\"checkValue\"}}):(_vm.dataItem.states)?_c('v-select',{attrs:{\"dense\":\"\",\"hide-details\":\"\",\"items\":_vm.itemStates,\"disabled\":!_vm.dataItem.editable},on:{\"change\":_vm.stateChange},model:{value:(_vm.stateValue),callback:function ($$v) {_vm.stateValue=$$v},expression:\"stateValue\"}}):_c('v-text-field',{attrs:{\"solo\":\"\",\"dense\":\"\",\"single-line\":\"\",\"hide-no-data\":\"\",\"hide-details\":\"\",\"disabled\":!_vm.dataItem.editable},on:{\"change\":_vm.textChange},model:{value:(_vm.dataItem.value),callback:function ($$v) {_vm.$set(_vm.dataItem, \"value\", $$v)},expression:\"dataItem.value\"}})],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 <td>\n <v-checkbox\n v-if=\"isCheckbox\"\n dense\n hide-details\n v-model=\"checkValue\"\n @change=\"checkboxChange\"\n :disabled=\"!dataItem.editable\"\n />\n <v-select\n v-else-if=\"dataItem.states\"\n dense\n hide-details\n v-model=\"stateValue\"\n :items=\"itemStates\"\n @change=\"stateChange\"\n :disabled=\"!dataItem.editable\"\n />\n <v-text-field\n v-else\n solo\n dense\n single-line\n hide-no-data\n hide-details\n v-model=\"dataItem.value\"\n @change=\"textChange\"\n :disabled=\"!dataItem.editable\"\n />\n </td>\n</template>\n\n<script>\nexport default {\n props: {\n item: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n dataItem: this.item,\n stateValue: null,\n checkValue: false,\n }\n },\n created() {\n if (this.dataItem.states) {\n this.stateValue = this.dataItem.states[this.dataItem.value]\n }\n if (this.isCheckbox) {\n this.checkValue = this.stateValue === 1\n }\n },\n computed: {\n isCheckbox: function () {\n let result = true\n if (this.dataItem.states) {\n for (const state of Object.keys(this.dataItem.states)) {\n if (state !== 'CHECKED' && state !== 'UNCHECKED') {\n result = false\n }\n }\n } else {\n result = false\n }\n return result\n },\n itemStates: function () {\n let result = []\n for (const [text, value] of Object.entries(this.dataItem.states)) {\n result.push({ text: text, value: value })\n }\n return result\n },\n },\n methods: {\n checkboxChange: function () {\n if (this.checkValue) {\n this.$emit('change', 'CHECKED')\n } else {\n this.$emit('change', 'UNCHECKED')\n }\n },\n stateChange: function () {\n // Lookup the state key that corresponds to the value\n let state = Object.keys(this.dataItem.states).find(\n (key) => this.dataItem.states[key] === this.stateValue\n )\n this.$emit('change', state)\n },\n textChange: function () {\n this.$emit('change', this.dataItem.value)\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!./TableItem.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!./TableItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TableItem.vue?vue&type=template&id=3ff34eb6&\"\nimport script from \"./TableItem.vue?vue&type=script&lang=js&\"\nexport * from \"./TableItem.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 <tr>\n <td class=\"text-start\">{{ dataItems[0].index }}</td>\n <td class=\"text-start\" v-if=\"oneDimensional\">{{ dataItems[0].name }}</td>\n <table-item\n v-for=\"(item, index) in dataItems\"\n :key=\"item.name\"\n :item=\"item\"\n @change=\"onChange(item, index, $event)\"\n />\n </tr>\n</template>\n\n<script>\nimport TableItem from '@/tools/TableManager/TableItem'\n\nexport default {\n components: {\n TableItem,\n },\n props: {\n items: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n dataItems: this.items,\n }\n },\n computed: {\n oneDimensional() {\n if (this.dataItems.length === 1) {\n return true\n } else {\n return false\n }\n },\n },\n methods: {\n onChange: function (item, index, event) {\n this.$emit('change', { index: index, event: event })\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!./TableRow.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!./TableRow.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TableRow.vue?vue&type=template&id=23f038a6&\"\nimport script from \"./TableRow.vue?vue&type=script&lang=js&\"\nexport * from \"./TableRow.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":\"600\"},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(\" \"+_vm._s(_vm.title)+\" \")]),_c('v-spacer')],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('v-row',{attrs:{\"dense\":\"\"}},[_c('v-text-field',{attrs:{\"flat\":\"\",\"autofocus\":\"\",\"solo-inverted\":\"\",\"hide-details\":\"\",\"clearable\":\"\",\"label\":\"Search\",\"data-test\":\"file-open-save-search\"},on:{\"input\":_vm.handleSearch},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})],1),_c('v-row',{staticClass:\"mt-2\",attrs:{\"dense\":\"\"}},[_c('v-treeview',{ref:\"tree\",staticStyle:{\"width\":\"100%\"},attrs:{\"dense\":\"\",\"activatable\":\"\",\"return-object\":\"\",\"items\":_vm.items,\"search\":_vm.search,\"open-on-click\":_vm.type === 'open'},on:{\"update:active\":_vm.activeFile},scopedSlots:_vm._u([{key:\"prepend\",fn:function(ref){\nvar item = ref.item;\nvar open = ref.open;\nreturn [(!item.file)?_c('v-icon',[_vm._v(\" \"+_vm._s(open ? 'mdi-folder-open' : 'mdi-folder')+\" \")]):_c('v-icon',[_vm._v(\" \"+_vm._s('mdi-language-ruby')+\" \")])]}}]),model:{value:(_vm.tree),callback:function ($$v) {_vm.tree=$$v},expression:\"tree\"}})],1),_c('v-row',{staticClass:\"my-2\"},[_c('v-text-field',{attrs:{\"hide-details\":\"\",\"label\":\"Filename\",\"data-test\":\"file-open-save-filename\",\"disabled\":_vm.type === 'open'},model:{value:(_vm.selectedFile),callback:function ($$v) {_vm.selectedFile=$$v},expression:\"selectedFile\"}})],1),_c('v-row',{attrs:{\"dense\":\"\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.error),expression:\"error\"}],staticClass:\"my-2 red--text\",domProps:{\"textContent\":_vm._s(_vm.error)}})]),_c('v-row',{staticClass:\"mt-2\"},[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"outlined\":\"\",\"data-test\":\"file-open-save-cancel-btn\",\"disabled\":_vm.disableButtons},on:{\"click\":function($event){_vm.show = false}}},[_vm._v(\" Cancel \")]),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"type\":\"submit\",\"color\":\"primary\",\"data-test\":\"file-open-save-submit-btn\",\"disabled\":_vm.disableButtons || !!_vm.error},on:{\"click\":function($event){$event.preventDefault();return _vm.success.apply(null, arguments)}}},[_vm._v(\" \"+_vm._s(_vm.submit)+\" \")])],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 <form v-on:submit.prevent=\"success\">\n <v-system-bar>\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n </v-system-bar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense>\n <v-text-field\n @input=\"handleSearch\"\n v-model=\"search\"\n flat\n autofocus\n solo-inverted\n hide-details\n clearable\n label=\"Search\"\n data-test=\"file-open-save-search\"\n />\n </v-row>\n <v-row dense class=\"mt-2\">\n <v-treeview\n v-model=\"tree\"\n @update:active=\"activeFile\"\n dense\n activatable\n return-object\n ref=\"tree\"\n style=\"width: 100%\"\n :items=\"items\"\n :search=\"search\"\n :open-on-click=\"type === 'open'\"\n >\n <template v-slot:prepend=\"{ item, open }\">\n <v-icon v-if=\"!item.file\">\n {{ open ? 'mdi-folder-open' : 'mdi-folder' }}\n </v-icon>\n <v-icon v-else>\n {{ 'mdi-language-ruby' }}\n </v-icon>\n </template>\n </v-treeview>\n </v-row>\n <v-row class=\"my-2\">\n <v-text-field\n v-model=\"selectedFile\"\n hide-details\n label=\"Filename\"\n data-test=\"file-open-save-filename\"\n :disabled=\"type === 'open'\"\n />\n </v-row>\n <v-row dense>\n <span class=\"my-2 red--text\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n @click=\"show = false\"\n outlined\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click.prevent=\"success\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"file-open-save-submit-btn\"\n :disabled=\"disableButtons || !!error\"\n >\n {{ submit }}\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 Api from '../services/api'\n\nexport default {\n props: {\n type: {\n type: String,\n required: true,\n validator: function (value) {\n // The value must match one of these strings\n return ['open', 'save'].indexOf(value) !== -1\n },\n },\n apiUrl: String, // Base API URL for use with scripts or cmd-tlm\n requireTargetParentDir: Boolean, // Require that the save filename be nested in a directory with the name of a target\n inputFilename: String, // passed if this is a 'save' dialog\n value: Boolean, // value is the default prop when using v-model\n },\n data() {\n return {\n tree: [],\n items: [],\n id: 1,\n search: null,\n selectedFile: null,\n disableButtons: false,\n targets: [],\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 title: function () {\n if (this.type === 'open') {\n return 'File Open'\n } else {\n return 'File Save As...'\n }\n },\n submit: function () {\n if (this.type === 'open') {\n return 'OPEN'\n } else {\n return 'SAVE'\n }\n },\n error: function () {\n if (this.selectedFile === '' || this.selectedFile === null) {\n return 'No file selected must select a file'\n }\n if (\n !this.selectedFile.match(this.validFilenameRegex) ||\n this.selectedFile.match(/\\.\\.|\\/\\/|\\.\\/|\\/\\./) // Block .'s and /'s next to each other (block path traversal)\n ) {\n let message = `${this.selectedFile} is not a valid filename. Must `\n if (this.requireTargetParentDir) {\n message += 'be in a target directory and '\n }\n message += \"only contain alphanumeric characters and / ! - _ . * ' ( )\"\n return message\n }\n return null\n },\n validFilenameRegex: function () {\n const alphanumeric = '0-9a-zA-Z'\n const charset = `${alphanumeric}\\\\/\\\\!\\\\-\\\\_\\\\.\\\\*\\\\'\\\\(\\\\)` // From https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html a-z A-Z 0-9 / ! - _ . * ' ( )\n let expression = `[${charset}]+\\\\.[${alphanumeric}]+`\n if (this.requireTargetParentDir) {\n const targets = `(${this.targets.join('|')})`\n expression = `\\\\/?${targets}\\\\/${expression}`\n }\n return new RegExp(expression)\n },\n },\n created() {\n Api.get(this.apiUrl)\n .then((response) => {\n this.items = []\n this.id = 1\n for (let file of response.data) {\n this.filepath = file\n this.insertFile(this.items, 1, file)\n this.id++\n }\n if (this.inputFilename) {\n this.selectedFile = this.inputFilename\n }\n })\n .catch((error) => {\n this.$emit('error', `Failed to connect to Cosmos. ${error}`)\n })\n if (this.requireTargetParentDir) {\n Api.get('/cosmos-api/targets').then((response) => {\n this.targets = response.data\n })\n }\n },\n methods: {\n clear: function () {\n this.show = false\n this.overwrite = false\n this.disableButtons = false\n },\n handleSearch: function (input) {\n if (input) {\n this.$refs.tree.updateAll(true)\n } else {\n this.$refs.tree.updateAll(false)\n }\n },\n activeFile: function (file) {\n if (file.length === 0) {\n this.selectedFile = null\n } else {\n this.selectedFile = file[0].path\n }\n },\n exists: function (root, name) {\n let found = false\n for (let item of root) {\n if (item.path === name) {\n return true\n }\n if (item.children) {\n found = found || this.exists(item.children, name)\n }\n }\n return found\n },\n success: function () {\n if (this.type === 'open') {\n this.openSuccess()\n } else {\n this.saveSuccess()\n }\n },\n openSuccess: function () {\n // Disable the buttons because the API call can take a bit\n this.disableButtons = true\n Api.get(`${this.apiUrl}/${this.selectedFile}`)\n .then((response) => {\n const file = {\n name: this.selectedFile,\n contents: response.data.contents,\n }\n if (response.data.suites) {\n file['suites'] = JSON.parse(response.data.suites)\n }\n if (response.data.error) {\n file['error'] = response.data.error\n }\n if (response.data.success) {\n file['success'] = response.data.success\n }\n const locked = response.data.locked\n const breakpoints = response.data.breakpoints\n this.$emit('file', { file, locked, breakpoints })\n this.clear()\n })\n .catch((error) => {\n this.$emit('error', `Failed to open ${this.selectedFile}. ${error}`)\n this.clear()\n })\n },\n saveSuccess: function () {\n const found = this.exists(this.items, this.selectedFile)\n if (found) {\n this.$dialog\n .confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {\n okText: 'Overwrite',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('filename', this.selectedFile)\n this.clear()\n })\n } else {\n this.$emit('filename', this.selectedFile)\n this.clear()\n }\n },\n insertFile: function (root, level, path) {\n var parts = path.split('/')\n // When there is only 1 part we're at the root so push the filename\n if (parts.length === 1) {\n root.push({\n id: this.id,\n name: parts[0],\n file: 'ruby',\n path: this.filepath,\n })\n this.id++\n return\n }\n // Look for the first part of the path\n const index = root.findIndex((item) => item.name === parts[0])\n if (index === -1) {\n // Name not found so push the item and add a children array\n root.push({\n id: this.id,\n name: parts[0],\n children: [],\n path: this.filepath.split('/').slice(0, level).join('/'),\n })\n this.id++\n this.insertFile(\n root[root.length - 1].children, // Start from the node we just added\n level + 1,\n parts.slice(1).join('/') // Strip the first part of the path\n )\n } else {\n // We already have something at this level so recursively\n // call the insertPart using the node we found and adjust the path\n this.insertFile(\n root[index].children,\n level + 1,\n parts.slice(1).join('/')\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!./FileOpenSaveDialog.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!./FileOpenSaveDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FileOpenSaveDialog.vue?vue&type=template&id=16b9fb88&\"\nimport script from \"./FileOpenSaveDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./FileOpenSaveDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/@vue/cli-service/node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"width\":_vm.width},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(\" \"+_vm._s(_vm.title)+\" \")]),_c('v-spacer'),_c('div',{staticClass:\"mx-2\"},[_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('div',_vm._g(_vm._b({},'div',attrs,false),on),[_c('v-icon',{attrs:{\"data-test\":\"downloadIcon\"},on:{\"click\":_vm.download}},[_vm._v(\" mdi-download \")])],1)]}}])},[_c('span',[_vm._v(\" Download \")])])],1)],1),_c('v-card-text',[_c('div',{staticClass:\"pa-3\"},[_c('span',{staticStyle:{\"white-space\":\"pre-wrap\"}},[_vm._v(_vm._s(_vm.text))])])]),_c('v-card-actions',[_c('v-spacer'),_c('v-btn',{staticClass:\"mx-2\",attrs:{\"color\":\"primary\"},on:{\"click\":function($event){_vm.show = !_vm.show}}},[_vm._v(\" Ok \")])],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=\"width\">\n <v-card>\n <v-system-bar>\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n <div class=\"mx-2\">\n <v-tooltip top>\n <template v-slot:activator=\"{ on, attrs }\">\n <div v-on=\"on\" v-bind=\"attrs\">\n <v-icon data-test=\"downloadIcon\" @click=\"download\">\n mdi-download\n </v-icon>\n </div>\n </template>\n <span> Download </span>\n </v-tooltip>\n </div>\n </v-system-bar>\n <v-card-text>\n <div class=\"pa-3\">\n <span style=\"white-space: pre-wrap\">{{ text }}</span>\n </div>\n </v-card-text>\n <v-card-actions>\n <v-spacer />\n <v-btn class=\"mx-2\" color=\"primary\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n value: Boolean, // value is the default prop when using v-model\n text: String,\n title: String,\n width: 800,\n },\n computed: {\n show: {\n get() {\n return this.value\n },\n set(value) {\n this.$emit('input', value) // input is the default event when using v-model\n },\n },\n },\n methods: {\n download: function () {\n const blob = new Blob([this.text], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', `${this.title}.txt`)\n link.click()\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!./SimpleTextDialog.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!./SimpleTextDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SimpleTextDialog.vue?vue&type=template&id=8003a1c6&\"\nimport script from \"./SimpleTextDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./SimpleTextDialog.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-snackbar v-model=\"showReadOnlyToast\" top :timeout=\"-1\" color=\"orange\">\n <v-icon> mdi-pencil-off </v-icon>\n {{ lockedBy }} is editing this script. Editor is in read-only mode\n <template v-slot:action=\"{ attrs }\">\n <v-btn\n text\n v-bind=\"attrs\"\n color=\"danger\"\n @click=\"confirmLocalUnlock\"\n data-test=\"unlock-button\"\n >\n Unlock\n </v-btn>\n <v-btn\n text\n v-bind=\"attrs\"\n @click=\"\n () => {\n showReadOnlyToast = false\n }\n \"\n >\n dismiss\n </v-btn>\n </template>\n </v-snackbar>\n <v-file-input\n show-size\n v-model=\"fileInput\"\n ref=\"fileInput\"\n accept=\".bin\"\n data-test=\"file-input\"\n style=\"position: fixed; top: -100%\"\n />\n <v-text-field\n outlined\n dense\n readonly\n hide-details\n label=\"Definition\"\n v-model=\"definitionFilename\"\n id=\"definition-filename\"\n data-test=\"definition-filename\"\n />\n <v-text-field\n outlined\n dense\n readonly\n hide-details\n label=\"Filename\"\n v-model=\"fullFilename\"\n id=\"filename\"\n data-test=\"filename\"\n />\n <v-card>\n <v-card-title>\n Items\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-tabs v-model=\"curTab\">\n <v-tab v-for=\"(table, index) in tables\" :key=\"index\">\n {{ table.name }}\n </v-tab>\n </v-tabs>\n <v-tabs-items v-model=\"curTab\">\n <v-tab-item\n v-for=\"(table, index) in tables\"\n :key=\"`${filename}${index}`\"\n >\n <v-data-table\n :headers=\"table.headers\"\n :items=\"table.rows\"\n :search=\"search\"\n calculate-widths\n disable-pagination\n hide-default-footer\n multi-sort\n dense\n >\n <template v-slot:item=\"{ item }\">\n <table-row\n :items=\"item\"\n :key=\"JSON.stringify(item[0])\"\n @change=\"onChange(item, $event)\"\n />\n </template>\n </v-data-table>\n </v-tab-item>\n </v-tabs-items>\n </v-card>\n <file-open-save-dialog\n v-if=\"fileOpen\"\n v-model=\"fileOpen\"\n type=\"open\"\n api-url=\"/cosmos-api/tables\"\n @file=\"setFile($event)\"\n @error=\"setError($event)\"\n />\n <file-open-save-dialog\n v-if=\"showSaveAs\"\n v-model=\"showSaveAs\"\n type=\"save\"\n require-target-parent-dir\n api-url=\"/cosmos-api/tables\"\n :input-filename=\"filename\"\n @filename=\"saveAsFilename($event)\"\n @error=\"setError($event)\"\n />\n <simple-text-dialog\n v-model=\"showError\"\n :title=\"errorTitle\"\n :text=\"errorText\"\n />\n </div>\n</template>\n\n<script>\nimport Api from '@cosmosc2/tool-common/src/services/api'\nimport { CosmosApi } from '@cosmosc2/tool-common/src/services/cosmos-api'\nimport TopBar from '@cosmosc2/tool-common/src/components/TopBar'\nimport TableRow from '@/tools/TableManager/TableRow'\nimport FileOpenSaveDialog from '@cosmosc2/tool-common/src/components/FileOpenSaveDialog'\nimport SimpleTextDialog from '@cosmosc2/tool-common/src/components/SimpleTextDialog'\n\nexport default {\n components: {\n TopBar,\n TableRow,\n FileOpenSaveDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n title: 'Table Manager',\n search: '',\n curTab: null,\n tables: [],\n api: null,\n definition: null,\n fileInput: '',\n definitionFilename: '',\n fileNew: false,\n filename: '',\n fileModified: '',\n lockedBy: null,\n fileOpen: false,\n showSave: false,\n showSaveAs: false,\n showError: false,\n errorTitle: '',\n errorText: '',\n }\n },\n computed: {\n readOnly: function () {\n return !!this.lockedBy\n },\n fullFilename() {\n return `${this.filename} ${this.fileModified}`.trim()\n },\n menus: function () {\n return [\n {\n label: 'File',\n items: [\n {\n label: 'New File',\n icon: 'mdi-file-plus',\n command: () => {\n this.newFile()\n },\n },\n {\n label: 'Open File',\n icon: 'mdi-folder-open',\n command: () => {\n this.openFile()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Save File',\n icon: 'mdi-content-save',\n command: () => {\n this.saveFile()\n },\n },\n {\n label: 'Save As...',\n icon: 'mdi-content-save',\n command: () => {\n this.saveAs()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Upload',\n icon: 'mdi-cloud-upload',\n command: () => {\n this.upload()\n },\n },\n {\n label: 'Download',\n icon: 'mdi-cloud-download',\n command: () => {\n this.download()\n },\n },\n {\n divider: true,\n },\n {\n label: 'Delete File',\n icon: 'mdi-delete',\n command: () => {\n this.delete()\n },\n },\n ],\n },\n ]\n },\n },\n created() {\n this.api = new CosmosApi()\n },\n methods: {\n // File menu actions\n newFile: function () {\n this.fileModified = ''\n this.fileNew = true\n this.fileOpen = true\n },\n openFile: function () {\n this.fileOpen = true\n },\n // Called by the FileOpenDialog to set the file contents\n setFile: function ({ file, locked }) {\n // They opened a definition file so create a new binary\n if (file.name.includes('.txt')) {\n if (this.fileNew) {\n this.buildNewBinary(file)\n this.fileNew = false\n } else {\n this.getDefinition(file.name)\n }\n } else {\n this.unlockFile() // first unlock what was just being edited\n // Split off the ' *' which indicates a file is modified on the server\n this.filename = file.name.split('*')[0]\n this.fileModified = ''\n this.lockedBy = locked\n\n this.getDefinition()\n }\n },\n // Called by the FileOpenSaveDialog on error\n setError(event) {\n this.errorTitle = 'Error'\n this.errorText = `Error: ${event}`\n this.errorText = response.data.message\n this.showError = true\n },\n saveFile: function () {\n // Save a file by posting the new contents\n this.showSave = true\n\n const formData = new FormData()\n formData.append('binary', this.filename)\n formData.append('definition', this.definitionFilename)\n formData.append('tables', JSON.stringify(this.tables))\n Api.post(`/cosmos-api/tables/${this.filename}`, {\n data: formData,\n })\n .then((response) => {\n this.fileModified = ''\n setTimeout(() => {\n this.showSave = false\n }, 2000)\n })\n .catch(({ response }) => {\n this.showSave = false\n this.errorTitle = 'Save Error'\n this.errorText = response.data.message\n this.showError = true\n })\n this.lockFile() // Ensure this file is locked for editing\n },\n saveAs: function () {\n this.showSaveAs = true\n },\n saveAsFilename: function (filename) {\n this.filename = filename\n this.saveFile()\n },\n delete: function () {\n if (this.filename !== '') {\n this.$dialog\n .confirm(`Permanently delete file: ${this.filename}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/cosmos-api/tables/${this.filename}`, {\n data: {},\n })\n })\n .then((response) => {\n this.newFile()\n })\n .catch((error) => {\n if (error) {\n this.$notify.caution({\n title: 'Error',\n body: `Error deleting file: ${error}`,\n })\n }\n })\n }\n },\n download: function () {\n if (this.filename !== '') {\n Api.get(`/cosmos-api/tables/${this.filename}`).then((response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n // Return BLOB image after conversion\n const blob = new Blob([uInt8Array], {\n type: 'application/octet-stream',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute(\n 'download',\n this.filename.substring(this.filename.lastIndexOf('/') + 1)\n )\n link.click()\n })\n }\n },\n async upload() {\n this.fileInput = ''\n this.$refs.fileInput.$refs.input.click()\n // Wait for the file to be set by the dialog so upload works\n while (this.fileInput === '') {\n await new Promise((resolve) => setTimeout(resolve, 500))\n }\n this.filename = this.fileInput.name\n this.saveAs()\n },\n confirmLocalUnlock: function () {\n this.$dialog\n .confirm(\n 'Are you sure you want to unlock this file for editing? If another user is editing this file, your changes might conflict with each other.',\n {\n okText: 'Force Unlock',\n cancelText: 'Cancel',\n }\n )\n .then(() => {\n this.lockedBy = null\n return this.lockFile() // Re-lock it as this user so it's locked for anyone else who opens it\n })\n },\n lockFile: function () {\n return Api.post(`/cosmos-api/tables/${this.filename}/lock`)\n },\n unlockFile: function () {\n if (this.filename !== '' && !this.readOnly) {\n Api.post(`/cosmos-api/tables/${this.filename}/unlock`)\n }\n },\n getDefinition: function (definitionFilename = null) {\n if (!definitionFilename) {\n definitionFilename = this.filename\n .replace('/bin/', '/config/')\n .replace('.bin', '_def.txt')\n }\n const formData = new FormData()\n formData.append('binary', this.filename)\n formData.append('definition', definitionFilename)\n Api.post(`/cosmos-api/tables/load`, {\n data: formData,\n })\n .then((response) => {\n this.definitionFilename = definitionFilename\n this.tables = response.data.tables.map((table) => {\n return {\n ...table,\n // Build up the headers for proper searching\n headers: table.headers.map((text, i) => {\n const header = {\n text,\n filterable: text !== 'INDEX',\n }\n if (table.numColumns === 1) {\n // In the 1D table the searchable value is the first value in the row\n // Note the names in 1D are INDEX, NAME, VALUE\n return {\n ...header,\n value: `[0].${text.toLowerCase()}`,\n }\n } else {\n // In the 2D table the searchable value is always in the value attribute\n // of the current column item\n return {\n ...header,\n value: `[${i}].value`,\n }\n }\n }),\n }\n })\n\n if (response.data['errors']) {\n this.$notify.caution({\n title: 'Warning',\n body: response.data['errors'],\n })\n }\n })\n .catch((error) => {\n if (error.response.status == 404) {\n this.$notify.normal({\n title: 'Definition File Not Found',\n body: `Definition file ${definitionFilename} not found. Please select definition file.`,\n })\n this.fileOpen = true\n } else {\n this.$notify.serious({\n title: 'Error',\n body: `Error loading due to ${error.response.statusText}. Status: ${error.response.status}`,\n })\n }\n })\n },\n buildNewBinary: function (file) {\n const formData = new FormData()\n formData.append('contents', file.contents)\n Api.post(`/cosmos-api/tables/${file.name}/generate`, {\n data: formData,\n }).then((response) => {\n this.filename = response.data.filename\n this.getDefinition(file.name)\n })\n },\n onChange: function (item, { index, event }) {\n this.fileModified = '*'\n item[index].value = event\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!./TableManager.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!./TableManager.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TableManager.vue?vue&type=template&id=440d3459&\"\nimport script from \"./TableManager.vue?vue&type=script&lang=js&\"\nexport * from \"./TableManager.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, \".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","// 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});"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","menus","title","scopedSlots","_u","key","fn","ref","_b","on","confirmLocalUnlock","_v","showReadOnlyToast","model","value","callback","$$v","expression","_s","lockedBy","staticStyle","fileInput","definitionFilename","fullFilename","search","curTab","_l","table","index","name","filename","headers","rows","item","JSON","stringify","$event","onChange","setFile","setError","fileOpen","_e","saveAsFilename","showSaveAs","errorTitle","errorText","showError","staticRenderFns","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","class","$notify","serious","request","method","url","noAuth","noScope","updateToken","defaultMinValidity","scope","acceptOnlyDefaultHeaders","Accept","fullDefaultHeaders","get","path","put","post","delete","CosmosApi","kwparams","id","jsonrpc","keyword_params","Authorization","result","err","Error","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","length","converted","i","decode_cosmos_type","items","item_name","command_name","parameter_name","param_list","Object","prototype","hasOwnProperty","call","encode_cosmos_type","undefined","_cmd","tool","ignored","array","staticClass","menu","_g","formatDT","domProps","label","radioGroup","option","j","disabled","command","checked","icon","radio","checkbox","style","props","default","methods","component","dataItems","dataItem","editable","checkboxChange","checkValue","itemStates","stateChange","stateValue","textChange","$set","required","created","computed","isCheckbox","text","components","TableItem","oneDimensional","event","show","preventDefault","success","apply","arguments","handleSearch","activeFile","open","file","tree","selectedFile","directives","rawName","disableButtons","submit","validator","apiUrl","requireTargetParentDir","inputFilename","targets","set","validFilenameRegex","Api","then","catch","clear","exists","root","found","openSuccess","contents","locked","breakpoints","saveSuccess","confirm","okText","cancelText","insertFile","children","level","parts","width","download","link","TopBar","TableRow","FileOpenSaveDialog","SimpleTextDialog","tables","api","definition","fileNew","fileModified","showSave","readOnly","divider","newFile","openFile","saveFile","formData","setTimeout","saveAs","uInt8Array","upload","lockFile","unlockFile","getDefinition","replace","filterable","header","buildNewBinary","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","add"],"sourceRoot":""}