cosmosc2-tool-tablemanager 5.0.4 → 5.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/309.js","mappings":"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","sources":["webpack://@cosmosc2/tool-tablemanager/./src/tools/TableManager/TableManager.vue?93a9","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?0cb9","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?e6d1","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?8c14","webpack://@cosmosc2/tool-tablemanager/../cosmosc2-tool-common/src/components/TopBar.vue?89b9"],"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-row',{attrs:{\"dense\":\"\"}},[_c('v-col',{attrs:{\"cols\":\"6\"}},[_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\"}})],1),_c('v-col',{attrs:{\"cols\":\"6\"}},[_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\"}})],1)],1),_c('v-row',{staticClass:\"mb-1\",attrs:{\"dense\":\"\"}},[_c('v-col',{staticClass:\"mr-auto\",attrs:{\"cols\":\"auto\"}},[_c('span',{staticClass:\"text-body-1 ma-2\"},[_vm._v(\"File Download:\")]),_c('v-btn',{staticClass:\"mr-3\",attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":_vm.filename == '',\"data-test\":\"download-file-binary\"},on:{\"click\":function($event){return _vm.downloadBinary(null)}}},[_vm._v(\" Binary \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-code \")])],1),_c('v-btn',{staticClass:\"mr-3\",attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":_vm.filename == '',\"data-test\":\"download-file-definition\"},on:{\"click\":function($event){return _vm.downloadDefinition(null)}}},[_vm._v(\" Definition \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-document-edit \")])],1),_c('v-btn',{attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":_vm.filename == '',\"data-test\":\"download-file-report\"},on:{\"click\":function($event){return _vm.downloadReport(null)}}},[_vm._v(\" Report \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-document \")])],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":!_vm.uploadScript,\"data-test\":\"upload-file\"},on:{\"click\":function($event){return _vm.upload()}}},[_vm._v(\" Upload \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-upload \")])],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-btn',{attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":!_vm.downloadScript,\"data-test\":\"download-file\"},on:{\"click\":function($event){return _vm.download()}}},[_vm._v(\" Download \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-download \")])],1)],1),_c('v-col',{attrs:{\"cols\":\"auto\"}},[_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n var on = ref.on;\n var attrs = ref.attrs;\nreturn [_c('span',_vm._g(_vm._b({},'span',attrs,false),on),[_c('v-checkbox',{staticClass:\"shrink mt-0\",attrs:{\"label\":\"B/G\",\"data-test\":\"upload-background\"},model:{value:(_vm.scriptBackground),callback:function ($$v) {_vm.scriptBackground=$$v},expression:\"scriptBackground\"}})],1)]}}])},[_c('span',[_vm._v(\"Run upload download scripts in the background\")])])],1)],1),_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,\"items-per-page\":20,\"footer-props\":{\n itemsPerPageOptions: [10, 20, 50, 100, -1],\n },\"calculate-widths\":\"\",\"multi-sort\":\"\",\"dense\":\"\",\"data-test\":table.name},scopedSlots:_vm._u([{key:\"item\",fn:function(ref){\n var item = ref.item;\nreturn [_c('table-row',{key:item[0].name,attrs:{\"items\":item},on:{\"change\":function($event){return _vm.onChange(item, $event)}}})]}},(_vm.tables.length > 1)?{key:\"footer\",fn:function(){return [_c('div',{staticClass:\"ma-3\",staticStyle:{\"position\":\"absolute\"}},[_c('span',{staticClass:\"text-body-1 mr-3\"},[_vm._v(\"Table Download:\")]),_c('v-btn',{staticClass:\"mr-3\",attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":_vm.filename == '',\"data-test\":\"download-table-binary\"},on:{\"click\":function($event){return _vm.downloadBinary(table.name)}}},[_vm._v(\" Binary \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-code \")])],1),_c('v-btn',{staticClass:\"mr-3\",attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":_vm.filename == '',\"data-test\":\"download-table-definition\"},on:{\"click\":function($event){return _vm.downloadDefinition(table.name)}}},[_vm._v(\" Definition \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-document-edit \")])],1),_c('v-btn',{attrs:{\"dense\":\"\",\"color\":\"primary\",\"disabled\":_vm.filename == '',\"data-test\":\"download-table-report\"},on:{\"click\":function($event){return _vm.downloadReport(table.name)}}},[_vm._v(\" Report \"),_c('v-icon',{attrs:{\"right\":\"\",\"dark\":\"\"}},[_vm._v(\" mdi-file-document \")])],1)],1)]},proxy:true}:null],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: 60000,\n params: {},\n})\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error.response) {\n if (error.response.status === 401) {\n delete localStorage.cosmosToken\n CosmosAuth.login(location.href)\n } else {\n // Individual tools can set axiosIgnoreResponse to an error code\n // they potentially expect, e.g. '404', in which case we ignore it\n // Since localStorage only supports strings call toString on the status\n if (\n localStorage.axiosIgnoreResponse === error.response.status.toString()\n ) {\n return Promise.reject(error)\n }\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 } else {\n throw error\n }\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 // TODO: Currently unused but seemed like a useful function\n async hashString(string) {\n if (window.isSecureContext) {\n // Encode the string as an arrayBuffer which the subtle crypto API uses\n const arrayBuffer = new TextEncoder().encode(string)\n // Use the subtle crypto API to perform a SHA256 Sum of the array buffer\n // The resulting hash is stored in an array buffer\n const hashAsArrayBuffer = await crypto.subtle.digest(\n 'SHA-256',\n arrayBuffer\n )\n // To create a string we will get the hexadecimal value of each byte of the array buffer\n // This gets us an array where each byte of the array buffer becomes one item in the array\n const uint8ViewOfHash = new Uint8Array(hashAsArrayBuffer)\n // We then convert it to a regular array so we can convert each item to hexadecimal strings\n // Where to characters of 0-9 or a-f represent a number between 0 and 16, containing 4 bits of information, so 2 of them is 8 bits (1 byte).\n return Array.from(uint8ViewOfHash)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n // else ?\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}},[_vm._v(_vm._s(option.icon))])],1):_vm._e(),(!option.radio && !option.checkbox)?_c('v-list-item-title',{style:('cursor: pointer;' + (option.disabled ? 'opacity: 0.2' : ''))},[_vm._v(_vm._s(option.label))]):_vm._e()],1)]})],2)],1)],1)}),_c('v-spacer'),_c('v-toolbar-title',[_vm._v(_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 v-if=\"option.radio\">\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 v-if=\"option.checkbox\">\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 :disabled=\"option.disabled\">{{ option.icon }}</v-icon>\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 >{{ option.label }}</v-list-item-title\n >\n </v-list-item>\n </template>\n </v-radio-group>\n </v-list>\n </v-menu>\n <v-spacer />\n <v-toolbar-title>{{ title }}</v-toolbar-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=0b311b9a&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=0b311b9a&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 \"0b311b9a\",\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,\"data-test\":\"table-item-checkbox\"},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,\"data-test\":\"table-item-select\"},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,\"data-test\":\"table-item-text-field\"},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 data-test=\"table-item-checkbox\"\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 data-test=\"table-item-select\"\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 data-test=\"table-item-text-field\"\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=fcb69fce&\"\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-row dense>\n <v-col cols=\"6\">\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-col>\n <v-col cols=\"6\">\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-col>\n </v-row>\n <v-row dense class=\"mb-1\">\n <v-col cols=\"auto\" class=\"mr-auto\">\n <span class=\"text-body-1 ma-2\">File Download:</span>\n <v-btn\n dense\n color=\"primary\"\n class=\"mr-3\"\n @click=\"downloadBinary(null)\"\n :disabled=\"filename == ''\"\n data-test=\"download-file-binary\"\n >\n Binary\n <v-icon right dark> mdi-file-code </v-icon>\n </v-btn>\n <v-btn\n dense\n color=\"primary\"\n class=\"mr-3\"\n @click=\"downloadDefinition(null)\"\n :disabled=\"filename == ''\"\n data-test=\"download-file-definition\"\n >\n Definition\n <v-icon right dark> mdi-file-document-edit </v-icon>\n </v-btn>\n <v-btn\n dense\n color=\"primary\"\n @click=\"downloadReport(null)\"\n :disabled=\"filename == ''\"\n data-test=\"download-file-report\"\n >\n Report\n <v-icon right dark> mdi-file-document </v-icon>\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n dense\n color=\"primary\"\n @click=\"upload()\"\n :disabled=\"!uploadScript\"\n data-test=\"upload-file\"\n >\n Upload\n <v-icon right dark> mdi-file-upload </v-icon>\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n dense\n color=\"primary\"\n @click=\"download()\"\n :disabled=\"!downloadScript\"\n data-test=\"download-file\"\n >\n Download\n <v-icon right dark> mdi-file-download </v-icon>\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-tooltip bottom>\n <template v-slot:activator=\"{ on, attrs }\">\n <span v-bind=\"attrs\" v-on=\"on\">\n <v-checkbox\n v-model=\"scriptBackground\"\n label=\"B/G\"\n class=\"shrink mt-0\"\n data-test=\"upload-background\"\n />\n </span>\n </template>\n <span>Run upload download scripts in the background</span>\n </v-tooltip>\n </v-col>\n </v-row>\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 :items-per-page=\"20\"\n :footer-props=\"{\n itemsPerPageOptions: [10, 20, 50, 100, -1],\n }\"\n calculate-widths\n multi-sort\n dense\n :data-test=\"table.name\"\n >\n <template v-slot:item=\"{ item }\">\n <table-row\n :items=\"item\"\n :key=\"item[0].name\"\n @change=\"onChange(item, $event)\"\n />\n </template>\n <template v-slot:footer v-if=\"tables.length > 1\">\n <div style=\"position: absolute\" class=\"ma-3\">\n <span class=\"text-body-1 mr-3\">Table Download:</span>\n <v-btn\n dense\n color=\"primary\"\n class=\"mr-3\"\n @click=\"downloadBinary(table.name)\"\n :disabled=\"filename == ''\"\n data-test=\"download-table-binary\"\n >\n Binary\n <v-icon right dark> mdi-file-code </v-icon>\n </v-btn>\n <v-btn\n dense\n color=\"primary\"\n class=\"mr-3\"\n @click=\"downloadDefinition(table.name)\"\n :disabled=\"filename == ''\"\n data-test=\"download-table-definition\"\n >\n Definition\n <v-icon right dark> mdi-file-document-edit </v-icon>\n </v-btn>\n <v-btn\n dense\n color=\"primary\"\n @click=\"downloadReport(table.name)\"\n :disabled=\"filename == ''\"\n data-test=\"download-table-report\"\n >\n Report\n <v-icon right dark> mdi-file-document </v-icon>\n </v-btn>\n </div>\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 uploadScript: false,\n downloadScript: false,\n scriptBackground: true,\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: 'Load Binary',\n // icon: 'mdi-cloud-upload',\n // command: () => {\n // this.loadBinary()\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 watch: {\n // Everytime the filename changes we figure out if there is an associated upload & download script\n filename: function (val) {\n let upload =\n this.filename.split('/').slice(0, 2).join('/') + '/procedures/upload.rb'\n let download =\n this.filename.split('/').slice(0, 2).join('/') +\n '/procedures/download.rb'\n // Temporarily ignore any 404 errors since it's ok that we get one\n // The whole point of this is to check if the file exists or not\n localStorage.axiosIgnoreResponse = '404' // localStorage only supports strings\n Api.get(`/cosmos-api/tables/${upload}`)\n .then((response) => {\n this.uploadScript = true\n })\n .catch((error) => {\n this.uploadScript = false\n })\n Api.get(`/cosmos-api/tables/${download}`)\n .then((response) => {\n this.downloadScript = true\n delete localStorage.axiosIgnoreResponse\n })\n .catch((error) => {\n this.downloadScript = false\n delete localStorage.axiosIgnoreResponse\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.name)\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 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 Api.put(`/cosmos-api/tables/${this.filename}/save-as/${filename}`)\n this.filename = filename\n this.getDefinition(this.definitionFilename)\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 downloadBinary: function (tableName = null) {\n const formData = new FormData()\n formData.append('binary', this.filename)\n formData.append('definition', this.definitionFilename)\n if (tableName !== null) {\n formData.append('table', tableName)\n }\n Api.post(`/cosmos-api/tables/binary`, {\n data: formData,\n }).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('download', response.data.filename)\n link.click()\n })\n },\n downloadDefinition: function (tableName = null) {\n const formData = new FormData()\n formData.append('definition', this.definitionFilename)\n if (tableName !== null) {\n formData.append('table', tableName)\n }\n Api.post(`/cosmos-api/tables/definition`, {\n data: formData,\n }).then((response) => {\n const blob = new Blob([response.data.contents], {\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', response.data.filename)\n link.click()\n })\n },\n downloadReport: function (tableName = null) {\n const formData = new FormData()\n formData.append('binary', this.filename)\n formData.append('definition', this.definitionFilename)\n if (tableName !== null) {\n formData.append('table', tableName)\n }\n Api.post(`/cosmos-api/tables/report`, {\n data: formData,\n }).then((response) => {\n const header =\n `Binary: ${this.filename}\\n` +\n `Definition: ${this.definitionFilename}\\n\\n`\n const blob = new Blob([header, response.data.contents], {\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', response.data.filename)\n link.click()\n })\n },\n upload() {\n let upload =\n this.filename.split('/').slice(0, 2).join('/') + '/procedures/upload.rb'\n Api.post(`/script-api/scripts/${upload}/run`, {\n data: {\n environment: [{ key: 'TBL_FILENAME', value: this.filename }],\n },\n }).then((response) => {\n if (this.scriptBackground !== true) {\n window.open(`/tools/scriptrunner/${response.data}`, '_blank')\n }\n })\n },\n download() {\n this.$dialog\n .confirm(\n `Are you sure you want to overwrite ${this.filename}? ` +\n 'You can Save As to create a new file and then Download to preserve the existing file. ' +\n 'Note: Once the download completes you will need to re-open the file to see changes.',\n {\n okText: 'Download (Overwrite!)',\n cancelText: 'Cancel',\n }\n )\n .then(() => {\n let download =\n this.filename.split('/').slice(0, 2).join('/') +\n '/procedures/download.rb'\n Api.post(`/script-api/scripts/${download}/run`, {\n data: {\n environment: [{ key: 'TBL_FILENAME', value: this.filename }],\n },\n }).then((response) => {\n if (this.scriptBackground !== true) {\n window.open(`/tools/scriptrunner/${response.data}`, '_blank')\n }\n })\n })\n .catch((error) => {}) // Cancel, do nothing\n },\n // TODO: Need to load to tmp dir or something before we can saveAs to rename\n // async loadBinary() {\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? ' +\n '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 this.tables = [] // Clear so table is re-rendered\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 (filename) {\n const formData = new FormData()\n formData.append('definition', filename)\n Api.post(`/cosmos-api/tables/generate`, {\n data: formData,\n }).then((response) => {\n this.filename = response.data.filename\n this.getDefinition(filename)\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=80020794&\"\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-0b311b9a] .v-label{margin-left:5px}.v-list-item__icon[data-v-0b311b9a]{margin-right:15px!important}.v-list-item__title[data-v-0b311b9a]{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=0b311b9a&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(\"772a3f68\", 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","fullFilename","definitionFilename","staticClass","filename","$event","downloadBinary","downloadDefinition","downloadReport","uploadScript","upload","downloadScript","download","_g","scriptBackground","search","curTab","_l","table","index","name","headers","rows","itemsPerPageOptions","item","onChange","tables","length","proxy","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","axiosIgnoreResponse","toString","Promise","reject","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","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","string","window","isSecureContext","arrayBuffer","TextEncoder","encode","crypto","subtle","digest","hashAsArrayBuffer","uint8ViewOfHash","Uint8Array","Array","from","map","b","padStart","join","menu","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","link","TopBar","TableRow","FileOpenSaveDialog","SimpleTextDialog","api","definition","fileNew","fileModified","showSave","readOnly","divider","watch","newFile","openFile","saveFile","formData","setTimeout","saveAs","uInt8Array","environment","lockFile","unlockFile","getDefinition","replace","filterable","header","buildNewBinary","___CSS_LOADER_EXPORT___","push","module","content","__esModule","locals","exports","add"],"sourceRoot":""}