2026-04-24 FE Backup

This commit is contained in:
2026-04-24 12:37:16 +00:00
parent ace79b82f7
commit 0ba11a23b8
3705 changed files with 1240402 additions and 0 deletions

View File

@@ -0,0 +1,602 @@
{
"custom": {
"auth": {
"almAck": true,
"almShelve": true,
"config": true,
"control": true
},
"filters": {
"alm": [],
"prov": [],
"tag": []
}
},
"params": {},
"propConfig": {
"custom.auth": {
"binding": {
"config": {
"path": "session.props.auth.user.roles"
},
"transforms": [
{
"code": "\treturn utils.roles.validate(value)",
"type": "script"
}
],
"type": "property"
},
"persistent": true
},
"custom.filters": {
"onChange": {
"enabled": null,
"script": "\tif currentValue is not None:\n\t\tself.getChild(\"root\").getChild(\"AlarmJournalTable\").refreshData()"
},
"persistent": true
}
},
"props": {},
"root": {
"children": [
{
"children": [
{
"children": [
{
"meta": {
"name": "Label"
},
"position": {
"basis": "75px",
"shrink": 0
},
"props": {
"style": {
"backgroundColor": "var(--neutral-30)"
},
"text": "IO GW:",
"textStyle": {
"fontSize": "0.6em",
"textAlign": "center",
"textTransform": "uppercase"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "FlexRepeater"
},
"position": {
"grow": 1,
"shrink": 0
},
"props": {
"alignItems": "flex-start",
"elementPosition": {
"basis": "auto",
"grow": 0,
"shrink": 0
},
"instances": [
{
"color": "var(--callToAction)",
"filterString": "prov:Ignition_Common_IO_Gtwy",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "Ignition_Common_IO_Gtwy",
"source": "prov"
},
{
"color": "var(--callToAction)",
"filterString": "prov:Ignition_SATB1_IO1_default",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "Ignition_SATB1_IO1_default",
"source": "prov"
}
],
"path": "Library/Templates/Framework/Pill Button",
"style": {
"gap": "5px",
"padding": "8px 5px"
},
"useDefaultViewHeight": false,
"useDefaultViewWidth": false,
"wrap": "wrap"
},
"type": "ia.display.flex-repeater"
},
{
"children": [
{
"events": {
"component": {
"onActionPerformed": {
"config": {
"script": "\tsource \u003d self.parent.parent.meta.name\n\tsystem.perspective.sendMessage(\u0027clearFilters\u0027, {\n\t\t\u0027source\u0027: source\n\t})\n\tself.parent.parent.parent.parent.getChild(\"AlarmStatusTable\").custom.filters[source] \u003d []"
},
"scope": "G",
"type": "script"
}
}
},
"meta": {
"name": "Button"
},
"props": {
"primary": false,
"text": "Remove All",
"textStyle": {
"fontSize": "0.75em",
"textAlign": "center"
}
},
"type": "ia.input.button"
}
],
"meta": {
"name": "FlexContainer"
},
"position": {
"basis": "78px",
"shrink": 0
},
"props": {
"alignItems": "center",
"justify": "center",
"style": {
"backgroundColor": "var(--neutral-30)",
"border-left": "1px solid var(--border)"
}
},
"type": "ia.container.flex"
}
],
"meta": {
"name": "prov"
},
"position": {
"display": false,
"grow": 1
},
"props": {
"style": {
"borderBottom": "1px solid var(--border)",
"borderTop": "1px solid var(--border)"
}
},
"type": "ia.container.flex"
},
{
"children": [
{
"meta": {
"name": "Label"
},
"position": {
"basis": "75px",
"shrink": 0
},
"props": {
"style": {
"backgroundColor": "var(--neutral-30)"
},
"text": "Quick Search:",
"textStyle": {
"fontSize": "0.6em",
"textAlign": "center",
"textTransform": "uppercase"
}
},
"type": "ia.display.label"
},
{
"meta": {
"name": "FlexRepeater"
},
"position": {
"grow": 1
},
"propConfig": {
"props.instances[11].label": {
"binding": {
"config": {
"expression": "\u0027\u0027"
},
"type": "expr"
}
}
},
"props": {
"elementPosition": {
"basis": "auto",
"grow": 0,
"shrink": 0
},
"instances": [
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "DH1",
"mode": "",
"selected": false,
"source": "tag"
},
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "DH2",
"mode": "",
"selected": false,
"source": "tag"
},
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "DH3",
"mode": "",
"selected": false,
"source": "tag"
},
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "DH4",
"mode": "",
"selected": false,
"source": "tag"
},
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "DH5",
"mode": "",
"selected": false,
"source": "tag"
},
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "CHWS",
"mode": "",
"selected": false,
"source": "tag"
},
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "Electrical",
"mode": "",
"selected": false,
"source": "tag"
},
{
"color": "var(--callToAction)",
"filterString": "",
"instancePosition": {},
"instanceStyle": {
"classes": ""
},
"label": "",
"mode": "",
"selected": false,
"source": "tag"
}
],
"path": "Library/Templates/Framework/Pill Button",
"style": {
"gap": "5px",
"padding": "8px 5px"
},
"useDefaultViewHeight": false,
"useDefaultViewWidth": false,
"wrap": "wrap"
},
"type": "ia.display.flex-repeater"
},
{
"children": [
{
"events": {
"component": {
"onActionPerformed": {
"config": {
"script": "\tsource \u003d self.parent.parent.meta.name\n\tself.view.custom.filters[source] \u003d []\n\tflexRepeater \u003d self.parent.parent.getChild(\"FlexRepeater\")\n\ttoDelete \u003d []\n\tfor i, instance in enumerate(flexRepeater.props.instances):\n\t\tinstance[\u0027selected\u0027] \u003d False\n\t\tif instance[\u0027mode\u0027] \u003d\u003d \u0027Custom\u0027:\n\t\t\tinstance[\u0027label\u0027] \u003d \u0027\u0027\n\t\t\tif i \u003c len(flexRepeater.props.instances) - 1:\n\t\t\t\ttoDelete.append(i)\n\tfor index in reversed(toDelete):\n\t\tflexRepeater.props.instances.pop(index)"
},
"scope": "G",
"type": "script"
}
}
},
"meta": {
"name": "Button"
},
"props": {
"primary": false,
"text": "Remove All",
"textStyle": {
"fontSize": "0.75em",
"textAlign": "center"
}
},
"type": "ia.input.button"
}
],
"meta": {
"name": "FlexContainer"
},
"position": {
"basis": "78px",
"shrink": 0
},
"props": {
"alignItems": "center",
"justify": "center",
"style": {
"backgroundColor": "var(--neutral-30)",
"border-left": "1px solid var(--border)"
}
},
"type": "ia.container.flex"
}
],
"meta": {
"name": "tag"
},
"position": {
"grow": 1
},
"type": "ia.container.flex"
}
],
"meta": {
"name": "FlexContainer"
},
"position": {
"shrink": 0
},
"props": {
"direction": "column",
"style": {
"border": "1px solid var(--border)"
}
},
"type": "ia.container.flex"
},
{
"meta": {
"name": "RadioGroup"
},
"position": {
"shrink": 0
},
"propConfig": {
"props.value": {
"binding": {
"config": {
"expression": "0"
},
"type": "expr"
},
"onChange": {
"enabled": null,
"script": "\tif currentValue is not None:\n\t\tself.getSibling(\"AlarmJournalTable\").refreshData()"
}
}
},
"props": {
"align": "start",
"radioStyle": {
"padding": "0px 10px"
},
"radios": [
{
"selected": true,
"text": "Match on ANY",
"value": 0
},
{
"selected": false,
"text": "Match on ALL",
"value": 1
}
],
"style": {
"borderLeft": "1px solid var(--border)",
"borderRight": "1px solid var(--border)",
"fontSize": "0.8em",
"padding": "4px 5px"
}
},
"type": "ia.input.radio-group"
},
{
"meta": {
"name": "AlarmJournalTable"
},
"position": {
"grow": 1
},
"props": {
"columns": {
"displayPath": {
"enabled": true
},
"eventId": {
"enabled": false
},
"label": {
"enabled": true
},
"source": {
"enabled": false
}
},
"dateRange": {
"historical": {
"endDate": {
"$": [
"ts",
0,
1729635409199
],
"$ts": 1729494000000
},
"startDate": {
"$": [
"ts",
0,
1729635406447
],
"$ts": 1729407600000
}
},
"realtime": {
"interval": 10,
"unit": "minutes"
}
},
"filter": {
"events": {
"acked": false,
"active": false,
"cleared": false
},
"priorities": {
"critical": false,
"high": false,
"low": false,
"medium": false
}
},
"rowStyles": {
"acked": {
"priorities": {
"critical": {
"backgroundColor": "#e2202860"
},
"high": {
"backgroundColor": "#de7c3360"
},
"low": {
"backgroundColor": "#7266b760"
},
"medium": {
"backgroundColor": "#f4b83460"
}
}
},
"active": {
"priorities": {
"critical": {
"backgroundColor": "#e22028b0"
},
"high": {
"backgroundColor": "#de7c33b0"
},
"low": {
"backgroundColor": "#7266b7b0"
},
"medium": {
"backgroundColor": "#f4b834b0"
}
}
}
},
"toolbar": {
"enableFilter": false
}
},
"scripts": {
"customMethods": [
{
"name": "convertToDict",
"params": [
"input_str"
],
"script": " # Split by \u0027:/\u0027, keeping \u0027:\u0027 within key-value pairs\n parts \u003d input_str.split(\u0027:/\u0027)\n result_dict \u003d {}\n \n # Loop through the parts and create key-value pairs\n for part in parts:\n key, value \u003d part.split(\u0027:\u0027, 1)\n result_dict[key] \u003d value\n \n return result_dict"
}
],
"extensionFunctions": [
{
"enabled": true,
"name": "filterAlarm",
"script": "\tresult \u003d True\n\tsource \u003d self.convertToDict(alarmEvent.get(\u0027source\u0027).toString())\n\tprov \u003d source[\u0027prov\u0027]\n\ttag \u003d source[\u0027tag\u0027]\n\talm \u003d source[\u0027alm\u0027]\n\t\n\tfilters \u003d self.view.custom.filters\n\tmatchRule \u003d self.getSibling(\"RadioGroup\").props.value\n\t\n\tif len(filters[\u0027prov\u0027]) \u003e 0:\n\t\tif prov not in filters[\u0027prov\u0027]:\n\t\t\tresult \u003d False\n\t\t\t\n\tif len(filters[\u0027tag\u0027]) \u003e 0:\n\t if matchRule \u003d\u003d 0: # match on ANY\n\t result \u003d False \n\t for t in filters[\u0027tag\u0027]:\n\t if t.upper() in tag.upper():\n\t result \u003d True\n\t break # If any tag matches, we can break out of the loop\n\t elif matchRule \u003d\u003d 1: # match on ALL\n\t for t in filters[\u0027tag\u0027]:\n\t if t.upper() not in tag.upper():\n\t result \u003d False\n\t break # If any tag doesn\u0027t match, stop and return False\n\t\n\treturn result"
}
],
"messageHandlers": []
},
"type": "ia.display.alarmjournaltable"
}
],
"meta": {
"name": "root"
},
"props": {
"direction": "column"
},
"scripts": {
"customMethods": [],
"extensionFunctions": null,
"messageHandlers": [
{
"messageType": "addFilter",
"pageScope": true,
"script": "\tsource \u003d payload[\u0027source\u0027]\n\tlabel \u003d payload[\u0027label\u0027]\n\tindex \u003d payload[\u0027index\u0027]\n\t\n\tflexRepeater \u003d self.getChild(\"FlexContainer\").getChild(source).getChild(\"FlexRepeater\")\n\t\n\tif label in self.view.custom.filters[source]:\n\t\tpass\n\telse:\n\t\tself.view.custom.filters[source].append(label)\n\t\tflexRepeater.props.instances[index].selected \u003d True",
"sessionScope": false,
"viewScope": false
},
{
"messageType": "customFilter",
"pageScope": true,
"script": "\tsource \u003d payload[\u0027source\u0027]\n\tlabel \u003d payload[\u0027label\u0027]\n\tindex \u003d payload[\u0027index\u0027]\n\t\n\tflexRepeater \u003d self.getChild(\"FlexContainer\").getChild(source).getChild(\"FlexRepeater\")\n\t\n\tif label in self.view.custom.filters[source]:\n\t\tpass\n\telse:\n\t\tself.view.custom.filters[source].append(label)\n\t\tflexRepeater.props.instances[index][\u0027selected\u0027] \u003d True\n\t\tflexRepeater.props.instances[index][\u0027label\u0027] \u003d label\n\t\tflexRepeater.props.instances.append({\n\t\t\t\"color\": \"var(--neutral-50)\",\n\t\t\t\"filterString\": \"\",\n\t\t\t\"instancePosition\": {},\n\t\t\t\"instanceStyle\": {\n\t\t\t\"classes\": \"\"\n\t\t\t},\n\t\t\t\"mode\": \"Custom\",\n\t\t\t\"selected\": False,\n\t\t\t\"source\": \"tag\",\n\t\t\t\"label\": \"\"\n\t\t\t})",
"sessionScope": false,
"viewScope": false
},
{
"messageType": "removeFilter",
"pageScope": true,
"script": "\tsource \u003d payload[\u0027source\u0027]\n\tlabel \u003d payload[\u0027label\u0027]\n\tindex \u003d payload[\u0027index\u0027]\n\t\n\tflexRepeater \u003d self.getChild(\"FlexContainer\").getChild(source).getChild(\"FlexRepeater\")\n\t\n\tif label in self.view.custom.filters[source]:\n\t\ti \u003d self.view.custom.filters[source].index(label)\n\t\tself.view.custom.filters[source].pop(i)\n\t\tflexRepeater.props.instances[index].selected \u003d False\n\t\tif flexRepeater.props.instances[index].mode \u003d\u003d \u0027Custom\u0027:\n\t\t\tflexRepeater.props.instances[index].label \u003d \u0027\u0027\n\t\t\tif index \u003c len(flexRepeater.props.instances) - 1:\n\t\t\t\tflexRepeater.props.instances.pop(index)\n\telse:\n\t\tpass",
"sessionScope": false,
"viewScope": false
}
]
},
"type": "ia.container.flex"
}
}