aboutsummaryrefslogtreecommitdiffstats
path: root/Software/.jxbrowser-data/Cache/f_000059
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-08-01 17:22:53 +0300
committerAvi Levkovich <avi@twine-s.com>2019-08-01 17:22:53 +0300
commit42471da0b2a19c964fc2c3df39cc2e8a6aaf5e2e (patch)
treefe233e51157d3d17a2eafe85f93df0b8b865826e /Software/.jxbrowser-data/Cache/f_000059
parent293cca91ee3737b47424d1f7febd9dca8b0a9c03 (diff)
downloadTango-42471da0b2a19c964fc2c3df39cc2e8a6aaf5e2e.tar.gz
Tango-42471da0b2a19c964fc2c3df39cc2e8a6aaf5e2e.zip
update the new FPGA (17.6.19) addresses and the function Change_Motor_SPI_Direction
Diffstat (limited to 'Software/.jxbrowser-data/Cache/f_000059')
-rw-r--r--Software/.jxbrowser-data/Cache/f_0000592301
1 files changed, 2301 insertions, 0 deletions
diff --git a/Software/.jxbrowser-data/Cache/f_000059 b/Software/.jxbrowser-data/Cache/f_000059
new file mode 100644
index 000000000..9cec2d798
--- /dev/null
+++ b/Software/.jxbrowser-data/Cache/f_000059
@@ -0,0 +1,2301 @@
+Polymer({ is : "ti-rov-table",
+ properties: {
+ columnStates: {
+ type: Array,
+ value: function() { return []; }
+ },
+ viewsData: {
+ type: Object,
+ value: {}
+ },
+ dataMessage: {
+ type: String,
+ value: ""
+ },
+ expandAll: {
+ type: Boolean,
+ value: false
+ },
+ instanceDataTable: {
+ type: Array,
+ value: function() { return []; }
+ },
+ instanceTable: {
+ type: Object,
+ value: function() { return {}; }
+ },
+ isInstanceDataView: {
+ type: Boolean,
+ value: false
+ },
+ isInstanceView: {
+ type: Boolean,
+ value: false
+ },
+ isRawView: {
+ type: Boolean,
+ value: false
+ },
+ isTreeView: {
+ type: Boolean,
+ value: false
+ },
+ isTreeTableView: {
+ type: Boolean,
+ value: false
+ },
+ moduleName: {
+ type: String,
+ value: ""
+ },
+ rawTable: {
+ type: Array,
+ value: function() { return []; }
+ },
+ showDataMessage: {
+ type: Boolean,
+ value: false
+ },
+ treeTable: {
+ type: Array,
+ value: function() { return []; }
+ },
+ treeTableTable: {
+ type: Object,
+ value: function() { return []; }
+ },
+ viewName: {
+ type: String,
+ value: ""
+ },
+ isGlobal: {
+ type: Boolean,
+ value: true
+ },
+ viewData: {
+ type: Object,
+ value: {}
+ },
+ viewType: {
+ type: String,
+ value: ""
+ },
+ hasFormats: {
+ type: Boolean,
+ value: false
+ },
+ rovTdStyle: {
+ type: String,
+ value: 'display:table-cell;text-align:left;padding-left:4px;padding-right:5px;white-space:nowrap;'
+ },
+ colsDraggable : {
+ type : Boolean,
+ value : true
+ },
+ notifyObj : {
+ type: Object,
+ value: null
+ },
+ colFormatsDirty : {
+ type: Boolean,
+ value: false
+ }
+ },
+ ready : function () {
+ this.viewsData = rovUtils.getLocalStorageObject('viewsData-storage');
+ this.colsDraggable = navigator.appVersion.indexOf('Win') != -1;
+ },
+ atMaxDepth : function(dataObj) {
+ return (dataObj.properties.length > 0 &&
+ typeof(dataObj.properties[0]) == 'string' &&
+ dataObj.properties[0].search(/Max depth/) >= 0);
+ },
+ cellArray : function(arrObj, colFormats, colName, fontFamily) {
+ if (arrObj.val.length <= 1) {
+ arrObj.val = arrObj.val.length == 0 ? '' : arrObj.val[0];
+ arrObj.val = this.formatVal(arrObj.val, colFormats, colName);
+ }
+ else {
+ arrObj.arrVals = rovUtils.shallowCopy(arrObj.val);
+ for (var i = 0; i < arrObj.arrVals.length; i++) {
+ arrObj.arrVals[i] = this.formatVal(arrObj.arrVals[i], colFormats, colName);
+ }
+ arrObj.val = arrObj.arrVals[0];
+ arrObj.isArray = true;
+ arrObj.style = this.rovTdStyle + 'cursor:default;' + fontFamily;
+ }
+ },
+ cellDropMouseOver : function (e) {
+ var listElem = e.currentTarget.lastElementChild;
+ listElem.style.minWidth = (e.currentTarget.clientWidth - 4)+ 'px';
+ },
+ chRawNodeTapped : function(event) {
+ var indexArr = event.currentTarget.id.split('_');
+ var parentIndex = Number(indexArr[0]); /* temporary! */
+ var chIndex = Number(indexArr[1]);
+ var goldChildRows = this.rawTable[parentIndex].goldChildRows;
+ goldChildRows[chIndex].expanded = !goldChildRows[chIndex].expanded;
+ var newRows = [];
+ var i = 0;
+ while (i < goldChildRows.length) {
+ if (goldChildRows[i].id == event.currentTarget.id) {
+ if (goldChildRows[i].expanded) {
+ goldChildRows[i].icon = 'remove';
+ var newRow = rovUtils.shallowCopy(goldChildRows[i++]);
+ newRows.push(newRow);
+ }
+ else {
+ goldChildRows[i].icon = 'add';
+ var newRow = rovUtils.shallowCopy(goldChildRows[i]);
+ newRows.push(newRow);
+
+ /* Skip everything at a deeper level */
+ var level = goldChildRows[i++].level;
+ while (i < goldChildRows.length && goldChildRows[i].level > level) {
+ ++i;
+ }
+ }
+ if (i >= goldChildRows.length) {
+ break;
+ }
+ }
+ if (goldChildRows[i].hasIcon && !goldChildRows[i].expanded) {
+ newRows.push(goldChildRows[i]);
+ /* skip all deeper levels */
+ var level = goldChildRows[i++].level;
+ while (i < goldChildRows.length && goldChildRows[i].level > level) {
+ ++i;
+ }
+ }
+ else {
+ newRows.push(goldChildRows[i++]);
+ }
+ }
+ this.set('rawTable.' + indexArr[0] + '.childRows', newRows);
+ },
+ chttNodeTapped : function(event) {
+ var indexArr = event.currentTarget.id.split('_');
+ var parentIndex = Number(indexArr[0]); /* temporary! */
+ var chIndex = Number(indexArr[1]);
+ var goldChildRows = this.treeTableTable[parentIndex].goldChildRows;
+ goldChildRows[chIndex].expanded = !goldChildRows[chIndex].expanded;
+ var newRows = [];
+ var i = 0;
+ while (i < goldChildRows.length) {
+ if (goldChildRows[i].id == event.currentTarget.id) {
+ if (goldChildRows[i].expanded) {
+ goldChildRows[i].icon = 'remove';
+ newRows.push(rovUtils.shallowCopy(goldChildRows[i++]));
+ }
+ else {
+ goldChildRows[i].icon = 'add';
+ newRows.push(rovUtils.shallowCopy(goldChildRows[i]));
+
+ /* Skip everything at a deeper level */
+ var level = goldChildRows[i++].level;
+ while (i < goldChildRows.length && goldChildRows[i].level > level) {
+ ++i;
+ }
+ }
+ if (i >= goldChildRows.length) {
+ break;
+ }
+ }
+ if (goldChildRows[i].hasIcon && !goldChildRows[i].expanded) {
+ newRows.push(goldChildRows[i]);
+ /* skip all deeper levels */
+ var level = goldChildRows[i++].level;
+ while (i < goldChildRows.length && goldChildRows[i].level > level) {
+ ++i;
+ }
+ }
+ else {
+ newRows.push(goldChildRows[i++]);
+ }
+ }
+ this.treeTableTable.childRowsWithAllCols[parentIndex] = newRows;
+ var selData = this.getSelectedData('TREE_TABLE', [newRows]);
+ this.set('treeTableTable.' + parentIndex + '.childRows', selData.rows[0]);
+ },
+ closeColumnsSelector : function (e) {
+ var dialog = this.$.columnsSelector;
+ if (dialog) {
+ dialog.close();
+ }
+ },
+ colFormatChanged : function(e) {
+ var newFormat = e.target.selectedItem.textContent.trim();
+ var colName = e.currentTarget.parentElement.previousElementSibling.firstElementChild.id;
+ var columnStates = this.viewsData[this.moduleName + '.' + this.viewName].columnStates;
+ for (var i = 0; i < columnStates.length; i++) {
+ if (columnStates[i].name == colName) {
+ columnStates[i].format = newFormat;
+ break;
+ }
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+
+ /* Apply format */
+ var allCols;
+ if (this.viewType == 'INSTANCE' || this.viewType == 'MODULE') {
+ allCols = this.instanceTable.allCols;
+ }
+ else if (this.viewType == 'INSTANCE_DATA' || this.viewType == 'MODULE_DATA') {
+ allCols = this.instanceDataTable.allCols;
+ }
+ else if (this.viewType == 'TREE_TABLE') {
+ allCols = this.treeTableTable.allCols;
+ }
+ this.displayTable(this.viewData, this.viewName, this.viewType, allCols, false, true);
+ },
+ colsChanged : function(e) {
+ if (!this.$.columnsSelector.opened) {
+ return;
+ }
+ var formatSelect = e.currentTarget.parentElement.nextElementSibling.firstElementChild;
+ if (formatSelect) {
+ formatSelect.disabled = !e.currentTarget.checked;
+ }
+ var colName = e.currentTarget.id;
+ var columnStates = this.viewsData[this.moduleName + '.' + this.viewName].columnStates;
+ for (var i = 0; i < columnStates.length; i++) {
+ if (columnStates[i].name == colName) {
+ columnStates[i].checked = e.currentTarget.checked;
+ break;
+ }
+ }
+ if (this.notifyObj) {
+ this.notifyObj.contentResizing();
+ }
+ this.columnsChanged();
+ if (this.notifyObj) {
+ this.notifyObj.contentResized();
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ },
+ columnDragOver : function (event) {
+ event.preventDefault();
+ },
+ columnDragStart : function (event) {
+ event.dataTransfer.setData("text", 'cell: ' + this.getColumnIndex(event.target.textContent));
+ },
+ columnDrop : function (event) {
+ var data = event.dataTransfer.getData("text");
+ if (data.indexOf('cell: ') == -1) {
+ return;
+ }
+ event.preventDefault();
+ var srcCol = Number(data.substr(6));
+ var destCol = this.getColumnIndex(event.target.textContent);
+ if (srcCol == destCol) {
+ return;
+ }
+ var viewData = this.viewsData[this.moduleName + '.' + this.viewName];
+ if (this.isInstanceView) {
+ var instTable = {};
+ /* preserve old */
+ instTable.allCols = this.instanceTable.allCols;
+ instTable.fullRows = this.instanceTable.fullRows;
+ instTable.columns = this.instanceTable.columns;
+
+ var newCols = rovUtils.shallowCopy(this.instanceTable.columns);
+ newCols.splice(destCol, 0, newCols.splice(srcCol, 1)[0]);
+ this.updateColumnsData(instTable, newCols);
+
+ var newDisplayCols = rovUtils.shallowCopy(this.instanceTable.displayColumns);
+ newDisplayCols.splice(destCol, 0, newDisplayCols.splice(srcCol, 1)[0]);
+ if (viewData.sortCol) {
+ var sortCol = newCols.indexOf(viewData.sortCol);
+ if (sortCol == -1) {
+ viewData.sortCol = null;
+ }
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+
+ var newRows = [];
+ var row;
+ var rows = this.instanceTable.rows;
+ for (var i = 0; i < rows.length; i++) {
+ row = rovUtils.shallowCopy(rows[i]);
+ row.compareKey = rows[i].compareKey;
+ row.splice(destCol, 0, row.splice(srcCol, 1)[0]);
+ newRows.push(row);
+ }
+
+ /* refresh view */
+ instTable.rows = newRows;
+ instTable.columns = newCols;
+ instTable.displayColumns = newDisplayCols;
+ this.instanceTable = instTable;
+ }
+ else if (this.isInstanceDataView) {
+ var instDataTable = {};
+ this.copyInstanceDataTableProps(instDataTable);
+
+ var newCols = rovUtils.shallowCopy(this.instanceDataTable.columns);
+ newCols.splice(destCol, 0, newCols.splice(srcCol, 1)[0]);
+ this.updateColumnsData(instDataTable, newCols);
+
+ var newDisplayCols = rovUtils.shallowCopy(this.instanceDataTable.displayColumns);
+ newDisplayCols.splice(destCol, 0, newDisplayCols.splice(srcCol, 1)[0]);
+ if (viewData.sortCol) {
+ var sortCol = newCols.indexOf(viewData.sortCol);
+ if (sortCol == -1) {
+ viewData.sortCol = null;
+ }
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+
+ var newRows = [];
+ var row;
+ var rows = this.instanceDataTable.rows;
+ for (var i = 0; i < rows.length; i++) {
+ newRows.push({});
+ newRows[i].expanded = rows[i].expanded;
+ if (instDataTable.showInstSelect) {
+ newRows[i].label = rows[i].label;
+ }
+ newRows[i].rowVals = [];
+ for (var j = 0; j < rows[i].rowVals.length; j++) {
+ row = rovUtils.shallowCopy(rows[i].rowVals[j]);
+ row.compareKey = rows[i].rowVals[j].compareKey;
+ row.splice(destCol, 0, row.splice(srcCol, 1)[0]);
+ newRows[i].rowVals.push(row);
+ }
+ }
+
+ /* refresh view */
+ instDataTable.rows = newRows;
+ instDataTable.columns = newCols;
+ instDataTable.displayColumns = newDisplayCols;
+ this.instanceDataTable = instDataTable;
+ }
+ else if (this.isTreeTableView) {
+ /* preserve old */
+ var trTableTable = this.copyTreeTable(this.treeTableTable);
+ var newCols = rovUtils.shallowCopy(this.treeTableTable.columns);
+ newCols.splice(destCol, 0, newCols.splice(srcCol, 1)[0]);
+ this.updateColumnsData(trTableTable, newCols);
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ for (var i = 0; i < trTableTable.length; i++) {
+ for (var j = 0; j < trTableTable[i].childRows.length; j++) {
+ var curChildRow = trTableTable[i].childRows[j];
+ if (!curChildRow.hasIcon && !curChildRow.atMax) {
+ var curRowCells = rovUtils.shallowCopy(curChildRow.cells);
+ curRowCells.splice(destCol, 0, curRowCells.splice(srcCol, 1)[0]);
+ trTableTable[i].childRows[j].cells = curRowCells;
+ trTableTable[i].childRows[j].compareKey = curChildRow.compareKey;
+ }
+ }
+ }
+ /* refresh view */
+ trTableTable.columns = newCols;
+ this.set('treeTableTable', trTableTable);
+ }
+ },
+ columnsChanged : function() {
+ if (this.isInstanceView) {
+ var instTable = {};
+ /* preserve old */
+ instTable.allCols = this.instanceTable.allCols;
+ instTable.fullRows = this.instanceTable.fullRows;
+ var viewData = this.viewsData[this.moduleName + '.' + this.viewName];
+
+ /* refresh view */
+ var selData = this.getSelectedData('INSTANCE', this.instanceTable.fullRows);
+ if (viewData.orderedColumns) {
+ this.updateColumnsData(instTable, selData.cols);
+ }
+ var sortCol = -1;
+ if (viewData.sortCol) {
+ sortCol = selData.cols.indexOf(viewData.sortCol);
+ if (sortCol == -1) {
+ viewData.sortCol = null;
+ }
+ }
+ instTable.columns = selData.cols;
+ instTable.rows = selData.rows;
+
+ instTable.displayColumns = [];
+ for (var i = 0; i < instTable.columns.length; i++) {
+ var colObj = {};
+ colObj.name = instTable.columns[i];
+ if (viewData.sortCol && colObj.name == viewData.sortCol) {
+ colObj.isSortCol = true;
+ colObj.icon = (viewData.sortDir == 'up') ? 'arrow-drop-up' : 'arrow-drop-down';
+ }
+ else {
+ colObj.isSortCol = false;
+ }
+ instTable.displayColumns.push(colObj);
+ }
+ this.instanceTable = instTable;
+ if (sortCol >= 0) {
+ this.columnSort(sortCol);
+ }
+ this.$.rovInstanceTemplate.render();
+ }
+ else if (this.isInstanceDataView) {
+ var instDataTable = {};
+ this.copyInstanceDataTableProps(instDataTable);
+ var viewData = this.viewsData[this.moduleName + '.' + this.viewName];
+
+ /* refresh view */
+ var selData = this.getSelectedData('INSTANCE_DATA', this.instanceDataTable.fullRows);
+ if (this.viewsData[this.moduleName + '.' + this.viewName].orderedColumns) {
+ this.updateColumnsData(instDataTable, selData.cols);
+ }
+ var sortCol = -1;
+ if (viewData.sortCol) {
+ sortCol = selData.cols.indexOf(viewData.sortCol);
+ if (sortCol == -1) {
+ viewData.sortCol = null;
+ }
+ }
+ instDataTable.columns = selData.cols;
+ instDataTable.rows = selData.rows;
+
+ instDataTable.displayColumns = [];
+ for (var i = 0; i < instDataTable.columns.length; i++) {
+ var colObj = {};
+ colObj.name = instDataTable.columns[i];
+ if (viewData.sortCol && colObj.name == viewData.sortCol) {
+ colObj.isSortCol = true;
+ colObj.icon = (viewData.sortDir == 'up') ? 'arrow-drop-up' : 'arrow-drop-down';
+ }
+ else {
+ colObj.isSortCol = false;
+ }
+ instDataTable.displayColumns.push(colObj);
+ }
+ this.instanceDataTable = instDataTable;
+ if (sortCol >= 0) {
+ this.columnSort(sortCol);
+ }
+ this.$.rovInstanceTemplate.render();
+ }
+ else if (this.isTreeTableView) {
+ /* preserve old */
+ var trTableTable = [];
+ trTableTable.allCols = this.treeTableTable.allCols;
+ trTableTable.childRowsWithAllCols = this.treeTableTable.childRowsWithAllCols;
+ for (var i = 0; i < this.treeTableTable.length; i++) {
+ trTableTable.push({});
+ trTableTable[i].parentNode = this.treeTableTable[i].parentNode;
+ trTableTable[i].goldChildRows = this.treeTableTable[i].goldChildRows;
+ trTableTable[i].expanded = this.treeTableTable[i].expanded;
+ }
+ /* refresh view */
+ var selData = this.getSelectedData('TREE_TABLE', this.treeTableTable.childRowsWithAllCols);
+ if (this.viewsData[this.moduleName + '.' + this.viewName].orderedColumns) {
+ this.updateColumnsData(trTableTable, selData.cols);
+ }
+ trTableTable.columns = selData.cols;
+ for (var i = 0; i < selData.rows.length; i++) {
+ trTableTable[i].childRows = selData.rows[i];
+ }
+ this.treeTableTable = trTableTable;
+ this.$.rovTreeTableTemplate.render();
+ }
+ },
+ columnsContextMenu : function(e, container, containerLeft) {
+ var dialog = this.$.columnsSelector;
+ if (dialog) {
+ this.set('columnStates', this.viewsData[this.moduleName + '.' + this.viewName].columnStates);
+ var maxStr = '';
+ var numHasFormats = 0;
+ for (var i = 0; i < this.columnStates.length; i++) {
+ if (this.columnStates[i].name.length > maxStr.length) {
+ maxStr = this.columnStates[i].name;
+ }
+ if (this.columnStates[i].hasFormat) {
+ ++numHasFormats;
+ }
+ }
+ /* for margins, checkbox and droplists */
+ var width = rovUtils.getStringWidth(maxStr) + rovUtils.getStringWidth('Scientific') + 65;
+ dialog.style.width = width + 'px';
+ var left = e.pageX;
+ if (left + width > document.documentElement.clientWidth) {
+ left -= width;
+ var leftMin = containerLeft;
+ if (left < leftMin) {
+ left = leftMin;
+ }
+ }
+ dialog.style.left = left + 'px'; /* + 43 for close button & column titles*/
+ var height = ((this.columnStates.length + 1) * 25) + (numHasFormats * 7) + 43;
+ if (height > container.clientHeight) {
+ height = container.clientHeight;
+ }
+ var top = e.y + (36 - e.offsetY) + 23; /* make table column headings visible */
+ if (top + height > document.documentElement.clientHeight) {
+ top = e.y - height;
+ if (top < 0) {
+ top = 0;
+ }
+ }
+ dialog.style.top = top + 'px';
+ dialog.style.height = height + 'px';
+ dialog.style.maxHeight = (height * 1.25) + 'px';
+ dialog.open();
+ }
+ },
+ columnsSelectorKeyPress : function (e) {
+ this.$.columnsSelector.close();
+ },
+ columnSort : function(colIndex, toggle) {
+ function numCompare(a, b) {
+ return (Number(a) - Number(b));
+ }
+ function reverseNumCompare(a, b) {
+ return (Number(b) - Number(a));
+ }
+ var viewData = this.viewsData[this.moduleName + '.' + this.viewName];
+ if (this.isInstanceView) {
+ var instTable = {};
+ /* preserve old */
+ instTable.allCols = this.instanceTable.allCols;
+ instTable.fullRows = this.instanceTable.fullRows;
+ instTable.columns = this.instanceTable.columns;
+ var rows = this.instanceTable.rows;
+ var sortColName = instTable.columns[colIndex];
+ var colVals = [];
+ for (var i = 0; i < rows.length; i++) {
+ colVals.push(rows[i][colIndex].val);
+ }
+ var origVals = colVals.join(',');
+
+ var sortDir;
+ var nan = isNaN(colVals[0]) || colVals[0] == '';
+ if (toggle ) {
+ if (viewData.sortCol == sortColName) {
+ sortDir = (viewData.sortDir == 'down') ? 'up' : 'down';
+ if (sortDir == 'down') {
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ }
+ else {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ }
+ }
+ else { /* new sort col */
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ sortDir = 'down';
+ if (origVals == colVals.join(',')) {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ sortDir = 'up';
+ }
+ }
+ }
+ else if (viewData.sortCol) { /* it's a restore/refresh, use saved direction */
+ sortDir = viewData.sortDir;
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ if (sortDir == 'up') {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ }
+ }
+ else { /* defensive */
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ sortDir = 'down';
+ if (origVals == colVals.join(',')) {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ sortDir = 'up';
+ }
+ }
+
+ var sortRows = [];
+ var pushed = [];
+ for (i = 0; i < colVals.length; i++) {
+ for (var j = 0; j < rows.length; j++) {
+ if (rows[j][colIndex].val == colVals[i] && pushed.indexOf(j) == -1) {
+ sortRows.push(rows[j]);
+ pushed.push(j);
+ break;
+ }
+ }
+ }
+ /* Update persistant storage */
+ viewData.sortCol = instTable.columns[colIndex];
+ viewData.sortDir = sortDir;
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+
+ /* refresh view */
+ instTable.rows = sortRows;
+ instTable.displayColumns = [];
+ for (var i = 0; i < instTable.columns.length; i++) {
+ var colObj = {};
+ colObj.name = instTable.columns[i];
+ if (colObj.name == viewData.sortCol) {
+ colObj.isSortCol = true;
+ colObj.icon = (sortDir == 'down') ? 'arrow-drop-down' : 'arrow-drop-up';
+ }
+ else {
+ colObj.isSortCol = false;
+ }
+ instTable.displayColumns.push(colObj);
+ }
+ this.instanceTable = instTable;
+ }
+ else if (this.isInstanceDataView) {
+ var instDataTable = {};
+ this.copyInstanceDataTableProps(instDataTable);
+
+ var sortColName = instDataTable.columns[colIndex];
+ var rows = this.instanceDataTable.rows;
+ var sortRows = [];
+ var sortDir;
+ for (var i = 0; i < rows.length; i++) {
+ sortRows.push({});
+ sortRows[i].expanded = rows[i].expanded;
+ if (instDataTable.showInstSelect) {
+ sortRows[i].label = rows[i].label;
+ }
+ var colVals = [];
+ for (var j = 0; j < rows[i].rowVals.length; j++) {
+ colVals.push(rows[i].rowVals[j][colIndex].val);
+ }
+ var nan = isNaN(colVals[0]) || colVals[0] == '';
+ if (i == 0) {
+ var origVals = colVals.join(',');
+ if (toggle ) {
+ if (viewData.sortCol == sortColName) {
+ sortDir = (viewData.sortDir == 'down') ? 'up' : 'down';
+ if (sortDir == 'down') {
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ }
+ else {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ }
+ }
+ else { /* new sort col */
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ sortDir = 'down';
+ if (origVals == colVals.join(',')) {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ sortDir = 'up';
+ }
+ }
+ }
+ else if (viewData.sortCol) { /* it's a restore/refresh, use saved direction */
+ sortDir = viewData.sortDir;
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ if (sortDir == 'up') {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ }
+ }
+ else { /* defensive */
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ sortDir = 'down';
+ if (origVals == colVals.join(',')) {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ sortDir = 'up';
+ }
+ }
+ }
+ else {
+ nan ? colVals.sort() : colVals.sort(numCompare);
+ if (sortDir == 'up') {
+ nan ? colVals.reverse() : colVals.sort(reverseNumCompare);
+ }
+ }
+ var sortRowVals = [];
+ var pushed = [];
+ for (j = 0; j < colVals.length; j++) {
+ for (var k = 0; k < rows[i].rowVals.length; k++) {
+ if (rows[i].rowVals[k][colIndex].val == colVals[j] && pushed.indexOf(k) == -1) {
+ sortRowVals.push(rows[i].rowVals[k]);
+ pushed.push(k);
+ break;
+ }
+ }
+ }
+ sortRows[i].rowVals = sortRowVals;
+ }
+ /* Update persistant storage */
+ viewData.sortCol = instDataTable.columns[colIndex];
+ viewData.sortDir = sortDir;
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+
+ /* refresh view */
+ instDataTable.rows = sortRows;
+ instDataTable.displayColumns = [];
+ for (var i = 0; i < instDataTable.columns.length; i++) {
+ var colObj = {};
+ colObj.name = instDataTable.columns[i];
+ if (colObj.name == viewData.sortCol) {
+ colObj.isSortCol = true;
+ colObj.icon = (sortDir == 'down') ? 'arrow-drop-down' : 'arrow-drop-up';
+ }
+ else {
+ colObj.isSortCol = false;
+ }
+ instDataTable.displayColumns.push(colObj);
+ }
+ this.instanceDataTable = instDataTable;
+ }
+ },
+ columnsSanityCheck : function(allCols) {
+ var key = this.moduleName + '.' + this.viewName;
+ var columnStates = this.viewsData[key].columnStates;
+ var storedNames = [];
+
+ /* Check for columns that exist in storage, but not in exe */
+ var missingExeCols = [];
+ for (var i = 0; i < columnStates.length; i++) {
+ if (allCols.indexOf(columnStates[i].name) == -1) {
+ missingExeCols.push(columnStates[i].name);
+ }
+ storedNames.push(columnStates[i].name); /* save names for next check */
+ }
+
+ /* Check for columns exist in exe, but not in storage */
+ var missingStorageCols = [];
+ for (var i = 0; i < allCols.length; i++) {
+ if (storedNames.indexOf(allCols[i]) == -1) {
+ missingStorageCols.push(allCols[i]);
+ }
+ }
+ if (missingExeCols.length > 0) {
+ for (var i = 0; i < missingExeCols.length; i++) {
+ console.warn('Warning: Column "' + missingExeCols[i] +
+ '" is not present in ' + key);
+ }
+ /* Remove them from storage */
+ var newColumnStates = [];
+ var prevColumnStates = this.viewsData[key].columnStates;
+ for (var i = 0; i < prevColumnStates.length; i++) {
+ if (missingExeCols.indexOf(prevColumnStates[1].name) == -1) {
+ newColumnStates.push(rovUtils.shallowCopy(prevColumnStates[i]));
+ }
+ }
+ this.viewsData[key].columnStates = newColumnStates;
+
+ }
+ if (missingStorageCols.length > 0) {
+ for (var i = 0; i < missingStorageCols.length; i++) {
+ console.warn('Warning: Column "' + missingStorageCols[i] +
+ '" is not present in ' + key + ' saved state');
+ }
+ /* Add them to storage */
+ var newColumnStates = [];
+ var prevColumnStates = this.viewsData[key].columnStates;
+ for (var i = 0; i < allCols.length; i++) {
+ if (missingStorageCols.indexOf(allCols[i]) >= 0) {
+ newColumnStates.push({name:allCols[i], checked:true});
+ }
+ else {
+ for (var j = 0; j < prevColumnStates.length; j++) {
+ if (allCols[i] == prevColumnStates[j].name) {
+ newColumnStates.push(rovUtils.shallowCopy(prevColumnStates[j]));
+ break;
+ }
+ }
+ }
+ }
+ this.viewsData[key].columnStates = newColumnStates;
+ }
+ if ((missingExeCols.length > 0 || missingStorageCols.length > 0) && this.isGlobal) {
+ this.saveViewData();
+ }
+ return (missingStorageCols);
+ },
+ columnsSelectorClosed : function (e) {
+ if (e.target.id == 'columnsSelector') {
+ this.set('columnStates', []);
+ }
+ },
+ copyInstanceDataTableProps : function (instDataTable) {
+ instDataTable.allCols = this.instanceDataTable.allCols;
+ instDataTable.fullRows = this.instanceDataTable.fullRows;
+ instDataTable.columns = this.instanceDataTable.columns;
+ instDataTable.showInstSelect = this.instanceDataTable.showInstSelect;
+ instDataTable.colsShowing = this.instanceDataTable.colsShowing;
+ instDataTable.currentInst = this.instanceDataTable.currentInst;
+ instDataTable.instNames = rovUtils.shallowCopy(this.instanceDataTable.instNames);
+ },
+ /*
+ TREE_TABLE data structure:
+
+ treeTableTable = [
+ { childRows = [
+ { hasIcon:
+ true
+ expanded: true
+ icon: "remove"
+ id: "0_0"
+ false
+ atMax: Boolean
+ cells: Array (only defined if atMax is false)
+ level: Integer (0)
+ name: String ("drivers")
+ style: String ("padding-left: 30px; cursor:pointer;")
+ }
+ ]
+ expanded: Boolean
+ goldChildRows: Array
+ parentNode: String
+ }
+ ]
+ allCols: Array
+ childRowsWithAllCols: Array * the current expanded state of the table *
+ columns: Array
+ */
+ copyTreeTable : function(srcTable) {
+ function copyChildRows(srcRows) {
+ var childRows = [];
+ for (var i = 0; i < srcRows.length; i++) {
+ childRows.push({});
+ childRows[i].level = srcRows[i].level;
+ childRows[i].name = srcRows[i].name;
+ childRows[i].style = srcRows[i].style;
+ childRows[i].hasIcon = srcRows[i].hasIcon;
+ if (childRows[i].hasIcon) {
+ childRows[i].expanded = srcRows[i].expanded;
+ childRows[i].icon = srcRows[i].icon;
+ childRows[i].id = srcRows[i].id;
+ childRows[i].compareKey = srcRows[i].compareKey;
+ }
+ else {
+ childRows[i].atMax = srcRows[i].atMax;
+ if (!childRows[i].atMax) {
+ childRows[i].compareKey = srcRows[i].compareKey;
+ childRows[i].cells = rovUtils.shallowCopy(srcRows[i].cells);
+ }
+ }
+ }
+ return (childRows);
+ }
+
+ var destTable = [];
+ destTable.allCols = rovUtils.shallowCopy(srcTable.allCols);
+ destTable.columns = rovUtils.shallowCopy(srcTable.columns);
+
+ for (var i = 0; i < srcTable.length; i++) {
+ destTable.push({});
+ destTable[i].parentNode = srcTable[i].parentNode;
+ destTable[i].expanded = srcTable[i].expanded;
+ destTable[i].childRows = copyChildRows(srcTable[i].childRows);
+ destTable[i].goldChildRows = copyChildRows(srcTable[i].goldChildRows);
+ }
+ destTable.childRowsWithAllCols = [];
+ for (i = 0; i < srcTable.childRowsWithAllCols.length; i++) {
+ destTable.childRowsWithAllCols.push(copyChildRows(srcTable.childRowsWithAllCols[i]));
+ }
+ return (destTable);
+ },
+ displayTable : function(viewData, viewName, viewType, viewColumns, refresh, keepExpanded) {
+ this.viewName = viewName;
+ this.isInstanceView = false;
+ this.isTreeView = false;
+ this.isTreeTableView = false;
+ this.isInstanceDataView = false;
+ this.isRawView = false;
+ this.showDataMessage = false;
+ var viewIsShowing = false;
+ this.colFormatsDirty = false;
+ if (viewData && typeof(viewData) == 'object') {
+ if ((rovUtils.isArray(viewData) && viewData.length == 0) ||
+ (rovUtils.isObject(viewData) && Object.keys(viewData).length == 0) ||
+ (!rovUtils.isArray(viewData) && viewData.elements && viewData.elements.length == 0)) {
+
+ this.dataMessage = 'No data to display';
+ this.showDataMessage = true;
+ }
+ else if (viewType == 'INSTANCE' || viewType == 'MODULE') {
+ var fullRows = [];
+ var allCols = rovUtils.shallowCopy(viewColumns);
+ var key = this.moduleName + '.' + this.viewName;
+ this.viewsData[key] = this.initViewsDataItem(key);
+ var fontFamily = this.getFontFamily(this.viewsData[key] ? this.viewsData[key].fixedFont : false);
+ var colFormats = this.getColFormats(allCols);
+ if (rovUtils.isArray(viewData)) {
+ for (var i = 0; i < viewData.length; i++) {
+ fullRows.push([]);
+ for (var j= 0; j < allCols.length; j++) {
+ var propName = allCols[j];
+ var cellObj = {};
+ cellObj.val = viewData[i][propName];
+ if (rovUtils.isArray(cellObj.val)) {
+ this.cellArray(cellObj, colFormats, propName, fontFamily);
+ }
+ else {
+ cellObj.val = this.formatVal(cellObj.val, colFormats, propName);
+ }
+ if (viewData[i][propName + '$status']) {
+ cellObj.style = cellObj.isArray ? (cellObj.style + 'background-color:#ff4d4d;') :
+ this.rovTdStyle + 'background-color:#ff4d4d;' + fontFamily;
+ cellObj.title = viewData[i][propName + '$status'];
+ if (cellObj.val == '') {
+ cellObj.val = 'error';
+ }
+ }
+ else {
+ if (!cellObj.isArray) {
+ cellObj.style = this.rovTdStyle + fontFamily;
+ }
+ cellObj.title = '';
+ }
+ fullRows[i].push(cellObj);
+ if (j == 0) {
+ fullRows[i].compareKey = cellObj.val;
+ }
+ }
+ }
+ }
+ else {
+ fullRows.push([]);
+ for (var j = 0; j < allCols.length; j++) {
+ var propName = allCols[j];
+ var cellObj = {};
+ cellObj.val = viewData[propName];
+ if (rovUtils.isArray(cellObj.val)) {
+ this.cellArray(cellObj, colFormats, propName, fontFamily);
+ }
+ else {
+ cellObj.val = this.formatVal(cellObj.val, colFormats, propName);
+ }
+ if (viewData[propName + '$status']) {
+ cellObj.style = cellObj.isArray ? (cellObj.style + 'background-color:#ff4d4d;') :
+ this.rovTdStyle + 'background-color:#ff4d4d;' + fontFamily;
+ cellObj.title = viewData[propName + '$status'];
+ if (cellObj.val == '') {
+ cellObj.val = 'error';
+ }
+ }
+ else {
+ if (!cellObj.isArray) {
+ cellObj.style = this.rovTdStyle + fontFamily;
+ }
+ cellObj.title = '';
+ }
+ fullRows[0].push(cellObj);
+ if (j == 0) {
+ fullRows[0].compareKey = cellObj.val;
+ }
+ }
+ }
+ var instTable = {};
+ var missingFormats = [];
+ if (!this.viewsData[key]) {
+ this.viewsData[key] = {};
+ this.viewsData[key].columnStates = [];
+ for (var i = 0; i < allCols.length; i++) {
+ this.viewsData[key].columnStates.push({name: allCols[i], checked:true});
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ instTable.columns = allCols;
+ instTable.rows = fullRows;
+ }
+ else {
+ if (!refresh) {
+ missingFormats = this.columnsSanityCheck(allCols);
+ }
+ var selData = this.getSelectedData(viewType, fullRows);
+ instTable.columns = selData.cols;
+ instTable.rows = selData.rows;
+ }
+ if (this.viewsData[key].hasFormats == undefined || missingFormats.length > 0 ||
+ this.colFormatsDirty) {
+ this.initColumnFormats(allCols, fullRows[0]);
+ if (this.colFormatsDirty) {
+ this.colFormatsDirty = false;
+ }
+ }
+
+ var sortCol = this.viewsData[key].sortCol ?
+ instTable.columns.indexOf(this.viewsData[key].sortCol) :
+ -1;
+ if (refresh) {
+ var prevRows = rovUtils.shallowCopy(this.instanceTable.rows);
+ }
+ instTable.displayColumns = [];
+ for (var i = 0; i < instTable.columns.length; i++) {
+ var colObj = {};
+ colObj.name = instTable.columns[i];
+ colObj.sortCol = false;
+ instTable.displayColumns.push(colObj);
+ }
+ this.columnStates = this.viewsData[key].columnStates;
+ this.instanceTable = instTable;
+ this.isInstanceView = true;
+ this.instanceTable.allCols = allCols;
+ this.instanceTable.fullRows = fullRows;
+ if (sortCol >= 0) {
+ this.columnSort(sortCol);
+ }
+ if (refresh) {
+ this.rowsCompare(prevRows, this.instanceTable.rows, viewType, fontFamily);
+ }
+ this.hasFormats = this.viewsData[key].hasFormats;
+ this.viewData = viewData;
+ this.viewType = viewType;
+ viewIsShowing = true;
+ this.$.rovInstanceTemplate.render();
+ }
+ else if (viewType == 'INSTANCE_DATA' || viewType == 'MODULE_DATA') {
+ var fullRows = [];
+ var instDataTable = {};
+ var allCols = rovUtils.shallowCopy(viewColumns);
+ var key = this.moduleName + '.' + this.viewName;
+ this.viewsData[key] = this.initViewsDataItem(key);
+ var fontFamily = this.getFontFamily(this.viewsData[key] ? this.viewsData[key].fixedFont : false);
+ var colFormats = this.getColFormats(allCols);
+ if (rovUtils.isArray(viewData)) {
+ instDataTable.instNames = [];
+ for (var i = 0; i < viewData.length; i++) {
+ var rowVals = [];
+ var elemArr = viewData[i].elements;
+ for (var j = 0; j < elemArr.length; j++) {
+ rowVals.push([]);
+ for (var k = 0; k < allCols.length; k++) {
+ var propName = allCols[k];
+ var rowValObj = {};
+ rowValObj.val = elemArr[j][propName];
+ if (rovUtils.isArray(rowValObj.val)) {
+ this.cellArray(rowValObj, colFormats, propName, fontFamily);
+ }
+ else {
+ rowValObj.val = this.formatVal(rowValObj.val, colFormats, propName);
+ }
+ if (elemArr[j][propName + '$status']) {
+ rowValObj.style = rowValObj.isArray ? (rowValObj.style + 'background-color:#ff4d4d;') :
+ this.rovTdStyle + 'background-color:#ff4d4d;' + fontFamily;
+ rowValObj.title = elemArr[j][propName + '$status'];
+ if (rowValObj.val == '') {
+ rowValObj.val = 'error';
+ }
+ }
+ else {
+ if (!rowValObj.isArray) {
+ rowValObj.style = this.rovTdStyle + fontFamily;
+ }
+ rowValObj.title = '';
+ }
+ if (k == 0) {
+ rowVals[j].compareKey = rowValObj.val;
+ }
+ rowVals[j].push(rowValObj);
+ }
+ }
+ fullRows.push({});
+ fullRows[i].expanded = (i == 0);
+ fullRows[i].label = viewData[i].label;
+ fullRows[i].rowVals = rowVals;
+ instDataTable.instNames.push(fullRows[i].label);
+ }
+ instDataTable.currentInst = fullRows[0].label;
+ instDataTable.showInstSelect = true;
+ }
+ else {
+ var rowVals = [];
+ var elemArr = viewData.elements;
+ for (var i = 0; i < elemArr.length; i++) {
+ rowVals.push([]);
+ for (var j = 0; j < allCols.length; j++) {
+ var propName = allCols[j];
+ var rowValObj = {};
+ rowValObj.val = elemArr[i][propName];
+ if (rovUtils.isArray(rowValObj.val)) {
+ this.cellArray(rowValObj, colFormats, propName, fontFamily);
+ }
+ else {
+ rowValObj.val = this.formatVal(rowValObj.val, colFormats, propName);
+ }
+ if (elemArr[i][propName + '$status']) {
+ var styleStr = 'background-color:#ff4d4d';
+ rowValObj.style = rowValObj.isArray ? (rowValObj.style + 'background-color:#ff4d4d;') :
+ this.rovTdStyle + 'display:table-cell;background-color:#ff4d4d;' + fontFamily;
+ rowValObj.title = elemArr[i][propName + '$status'];
+ if (rowValObj.val == '') {
+ rowValObj.val = 'error';
+ }
+ }
+ else {
+ if (!rowValObj.isArray) {
+ rowValObj.style = this.rovTdStyle + fontFamily;
+ }
+ rowValObj.title = '';
+ }
+ if (j == 0) {
+ rowVals[i].compareKey = rowValObj.val;
+ }
+ rowVals[i].push(rowValObj);
+ }
+ }
+ fullRows.push({});
+ fullRows[0].rowVals = rowVals;
+ fullRows[0].expanded = true;
+ instDataTable.showInstSelect = false;
+ }
+ var missingFormats = [];
+ if (!this.viewsData[key]) {
+ this.viewsData[key] = {};
+ this.viewsData[key].columnStates = [];
+ for (var i = 0; i < allCols.length; i++) {
+ this.viewsData[key].columnStates.push({name: allCols[i], checked:true});
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ instDataTable.columns = allCols;
+ instDataTable.rows = fullRows;
+ instDataTable.colsShowing = allCols.length > 1 ? allCols.length - 1 : 0;
+ }
+ else {
+ if (!refresh) {
+ missingFormats = this.columnsSanityCheck(allCols);
+ }
+ if (instDataTable.showInstSelect && this.viewsData[key].currentInst) {
+ /* Expand the instance this.viewsData[key].currentInst only if exists in current rows */
+ var found = false;
+ for (var i = 0; i < fullRows.length; i++) {
+ if (fullRows[i].label == this.viewsData[key].currentInst) {
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ for (var i = 0; i < fullRows.length; i++) {
+ fullRows[i].expanded = (fullRows[i].label == this.viewsData[key].currentInst);
+ }
+ instDataTable.currentInst = this.viewsData[key].currentInst;
+ }
+ }
+ var selData = this.getSelectedData(viewType, fullRows);
+ instDataTable.columns = selData.cols;
+ instDataTable.rows = selData.rows;
+ instDataTable.colsShowing = instDataTable.columns.length > 1 ? instDataTable.columns.length - 1 : 0;
+ }
+ if (this.viewsData[key].hasFormats == undefined || missingFormats.length > 0 ||
+ this.colFormatsDirty) {
+ this.initColumnFormats(allCols, fullRows[0].rowVals[0]);
+ if (this.colFormatsDirty) {
+ this.colFormatsDirty = false;
+ }
+ }
+
+ var sortCol = this.viewsData[key].sortCol ?
+ instDataTable.columns.indexOf(this.viewsData[key].sortCol) :
+ -1;
+ if (refresh) {
+ var prevRows = rovUtils.shallowCopy(this.instanceDataTable.rows);
+ }
+ this.columnStates = this.viewsData[key].columnStates;
+ instDataTable.displayColumns = [];
+ for (var i = 0; i < instDataTable.columns.length; i++) {
+ var colObj = {};
+ colObj.name = instDataTable.columns[i];
+ colObj.sortCol = false;
+ instDataTable.displayColumns.push(colObj);
+ }
+ this.instanceDataTable = instDataTable;
+ this.isInstanceDataView = true;
+ this.instanceDataTable.allCols = allCols;
+ this.instanceDataTable.fullRows = fullRows;
+ if (sortCol >= 0) {
+ this.columnSort(sortCol);
+ }
+ if (refresh) {
+ this.rowsCompare(prevRows, this.instanceDataTable.rows, viewType, fontFamily);
+ }
+ this.hasFormats = this.viewsData[key].hasFormats;
+ this.viewData = viewData;
+ this.viewType = viewType;
+ viewIsShowing = true;
+ this.$.rovInstanceDataTemplate.render();
+ }
+ else if (viewType == 'TREE') {
+ var key = this.moduleName + '.' + this.viewName;
+ this.viewsData[key] = this.initViewsDataItem(key);
+ var fontFamily = this.getFontFamily(this.viewsData[key] ? this.viewsData[key].fixedFont : false);
+ if (!this.viewsData[key]) {
+ this.viewsData[key] = {};
+ }
+ var parentNodes = Object.keys(viewData);
+ var trTable = [];
+ for (var i = 0; i < parentNodes.length; i++) {
+ var childRows = [];
+ if (rovUtils.isArray(viewData[parentNodes[i]])) {
+ for (var j = 0; j < viewData[parentNodes[i]].length; j+=2) {
+ var childRow = [];
+ var rowCell_0 = {style:fontFamily};
+ rowCell_0.val = viewData[parentNodes[i]][j];
+ childRow.push(rowCell_0);
+ var rowCell_1 = {style:fontFamily};
+ if (rovUtils.isObjectVal(viewData[parentNodes[i]][j + 1])) {
+ rowCell_1.val = rovUtils.getObjectVal(viewData[parentNodes[i]][j + 1]);
+ }
+ else {
+ rowCell_1.val = viewData[parentNodes[i]][j + 1];
+ }
+ childRow.push(rowCell_1);
+ childRows.push(childRow);
+ }
+ }
+ else { /* Object */
+ for (var prop in viewData[parentNodes[i]]) {
+ var childRow = [];
+ var rowCell_0 = {style:fontFamily};
+ rowCell_0.val = prop;
+ childRow.push(rowCell_0);
+ var rowCell_1 = {style:fontFamily};
+ if (rovUtils.isObjectVal(viewData[parentNodes[i]][prop])) {
+ rowCell_1.val = rovUtils.getObjectVal(viewData[parentNodes[i]][prop]);
+ }
+ else {
+ rowCell_1.val = viewData[parentNodes[i]][prop];
+ }
+ childRow.push(rowCell_1);
+ childRows.push(childRow);
+ }
+ }
+ trTable.push({});
+ trTable[i].parentNode = parentNodes[i];
+ trTable[i].childRows = childRows;
+ trTable[i].style = fontFamily;
+ if (this.treeTable.length <= i) { /* 1st time making table */
+ trTable[i].expanded = true;
+ }
+ else {
+ trTable[i].expanded = this.treeTable[i].expanded; /* save previous state, this is garbage if number of nodes changes */
+ }
+ }
+ trTable.columns = ['Property', 'Value'];
+ this.treeTable = trTable;
+ this.isTreeView = true;
+ this.viewData = viewData;
+ this.viewType = viewType;
+ viewIsShowing = true;
+ this.$.rovTreeTemplate.render();
+ }
+ else if (viewType == 'TREE_TABLE') {
+ function createTreeTableRows(srcRows, destRows) {
+ var i = 0;
+ while (i < srcRows.length) {
+ if (srcRows[i].hasIcon && !srcRows[i].expanded) {
+ destRows.push(srcRows[i]);
+ /* skip all deeper levels */
+ var level = srcRows[i++].level;
+ while (i < srcRows.length && srcRows[i].level > level) {
+ ++i;
+ }
+ }
+ else {
+ destRows.push(srcRows[i++]);
+ }
+ }
+ }
+ var trTableTable = [];
+ var treeTableIndex = 0;
+ var childRowsWithAllCols = [];
+ var allCols = rovUtils.shallowCopy(viewColumns);
+ var key = this.moduleName + '.' + this.viewName;
+ this.viewsData[key] = this.initViewsDataItem(key);
+ var fontFamily = this.getFontFamily(this.viewsData[key] ? this.viewsData[key].fixedFont : false);
+ var colFormats = this.getColFormats(allCols);
+ for (var i = 0; i < viewData.length; i++) {
+ var goldChildRows = [];
+ this.makeTreeTableRows(viewData[i], null, goldChildRows, i, 0, allCols, colFormats, fontFamily);
+ trTableTable.push({});
+ trTableTable[i].parentNode = viewData[i].label;
+ trTableTable[i].expanded = true;
+ if (this.expandAll) {
+ trTableTable[i].childRows = goldChildRows;
+ }
+ else {
+ var childRows = [];
+ if (refresh || keepExpanded) { /* retain expanded state on refresh */
+ var tableElem = this.getParentNodeElem(this.treeTableTable, trTableTable[i].parentNode);
+ if (tableElem) {
+ trTableTable[i].expanded = tableElem.expanded;
+ for (var j = 0; j < goldChildRows.length; j++) {
+ if (goldChildRows[j].hasIcon) {
+ var prevNode = this.getPreviousTreeTableNode(goldChildRows[j].compareKey, tableElem);
+ if (prevNode) {
+ goldChildRows[j].expanded = prevNode.expanded;
+ goldChildRows[j].icon = prevNode.icon;
+ }
+ }
+ }
+ }
+ }
+ createTreeTableRows(goldChildRows, childRows);
+ trTableTable[i].childRows = childRows;
+ }
+ childRowsWithAllCols.push(trTableTable[i].childRows);
+ trTableTable[i].goldChildRows = goldChildRows;
+ }
+ var missingFormats = [];
+ if (!this.viewsData[key]) {
+ this.viewsData[key] = {};
+ this.viewsData[key].columnStates = [];
+ for (var i = 0; i < allCols.length; i++) {
+ this.viewsData[key].columnStates.push({name: allCols[i], checked:true});
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ trTableTable.columns = allCols;
+ }
+ else {
+ if (!refresh) {
+ missingFormats = this.columnsSanityCheck(allCols);
+ }
+ var selData = this.getSelectedData(viewType, childRowsWithAllCols);
+ trTableTable.columns = selData.cols;
+ for (var i = 0; i < selData.rows.length; i++) {
+ trTableTable[i].childRows = selData.rows[i];
+ }
+ }
+ if (this.viewsData[key].hasFormats == undefined || missingFormats.length > 0 ||
+ this.colFormatsDirty) {
+ /* get first available row with values */
+ var cells = null;
+ for (var i = 0; i < trTableTable.length; i++) {
+ var childRows = childRowsWithAllCols[i];
+ for (var j = 0; j < childRows.length; j++) {
+ if (!childRows[j].hasIcon && !childRows[j].atMax) {
+ cells = childRows[j].cells;
+ break;
+ }
+ }
+ if (cells != null) {
+ break;
+ }
+ }
+ if (cells) {
+ this.initColumnFormats(allCols, cells);
+ if (this.colFormatsDirty) {
+ this.colFormatsDirty = false;
+ }
+ }
+ }
+ if (refresh) {
+ this.rowsCompare(this.treeTableTable, trTableTable, viewType, fontFamily);
+ }
+ this.columnStates = this.viewsData[key].columnStates;
+ this.treeTableTable = trTableTable;
+ this.treeTableTable.allCols = allCols;
+ this.treeTableTable.childRowsWithAllCols = childRowsWithAllCols;
+ this.isTreeTableView = true;
+ this.hasFormats = this.viewsData[key].hasFormats;
+ this.viewData = viewData;
+ this.viewType = viewType;
+ viewIsShowing = true;
+ this.$.rovTreeTableTemplate.render();
+ }
+ else if (viewType == 'RAW') {
+ function createRawRows(srcRows, destRows) {
+ var i = 0;
+ while (i < srcRows.length) {
+ if (srcRows[i].hasIcon && !srcRows[i].expanded) {
+ destRows.push(srcRows[i]);
+ /* skip all deeper levels */
+ var level = srcRows[i++].level;
+ while (i < srcRows.length && srcRows[i].level > level) {
+ ++i;
+ }
+ }
+ else {
+ destRows.push(srcRows[i++]);
+ }
+ }
+ }
+ var key = this.moduleName + '.' + this.viewName;
+ this.viewsData[key] = this.initViewsDataItem(key);
+ var fontFamily = this.getFontFamily(this.viewsData[key] ? this.viewsData[key].fixedFont : false);
+ if (!this.viewsData[key]) {
+ this.viewsData[key] = {};
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ }
+ var parentNodes = ['Module State', 'Instance States' , 'Module Configuration Parameters'];
+ var rawTable = [];
+ var rawIndex = 0;
+
+ /* module state */
+ var modState = viewData[parentNodes[0]];
+ if (modState && Object.keys(modState).length > 0) {
+ var goldChildRows = [];
+ for (var prop in modState) {
+ this.makeRawRow(modState, prop, 'modState.' + prop, goldChildRows, rawIndex, 0, fontFamily);
+ }
+ rawTable.push({});
+ rawTable[rawIndex].parentNode = parentNodes[0];
+ rawTable[rawIndex].style = fontFamily;
+ rawTable[rawIndex].expanded = true;
+ if (this.expandAll) {
+ rawTable[rawIndex].childRows = goldChildRows;
+ }
+ else {
+ var childRows = [];
+ if (refresh || keepExpanded) { /* retain expanded state on refresh */
+ var tableElem = this.getParentNodeElem(this.rawTable, parentNodes[0]);
+ if (tableElem) {
+ rawTable[rawIndex].expanded = tableElem.expanded;
+ this.refreshRawExpandedState(tableElem.goldChildRows, goldChildRows);
+ }
+ }
+ createRawRows(goldChildRows, childRows);
+ rawTable[rawIndex].childRows = childRows;
+ }
+ rawTable[rawIndex].goldChildRows = goldChildRows;
+ ++rawIndex;
+ }
+
+ /* instance states */
+ var instStates = viewData[parentNodes[1]];
+ if (instStates && instStates.length > 0) {
+ var goldChildRows = [];
+ for (var i = 0; i < instStates.length; i++) {
+ var childRow = {};
+ childRow.property = instStates[i].$label.substr(instStates[i].$label.indexOf(':') + 1);
+ childRow.level = 0;
+ childRow.hasIcon = true;
+ childRow.style = this.rawRowStyle(0, true) + fontFamily;
+ childRow.expanded = true;
+ childRow.icon = 'remove';
+ childRow.id = '1_' + goldChildRows.length;
+ childRow.value = '';
+ goldChildRows.push(childRow);
+ for (var prop in instStates[i]) {
+ var qual = 'instState.' + childRow.property + '.' + prop;
+ this.makeRawRow(instStates[i], prop, qual, goldChildRows, rawIndex, 1, fontFamily);
+ }
+ }
+ rawTable.push({});
+ rawTable[rawIndex].parentNode = parentNodes[1];
+ rawTable[rawIndex].style = fontFamily;
+ rawTable[rawIndex].expanded = true;
+ if (this.expandAll) {
+ rawTable[rawIndex].childRows = goldChildRows;
+ }
+ else {
+ var childRows = [];
+ if (refresh || keepExpanded) { /* retain expanded state on refresh */
+ var tableElem = this.getParentNodeElem(this.rawTable, parentNodes[1]);
+ if (tableElem) {
+ rawTable[rawIndex].expanded = tableElem.expanded;
+ this.refreshRawExpandedState(tableElem.goldChildRows, goldChildRows);
+ }
+ }
+ createRawRows(goldChildRows, childRows);
+ rawTable[rawIndex].childRows = childRows;
+ }
+ rawTable[rawIndex].goldChildRows = goldChildRows;
+ ++rawIndex;
+ }
+
+ /* module config */
+ var modCfg = viewData[parentNodes[2]];
+ if (modCfg && Object.keys(modCfg).length > 0) {
+ var goldChildRows = [];
+ for (var prop in modCfg) {
+ this.makeRawRow(modCfg, prop, 'modCfg.' + prop, goldChildRows, rawIndex, 0, fontFamily);
+ }
+ rawTable.push({});
+ rawTable[rawIndex].parentNode = parentNodes[2];
+ rawTable[rawIndex].style = fontFamily;
+ rawTable[rawIndex].expanded = true;
+ if (this.expandAll) {
+ rawTable[rawIndex].childRows = goldChildRows;
+ }
+ else {
+ var childRows = [];
+ if (refresh || keepExpanded) { /* retain expanded state on refresh */
+ var tableElem = this.getParentNodeElem(this.rawTable, parentNodes[2]);
+ if (tableElem) {
+ rawTable[rawIndex].expanded = tableElem.expanded;
+ this.refreshRawExpandedState(tableElem.goldChildRows, goldChildRows);
+ }
+ }
+ createRawRows(goldChildRows, childRows);
+ rawTable[rawIndex].childRows = childRows;
+ }
+ rawTable[rawIndex].goldChildRows = goldChildRows;
+ }
+ rawTable.columns = ['Property', 'Value'];
+ if (refresh) {
+ this.rowsCompare(this.rawTable, rawTable, viewType, fontFamily);
+ }
+ this.rawTable = rawTable;
+ this.isRawView = true;
+ this.viewData = viewData;
+ this.viewType = viewType;
+ viewIsShowing = true;
+ this.$.rovRawTemplate.render();
+ }
+ }
+ else if (viewData && typeof(viewData) == 'string') {
+ this.dataMessage = viewData;
+ this.showDataMessage = true;
+ }
+ return (viewIsShowing);
+ },
+ fontChanged : function (e) {
+ this.viewsData[this.moduleName + '.' + this.viewName].fixedFont = e.target.checked;
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ var allCols;
+ if (this.viewType == 'INSTANCE' || this.viewType == 'MODULE') {
+ allCols = this.instanceTable.allCols;
+ }
+ else if (this.viewType == 'INSTANCE_DATA' || this.viewType == 'MODULE_DATA') {
+ allCols = this.instanceDataTable.allCols;
+ }
+ else if (this.viewType == 'TREE_TABLE') {
+ allCols = this.treeTableTable.allCols;
+ }
+ this.displayTable(this.viewData, this.viewName, this.viewType, allCols, false, true);
+ },
+ formatVal : function (val, colFormats, colName) {
+ if (val == null) {
+ return ('');
+ }
+ if (!colFormats[colName]) {
+ if (rovUtils.isAnROVNumber(val)) {
+ this.colFormatsDirty = true;
+ }
+ return (val);
+ }
+ var valFormat = rovUtils.getFormat(val);
+ if (!valFormat) {
+ this.colFormatsDirty = true;
+ }
+ else if(valFormat != colFormats[colName]) {
+ switch (colFormats[colName]) {
+ case 'Decimal':
+ if (valFormat == 'Hex') {
+ return (parseInt(val, 16));
+ }
+ if (valFormat == 'Scientific') {
+ return (Number(val));
+ }
+ case 'Hex':
+ var retVal = Number(val).toString(16);
+ if (retVal == 'NaN') {
+ this.colFormatsDirty = true;
+ break;
+ }
+ if (retVal.search(/^0x/i) == -1) {
+ retVal = '0x' + retVal;
+ }
+ return (retVal);
+ case 'Scientific':
+ return (Number(val).toExponential());
+ }
+ }
+ return (val);
+ },
+ getColFormats : function (allCols) {
+ var formats = [];
+ var key = this.moduleName + '.' + this.viewName;
+ if (this.viewsData[key] && this.viewsData[key].columnStates) {
+ var columnStates = this.viewsData[key].columnStates;
+ for (var i = 0; i < columnStates.length; i++) {
+ if (columnStates[i].hasFormat) {
+ formats[columnStates[i].name] = columnStates[i].format;
+ }
+ }
+ }
+ return (formats);
+ },
+ getColumnIndex : function(colName) {
+ colName = colName.trim();
+ if (this.isInstanceView) {
+ return (this.instanceTable.columns.indexOf(colName));
+ }
+ else if (this.isInstanceDataView) {
+ return (this.instanceDataTable.columns.indexOf(colName));
+ }
+ else if (this.isTreeTableView) {
+ return (this.treeTableTable.columns.indexOf(colName));
+ }
+ return (0);
+ },
+ getFontFamily : function (fixedFont) {
+ var fontFamily = 'font-family:';
+ fontFamily += fixedFont ? tiRovStyles.rovTableFixedFontFamily + ';'
+ : tiRovStyles.rovTableFontFamily + ';';
+ return (fontFamily);
+ },
+ getModuleName : function () {
+ return (this.moduleName);
+ },
+ getParentNodeElem : function(table, parentNode) {
+ if (table) {
+ for (var i = 0; i < table.length; i++) {
+ if (table[i].parentNode == parentNode) {
+ return (table[i]);
+ }
+ }
+ }
+ return (null);
+ },
+ getPreviousCompareRow : function(prevRows, compareKey, viewType) {
+ if (prevRows) {
+ if (viewType == 'INSTANCE' || viewType == 'MODULE') {
+ for (var i = 0; i < prevRows.length; i++) {
+ if (prevRows[i].compareKey == compareKey) {
+ return (prevRows[i]);
+ }
+ }
+ }
+ else if (viewType == 'INSTANCE_DATA' || viewType == 'MODULE_DATA') {
+ for (var i = 0; i < prevRows.length; i++) {
+ for (var j = 0; j < prevRows[i].rowVals.length; j++) {
+ if (prevRows[i].rowVals[j].compareKey == compareKey) {
+ return (prevRows[i].rowVals[j]);
+ }
+ }
+ }
+ }
+ }
+ return (null);
+ },
+ getPreviousInstCompareRow : function(prevInstRows, compareKey) {
+ if (prevInstRows) {
+ /* viewType is INSTANCE_DATA or MODULE_DATA */
+ for (var i = 0; i < prevInstRows.rowVals.length; i++) {
+ if (prevInstRows.rowVals[i].compareKey == compareKey) {
+ return (prevInstRows.rowVals[i]);
+ }
+ }
+ }
+ return (null);
+ },
+ getPreviousInstRows : function(prevRows, instLabel) {
+ if (prevRows) {
+ /* viewType is INSTANCE_DATA or MODULE_DATA */
+ for (var i = 0; i < prevRows.length; i++) {
+ if (prevRows[i].label == instLabel) {
+ return (prevRows[i]);
+ }
+ }
+ }
+ return (null);
+ },
+ getPreviousRawCompareRow : function (compareKey, prevTableElem) {
+ var row = null;
+ if (prevTableElem) {
+ for (var i = 0; i < prevTableElem.goldChildRows.length; i++) {
+ var prevRow = prevTableElem.goldChildRows[i];
+ if (!prevRow.hasIcon && prevRow.compareKey == compareKey) {
+ row = prevRow;
+ break;
+ }
+ }
+ }
+ return (row);
+ },
+ getPreviousRawNode : function (compareKey, prevGoldChildRows) {
+ var row = null;
+ for (var i = 0; i < prevGoldChildRows.length; i++) {
+ var prevRow = prevGoldChildRows[i];
+ if (prevRow.hasIcon && prevRow.compareKey == compareKey) {
+ row = prevRow;
+ break;
+ }
+ }
+ return (row);
+ },
+ getPreviousTreeTableCompareRow : function (compareKey, prevTableElem) {
+ var row = null;
+ if (prevTableElem) {
+ for (var i = 0; i < prevTableElem.goldChildRows.length; i++) {
+ var prevRow = prevTableElem.goldChildRows[i];
+ if (!prevRow.hasIcon && !prevRow.atMax && prevRow.compareKey == compareKey) {
+ row = prevRow;
+ break;
+ }
+ }
+ }
+ return (row);
+ },
+ getPreviousTreeTableNode : function (compareKey, prevTableElem) {
+ var row = null;
+ for (var i = 0; i < prevTableElem.goldChildRows.length; i++) {
+ var prevRow = prevTableElem.goldChildRows[i];
+ if (prevRow.hasIcon && !prevRow.atMax && prevRow.compareKey == compareKey) {
+ row = prevRow;
+ break;
+ }
+ }
+ return (row);
+ },
+ /*
+ * Remaps each row item based on selected columns to display and
+ * order of columns from user drag and drop
+ */
+ getSelectedData : function(viewType, fullRows) {
+ var rows = [];
+ var cols = [];
+ var colsMap = [];
+ var columnStates = this.viewsData[this.moduleName + '.' + this.viewName].columnStates;
+ var colsOrder = this.viewsData[this.moduleName + '.' + this.viewName].orderedColumns;
+
+ if (colsOrder) {
+ for (var i = 0; i < colsOrder.length; i++) {
+ for (var j = 0; j < columnStates.length; j++) {
+ if (colsOrder[i] == columnStates[j].name && columnStates[j].checked) {
+ cols.push(colsOrder[i]);
+ colsMap.push(j);
+ break;
+ }
+ }
+ }
+
+ /* added colums to end */
+ for (var i = 0; i < columnStates.length; i++) {
+ if (columnStates[i].checked && colsOrder.indexOf(columnStates[i].name) == -1) {
+ cols.push(columnStates[i].name);
+ colsMap.push(i);
+ }
+ }
+ }
+ else {
+ for (var i = 0; i < columnStates.length; i++) {
+ if (columnStates[i].checked) {
+ cols.push(columnStates[i].name);
+ colsMap.push(i);
+ }
+ }
+ }
+ if (viewType == 'INSTANCE' || viewType == 'MODULE') {
+ for (var i = 0; i < fullRows.length; i++) {
+ rows.push([]);
+ rows[i].compareKey = fullRows[i].compareKey;
+ for (var j = 0; j < colsMap.length; j++) {
+ rows[i].push(fullRows[i][colsMap[j]]);
+ }
+ }
+ }
+ else if (viewType == 'INSTANCE_DATA' || viewType == 'MODULE_DATA') {
+ for (var i = 0; i < fullRows.length; i++) {
+ var rowVals = [];
+ for (var j = 0; j < fullRows[i].rowVals.length; j++) {
+ rowVals.push([]);
+ rowVals[j].compareKey = fullRows[i].rowVals[j].compareKey;
+ for (var k = 0; k < colsMap.length; k++) {
+ rowVals[j].push(fullRows[i].rowVals[j][colsMap[k]]);
+ }
+ }
+ rows.push({});
+ rows[i].label = fullRows[i].label;
+ rows[i].expanded = fullRows[i].expanded;
+ rows[i].rowVals = rowVals;
+ }
+ }
+ else if (viewType == "TREE_TABLE") {
+ for (var i = 0; i < fullRows.length; i++) {
+ rows.push([]);
+ for (var j = 0; j < fullRows[i].length; j++) {
+ var fullChildRow = fullRows[i][j];
+ var childRow = {};
+ childRow.name = fullChildRow.name;
+ childRow.level = fullChildRow.level;
+ childRow.hasIcon = fullChildRow.hasIcon;
+ childRow.style = fullChildRow.style;
+ if (fullChildRow.hasIcon) {
+ childRow.expanded = fullChildRow.expanded;
+ childRow.icon = fullChildRow.icon;
+ childRow.id = fullChildRow.id;
+ childRow.compareKey = fullChildRow.compareKey;
+ }
+ else {
+ childRow.atMax = fullChildRow.atMax;
+ if (!fullChildRow.atMax) {
+ childRow.cells = [];
+ for (var k = 0; k < colsMap.length; k++) {
+ childRow.cells.push(fullChildRow.cells[colsMap[k]]);
+ }
+ childRow.compareKey = fullChildRow.compareKey;
+ }
+ }
+ rows[i].push(childRow);
+ }
+ }
+ }
+ return ({cols: cols, rows: rows});
+ },
+ getViewsData : function () {
+ return (this.viewsData);
+ },
+ hasSelectableColumns : function(e) {
+ return (this.isInstanceView ||
+ this.isInstanceDataView ||
+ this.isTreeTableView);
+ },
+ initColumnFormats : function (cols, rows) {
+ var key = this.moduleName + '.' + this.viewName;
+ var columnStates = this.viewsData[key].columnStates;
+ this.viewsData[key].hasFormats = false;
+ for (var i = 0; i < cols.length; i++) {
+ var colFormat = rovUtils.getFormat(rows[i].val);
+ for (var j = 0; j < columnStates.length; j++) {
+ if (columnStates[j].name == cols[i]) {
+ columnStates[j].hasFormat = (colFormat != null);
+ columnStates[j].format = colFormat;
+ if (!this.viewsData[key].hasFormats && colFormat != null) {
+ this.viewsData[key].hasFormats = true;
+ }
+ break;
+ }
+ }
+ }
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ },
+ initViewsDataItem : function (key) {
+ /* If we are in a dashboard (isGlobal == false) and there
+ * is no saved data for this module.view, use the global
+ * localStorage settings
+ */
+ var dataItem = this.viewsData[key];
+ if (!dataItem && !this.isGlobal) {
+ var viewsData = rovUtils.getLocalStorageObject('viewsData-storage');
+ dataItem = viewsData[key];
+ }
+ return (dataItem);
+ },
+ instanceSelected : function (e) {
+ var sel = e.currentTarget.selectedItem.textContent.trim();
+ this.$.selectInstanceMenu.selected = -1;
+ var dialog = this.$.selectInstanceDialog;
+ if (dialog) {
+ dialog.close();
+ }
+ if (this.instanceDataTable.currentInst != sel) {
+ if (this.notifyObj) {
+ this.notifyObj.contentResizing();
+ }
+ this.set('instanceDataTable.currentInst', sel);
+ /* Contract current expanded instance */
+ for (var i = 0; i < this.instanceDataTable.rows.length; i++) {
+ if (this.instanceDataTable.rows[i].expanded) {
+ this.set('instanceDataTable.rows.' + i + '.expanded', false);
+ this.instanceDataTable.fullRows[i].expanded = false;
+ break;
+ }
+ }
+ /* Display selected instance */
+ for (var i = 0; i < this.instanceDataTable.rows.length; i++) {
+ if (this.instanceDataTable.rows[i].label == sel) {
+ this.set('instanceDataTable.rows.' + i + '.expanded', true);
+ this.instanceDataTable.fullRows[i].expanded = true;
+ break;
+ }
+ }
+ this.viewsData[this.moduleName + '.' + this.viewName].currentInst = sel;
+ if (this.isGlobal) {
+ this.saveViewData();
+ }
+ if (this.notifyObj) {
+ this.$.rovInstanceDataTemplate.render();
+ this.notifyObj.contentResized();
+ }
+ }
+ },
+ makeRawRow : function(obj, prop, qualName, allRows, parentIndex, depth, fontFamily) {
+ var childRow = {};
+ childRow.property = prop;
+ childRow.level = depth;
+ childRow.hasIcon = false;
+ childRow.style = this.rawRowStyle(depth, false) + fontFamily;
+ if (rovUtils.isArray(obj[prop])) {
+ if (obj[prop].length > 0) {
+ childRow.hasIcon = true;
+ childRow.style = this.rawRowStyle(depth, true) + fontFamily;
+ childRow.expanded = this.expandAll ? true : false;
+ childRow.icon = this.expandAll ? 'remove' : 'add';
+ childRow.id = parentIndex + '_' + allRows.length;
+ childRow.value = '';
+ childRow.compareKey = qualName;
+ allRows.push(childRow);
+ var arr = obj[prop];
+ if (rovUtils.isObject(arr[0])) { /* Array of Objects */
+ ++depth;
+ for (var i = 0; i < arr.length; i++) {
+ var objChildRow = {};
+ objChildRow.property = arr[i].$name ? arr[i].$name : i;
+ objChildRow.level = depth;
+ objChildRow.hasIcon = true;
+ objChildRow.style = this.rawRowStyle(depth, true) + fontFamily;
+ objChildRow.expanded = this.expandAll ? true : false;
+ objChildRow.icon = this.expandAll ? 'remove' : 'add';
+ objChildRow.id = parentIndex + '_' + allRows.length;
+ objChildRow.value = '';
+ objChildRow.compareKey = qualName + '.' + objChildRow.property;
+ allRows.push(objChildRow);
+ for (var objProp in arr[i]) {
+ var newQual = qualName + '.' + objChildRow.property + '.' + objProp;
+ this.makeRawRow(arr[i], objProp, newQual, allRows, parentIndex, depth + 1, fontFamily);
+ }
+ }
+ }
+ else {
+ for (var i = 0; i < arr.length; i++) {
+ this.makeRawRow(arr, i, qualName + '.' + i, allRows, parentIndex, depth + 1, fontFamily);
+ }
+ }
+ }
+ else {
+ childRow.compareKey = qualName;
+ childRow.value = '';
+ childRow.valStyle = 'display:table-cell;';
+ childRow.valTitle = '';
+ allRows.push(childRow);
+ }
+ }
+ else if (rovUtils.isObject(obj[prop])) {
+ if (Object.keys(obj[prop]).length > 0) { /* Has keys? */
+ childRow.hasIcon = true;
+ childRow.style = this.rawRowStyle(depth, true) + fontFamily;
+ childRow.expanded = this.expandAll ? true : false;
+ childRow.icon = this.expandAll ? 'remove' : 'add';
+ childRow.id = parentIndex + '_' + allRows.length;
+ childRow.value = '';
+ childRow.compareKey = qualName;
+ allRows.push(childRow);
+ for (var chProp in obj[prop]) {
+ this.makeRawRow(obj[prop], chProp, qualName + '.' + chProp, allRows, parentIndex, depth + 1, fontFamily);
+ }
+ }
+ else {
+ childRow.compareKey = qualName;
+ childRow.value = '';
+ childRow.valStyle = '';
+ childRow.valTitle = '';
+ allRows.push(childRow);
+ }
+ }
+ else {
+ childRow.compareKey = qualName;
+ childRow.value = obj[prop];
+ childRow.valStyle = fontFamily;
+ childRow.valTitle = '';
+ allRows.push(childRow);
+ }
+ },
+ makeTreeTableRows : function(dataObj, qualName, allRows, parentIndex, depth, allCols, colFormats, fontFamily) {
+ var curQual = qualName ? qualName + '.' + dataObj.label : dataObj.label;
+ if (depth > 0) {
+ if (!this.atMaxDepth(dataObj)) {
+ var childRow = {name: dataObj.label, level: depth, hasIcon: true, cells: []};
+ childRow.style = this.treeTableRowStyle(depth, true) + fontFamily;
+ childRow.expanded = this.expandAll ? true : false;
+ childRow.icon = this.expandAll ? 'remove' : 'add';
+ childRow.id = parentIndex + '_' + allRows.length;
+ childRow.compareKey = curQual;
+ allRows.push(childRow);
+ }
+ }
+ for (var i = 0; i < dataObj.properties.length; i++) {
+ var rowObj = dataObj.properties[i];
+ if (typeof(rowObj) == 'string' && rowObj.search(/Max depth/) >= 0) {
+ var childRow = {name: dataObj.label, level: depth, hasIcon: false, atMax: true};
+ childRow.style = this.treeTableRowStyle(depth, false) + fontFamily;
+ allRows.push(childRow);
+ break;
+ }
+ var childRow = {level: depth + 1, hasIcon: false, atMax: false, cells: []};
+ for (var j= 0; j < allCols.length; j++) {
+ var propName = allCols[j];
+ var cellObj = {};
+ cellObj.val = rowObj[propName];
+ if (j == 0) {
+ childRow.compareKey = curQual + '.' + cellObj.val;
+ }
+ if (rovUtils.isArray(cellObj.val)) {
+ this.cellArray(cellObj, colFormats, propName, fontFamily);
+ }
+ else {
+ cellObj.val = this.formatVal(cellObj.val, colFormats, propName);
+ }
+ if (rowObj[propName + '$status']) {
+ cellObj.style = cellObj.isArray ? (cellObj.style + 'background-color:#ff4d4d;') :
+ this.rovTdStyle + 'background-color:#ff4d4d;' + fontFamily;
+ cellObj.title = rowObj[propName + '$status'];
+ if (cellObj.val == '') {
+ cellObj.val = 'error';
+ }
+ }
+ else {
+ if (!cellObj.isArray) {
+ cellObj.style = this.rovTdStyle + fontFamily;
+ }
+ cellObj.title = '';
+ }
+ childRow.cells.push(cellObj);
+ }
+ allRows.push(childRow);
+ }
+ for (var i = 0; i < dataObj.children.length; i++) {
+ this.makeTreeTableRows(dataObj.children[i], curQual, allRows, parentIndex, depth + 1, allCols, colFormats, fontFamily);
+ }
+ },
+ noTable : function () {
+ this.isInstanceView = false;
+ this.isTreeView = false;
+ this.isInstanceDataView = false;
+ this.isTreeTableView = false;
+ this.isRawView = false;
+ this.showDataMessage = false;
+ },
+ onColumnClick : function (event) {
+ var colIndex = this.getColumnIndex(event.currentTarget.textContent);
+ if (colIndex >= 0) {
+ this.columnSort(colIndex, true);
+ }
+ },
+ rawNodeTapped : function(event) {
+ var index;
+ var node = event.currentTarget.id;
+ for (var i = 0; i < this.rawTable.length; i++) {
+ if (this.rawTable[i].parentNode == node) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ var str = 'rawTable.' + index + '.expanded';
+ this.set(str, !this.rawTable[index].expanded);
+ }
+ },
+ rawRowStyle : function(depth, hasIcon) {
+ var pad = 35 + (depth * 25);
+ if (hasIcon) {
+ pad -= 10;
+ }
+ var style = 'display:table-cell;padding-left:' + pad + 'px;white-space:nowrap;';
+ if (hasIcon) {
+ style += 'cursor:pointer;';
+ }
+ return (style);
+ },
+ refreshRawExpandedState : function(srcGoldChildRows, destGoldChildRows) {
+ for (var i = 0; i < destGoldChildRows.length; i++) {
+ var curRow = destGoldChildRows[i];
+ if (curRow.hasIcon) {
+ var prevNode = this.getPreviousRawNode(curRow.compareKey, srcGoldChildRows);
+ if (prevNode) {
+ curRow.expanded = prevNode.expanded;
+ curRow.icon = prevNode.icon;
+ }
+ }
+ }
+ },
+ rowsCompare : function(prevRows, newRows, viewType, fontFamily) {
+ if (!newRows) {
+ return;
+ }
+ if (viewType == 'INSTANCE' || viewType == 'MODULE') {
+ for (var i = 0; i < newRows.length; i++) {
+ var prevRow = this.getPreviousCompareRow(prevRows, newRows[i].compareKey, viewType);
+ for (j = 0; j < newRows[i].length; j++) {
+ if (prevRow == null || newRows[i][j].val != prevRow[j].val) {
+ if (newRows[i][j].style.indexOf('#ff4d4d') == -1) {
+ newRows[i][j].style = this.rovTdStyle + 'background-color:gold;' + fontFamily;
+ newRows[i][j].title = (prevRow == null) ? 'New row' : 'Previous value: ' + prevRows[i][j].val;
+ }
+ }
+ }
+ }
+ }
+ else if (viewType == 'INSTANCE_DATA' || viewType == 'MODULE_DATA') {
+ if (this.instanceDataTable.showInstSelect) {
+ for (var i = 0; i < newRows.length; i++) {
+ var prevInstRows = this.getPreviousInstRows(prevRows, newRows[i].label);
+ if (!prevInstRows) {
+ /* mark all rows in the instance as modified(new) */
+ for (var j = 0; j < newRows[i].rowVals.length; j++) {
+ for (var k = 0; k < newRows[i].rowVals[j].length; k++) {
+ if (newRows[i].rowVals[j][k].style.indexOf('#ff4d4d') == -1) {
+ newRows[i].rowVals[j][k].style = this.rovTdStyle + 'background-color:gold;' + fontFamily;
+ newRows[i].rowVals[j][k].title = 'New row';
+ }
+ }
+ }
+ }
+ else {
+ for (var j = 0; j < newRows[i].rowVals.length; j++) {
+ var prevRowVals = this.getPreviousInstCompareRow(prevInstRows, newRows[i].rowVals[j].compareKey);
+ for (var k = 0; k < newRows[i].rowVals[j].length; k++) {
+ if (prevRowVals == null || newRows[i].rowVals[j][k].val != prevRowVals[k].val) {
+ if (newRows[i].rowVals[j][k].style.indexOf('#ff4d4d') == -1) {
+ newRows[i].rowVals[j][k].style = this.rovTdStyle + 'background-color:gold;' + fontFamily;
+ newRows[i].rowVals[j][k].title = (prevRowVals == null) ? 'New row' : 'Previous value: ' + prevRowVals[k].val;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else {
+ for (var i = 0; i < newRows.length; i++) {
+ for (var j = 0; j < newRows[i].rowVals.length; j++) {
+ var prevRowVals = this.getPreviousCompareRow(prevRows, newRows[i].rowVals[j].compareKey, viewType);
+ for (var k = 0; k < newRows[i].rowVals[j].length; k++) {
+ if (prevRowVals == null || newRows[i].rowVals[j][k].val != prevRowVals[k].val) {
+ if (newRows[i].rowVals[j][k].style.indexOf('#ff4d4d') == -1) {
+ newRows[i].rowVals[j][k].style = this.rovTdStyle + 'background-color:gold;' + fontFamily;
+ newRows[i].rowVals[j][k].title = (prevRowVals == null) ? 'New row' : 'Previous value: ' + prevRowVals[k].val;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (viewType == 'TREE_TABLE') {
+ /* For TREE_TABLE, we're passing in whole tables, not just rows; cast accordingly */
+ var prevTable = prevRows;
+ var curTable = newRows;
+ for (var i = 0; i < curTable.length; i++) {
+ var prevElem = this.getParentNodeElem(prevTable, curTable[i].parentNode);
+ if (!prevElem) {
+ /* mark all rows in the instance as modified(new) */
+ for (var j = 0; j < curTable[i].goldChildRows.length; j++) {
+ var curRow = curTable[i].goldChildRows[j];
+ if (!curRow.hasIcon && !curRow.atMax) {
+ for (var k = 0; k < curRow.cells.length; k++) {
+ if (curRow.cells[k].style.indexOf('#ff4d4d') == -1) {
+ curRow.cells[k].style = this.rovTdStyle + 'background-color:gold;' + fontFamily;
+ curRow.cells[k].title = 'New row';
+ }
+ }
+ }
+ }
+ }
+ else {
+ for (var j = 0; j < curTable[i].goldChildRows.length; j++) {
+ var curRow = curTable[i].goldChildRows[j];
+ if (!curRow.hasIcon && !curRow.atMax) {
+ var prevRow = this.getPreviousTreeTableCompareRow(curRow.compareKey, prevElem);
+ for (var k = 0; k < curRow.cells.length; k++) {
+ if (prevRow == null || curRow.cells[k].val != prevRow.cells[k].val) {
+ if (curRow.cells[k].style.indexOf('#ff4d4d') == -1) {
+ curRow.cells[k].style = this.rovTdStyle + 'background-color:gold; + fontFamily';
+ curRow.cells[k].title = (prevRow == null) ? 'New row' : 'Previous value: ' + prevRow.cells[k].val;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else if (viewType == 'RAW') {
+ /* For RAW, we're passing in whole tables, not just rows; cast accordingly */
+ var prevTable = prevRows;
+ var curTable = newRows;
+ for (var i = 0; i < curTable.length; i++) {
+ var prevElem = this.getParentNodeElem(prevTable, curTable[i].parentNode);
+ for (var j = 0; j < curTable[i].goldChildRows.length; j++) {
+ var curRow = curTable[i].goldChildRows[j];
+ if (!curRow.hasIcon) {
+ var prevRow = this.getPreviousRawCompareRow(curRow.compareKey, prevElem);
+ if (prevRow == null || curRow.value != prevRow.value) {
+ curRow.valStyle = 'background-color:gold;' + fontFamily;
+ curRow.valTitle = (prevRow == null) ? 'New row' : 'Previous value: ' + prevRow.value;
+ }
+ }
+ }
+ }
+ }
+ },
+ saveViewData : function () {
+ var viewsData = rovUtils.getLocalStorageObject('viewsData-storage');
+ var key = this.moduleName + '.' + this.viewName;
+ viewsData[key] = this.viewsData[key];
+ rovUtils.setLocalStorageObject('viewsData-storage', viewsData);
+ },
+ selectInstanceDialog : function (e) {
+ var dialog = this.$.selectInstanceDialog;
+ if (dialog) {
+ dialog.style.left = (event.x - 42) + 'px';
+ dialog.style.top = (event.y) + 'px';
+ dialog.open();
+ }
+ },
+ setIsGlobal : function (isGlobal) {
+ this.isGlobal = isGlobal;
+ },
+ setModuleName : function (name) {
+ if (name != this.moduleName) {
+ this.moduleName = name;
+ this.noTable();
+ }
+ },
+ setNotifyObj : function (obj) {
+ this.notifyObj = obj;
+ },
+ setViewsData : function (viewsData) {
+ this.viewsData = viewsData;
+ },
+ treeNodeTapped : function(event) {
+ var index;
+ var node = event.currentTarget.id;
+ for (var i = 0; i < this.treeTable.length; i++) {
+ if (this.treeTable[i].parentNode == node) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ var str = 'treeTable.' + index + '.expanded';
+ this.set(str, !this.treeTable[index].expanded);
+ }
+ },
+ treeTableRowStyle : function(depth, hasIcon) {
+ var pad = (depth * 25);
+ var style = 'display:table-cell;padding-left:' + pad + 'px;white-space:nowrap;';
+ if (hasIcon) {
+ style += 'cursor:pointer;';
+ }
+ return (style);
+ },
+ ttNodeTapped : function(event) {
+ var index;
+ var node = event.currentTarget.id;
+ for (var i = 0; i < this.treeTableTable.length; i++) {
+ if (this.treeTableTable[i].parentNode == node) {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0) {
+ var str = 'treeTableTable.' + index + '.expanded';
+ this.set(str, !this.treeTableTable[index].expanded);
+ }
+ },
+ updateColumnsData : function(table, cols) {
+ if (table.allCols.join(' ') != cols.join(' ')) {
+ this.viewsData[this.moduleName + '.' + this.viewName].orderedColumns = rovUtils.shallowCopy(cols);
+ }
+ else {
+ /* If matches original data, don't save order */
+ this.viewsData[this.moduleName + '.' + this.viewName].orderedColumns = null;
+ }
+ }
+});