{ "custom": { "isMaint": false }, "params": { "titleExtra": "0 of 0" }, "propConfig": { "custom.isMaint": { "binding": { "config": { "path": "session.props.auth.user.roles" }, "transforms": [ { "code": "\ttabs \u003d []\n\troles \u003d [\"Administrator\", \"Developer\", \"Supervisor\"]\n\treturn value !\u003d None and len(value) \u003e 0 and len([i for i in value if i in roles]) \u003e 0", "type": "script" } ], "type": "property" }, "persistent": true } }, "props": { "defaultSize": { "height": 324, "width": 1600 } }, "root": { "children": [ { "meta": { "name": "Label" }, "position": { "height": 40, "width": "100%" }, "props": { "style": { "backgroundColor": "#1A4A5E", "borderBottomColor": "#000000", "borderBottomStyle": "solid", "borderBottomWidth": "2px", "color": "#fff", "fontFamily": "Helvetica", "fontSize": 20, "fontWeight": "bold", "textAlign": "center" }, "text": "Jam Cameras" }, "type": "ia.display.label" }, { "events": { "component": { "onEditCellCommit": { "config": { "script": "\t# Update jam cameras:\n\tdata \u003d system.dataset.updateRow(self.props.data, event.row, {\n\t\tevent.column: event.value\n\t})\n\tsystem.tag.writeBlocking([\"[default]Gateway/JamCameras\"], [data])" }, "scope": "G", "type": "script" } }, "dom": { "onKeyDown": { "config": { "script": "\tif event.key \u003d\u003d \"Escape\": # Escape key\n\t\tself.props.selection.selectedColumn \u003d None\n\t\tself.props.selection.selectedRow \u003d None" }, "scope": "G", "type": "script" } } }, "meta": { "name": "JamCameras" }, "position": { "height": "calc(100% - 40px)", "width": "100%", "y": 40 }, "propConfig": { "props.columns[0].editable": { "binding": { "config": { "path": "view.custom.isMaint" }, "type": "property" } }, "props.columns[1].editable": { "binding": { "config": { "path": "view.custom.isMaint" }, "type": "property" } }, "props.data": { "binding": { "config": { "bidirectional": true, "fallbackDelay": 2.5, "mode": "direct", "tagPath": "[default]Gateway/JamCameras" }, "type": "tag" } } }, "props": { "cells": { "style": { "borderBottomColor": "#D5D5D5", "borderBottomStyle": "solid", "borderBottomWidth": "2px", "borderRightColor": "#D5D5D5", "borderRightStyle": "solid", "borderRightWidth": "2px", "color": "#000", "fontFamily": "Helvetica", "fontSize": "14px" } }, "columns": [ { "align": "center", "boolean": "checkbox", "dateFormat": "MM/DD/YYYY", "field": "Name", "footer": { "align": "center", "justify": "left", "style": { "classes": "" }, "title": "" }, "header": { "align": "center", "justify": "left", "style": { "classes": "table/column-header" }, "title": "" }, "justify": "auto", "number": "value", "numberFormat": "0,0.##", "progressBar": { "bar": { "color": "", "style": { "classes": "" } }, "max": 100, "min": 0, "track": { "color": "", "style": { "classes": "" } }, "value": { "enabled": true, "format": "0,0.##", "justify": "center", "style": { "classes": "" } } }, "render": "auto", "resizable": true, "sort": "none", "sortable": true, "strictWidth": false, "style": { "classes": "" }, "toggleSwitch": { "color": { "selected": "", "unselected": "" } }, "viewParams": {}, "viewPath": "", "visible": true, "width": 120 }, { "align": "center", "boolean": "value", "dateFormat": "MM/DD/YYYY", "field": "Address", "footer": { "align": "center", "justify": "left", "style": { "classes": "" }, "title": "" }, "header": { "align": "center", "justify": "left", "style": { "classes": "table/column-header" }, "title": "" }, "justify": "auto", "number": "value", "numberFormat": "0,0.##", "progressBar": { "bar": { "color": "", "style": { "classes": "" } }, "max": 100, "min": 0, "track": { "color": "", "style": { "classes": "" } }, "value": { "enabled": true, "format": "0,0.##", "justify": "center", "style": { "classes": "" } } }, "render": "auto", "resizable": true, "sort": "none", "sortable": true, "strictWidth": false, "style": { "classes": "" }, "toggleSwitch": { "color": { "selected": "", "unselected": "" } }, "viewParams": {}, "viewPath": "", "visible": true, "width": 300 } ], "filter": { "enabled": true }, "pager": { "bottom": false }, "rows": { "highlight": { "enabled": false }, "striped": { "enabled": false }, "style": { "classes": "table/highlight" } }, "style": { "fontFamily": "Helvetica", "fontSize": "14px", "fontWeight": "bold" } }, "scripts": { "customMethods": [], "extensionFunctions": null, "messageHandlers": [ { "messageType": "export-data", "pageScope": true, "script": "\tutils.downloadCSV(self, \"JamCameras\")", "sessionScope": false, "viewScope": false } ] }, "type": "ia.display.table" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\tcameras \u003d self.getSibling(\"JamCameras\")\n\tnewRow \u003d [\"New Jam Camera\", \"http://localhost\"]\n\tdata \u003d system.dataset.addRow(cameras.props.data, newRow)\n\tsystem.tag.writeBlocking([\"[default]Gateway/JamCameras\"], [data])" }, "scope": "G", "type": "script" } } }, "meta": { "name": "Button_New" }, "position": { "height": 34, "width": 140, "x": "calc(100% - 435px)", "y": 48 }, "propConfig": { "props.enabled": { "binding": { "config": { "expression": " {view.custom.isMaint}\r\n\u0026\u0026 len({../JamCameras.props.data}) \u003c 32" }, "type": "expr" } }, "props.style.classes": { "binding": { "config": { "path": "view.custom.isMaint" }, "transforms": [ { "fallback": "Buttons/Grey", "inputType": "scalar", "mappings": [ { "input": true, "output": "Buttons/Green" } ], "outputType": "scalar", "type": "map" } ], "type": "property" } } }, "props": { "style": {}, "text": "Add New" }, "type": "ia.input.button" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\tcameras \u003d self.getSibling(\"JamCameras\")\n\trow \u003d cameras.props.selection.selectedRow\n\tdata \u003d system.dataset.deleteRow(cameras.props.data, row)\n\tsystem.tag.writeBlocking([\"[default]Gateway/JamCameras\"], [data])" }, "scope": "G", "type": "script" } } }, "meta": { "name": "Button_Delete" }, "position": { "height": 34, "width": 140, "x": "calc(100% - 290px)", "y": 48 }, "propConfig": { "props.enabled": { "binding": { "config": { "expression": " {view.custom.isMaint}\r\n\u0026\u0026 {../JamCameras.props.selection.selectedRow} !\u003d null" }, "type": "expr" } }, "props.style.classes": { "binding": { "config": { "path": "view.custom.isMaint" }, "transforms": [ { "fallback": "Buttons/Grey", "inputType": "scalar", "mappings": [ { "input": true, "output": "Buttons/Red" } ], "outputType": "scalar", "type": "map" } ], "type": "property" } } }, "props": { "style": {}, "text": "Delete Selected" }, "type": "ia.input.button" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\tcameras \u003d self.getSibling(\"JamCameras\")\n\turl \u003d cameras.props.data.getValueAt(cameras.props.selection.selectedRow, \"Address\")\n\tsystem.perspective.navigate(url\u003durl, newTab\u003dTrue)" }, "scope": "G", "type": "script" } } }, "meta": { "name": "Button_Open" }, "position": { "height": 34, "width": 140, "x": "calc(100% - 145px)", "y": 48 }, "propConfig": { "props.enabled": { "binding": { "config": { "expression": "{../JamCameras.props.selection.selectedRow} !\u003d null" }, "type": "expr" } } }, "props": { "style": { "classes": "Buttons/Grey" }, "text": "Open Selected" }, "type": "ia.input.button" }, { "events": { "component": { "onActionPerformed": { "config": { "script": "\tsystem.perspective.sendMessage(\"export-data\")" }, "scope": "G", "type": "script" } } }, "meta": { "name": "Button_Export" }, "position": { "height": 30, "width": 100, "x": "calc(100% - 105px)", "y": 5 }, "props": { "style": { "classes": "Buttons/Grey" }, "text": "Export" }, "type": "ia.input.button" } ], "meta": { "name": "root" }, "type": "ia.container.coord" } }