iobroker.javascript 6.1.2 → 6.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/admin/asset-manifest.json +7 -7
- package/admin/static/js/{59.0edac803.chunk.js → 59.cf5769af.chunk.js} +11 -11
- package/admin/static/js/59.cf5769af.chunk.js.map +1 -0
- package/admin/static/js/{62.51105ba6.chunk.js → 62.666bdc0e.chunk.js} +2 -2
- package/admin/static/js/{62.51105ba6.chunk.js.map → 62.666bdc0e.chunk.js.map} +1 -1
- package/admin/static/js/848.a474b146.chunk.js.map +1 -1
- package/admin/static/js/{main.120beec0.js → main.4544b293.js} +2 -2
- package/admin/static/js/{main.120beec0.js.map → main.4544b293.js.map} +1 -1
- package/admin/tab.html +1 -1
- package/docs/en/javascript.md +10 -10
- package/io-package.json +14 -13
- package/main.js +13 -2
- package/package.json +1 -1
- package/admin/static/js/59.0edac803.chunk.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://js/./src/index.css?449b","Dialogs/Rename.jsx","Dialogs/Delete.jsx","Dialogs/AddNewScript.jsx","Dialogs/New.jsx","Dialogs/Error.jsx","Dialogs/AdapterDebug.jsx","SideMenu.jsx","Log.jsx","Components/ScriptEditorVanilaMonaco.jsx","Dialogs/Export.jsx","Dialogs/Import.jsx","Components/BlocklyEditor.jsx","Dialogs/ScriptEditor.jsx","webpack://js/./src/Components/RulesEditor/style.module.scss?0da4","webpack://js/./src/Components/RulesEditor/components/CardMenu/style.module.scss?2b24","Components/RulesEditor/helpers/MaterialDynamicIcon.jsx","Components/RulesEditor/components/CardMenu/index.jsx","webpack://js/./src/Components/RulesEditor/components/CurrentItem/style.module.scss?c87c","Components/RulesEditor/helpers/deepCopy.jsx","Components/RulesEditor/helpers/filterElement.jsx","webpack://js/./src/Components/RulesEditor/components/GenericBlock/style.module.scss?b0aa","webpack://js/./src/Components/RulesEditor/components/CustomButton/style.module.scss?fd2f","Components/RulesEditor/components/CustomButton/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomCheckbox/style.module.scss?da33","Components/RulesEditor/components/CustomCheckbox/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomInput/style.module.scss?9fc8","Components/RulesEditor/components/CustomInput/index.jsx","Components/RulesEditor/components/CustomInstance/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomModal/style.module.scss?395b","Components/RulesEditor/components/CustomModal/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSelect/style.module.scss?925a","Components/RulesEditor/components/CustomSelect/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSlider/style.module.scss?1345","Components/RulesEditor/components/CustomSlider/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSwitch/style.module.scss?f9f3","Components/RulesEditor/components/CustomSwitch/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomTime/style.module.scss?75e5","Components/RulesEditor/components/CustomTime/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomDate/style.module.scss?9309","Components/RulesEditor/components/CustomDate/index.jsx","Components/RulesEditor/helpers/utils.jsx","Components/RulesEditor/helpers/Tour.jsx","Components/RulesEditor/components/GenericBlock/index.jsx","Components/RulesEditor/components/Blocks/ActionSayText.jsx","Components/RulesEditor/components/Blocks/ActionSendEmail.jsx","Components/RulesEditor/components/Blocks/ActionTelegram.jsx","Components/RulesEditor/components/Blocks/ActionPushover.jsx","Components/RulesEditor/components/Blocks/ActionWhatsappcmb.jsx","Components/RulesEditor/components/Blocks/ActionPushsafer.jsx","Components/RulesEditor/helpers/Compile.jsx","Components/RulesEditor/components/Blocks/TriggerScriptSave.jsx","Components/RulesEditor/components/Blocks/TriggerSchedule.jsx","Components/RulesEditor/components/Blocks/TriggerState.jsx","Components/RulesEditor/components/Blocks/ConditionState.jsx","Components/RulesEditor/components/Blocks/ConditionTime.jsx","Components/RulesEditor/components/Blocks/ConditionAstrological.jsx","Components/RulesEditor/components/Blocks/ActionSetState.jsx","Components/RulesEditor/components/Blocks/ActionExec.jsx","Components/RulesEditor/components/Blocks/ActionHTTPCall.jsx","Components/RulesEditor/components/Blocks/ActionPrintText.jsx","Components/RulesEditor/components/Blocks/ActionPause.jsx","Components/RulesEditor/components/Blocks/ActionFunction.jsx","Components/RulesEditor/components/Blocks/ActionSetStateDelayed.jsx","Components/RulesEditor/components/Blocks/ActionOperateStates.jsx","Components/RulesEditor/components/StandardBlocks/index.jsx","Components/RulesEditor/components/ContextWrapper/index.jsx","Components/RulesEditor/helpers/findElement.jsx","Components/RulesEditor/components/CurrentItem/index.jsx","Components/RulesEditor/components/CustomDragLayer/index.jsx","webpack://js/./src/Components/RulesEditor/components/ContentBlockItems/style.module.scss?e805","Components/RulesEditor/hooks/useStateLocal.jsx","Components/RulesEditor/helpers/cardSort.jsx","webpack://js/./src/Components/RulesEditor/components/DragWrapper/style.module.scss?4797","Components/RulesEditor/components/DragWrapper/index.jsx","Components/RulesEditor/components/ContentBlockItems/DialogHelp.jsx","Components/RulesEditor/components/ContentBlockItems/DialogCondition.jsx","Components/RulesEditor/components/ContentBlockItems/index.jsx","webpack://js/./src/Components/RulesEditor/components/Menu/style.module.scss?20d7","Components/RulesEditor/components/CardMenu/CustomDragItem.jsx","webpack://js/./src/Components/RulesEditor/components/HamburgerMenu/hamburgerMenu.module.scss?8911","Components/RulesEditor/components/HamburgerMenu/index.jsx","Components/RulesEditor/components/Menu/index.jsx","webpack://js/./src/Components/RulesEditor/helpers/stylesVariables.scss?3d86","Components/RulesEditor/index.jsx","Components/Debugger/Editor.jsx","Components/Debugger/Console.jsx","Components/Debugger/Stack.jsx","Components/Debugger/index.jsx","Editor.jsx","Dialogs/ImportFile.jsx","App.jsx","serviceWorker.jsx","bootstrap.jsx"],"names":["styles","theme","DialogRename","props","name","id","parts","nextProps","Dialog","event","reason","DialogTitle","DialogContent","TextField","ev","FormControl","InputLabel","Select","instance","MenuItem","DialogActions","Button","withStyles","DialogDelete","DialogAddNew","type","html","lang","Card","CardActionArea","CardMedia","CardContent","CardActions","DialogNew","parent","names","i","el","item","DialogError","DialogContentText","DialogAdapterDebug","obj","instances","adapter","a","b","jsInstance","jsInstanceObj","jsInstanceHost","adapterToDebug","js","Grid","List","ListItem","ListItemIcon","ListItemText","Input","InputAdornment","IconButton","MENU_ITEM_HEIGHT","COLOR_RUN","green","COLOR_PROBLEM","yellow","COLOR_PAUSE","red","ROOT_ID","COMMON_ID","GLOBAL_ID","NARROW_WIDTH","LEVEL_PADDING","SELECTED_STYLE","getObjectName","prepareList","data","result","ids","modified","it","idA","idB","Droppable","onDrop","isOver","isOverAny","drop","useDrop","e","monitor","Draggable","opacity","drag","useDrag","SideDrawer","expanded","newExp","cb","tasks","that","_id","err","state","changed","pos","isSearchEnabled","listItems","searchMode","searchText","objects","newState","text","found","selected","nState","isAllZeroInstances","children","color","resolve","childrenFiltered","depthPx","title","reorder","style","isExpanded","iconStyle","iconClass","childrenCount","ListItemSecondaryAction","source","target","newId","items","dragging","element","reactChildren","copyId","word","m","selectedItem","Menu","newThemeName","classes","folders","statusFilter","typeFilter","renamingItem","copingItem","Drawer","Divider","oldId","newName","newInstance","IconVerticalSplit","IconHorizontalSplit","getTimeString","d","TOOLBOX_WIDTH","copyToClipboard","str","paddingMs","ms","gText","Log","message","allLines","lines","severity","date","editing","isIdOfGlobalScript","index","ScriptEditor","runningInstances","scriptAdapterInstance","compilerOptions","options","language","model","code","uri","filenameWithoutExtension","extension","newLanguage","newModel","enabled","currentScriptName","isGlobalScript","partialDeclarationsPath","wantedTypings","path","existingLibs","lib","selection","range","r","row","col","decorations","bp","lineNumber","ranges","insert","newValue","Fab","DialogExport","Popper","TransitionProps","Fade","Paper","DialogImport","languageBlocklyLoaded","languageOwnLoaded","toolboxText","toolboxXml","scriptsLoaded","searchXml","root","_result","val","node","BlocklyEditor","url","callback","location","scriptTag","scripts","adapters","toLoad","parseXml","xmlStr","xmlDoc","dom","allBlocks","blocks","badBlock","fileLang","fileCustom","xml","l","block","connections","conn","j","warningText","oneWay","exportText","xmlBlock","xy","variables","vars","nodes","xmlBlocks","masterEvent","toolbar","background","retry","p1","_b","DialogScriptEditor","value","ICON_CACHE","MaterialDynamicIcon","iconName","className","socket","onClick","setUrl","Element","CardMenu","active","icon","onDoubleClick","onTouchMove","deepCopy","userRules","additionalParameter","newItemsSwitches","filterElement","CustomButton","fullWidth","size","square","CustomCheckbox","onChange","customValue","disabled","switchChecked","setSwitchChecked","CustomInput","autoFocus","multiline","rows","autoComplete","label","error","variant","inputText","setInputText","SelectMod","CustomInstance","multiple","attr","onInstanceHide","setOptions","_options","CustomModal","open","onClose","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","setValue","i18n","CustomSelect","doNotTranslate","doNotTranslate2","onlyItem","sel","valueOnly","CustomSlider","min","max","step","unit","marks","CustomSwitch","CustomTime","DAYS","CustomDate","month","days","STEPS","GenericBlock","input","frontText","backText","nameBlock","doNotTranslateBack","signature","settings","openCheckbox","visibility","buttonText","checkReadOnly","showSelectId","Utils","common","onShowDialog","openModal","noTextEdit","tagCardArray","openTagMenu","tagCard","tag","newTagCardArray","newSettings","newTagCard","prevProps","attribute","_attr","inputs","iconTag","helpDialog","notFound","nameRender","context","sayitEngines","ActionSayText","config","debugMessage","ActionSendEmail","ActionTelegram","users","user","ActionPushover","ActionWhatsappcmb","ActionPushsafer","STANDARD_FUNCTION_STATE","STANDARD_FUNCTION_STATE_ONCHANGE","STANDARD_FUNCTION","STANDARD_FUNCTION_ONCHANGE","NO_FUNCTION","DEFAULT_RULE","compileTriggers","json","triggers","jsonTriggers","prelines","hist","conds","cond","trigger","findBlock","_context","conditions","compileConditions","then","compileActions","_else","line","v","actions","action","ors","_ors","compile","code2json","json2code","compiled","TriggerScriptSave","DEFAULT_WIZARD","TriggerScheduleBlock","func","hours","minutes","dow","_dow","intervals","start","time","astro","offset","offsetValue","latitude","longitude","sunValue","astroTime","interval","textCron","ComplexCron","wizardText","wizard","Schedule","Transition","ref","Slide","TriggerState","simulateValue","FormControlLabel","Switch","Checkbox","HYSTERESIS","ConditionState","debugValue","compare","condition","useTrigger","oidType","oidUnit","oidStates","isAllTriggersOnState","renderText","ConditionTime","withDate","ConditionAstrological","ActionSetState","toggle","oidMax","oidMin","oidRole","oidWrite","oidStep","f","ignore","ActionExec","ActionHTTPCall","ActionPrintText","ActionPause","pause","ActionFunction","ActionSetStateDelayed","ActionOperateStates","oid1","oid2","TriggerSchedule","ADAPTERS","ContextWrapperCreate","getOrLoadRemote","remote","shareScope","remoteFallbackUrl","reject","existingRemote","onload","script","loadComponent","sharedScope","module","ContextWrapper","setBlocks","onUpdate","setOnUpdate","onDebugMessage","setOnDebugMessage","enableSimulation","setEnableSimulation","adapterDynamicBlocksArray","dynamicRules","alreadyCreated","k","i18nURL","file","Component","adapterBlocksArray","findElement","acceptedBy","CurrentItem","setUserRules","blockValue","isTourOpen","setTourStep","tourStep","anchorEl","setAnchorEl","findElementBlocks","newUserRules","handlePopoverOpen","handlePopoverClose","blockInput","CustomBlock","isDelete","setIsDelete","newItem","layerStyles","snapToGrid","x","y","snappedX","snappedY","getItemStyles","initialOffset","currentOffset","isSnapToGrid","transform","CustomDragLayer","itemType","isDragging","targetIds","useDragLayer","renderItem","useStateLocal","events","nameEvents","setState","newHeadCells","funcSet","setCards","moveCard","atIndex","cards","additionally","hoverClientY","hoverMiddleY","card","findCard","copyCard","newTriggers","c","DragWrapper","typeBlocks","allProperties","isActive","preview","dropResult","idNumber","draggedId","hoverBoundingRect","overIndexActions","overIndexConditions","overIndex","getEmptyImage","isMobile","DialogHelp","DialogCondition","AdditionallyContentBlockItems","itemsSwitchesRender","boolean","typeBlock","animation","checkItem","setCheckItem","canDropCheck","setCanDropCheck","checkId","setCheckId","hoverBlock","setHoverBlock","_a","canDrop","targetId","backgroundColor","ContentBlockItems","nameAdditionally","border","additionallyClickItems","setAdditionallyClickItems","checkLocal","showHelp","setShowHelp","showConditionDialog","setShowConditionDialog","newArray","idx","setAnimation","_userRules","booleanAdditionally","newAdditionally","HamburgerMenu","addClass","setAllBlocks","onChangeBlocks","hamburgerOnOff","setHamburgerOnOff","filter","setFilter","handleChange","setBlocksFunc","typeFunc","newAllBlocks","a11yProps","RulesEditor","themeName","command","scriptId","running","importExport","setImportExport","modal","setModal","_jsInstance","_jsAlive","handler","handlerStatus","msg","setAddClass","Editor","editor","monaco","Console","Stack","frame","fileName","forEdit","scopeId","editable","Debugger","tabs","ts","console","breakpoints","local","scope","closure","scopes","expressions","expression","cmd","arrow","Tabs","Tab","stopOnException","Toolbar","end","_console","Badge","LinearProgress","COLOR_DEBUG","COLOR_VERBOSE","isChanged","initValue","args","isReturn","instanceObjects","_changed","oldSource","commonLocal","nextCommon","nowSelected","ok","question","_event","isInstanceRunning","isScriptRunning","changedAll","selectedId","cron","Snackbar","DialogImportFile","reader","files","getRootProps","getInputProps","isDragActive","isDragReject","App","GenericApp","hosts","scriptsHash","instancesArray","promises","instanceId","expertMode","newScripts","oldIds","newIds","oldScript","newScript","promise","parentID","_list","nId","isFolder","reg","newCommon","_obj","host","isAnyRulesExists","sum","menuSelectId","SideMenu","themeType","Loader","isLocalhost","register","swUrl","checkValidServiceWorker","registerValidSW","registration","installingWorker","response","unregister","generateClassName","build","container","StyledEngineProvider","ThemeProvider","DndProvider","_theme","loadDynamicScript"],"mappings":"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","file":"static/js/62.51105ba6.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n});\n\nclass DialogRename extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n instance: props.instance || 0\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n this.prefix = this.getPrefix(props.id);\n this.oldId = props.id;\n }\n\n getPrefix(id) {\n const parts = (id || '').split('.');\n parts.pop();\n return parts.join('.');\n }\n\n getId(name) {\n name = (name || '').replace(/[\\\\/\\][*,;'\"`<>?\\s]/g, '_');\n return this.prefix + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.prefix = this.getPrefix(nextProps.id);\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onRename(this.oldId, this.state.id, this.state.name, this.state.instance);\n this.props.onClose();\n };\n\n handleChange = name => {\n this.setState({name, id: this.getId(name)});\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth={true}\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Rename')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n label={I18n.t('Name')}\n value={this.state.name}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.state.id}\n disabled={true}\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance'}}\n >\n {this.props.instances.map(instance => <MenuItem key={instance} value={instance}>{instance || '0'}</MenuItem>)}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogRename.propTypes = {\n onClose: PropTypes.func,\n onRename: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n folder: PropTypes.bool,\n};\n\nexport default withStyles(styles)(DialogRename);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\n\nconst styles = theme => ({\n\n});\n\nclass DialogDelete extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n };\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose(null);\n };\n\n handleOk = () => {\n this.props.onDelete(this.state.id);\n this.props.onClose(this.props.value);\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Are you sure?')}</DialogTitle>\n <DialogContent>\n <IconDelete/>\n <span style={{fontSize: 14, fontWeight: 'bold'}}>{I18n.t('Delete %s', this.state.name)}</span>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogDelete.propTypes = {\n onClose: PropTypes.func,\n onDelete: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogDelete);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Card from '@mui/material/Card';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport CardMedia from '@mui/material/CardMedia';\n\nimport ImgJS from '../assets/tileJS.png';\nimport ImgTS from '../assets/tileTS.png';\nimport ImgBlockly from '../assets/tileBlockly.png';\nimport ImgRules from '../assets/tileRules.png';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n card: {\n maxWidth: 345,\n display: 'inline-block',\n margin: '0 10px 0 10px'\n },\n media: {\n height: 100,\n },\n text: {\n maxWidth: 200,\n },\n complexity: {\n fontWeight: 'bold',\n fontStyle: 'italic',\n marginBottom: theme.spacing(1),\n }\n});\n\nclass DialogAddNew extends React.Component {\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = type => {\n this.props.onClose(type);\n };\n\n openHtml(html) {\n const lang = I18n.getLanguage();\n if (!html.includes('javascript.md') && (lang === 'de' || lang === 'ru')) {\n html = html.replace(/\\/en\\//, '/' + lang + '/');\n }\n const win = window.open(html, '_blank');\n win.focus();\n }\n\n getJSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea\n onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgJS}\n title=\"Javascript\"\n />\n <CardContent>\n <h2>Javascript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for programmers')}</div>\n <div className={this.props.classes.text}>{I18n.t('JS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getTSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea\n onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgTS}\n title=\"Typescript\"\n />\n <CardContent>\n <h2>Typescript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for professionals')}</div>\n <div className={this.props.classes.text}>{I18n.t('TS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getBlocklyCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Blockly')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgBlockly}\n title=\"Blockly\"\n />\n <CardContent>\n <h2>Blockly</h2>\n <div className={this.props.classes.complexity}>{I18n.t('normal')}</div>\n <div className={this.props.classes.text}>{I18n.t('Blockly description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Blockly')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/blockly.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getRulesCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Rules')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgRules}\n title=\"Rules\"\n />\n <CardContent>\n <h2>Rules</h2>\n <div className={this.props.classes.complexity}>{I18n.t('easy')}</div>\n <div className={this.props.classes.text}>{I18n.t('Rules description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Rules')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n render() {\n return <Dialog\n onClose={() => false}\n maxWidth=\"lg\"\n fullWidth\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Add new script')}</DialogTitle>\n <DialogContent style={{ textAlign: 'center' }}>\n {this.getRulesCard()}\n {this.getBlocklyCard()}\n {this.getJSCard()}\n {this.getTSCard()}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAddNew.propTypes = {\n onClose: PropTypes.func\n};\n\nexport default withStyles(styles)(DialogAddNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n\n});\n\nclass DialogNew extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name || 'Script',\n instance: props.instance || 0,\n parent: props.parent,\n error: ''\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n }\n\n getId(name) {\n name = name || this.state.name || '';\n name = name.replace(/[\\\\/\\][.*,;'\"`<>?\\s]/g, '_').trim().replace(/\\.$/, '_');\n return (this.state ? this.state.parent : this.props.parent) + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onAdd(this.getId(this.state.name), this.state.name, this.state.instance, this.props.type);\n this.props.onClose();\n };\n\n handleChange = name => {\n const id = this.getId(name);\n if (!name) {\n this.setState({name, id, error: I18n.t('Empty name is not allowed')});\n } else\n if (this.props.existingItems && this.props.existingItems.indexOf(id) !== -1) {\n this.setState({name, id, error: I18n.t('Duplicate name')});\n } else {\n this.setState({name, id, error: ''});\n }\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth={true}\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Create new')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n error={!!this.state.error}\n label={I18n.t('Name')}\n value={this.state.name}\n helperText={this.state.error}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <FormControl variant=\"standard\" style={{minWidth: 100}}>\n <InputLabel htmlFor=\"parent\">{I18n.t('Folder')}</InputLabel>\n <Select\n variant=\"standard\"\n style={{width: '100%'}}\n value={this.state.parent}\n onChange={e => this.setState({parent: e.target.value})}\n inputProps={{name: 'parent', id: 'parent',}}\n >\n {this.props.parents.map(parent => {\n const parts = parent.id.split('.');\n parts.splice(0, 2); // remove script.js\n const names = [];\n let id = 'script.js';\n parts.forEach((n, i) => {\n id += '.' + n;\n const el = this.props.parents.find(item => item.id === id);\n if (el) {\n names.push(el.name);\n } else {\n names.push(n);\n }\n });\n if (!names.length) {\n names.push(parent.name);\n }\n return (<MenuItem key={parent.id} value={parent.id}>{names.join(' / ')}</MenuItem>)\n })}\n </Select>\n </FormControl>\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.getId()}\n disabled={true}\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance',}}\n >\n {this.props.instances.map(instance => (<MenuItem key={'instance' + instance} value={instance}>{instance || '0'}</MenuItem>))}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!!this.state.error} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogNew.propTypes = {\n onClose: PropTypes.func,\n onAdd: PropTypes.func,\n name: PropTypes.string,\n title: PropTypes.string,\n parent: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n parents: PropTypes.array,\n existingItems: PropTypes.array,\n folder: PropTypes.bool,\n type: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n titleBackground: {\n background: theme.palette.error.main,\n },\n titleColor: {\n color: theme.palette.error.contrastText,\n '&>h2': {\n color: theme.palette.error.contrastText,\n }\n },\n});\n\nclass DialogError extends React.Component {\n constructor(props) {\n super(props);\n console.log('Error created')\n }\n handleOk = () => {\n this.props.onClose && this.props.onClose();\n };\n\n render() {\n return <Dialog\n open={true}\n maxWidth=\"sm\"\n fullWidth={true}\n onClose={() => this.handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle className={this.props.classes.titleBackground}\n classes={{root: this.props.classes.titleColor}}\n id=\"alert-dialog-title\">{this.props.title || I18n.t('Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n {this.props.text || I18n.t('Unknown error!')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" autoFocus startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogError.propTypes = {\n onClose: PropTypes.func,\n title: PropTypes.string,\n text: PropTypes.string,\n icon: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogError);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Grid from '@mui/material/Grid';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconClose from '@mui/icons-material/Close';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n icon: {\n width: 24,\n height: 24,\n },\n filter: {\n width: '100%',\n },\n filterWithButton: {\n width: '100%',\n },\n title: {\n fontWeight: 'bold',\n marginTop: theme.spacing(2),\n }\n});\n\n\nclass DialogAdapterDebug extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n instances: [],\n filter: window.localStorage.getItem('javascript.debug.filter') || '',\n showAskForStop: false,\n jsInstance: window.localStorage.getItem('javascript.debug.instance') || '',\n jsInstanceHost: '',\n adapterToDebug: window.localStorage.getItem('javascript.debug.adapter') || '',\n };\n }\n\n componentDidMount() {\n this.props.socket.getAdapterInstances()\n .then(instances => {\n instances = instances.filter(i => i && !i.common?.onlyWWW).map(item => {\n const name = item._id.replace(/^system\\.adapter\\./, '');\n const [adapter] = name.split('.');\n return {\n id: name,\n enabled: item.common?.enabled,\n host: item.common?.host,\n icon: item.common?.icon ? `../../adapter/${adapter}/${item.common.icon}` : '',\n };\n });\n instances.sort((a, b) => a.id > b.id ? 1 : (a.id < b.id ? -1 : 0));\n let jsInstance = this.state.jsInstance || '';\n let jsInstanceObj = this.state.jsInstance && instances.find(item => item.id === this.state.jsInstance);\n let jsInstanceHost;\n\n // check if selected instance is in the list\n if (!this.state.jsInstance || !jsInstanceObj) {\n jsInstance = instances.find(item => item.id.startsWith('javascript.')); // take the first one\n jsInstanceHost = jsInstance ? jsInstance.host : '';\n jsInstance = jsInstance ? jsInstance.id : '';\n } else {\n jsInstanceHost = jsInstanceObj ? jsInstanceObj.host : '';\n }\n\n let adapterToDebug = this.state.adapterToDebug || '';\n if (adapterToDebug && !instances.find(item => item.id === adapterToDebug)) {\n adapterToDebug = '';\n }\n\n this.setState({instances, jsInstance, adapterToDebug, jsInstanceHost});\n });\n }\n\n handleOk = () => {\n // TODO\n if (this.state.instances.find(item => item.id === this.state.adapterToDebug).enabled) {\n return this.props.socket.getObject('system.adapter.' + this.state.adapterToDebug)\n .then(obj => {\n obj.common.enabled = false;\n this.props.socket.setObject(obj._id, obj)\n .then(() =>\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug));\n })\n } else {\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug);\n }\n };\n\n\n renderJavascriptList() {\n const js = this.state.instances.filter(item => item.id.startsWith('javascript.'));\n if (js.length < 2) {\n return null;\n } else {\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Host')}</div>\n <List component=\"nav\">\n {js.map(item => <ListItem\n button\n selected={this.state.jsInstance === item.id}\n onClick={this.setState({jsInstance: item.id, jsInstanceHost: item.host})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n renderInstances() {\n if (!this.state.jsInstance) {\n return <Grid item/>;\n } else {\n const instances = this.state.instances.filter(item =>\n item.id !== this.state.jsInstance && item.host === this.state.jsInstanceHost && (!this.state.filter || item.id.includes(this.state.filter.toLowerCase()) ));\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Instances')}</div>\n <List component=\"nav\">\n {instances.map(item => <ListItem\n button\n selected={this.state.adapterToDebug === item.id}\n onDoubleClick={() => this.setState({adapterToDebug: item.id}, () => this.handleOk())}\n onClick={() => this.setState({adapterToDebug: item.id})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n render() {\n return <Dialog\n maxWidth=\"md\"\n fullWidth={false}\n open={true}\n onClose={(event, reason) => false}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Debug instance')}</DialogTitle>\n <DialogContent>\n <Grid container direction=\"column\">\n <Grid item>\n <Input\n classes={{root: this.props.classes.filterWithButton}}\n value={this.state.filter}\n placeholder={I18n.t('Filter')}\n onChange={e => {\n this.setState({filter: e.target.value});\n window.localStorage.setItem('javascript.debug.filter', e.target.value);\n }}\n endAdornment={\n <InputAdornment position=\"end\">\n {this.state.filter ? <IconButton\n size=\"small\"\n aria-label=\"toggle password visibility\"\n onClick={() => this.setState({filter: ''})}\n >\n <IconClose />\n </IconButton> : ''}\n </InputAdornment>\n }\n />\n </Grid>\n <Grid item>\n <Grid container>\n {this.renderJavascriptList()}\n {this.renderInstances()}\n </Grid>\n </Grid>\n </Grid>\n\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!this.state.jsInstance || !this.state.adapterToDebug} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Start')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.props.onClose()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAdapterDebug.propTypes = {\n socket: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n onDebug: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(DialogAdapterDebug);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '@mui/styles/withStyles';\nimport Drawer from '@mui/material/Drawer';\nimport Divider from '@mui/material/Divider';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';\nimport ListItemText from '@mui/material/ListItemText';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Input from '@mui/material/Input';\nimport { useDrag, useDrop, DndProvider as DragDropContext } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nimport { MdMoreVert as IconMore } from 'react-icons/md';\nimport { FaFolder as IconFolder } from 'react-icons/fa';\nimport { FaFolderOpen as IconFolderOpened } from 'react-icons/fa';\nimport { MdContentCopy as IconCopy } from 'react-icons/md';\nimport { MdDelete as IconDelete } from 'react-icons/md';\nimport { MdInput as IconDoEdit } from 'react-icons/md';\nimport { MdClose as IconClear } from 'react-icons/md';\nimport { MdFormatClear as IconClose } from 'react-icons/md';\nimport { MdPlayArrow as IconPlay } from 'react-icons/md';\nimport { MdAdd as IconAdd } from 'react-icons/md';\nimport { MdCreateNewFolder as IconAddFolder } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdSwapVert as IconReorder } from 'react-icons/md';\nimport { MdEdit as IconEdit } from 'react-icons/md';\nimport { MdSearch as IconFind } from 'react-icons/md';\nimport { MdPersonPin as IconExpert } from 'react-icons/md';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport { FaFileImport as IconImport } from 'react-icons/fa';\nimport { MdPalette as IconDark } from 'react-icons/md';\nimport { MdUnfoldMore as IconExpandAll } from 'react-icons/md';\nimport { MdUnfoldLess as IconCollapseAll } from 'react-icons/md';\nimport { MdBugReport as IconDebug } from 'react-icons/md';\n\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgRules from './assets/rules.png';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogRename from './Dialogs/Rename';\nimport DialogDelete from './Dialogs/Delete';\nimport DialogAddNewScript from './Dialogs/AddNewScript';\nimport DialogNew from './Dialogs/New';\nimport DialogError from './Dialogs/Error';\nimport DialogAdapterDebug from './Dialogs/AdapterDebug';\n\nimport { red, green, yellow } from '@mui/material/colors';\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_RUN = green[400];\nconst COLOR_PROBLEM = yellow[400];\nconst COLOR_PAUSE = red[400];\nconst ROOT_ID = 'script.js';\nconst COMMON_ID = ROOT_ID + '.common';\nconst GLOBAL_ID = ROOT_ID + '.global';\nconst NARROW_WIDTH = 350;\nconst LEVEL_PADDING = 16;\n\nconst SELECTED_STYLE = {\n background: '#164477',\n color: 'white'\n};\n\nconst styles = theme => ({\n drawerPaper: {\n position: 'relative',\n width: '100%', //Theme.menu.width,\n height: '100%',\n overflow: 'hidden'\n },\n toolbar: {\n height: theme.toolbar.height\n },\n toolbarButtons: {\n color: theme.palette.mode === 'dark'? 'white !important' : 'black !important'\n },\n iconButtonsDisabled: {\n filter: 'grayscale(100%)',\n opacity: 0.5,\n },\n toolbarSearch: {\n width: 'calc(100% - 105px)',\n lineHeight: '34px',\n marginLeft: 5\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 2\n },\n iconDropdownMenu: {\n paddingRight: 5\n },\n iconOnTheRight: {\n position: 'absolute',\n right: 10,\n top: 'calc(50% - 8px)'\n },\n menu: {\n width: '100%',\n height: '100%'\n },\n innerMenu: {\n width: '100%',\n height: 'calc(100% - 76px)',\n overflowX: 'hidden',\n overflowY: 'auto'\n },\n listItemIcon: {\n minWidth: 32,\n },\n filterIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginRight: 5\n },\n scriptIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginTop: 4,\n marginBottom: 4,\n marginLeft: 8,\n marginRight: 4,\n },\n folder: {\n //background: theme.palette.mode === 'dark' ? '#6a6a6a' : '#e2e2e2',\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none'\n },\n folderReorder: {\n opacity: 0.3,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity'\n },\n folderIcon: {\n width: 20,\n height: 20,\n },\n folderIconReorder: {\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n folderIconNoReorder: {\n cursor: 'pointer',\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n script: {\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none'\n },\n scriptReorder: {\n opacity: 1,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity'\n },\n reorder: {\n //padding: '9px 16px 9px 9px',\n },\n expandButton: {\n width: 37,\n height: 37\n },\n selected: SELECTED_STYLE,\n instances: {\n color: 'gray',\n fontSize: 'smaller'\n },\n childrenCount: {\n float: 'right',\n marginRight: 5,\n fontSize: 10,\n opacity: 0.4,\n },\n footer: {\n height: 24,\n },\n footerButtons: {\n '&:hover': {\n backgroundColor: '#dbdbdb'\n },\n color: theme.palette.mode === 'dark' ? '#ffffff' : '#111111',\n cursor: 'pointer',\n marginTop: 1,\n marginRight: 2,\n height: 22,\n width: 22,\n },\n footerButtonsRight: {\n float: 'right'\n },\n\n mainList: {\n '& .js-folder-dragover>div>li>.folder-reorder': {\n background: '#40adff'\n },\n '& .js-folder-dragging .folder-reorder': {\n opacity: 1,\n },\n '& .js-folder-dragging .script-reorder': {\n opacity: 0.3,\n }\n }\n});\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n def: ImgJS,\n 'Rules':ImgRules,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst getObjectName = (id, obj, lang) => {\n lang = lang || I18n.getLanguage();\n if (obj && obj.common && obj.common.name) {\n if (typeof obj.common.name === 'object') {\n return (obj.common.name[lang] || obj.common.name.en || id.replace(/^script\\.js./, '')).toString();\n } else {\n return obj.common.name.toString();\n }\n } else {\n return id.replace(/^script\\.js./, '');\n }\n};\n\nconst prepareList = data => {\n const result = [{\n id: ROOT_ID,\n depth: 0,\n index: 0,\n parent: null,\n title: 'root',\n type: 'folder'\n }];\n const ids = Object.keys(data);\n\n /*ids.sort((a, b) => {\n if ((a === 'script.js.common' || a === 'script.js.global') && (b === 'script.js.common' || b === 'script.js.global')) {\n return a > b ? 1 : -1;\n } else if (a === 'script.js.common' || a === 'script.js.global' || b === 'script.js.common' || b === 'script.js.global') {\n return 1;\n } else {\n return a > b ? 1 : -1;\n }\n });*/\n\n for (let i = 0; i < ids.length; i++) {\n const obj = data[ids[i]];\n const parts = ids[i].split('.');\n parts.pop();\n result.push({\n id: ids[i],\n title: getObjectName(ids[i], obj),\n enabled: obj && obj.common && obj.common.enabled,\n depth: parts.length - 1,\n type: obj.type === 'script' ? obj.common.engineType : 'folder',\n parent: parts.length > 1 ? parts.join('.') : null,\n instance: obj.common.engine ? parseInt(obj.common.engine.split('.').pop(), 10) || 0 : null\n });\n }\n\n // Place all folder-less scripts at start\n /*result.sort((a, b) => {\n // without folders => always at start\n if (!a.parent && a.type !== 'folder' && !b.parent && b.type !== 'folder') {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (!a.parent && a.type !== 'folder') {\n return -1;\n } else if (!b.parent && b.type !== 'folder') {\n return 1;\n } else {\n // common and global are always at the end\n if ((a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) &&\n (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global'))) {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) {\n return 1;\n } else if (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global')) {\n return -1;\n } else {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n }\n }\n });*/\n\n let modified;\n do {\n modified = false;\n // check if all parents exists\n // eslint-disable-next-line\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (!parent) {\n const parts = item.parent.split('.');\n parts.pop();\n result.push({\n id: item.parent,\n title: item.parent.split('.').pop(),\n depth: parts.length - 1,\n type: 'folder',\n parent: parts.length > 1 ? parts.join('.') : null\n });\n modified = true;\n }\n }\n });\n } while (modified);\n\n // Folders first\n result.sort((a, b) => {\n const idA = a.id.toLowerCase();\n const idB = b.id.toLowerCase();\n if (a.type === 'folder' && b.type !== 'folder') {\n return -1;\n } else if (b.type === 'folder' && a.type !== 'folder') {\n return 1;\n }\n\n if (idA > idB) {\n return 1;\n } else if (idA < idB) {\n return -1;\n } else {\n return 0;\n }\n });\n\n // Fill all index\n result.forEach((item, i) => item.index = i);\n\n // Fill all parentIndex\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (parent) {\n item.parentIndex = parent.index;\n }\n }\n });\n\n return result;\n};\n\nexport const Droppable = (props) => {\n const { onDrop} = props;\n\n const [{ isOver, isOverAny}, drop] = useDrop({\n accept: ['script'],\n drop: e => isOver ? onDrop(e) : undefined,\n collect: monitor => ({\n isOver: monitor.isOver({ shallow: true }),\n isOverAny: monitor.isOver(),\n }),\n });\n\n return <div ref={drop} className={clsx(isOver && 'js-folder-dragover', isOverAny && 'js-folder-dragging')}>\n {props.children}\n </div>;\n};\n\nexport const Draggable = props => {\n const { name } = props;\n const [{ opacity }, drag] = useDrag({\n type: 'script',\n item: () => ({name}),\n collect: monitor => ({opacity: monitor.isDragging() ? 0.3 : 1,}),\n });\n // About transform: https://github.com/react-dnd/react-dnd/issues/832#issuecomment-442071628\n return <div ref={drag} style={{ opacity, transform: 'translate3d(0, 0, 0)' }}>\n {props.children}\n </div>;\n};\n\nclass SideDrawer extends React.Component {\n constructor(props) {\n super(props);\n\n let expanded = window.localStorage ? window.localStorage.getItem('SideMenu.expanded') : '[]';\n try {\n expanded = JSON.parse(expanded) || [];\n } catch (e) {\n expanded = [];\n }\n\n this.inputRef = new React.createRef();\n\n this.state = {\n listItems: prepareList(props.scripts || {}),\n expanded: expanded,\n problems: [],\n reorder: false,\n themeName: this.props.themeName,\n selected: window.localStorage ? window.localStorage.getItem('SideMenu.selected') || null : null,\n creatingScript: false,\n creatingFolder: false,\n copingScript: '',\n renaming: null,\n deleting: null,\n choosingType: null,\n errorText: '',\n instances: props.instances || [],\n menuOpened: false,\n menuAnchorEl: null,\n searchMode: false,\n expertMode: this.props.expertMode,\n searchText: '',\n width: this.props.width || 300,\n typeFilter: window.localStorage ? window.localStorage.getItem('SideMenu.typeFilter') || '' : '', // blockly, js, ts\n statusFilter: window.localStorage ? window.localStorage.getItem('SideMenu.statusFilter') || '' : '',\n runningInstances: this.props.runningInstances || {},\n scriptsHash: props.scriptsHash,\n showAdapterDebug: false,\n };\n\n const newExp = this.ensureSelectedIsVisible();\n if (newExp) {\n this.state.expanded = newExp;\n }\n\n // debounce search process\n this.filterTimer = null;\n\n this.state.isAllZeroInstances = this.getIsAllZeroInstances();\n\n this.problems = null; //cache\n this.problemsTimer = null;\n this.onProblemUpdatedBound = this.onProblemUpdated.bind(this);\n }\n\n readProblems(cb, tasks) {\n if (!tasks) {\n tasks = Object.keys(this.props.scripts);\n }\n if (!tasks || !tasks.length) {\n cb && cb();\n } else {\n const id = tasks.shift();\n if (this.props.scripts[id] &&\n this.props.scripts[id].type === 'script' &&\n this.props.scripts[id].common &&\n this.props.scripts[id].common.enabled &&\n !id.match(/^script\\.js\\.global\\./) // GLOBAL_ID\n ) {\n const instance = this.props.scripts[id].common.engine.split('.').pop();\n const that = this; // sometimes lambda does not work\n const _id = 'javascript.' + instance + '.scriptProblem.' + id.substring(ROOT_ID.length + 1);\n\n this.props.socket.getState(_id, (err, state) => {\n that.onProblemUpdated(_id, state);\n setTimeout(() => that.readProblems(cb, tasks), 0);\n });\n } else {\n setTimeout(() => this.readProblems(cb, tasks), 0);\n }\n }\n }\n\n componentDidMount() {\n this.readProblems(() => {\n this.props.instances.forEach(instance => {\n this.props.socket.subscribeState('javascript.' + instance + '.scriptProblem.*', this.onProblemUpdatedBound);\n });\n });\n }\n\n componentWillUnmount() {\n this.props.instances.forEach(instance => {\n this.props.socket.unsubscribeState('javascript.' + instance + '.scriptProblem.*', this.onProblemUpdatedBound);\n });\n }\n\n onProblemUpdated(id, state) {\n if (!state || !id) return;\n id = ROOT_ID + '.' + id.replace(/^javascript\\.\\d+\\.scriptProblem\\./, '');\n\n if (!this.problems) {\n this.problems = JSON.parse(JSON.stringify(this.state.problems));\n }\n let changed = false;\n\n if (state.val) {\n if (this.problems.indexOf(id) === -1) {\n this.problems.push(id);\n changed = true;\n }\n } else {\n const pos = this.problems.indexOf(id);\n if (pos !== -1) {\n this.problems.splice(pos, 1);\n changed = true;\n }\n }\n\n if (changed && !this.problemsTimer) {\n this.problemsTimer = setTimeout(() => {\n this.problemsTimer = null;\n this.setState({problems: this.problems});\n this.problems = null;\n }, 300);\n }\n }\n\n static filterListStatic(isSearchEnabled, listItems, searchMode, searchText, objects) {\n listItems = JSON.parse(JSON.stringify(listItems));\n let changed = false;\n let newState = {listItems};\n if (isSearchEnabled !== false && searchMode && searchText) {\n const text = searchText.toLowerCase();\n listItems.forEach(item => {\n const id = item.title.toLowerCase();\n item.filteredPartly = false;\n let found = id.indexOf(text) !== -1;\n if (!found && (objects && objects[item.id] && objects[item.id].common && objects[item.id].common.source)) {\n if (objects[item.id].common.engineType === 'Blockly') {\n const pos = objects[item.id].common.source.lastIndexOf('//');\n found = objects[item.id].common.source.substring(0, pos).toLowerCase().indexOf(text) !== -1;\n } else {\n found = objects[item.id].common.source.toLowerCase().indexOf(text) !== -1;\n }\n }\n if (found) {\n if (item.filtered) {\n item.filtered = false;\n changed = true;\n }\n } else if (!item.filtered) {\n item.filtered = true;\n changed = true;\n }\n });\n\n if (changed) {\n // check that all parents of every non-filtered item are visible\n for (let i = listItems.length - 1; i >= 0; i--) {\n const item = listItems[i];\n if (!item.filtered || item.filteredPartly) {\n let it = item;\n do {\n if (it.parent && listItems[it.parentIndex]) {\n changed = true;\n listItems[it.parentIndex].filteredPartly = true;\n }\n it = it.parent && listItems[it.parentIndex] ? listItems[it.parentIndex] : null;\n } while(it);\n }\n }\n }\n } else {\n listItems.forEach(item => {\n if (item.filtered || item.filteredPartly) {\n item.filtered = false;\n item.filteredPartly = false;\n changed = true;\n }\n });\n if (isSearchEnabled === false) {\n newState.searchText = '';\n newState.searchMode = false;\n changed = true;\n }\n }\n\n return changed ? newState : null;\n }\n\n filterList(isSearchEnabled, cb) {\n const newState = SideDrawer.filterListStatic(\n isSearchEnabled,\n this.state.listItems,\n this.state.searchMode,\n this.state.searchText,\n this.props.scripts\n );\n\n if (newState) {\n this.setState(newState, () => cb && cb());\n } else if (cb) {\n cb();\n }\n }\n\n static ensureSelectedIsVisibleStatic(selected, expanded, listItems) {\n expanded = JSON.parse(JSON.stringify(expanded));\n let changed = false;\n\n // ensure that the item is visible\n let el = typeof selected === 'object' ? selected : listItems.find(it => it.id === selected);\n do {\n // eslint-disable-next-line\n el = el && el.parent && listItems.find(it => it.id === el.parent);\n if (el) {\n if (expanded.indexOf(el.id) === -1) {\n expanded.push(el.id);\n changed = true;\n }\n }\n } while(el);\n return changed && expanded;\n }\n\n ensureSelectedIsVisible(selected, expanded) {\n SideDrawer.ensureSelectedIsVisibleStatic(selected || this.state.selected, expanded || this.state.expanded, this.state.listItems);\n }\n\n static getDerivedStateFromProps(props, state) {\n const newState = {};\n let changed = false;\n if (state.expertMode !== props.expertMode) {\n changed = true;\n newState.expertMode = props.expertMode;\n }\n if (state.scriptsHash !== props.scriptsHash && props.scripts) {\n const listItems = prepareList(props.scripts || {});\n\n newState.listItems = listItems;\n\n if (state.searchText) {\n const nState = SideDrawer.filterListStatic(true, listItems, state.searchMode, state.searchText, props.scripts);\n nState && Object.assign(newState, nState);\n }\n\n const isAllZeroInstances = SideDrawer.getIsAllZeroInstancesStatic(listItems, props.instances || []);\n\n const newExp = SideDrawer.ensureSelectedIsVisibleStatic(state.selected, state.expanded, state.listItems);\n\n newState.isAllZeroInstances = isAllZeroInstances;\n if (newExp) {\n newState.expanded = newExp;\n }\n changed = true;\n }\n\n if (state.width !== props.width) {\n changed = true;\n newState.width = props.width;\n }\n if (state.themeName !== props.themeName) {\n changed = true;\n newState.themeName = props.themeName;\n }\n\n if (props.selectId && state.selected !== props.selectId) {\n const item = state.listItems.find(item => item.id === props.selectId);\n\n if (!state.reorder && item) {\n const expanded = SideDrawer.ensureSelectedIsVisibleStatic(item, state.expanded, state.listItems);\n newState.selected = item.id;\n if (expanded) {\n newState.expanded = expanded;\n }\n changed = true;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n if (changed) {\n return newState;\n } else {\n return null;\n }\n }\n\n static getIsAllZeroInstancesStatic(listItems, instances) {\n let isAllZeroInstances = !instances[0] && instances.length <= 1;\n\n if (isAllZeroInstances) {\n listItems.forEach(item => {\n if (item.type !== 'folder' && item.instance !== 0) {\n isAllZeroInstances = false;\n }\n });\n }\n return isAllZeroInstances;\n }\n\n getIsAllZeroInstances(listItems, instances) {\n listItems = listItems || this.state.listItems;\n instances = instances || this.state.instances;\n return SideDrawer.getIsAllZeroInstancesStatic(listItems || this.state.listItems, instances || this.state.instances);\n }\n\n saveExpanded(expanded) {\n window.localStorage.setItem('SideMenu.expanded', JSON.stringify(expanded || this.state.expanded));\n }\n\n showError(err) {\n this.setState({errorText: err});\n }\n\n onToggle(id, e) {\n e && e.stopPropagation();\n if (id === ROOT_ID) {\n return;\n }\n const expanded = [...this.state.expanded];\n const newState = {expanded};\n const pos = expanded.indexOf(id);\n if (pos !== -1) {\n expanded.splice(pos, 1);\n if (this.state.selected && this.state.selected.startsWith(id + '.')) {\n newState.selected = id;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', id);\n }\n } else {\n expanded.push(id);\n expanded.sort();\n }\n this.setState({expanded});\n this.saveExpanded(expanded);\n }\n\n renderItemButtonsOnEnd(item, children) {\n if (this.state.reorder) {\n return null;\n }\n if (item.type !== 'folder') {\n let color = item.enabled ? COLOR_RUN : COLOR_PAUSE;\n if (item.enabled && this.state.problems.includes(item.id)) {\n color = COLOR_PROBLEM;\n }\n\n return [\n <IconButton\n className={clsx(this.props.classes.iconButtons, this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n onClick={e => {\n e.stopPropagation();\n this.props.onEnableDisable && this.props.onEnableDisable(item.id, !item.enabled)\n }}\n title={item.enabled ? I18n.t('Pause script') : I18n.t('Run script')}\n disabled={this.props.debugMode}\n key=\"startStop\"\n style={{ color }}\n size=\"medium\"\n >\n {item.enabled ? <IconPause /> : <IconPlay />}\n </IconButton>,\n this.state.width > NARROW_WIDTH ? <IconButton\n key=\"delete\"\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n title={I18n.t('Delete script')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"\n >\n <IconDelete/>\n </IconButton> : null,\n <IconButton\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n key=\"openInEdit\"\n title={I18n.t('Edit script or just double click')}\n onClick={e => this.onEdit(item, e)}\n size=\"medium\">\n <IconDoEdit/>\n </IconButton>,\n ];\n } else if (this.state.width > NARROW_WIDTH) {\n if (item.id !== ROOT_ID && item.id !== COMMON_ID && item.id !== GLOBAL_ID && (!children || !children.length)) {\n return (\n <IconButton\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n key=\"delete\"\n title={I18n.t('Delete folder')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"><IconDelete/></IconButton>\n );\n } else {\n return null;\n }\n }\n }\n\n onDelete(item, e) {\n e && e.stopPropagation();\n return new Promise(resolve => {\n if (typeof item !== 'object') {\n this.setState({deleting: item});\n } else {\n this.setState({deleting: item.id});\n }\n });\n }\n\n onEdit(item, e) {\n this.onClick(item, e);\n this.props.onEdit && this.props.onEdit(item.id);\n }\n\n getTextStyle(item) {\n if (!this.state.reorder && item.type !== 'folder') {\n return {\n //width: 130,\n width: `calc(100% - ${this.state.width > NARROW_WIDTH ? 185 : 137}px)`,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n flex: 'none',\n padding: '0 16px 0 0'\n };\n } else {\n return {\n whiteSpace: 'nowrap',\n padding: '0 16px 0 0'\n };\n }\n }\n\n onClick(item, e) {\n e && e.stopPropagation();\n if (!this.state.reorder && item) {\n const expanded = this.ensureSelectedIsVisible(item);\n const newState = {selected: item.id};\n if (expanded) {\n newState.expanded = expanded;\n }\n this.setState(newState);\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n onDblClick(item, e) {\n e && e.stopPropagation();\n if (this.state.reorder) {\n return;\n }\n if (item.type === 'folder') {\n this.onToggle(item.id);\n } else {\n this.onEdit(item);\n }\n }\n\n isFilteredOut(item) {\n if (item.filtered && !item.filteredPartly) return true;\n\n if (this.state.typeFilter && item.type !== 'folder' && item.type !== this.state.typeFilter) {\n return true;\n }\n\n if (this.state.statusFilter &&\n item.type !== 'folder' &&\n (\n (this.state.statusFilter === 'running' && !item.enabled) ||\n (this.state.statusFilter === 'paused' && item.enabled) ||\n (this.state.statusFilter === 'problems' && (!item.enabled || this.state.problems.indexOf(item.id) === -1)))\n ) {\n return true;\n }\n\n return (item.id === GLOBAL_ID && !this.state.expertMode);\n }\n\n renderListItem(item, children, childrenFiltered) {\n if (item.id === ROOT_ID && !this.state.reorder) {\n return null;\n }\n\n const depthPx = (this.state.reorder ? item.depth : item.depth - 1) * LEVEL_PADDING;\n\n let title = item.title;\n\n if (this.state.searchText) {\n const pos = title.toLowerCase().indexOf(this.state.searchText.toLowerCase());\n if (pos !== -1) {\n title = [\n (<span key=\"first\">{title.substring(0, pos)}</span>),\n (<span key=\"second\" style={{color: 'orange'}}>{title.substring(pos, pos + this.state.searchText.length)}</span>),\n (<span key=\"third\">{title.substring(pos + this.state.searchText.length)}</span>),\n ];\n }\n }\n\n if (!this.state.isAllZeroInstances && item.type !== 'folder') {\n title = [\n <span key=\"instance\" title={I18n.t('Instance')} className={this.props.classes.instances}>[{item.instance}] </span>,\n <span key=\"title\">{title}</span>\n ];\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const style = Object.assign({\n marginLeft: depthPx,\n cursor: item.type === 'folder' && reorder ? 'default' : 'inherit',\n width: `calc(100% - ${depthPx}px)`\n }, item.id === this.state.selected && !reorder ? SELECTED_STYLE : {});\n\n if (!reorder) {\n style.opacity = item.filteredPartly ? 0.5 : 1;\n }\n\n if (item.id === GLOBAL_ID && item.id !== this.state.selected) {\n style.color = '#00a200';\n }\n\n let isExpanded = item.id === ROOT_ID;\n if (!isExpanded && children) {\n isExpanded = this.state.expanded.includes(item.id);\n }\n\n let iconStyle = {};\n if (item.id === GLOBAL_ID) {\n iconStyle.color = '#356956';\n } else if (item.id === COMMON_ID) {\n iconStyle.color = '#4899e1';\n }\n let iconClass;\n if (item.type === 'folder') {\n iconClass = clsx(this.props.classes.folderIcon, reorder ? this.props.classes.folderIconReorder : this.props.classes.folderIconNoReorder);\n } else {\n iconClass = clsx(this.props.classes.scriptIcon, reorder ? this.props.classes.scriptIconReorder : this.props.classes.scriptIconNoReorder);\n }\n\n let childrenCount = null;\n if ((childrenFiltered && childrenFiltered.length) || (children && children.length)) {\n childrenCount = <span className={this.props.classes.childrenCount}>{childrenFiltered && childrenFiltered.length !== children.length ? `${childrenFiltered.length}(${children.length})` : children.length}</span>;\n }\n\n return <ListItem\n key={item.id}\n style={style}\n className={clsx(\n item.type === 'folder' ? this.props.classes.folder : this.props.classes.script,\n reorder && item.type === 'folder' && 'folder-reorder',\n reorder && item.type !== 'folder' && 'script-reorder',\n reorder && this.props.classes.reorder,\n reorder && item.type !== 'folder' && this.props.classes.scriptReorder,\n reorder && item.type === 'folder' && this.props.classes.folderReorder,\n )}\n onClick={e => this.onClick(item, e)}\n onDoubleClick={e => this.onDblClick(item, e)}\n >\n <ListItemIcon\n classes={{root: this.props.classes.listItemIcon}}\n >{\n item.type === 'folder' ? (\n reorder || isExpanded ?\n <IconFolderOpened className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)}/> :\n <IconFolder className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)}/>\n )\n :\n <img className={iconClass} alt={item.type} src={images[item.type] || images.def}/>\n }</ListItemIcon>\n <ListItemText\n classes={{primary: item.id === this.state.selected && !reorder ? this.props.classes.selected : undefined}}\n style={this.getTextStyle(item)} primary={(<span>{title}{childrenCount}</span>)}/>\n <ListItemSecondaryAction>{this.renderItemButtonsOnEnd(item, children)}</ListItemSecondaryAction>\n </ListItem>;\n }\n\n onDragFinish(source, target) {\n let newId = target + '.' + source.split('.').pop();\n if (newId !== source) {\n // If target yet exists => add Copy to\n if (this.state.listItems.find(item => item.id === newId)) {\n newId += '_' + I18n.t('copy');\n }\n\n this.props.onRename && this.props.onRename(source, newId);\n }\n return undefined;\n }\n\n renderOneItem(items, item, dragging) {\n let childrenFiltered = (this.state.statusFilter || this.state.typeFilter) && items.filter(i => i.parent === item.id ? !this.isFilteredOut(i) : false);\n let children = items.filter(i => i.parent === item.id);\n\n if (this.isFilteredOut(item)) {\n return;\n }\n\n if (item.type === 'folder' && (this.state.statusFilter || this.state.typeFilter) && !childrenFiltered.length) {\n return;\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const element = this.renderListItem(item, children, childrenFiltered);\n const result = [];\n let reactChildren;\n if (children && (reorder || this.state.expanded.includes(item.id) || item.id === ROOT_ID)) {\n reactChildren = children.map(it => this.renderOneItem(items, it));\n }\n\n if (reorder) {\n if (item.type === 'folder') {\n result.push(<Droppable key={'droppable_' + item.id} onDrop={e => this.onDragFinish(e.name, item.id)}>\n <Draggable key={'draggable_' + item.id} name={item.id}>{element}</Draggable>\n {reactChildren || null}\n </Droppable>);\n } else {\n result.push(<Draggable key={'draggable_' + item.id} name={item.id}>\n {element}\n {reactChildren || null}\n </Draggable>);\n }\n } else {\n result.push(element);\n reactChildren && reactChildren.forEach(e => result.push(e));\n }\n\n return result;\n }\n\n renderAllItems(items) {\n const result = items\n .filter(item => !item.parent)\n .map(item =>\n this.renderOneItem(items, item));\n\n return <List\n dense={true}\n disablePadding={true}\n className={this.props.classes.mainList}\n >\n {result}\n </List>;\n }\n\n onAddNew(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({choosingType: true});\n }\n\n onCopy(e, id) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === id);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({copingScript: id});\n }\n\n onAddNewFolder(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({creatingFolder: true});\n }\n\n onRename(e) {\n e && e.stopPropagation();\n this.setState({renaming: this.state.selected});\n }\n\n getUniqueName(copyId) {\n let i = 1;\n let word = I18n.t('Script') + ' ';\n if (copyId) {\n let name = getObjectName(copyId, this.props.scripts[copyId]);\n const m = name.match(/\\d+$/);\n if (m) {\n word = name.replace(/\\d+$/, '');\n i = parseInt(m[0], 10) + 1;\n } else {\n word = name;\n }\n }\n\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === `${this.parent}.${word.replace(/\\.\\s/g, '_')}${i}`)) {\n i++;\n }\n /*ignore jslint end*/\n return word + i;\n }\n\n getUniqueFolderName() {\n let i = 1;\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === `${this.parent}.${I18n.t('Folder')}_${i}`)) {\n i++;\n }\n return `${I18n.t('Folder')} ${i}`;\n }\n\n onCloseMenu(cb) {\n this.setState({menuOpened: false, menuAnchorEl: null, menuAnchorFilterEl: null}, cb);\n }\n\n getFilterBadge() {\n return [\n this.state.statusFilter === true && <IconPlay className={this.props.classes.filterIcon} style={{color: COLOR_RUN}}/>,\n this.state.statusFilter === false && <IconPause className={this.props.classes.filterIcon} style={{color: COLOR_PAUSE}}/>,\n this.state.typeFilter === 'Blockly' && 'Bl',\n this.state.typeFilter === 'Javascript/js' && 'JS',\n this.state.typeFilter === 'TypeScript/ts' && 'TS',\n ];\n }\n\n getMainMenu(children, selectedItem) {\n return <Menu\n key=\"menu\"\n id=\"long-menu\"\n anchorEl={this.state.menuAnchorEl}\n open={this.state.menuOpened}\n onClose={() => this.setState({menuOpened: false, menuAnchorEl: null})}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n //width: 200,\n },\n }}\n >\n {this.state.width <= NARROW_WIDTH ? <MenuItem\n key=\"delete\"\n disabled={this.props.debugMode || !this.state.selected || this.state.selected === GLOBAL_ID || this.state.selected === COMMON_ID || (children && children.length)}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n if (this.state.listItems.find(item => item.parent === this.state.selected)) {\n this.showError(I18n.t('Cannot delete non empty item!'));\n return;\n }\n\n this.setState({menuOpened: false, menuAnchorEl: null}, () =>\n this.onDelete(this.state.selected).then(() => {}));\n }}><IconDelete className={this.props.classes.iconDropdownMenu} style={{color: 'red'}}/>{I18n.t('Delete')}\n </MenuItem> : null}\n <MenuItem\n key=\"expertMode\"\n disabled={this.props.debugMode}\n selected={this.state.expertMode}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.props.onExpertModeChange && this.props.onExpertModeChange(!this.state.expertMode));\n }}>\n <IconExpert className={this.props.classes.iconDropdownMenu} style={{color: this.state.expertMode ? 'orange' : 'inherit'}}/>{I18n.t('Expert mode')}\n </MenuItem>\n {this.props.onExport && <MenuItem\n key=\"exportAll\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onExport());\n }}>\n <IconExport className={this.props.classes.iconDropdownMenu} />{I18n.t('Export all scripts')}\n </MenuItem>}\n {this.props.onImport && <MenuItem\n disabled={this.props.debugMode}\n key=\"import\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onImport());\n }}>\n <IconImport className={this.props.classes.iconDropdownMenu} />{I18n.t('Import scripts')}\n </MenuItem>}\n {this.props.onThemeChange && <MenuItem\n key=\"dark\"\n onClick={() =>\n this.onCloseMenu(() => {\n // TODO: use Utils.toggleTheme(themeName)\n // newThemeName = Utils.toggleTheme(themeName);\n const newThemeName = this.state.themeName === 'dark' ? 'blue' :\n this.state.themeName === 'blue' ? 'colored' : this.state.themeName === 'colored' ? 'light' :\n this.state.themeName === 'light' ? 'dark' : 'colored';\n this.props.onThemeChange(newThemeName);\n })}>\n <IconDark className={this.props.classes.iconDropdownMenu} />{I18n.t('Change theme (actual \"%s\")', this.state.themeName)}\n </MenuItem>}\n {this.props.onAddNew && <MenuItem key=\"copy\"\n disabled={!this.state.selected || !selectedItem || selectedItem.type === 'folder'}\n onClick={event => {\n const selected = this.state.selected;\n this.onCloseMenu(() => this.onCopy(event, selected))\n }}>\n <IconCopy className={this.props.classes.iconDropdownMenu} />{I18n.t('Copy script')}\n </MenuItem>}\n {this.state.expertMode && <MenuItem\n disabled={this.props.debugMode}\n key=\"debugInstance\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.setState({showAdapterDebug: true}));\n }}>\n <IconDebug className={this.props.classes.iconDropdownMenu}/>{I18n.t('Debug instance')}\n </MenuItem>}\n </Menu>;\n }\n\n // render menu and toolbar\n getToolbarButtons() {\n const result = [];\n const classes = this.props.classes;\n const reorder = this.state.reorder && !this.props.debugMode;\n if (this.state.searchMode && !this.props.debugMode) {\n result.push(<Input\n key=\"searchInput\"\n value={this.state.searchText}\n className={classes.toolbarSearch}\n ref={this.inputRef}\n autoFocus={true}\n placeholder={I18n.t('Search...')}\n onChange={e => {\n this.setState({searchText: e.target.value});\n this.filterTimer && clearTimeout(this.filterTimer);\n this.filterTimer = setTimeout(() => {\n this.filterTimer = null;\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n }, 400);\n }}\n />);\n\n result.push(<IconButton\n key=\"disableSearch\"\n className={classes.toolbarButtons}\n style={{float: 'right'}}\n title={I18n.t('End search mode')}\n onClick={e => {\n e.stopPropagation();\n this.filterList(false, () => this.props.onSearch && this.props.onSearch(this.state.searchText));\n }}\n size=\"medium\"><IconClose /></IconButton>);\n\n this.state.searchText && result.push(<IconButton\n key=\"cleanSearch\"\n mini=\"true\"\n title={I18n.t('Clear search input')}\n className={classes.toolbarButtons}\n style={{marginTop: 7, float: 'right'}}\n onClick={e => {\n e.stopPropagation();\n this.setState({searchText: ''}, () => {\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n });\n }}\n size=\"medium\"><IconClear fontSize=\"small\"/></IconButton>);\n } else {\n if (!reorder) {\n // Open Menu\n result.push(<IconButton\n key=\"menuButton\"\n aria-label=\"More\"\n aria-owns={this.state.menuOpened ? 'long-menu' : undefined}\n title={I18n.t('Menu')}\n aria-haspopup=\"true\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({menuOpened: true, menuAnchorEl: event.currentTarget});\n }}\n size=\"medium\">\n {/*<Badge className={classes.margin} badgeContent={this.getFilterBadge()}>*/}\n <IconMore />\n {/*</Badge>*/}\n </IconButton>);\n\n const selectedItem = this.state.listItems.find(it => it.id === this.state.selected);\n let children;\n if (selectedItem && this.state.width <= NARROW_WIDTH && selectedItem.type === 'folder') {\n children = this.state.listItems.filter(i => i.parent === this.state.selected);\n }\n\n // Menu\n result.push(this.getMainMenu(children, selectedItem));\n\n // New Script\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-script\"\n title={I18n.t('Create new script')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit'}}\n onClick={e => this.onAddNew(e)}\n size=\"medium\"><IconAdd/></IconButton>);\n\n // New Folder\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-folder\"\n title={I18n.t('Create new folder')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit'}}\n onClick={() => this.onAddNewFolder()}\n size=\"medium\"><IconAddFolder/></IconButton>);\n }\n\n // Search\n result.push(<IconButton\n key=\"search\"\n disabled={reorder || this.props.debugMode}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n title={I18n.t('Search in scripts')}\n style={{float: 'right', opacity: this.props.debugMode ? 0.5 : (reorder ? 0 : 1)}}\n onClick={e => {\n e.stopPropagation();\n this.setState({searchMode: true});\n }}\n size=\"medium\"><IconFind/></IconButton>);\n\n // Reorder button\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"reorder\"\n title={I18n.t('Reorder scripts in folders')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit', float: 'right'}}\n onClick={e => {\n e.stopPropagation();\n this.setState({reorder: !this.state.reorder});\n }}\n size=\"medium\"><IconReorder/></IconButton>);\n\n if (!reorder && this.state.selected && this.state.selected !== GLOBAL_ID && this.state.selected !== COMMON_ID) {\n // Rename\n result.push(<IconButton\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n title={I18n.t('Rename')}\n key=\"rename\"\n onClick={e => this.onRename(e)}\n size=\"medium\"><IconEdit/></IconButton>);\n\n\n // const selectedItem = this.state.listItems.find(i => i.id === this.state.selected);\n // if (selectedItem && selectedItem.type !== 'folder') {\n // // Restart\n // result.push((<IconButton className={classes.toolbarButtons}\n // key=\"restart\"\n // onClick={e => {\n // e.stopPropagation();\n // this.props.onEnableDisable && this.props.onEnableDisable();\n // }}\n // ><IconRestart/></IconButton>));\n // }\n }\n\n }\n return result;\n }\n\n getFolders() {\n const folders = [{id: ROOT_ID, name: I18n.t('Root folder')}];\n this.state.listItems.forEach(item =>\n item.type === 'folder' && folders.push({id: item.id, name: item.title})\n );\n return folders;\n }\n\n onCollapseAll() {\n this.setState({expanded: []});\n this.saveExpanded([]);\n }\n\n onExpandAll() {\n const expanded = [];\n this.state.listItems.forEach(item =>\n this.state.listItems.find(it => it.parent === item.id) && expanded.push(item.id));\n this.setState({expanded});\n this.saveExpanded(expanded);\n }\n\n getBottomButtons() {\n if (this.state.reorder || this.props.debugMode) {\n return null;\n }\n return [\n <IconPause\n key=\"filterByRunning\"\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_RUN, opacity: this.state.statusFilter === 'running' ? 1 : 0.3, background: this.state.statusFilter === 'running' ? 'gray' : 'inherit' }}\n title={I18n.t('Show only running scripts')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n const statusFilter = this.state.statusFilter === 'running' ? '' : 'running';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({statusFilter});\n }}\n />,\n\n <IconPlay\n key=\"filterByPaused\"\n title={I18n.t('Show only paused scripts')}\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_PAUSE, opacity: this.state.statusFilter === 'paused' ? 1 : 0.3, background: this.state.statusFilter === 'paused' ? 'gray' : 'inherit' }}\n onClick={() => {\n const statusFilter = this.state.statusFilter === 'paused' ? '' : 'paused';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({statusFilter});\n }}\n />,\n <IconPause\n key=\"filterByProblem\"\n title={I18n.t('Show only scripts with problems')}\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_PROBLEM, opacity: this.state.statusFilter === 'problems' ? 1 : 0.3, background: this.state.statusFilter === 'problems' ? 'gray' : 'inherit' }}\n onClick={() => {\n const statusFilter = this.state.statusFilter === 'problems' ? '' : 'problems';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({statusFilter});\n }}\n />,\n <img\n key=\"filterBlockly\"\n className={this.props.classes.footerButtons}\n alt=\"Blockly\"\n style={{ opacity: this.state.typeFilter === 'Blockly' ? 1 : 0.3, background: this.state.typeFilter === 'Blockly' ? 'gray' : 'inherit' }}\n src={images.Blockly || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'Blockly' ? '' : 'Blockly';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <img\n key=\"filterJS\"\n className={this.props.classes.footerButtons}\n alt=\"Javascript\"\n style={{ opacity: this.state.typeFilter === 'Javascript/js' ? 1 : 0.3, background: this.state.typeFilter === 'Javascript/js' ? 'gray' : 'inherit' }}\n src={images['Javascript/js'] || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'Javascript/js' ? '' : 'Javascript/js';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <img\n key=\"filterTS\"\n className={this.props.classes.footerButtons}\n alt=\"TypeScript\"\n style={{ opacity: this.state.typeFilter === 'TypeScript/ts' ? 1 : 0.3, background: this.state.typeFilter === 'TypeScript/ts' ? 'gray' : 'inherit' }}\n src={images['TypeScript/ts'] || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'TypeScript/ts' ? '' : 'TypeScript/ts';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <img\n key=\"filterRules\"\n className={this.props.classes.footerButtons}\n alt=\"Rules\"\n style={{ opacity: this.state.typeFilter === 'Rules' ? 1 : 0.3, background: this.state.typeFilter === 'Rules' ? 'gray' : 'inherit' }}\n src={images['Rules'] || images.def}\n onClick={event => {\n const typeFilter = this.state.typeFilter === 'Rules' ? '' : 'Rules';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <IconExpandAll key=\"expandAll\" className={this.props.classes.footerButtons + ' ' + this.props.classes.footerButtonsRight} title={I18n.t('Expand all')} onClick={() => this.onExpandAll()}/>,\n this.state.expanded.length ? <IconCollapseAll key=\"collapseAll\" className={this.props.classes.footerButtons + ' ' + this.props.classes.footerButtonsRight} title={I18n.t('Collapse all')} onClick={() => this.onCollapseAll()}/> : null,\n ];\n }\n\n getAdapterDebugDialog() {\n if (this.state.showAdapterDebug) {\n return <DialogAdapterDebug\n socket={this.props.socket}\n onClose={() => this.setState({showAdapterDebug: false})}\n onDebug={(instance, adapter) => this.setState({showAdapterDebug: false}, () => this.props.onDebugInstance({instance, adapter}))}\n />;\n }\n }\n\n render() {\n const {classes} = this.props;\n\n const renamingItem = this.state.renaming && this.state.listItems.find(i => i.id === this.state.renaming);\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n\n return [\n <Drawer\n key=\"drawer\"\n variant=\"permanent\"\n className={classes.menu}\n classes={{paper: classes.drawerPaper}}\n anchor='left'\n onClick={() => this.onClick({id: ''})}\n >\n <div className={classes.toolbar}>\n {this.getToolbarButtons()}\n </div>\n\n <Divider/>\n\n <DragDropContext backend={HTML5Backend}>\n <div className={classes.innerMenu}>\n {this.renderAllItems(this.state.listItems)}\n </div>\n </DragDropContext>\n\n <Divider/>\n\n <div className={classes.footer}>{this.getBottomButtons()}</div>\n </Drawer>,\n\n renamingItem ? <DialogRename\n key=\"dialog-rename\"\n name={renamingItem.title}\n title={I18n.t('Rename')}\n id={this.state.renaming}\n folder={renamingItem.type === 'folder'}\n instance={renamingItem.instance}\n instances={this.props.instances}\n onClose={() => this.setState({renaming: false})}\n onRename={(oldId, newName, newId, newInstance) => this.props.onRename && this.props.onRename(oldId, newName, newId, newInstance)}\n /> : null,\n\n this.state.deleting ? <DialogDelete\n key=\"dialog-delete\"\n name={this.state.listItems.find(i => i.id === this.state.deleting).title}\n id={this.state.deleting}\n onClose={() => this.setState({deleting: false})}\n onDelete={id => this.props.onDelete && this.props.onDelete(id)}\n /> : null,\n\n this.state.choosingType ? <DialogAddNewScript\n key=\"dialog-script-type\"\n onClose={type => {\n this.setState({choosingType: false});\n type && this.setState({creatingScript: type})\n }}\n /> : null,\n\n this.state.creatingScript ? <DialogNew\n key=\"dialog-new-script\"\n onClose={() => this.setState({creatingScript: false})}\n title={I18n.t('Create new script')}\n name={ this.getUniqueName() }\n parents={ this.getFolders() }\n folder={ false }\n existingItems={this.state.listItems.map(item => item.id)}\n instance={this.props.instances[0] || 0}\n instances={this.props.instances}\n type={this.state.creatingScript}\n parent={this.parent}\n onAdd={(id, name, instance, type) =>\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type)}\n /> : null,\n\n this.state.copingScript ? <DialogNew\n key=\"dialog-copy-script\"\n onClose={() => this.setState({copingScript: ''})}\n title={I18n.t('Copy script')}\n name={ this.getUniqueName(this.state.copingScript) }\n parents={this.getFolders()}\n folder={false}\n instance={parseInt((copingItem && copingItem.common && copingItem.common.engine && copingItem.common.engine.split('.').pop()) || 0, 10)}\n instances={this.props.instances}\n type={(copingItem && copingItem.common && copingItem.common.engineType) || 'Javascript/js'}\n parent={this.parent}\n onAdd={(id, name, instance, type) => {\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n if (copingItem && copingItem.common) {\n // disable script by coping\n copingItem.common.enabled = false;\n }\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type, copingItem && copingItem.common && copingItem.common.source);\n }}\n /> : null,\n\n this.state.creatingFolder ? <DialogNew\n key=\"dialog-new-folder\"\n onClose={() => this.setState({creatingFolder: false})}\n title={I18n.t('Create new folder')}\n parents={this.getFolders()}\n name={this.getUniqueFolderName()}\n parent={this.parent}\n onAdd={(id, name) =>\n this.props.onAddNew && this.props.onAddNew(id, name, true)}\n /> : null,\n\n this.state.errorText ? <DialogError onClose={() => this.setState({errorText: ''})} text={this.state.errorText}/> : null,\n\n this.getAdapterDebugDialog(),\n ];\n }\n}\n\nSideDrawer.propTypes = {\n classes: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n scripts: PropTypes.object.isRequired,\n scriptsHash: PropTypes.number,\n onEdit: PropTypes.func,\n selectId: PropTypes.string,\n expertMode: PropTypes.bool,\n onExpertModeChange: PropTypes.func,\n onEnableDisable: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onSelect: PropTypes.func,\n onAddNew: PropTypes.func,\n onRename: PropTypes.func,\n onDelete: PropTypes.func,\n onImport: PropTypes.func,\n onExport: PropTypes.func,\n onSearch: PropTypes.func,\n onThemeChange: PropTypes.func,\n onDebugInstance: PropTypes.func,\n width: PropTypes.number,\n debugMode: PropTypes.bool,\n};\n\nexport default withStyles(styles)(SideDrawer);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport IconButton from '@mui/material/IconButton';\nimport {MdDeleteForever as IconDelete} from 'react-icons/md';\nimport {MdVerticalAlignBottom as IconBottom} from 'react-icons/md';\nimport {MdContentCopy as IconCopy} from 'react-icons/md';\nimport {MdVisibilityOff as IconHide} from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\n\n// replace later with MdHorizontalSplit and MdVerticalSplit\nconst IconVerticalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAACFJREFUeAFjAIJRwP////8PYIKWHCigNQdKj/pn1D+jAABTG16wVQqVpQAAAABJRU5ErkJggg==';\nconst IconHorizontalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAABtJREFUeAFjAIJRwP8fCj7QkENn/4z6Z5QzCgBjbWaoyx1PqQAAAABJRU5ErkJggg==';\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) i = '0' + i.toString();\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) i = '0' + i.toString();\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) i = '0' + i.toString();\n text += i + '.';\n i = d.getMilliseconds();\n if (i < 10) {\n i = '00' + i.toString();\n } else if (i < 100) {\n i = '0' + i.toString();\n }\n text += i;\n return text;\n}\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden'\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n\n },\n toolbox: {\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold'\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4\n },\n layoutIcon: {\n width: 24,\n height: 24,\n background: theme.palette.mode === 'dark' ? '#9d9d9d' : undefined,\n borderRadius: theme.palette.mode === 'dark' ? 30 : undefined,\n },\n});\n\nfunction copyToClipboard(str) {\n const el = window.document.createElement('textarea');\n el.value = str;\n window.document.body.appendChild(el);\n el.select();\n window.document.execCommand('copy');\n window.document.body.removeChild(el);\n}\n\nfunction paddingMs(ms) {\n if (ms < 10) {\n return '00' + ms;\n }\n if (ms < 100) {\n return '0' + ms;\n }\n return ms;\n}\n\nlet gText = {};\n\nclass Log extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n selected: null,\n editing: this.props.editing || []\n };\n this.lastIndex = null;\n this.messagesEnd = React.createRef();\n }\n\n generateLine(message) {\n return <tr key={'tr_' + message.ts + '_' + message.message.substr(-10)} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.message}</td>\n </tr>;\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({behavior: 'smooth'});\n }\n logHandler = message => {\n let allLines = this.state.lines;\n const selected = this.state.editing.find(id => message.message.indexOf(id) !== -1);\n if (!selected) {\n return;\n }\n\n let lines = allLines[selected] || [];\n let text = gText[selected] || [];\n\n lines.push(this.generateLine(message));\n let severity = message.severity;\n if (severity === 'info' || severity === 'warn') {\n severity += ' ';\n }\n const date = new Date(message.ts);\n text.push(`${date.toLocaleString()}.${paddingMs(date.getMilliseconds())}\\t[${severity}]: ${message.message}`);\n if (lines.length > 300) {\n lines.splice(0, lines.length - 300);\n text.splice(0, lines.length - 300);\n }\n gText[selected] = text;\n allLines[selected] = lines;\n\n this.setState({lines: allLines});\n }\n\n componentDidMount() {\n this.props.socket.registerLogHandler(this.logHandler);\n }\n\n componentWillUnmount() {\n this.props.socket.unregisterLogHandler(this.logHandler);\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n static getDerivedStateFromProps(props, state) {\n let changed = false;\n let newState = {};\n\n if (props.selected !== state.selected) {\n let selected = props.selected;\n let allLines = state.lines;\n allLines[selected] = allLines[selected] || [];\n gText[selected] = gText[selected] || [];\n newState.selected = selected;\n changed = true;\n }\n\n if (JSON.stringify(props.editing) !== JSON.stringify(state.editing)) {\n const editing = JSON.parse(JSON.stringify(props.editing));\n changed = true;\n let allLines = state.lines;\n\n for (const id in gText) {\n if (gText.hasOwnProperty(id)) {\n if (!editing.includes(id)) {\n delete gText[id];\n delete allLines[id];\n }\n }\n }\n\n newState.editing = editing;\n }\n return changed ? newState : null;\n }\n\n onCopy() {\n copyToClipboard((gText[this.state.selected] || []).join('\\n'));\n }\n\n clearLog() {\n let allLines = this.state.lines;\n if (allLines[this.state.selected]) {\n allLines[this.state.selected] = [];\n }\n if (gText[this.state.selected]) {\n gText[this.state.selected] = [];\n }\n this.setState({lines: allLines});\n }\n\n renderLogList(lines) {\n if (this.state.selected && lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>{lines}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{float: 'left', clear: 'both'}}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{paddingLeft: 10}}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n render() {\n const lines = this.state.selected && this.state.lines[this.state.selected];\n return (\n <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({goBottom: !this.state.goBottom})}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.clearLog()}\n size=\"medium\"><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy/></IconButton> : null}\n {this.props.onLayoutChange ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onLayoutChange()}\n title={I18n.t('Change layout')}\n size=\"medium\"><img className={this.props.classes.layoutIcon} alt=\"split\" src={this.props.verticalLayout ? IconVerticalSplit : IconHorizontalSplit} /></IconButton> : null}\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onHideLog()}\n title={I18n.t('Hide logs')}\n size=\"medium\"><IconHide /></IconButton>\n </div>\n {this.renderLogList(lines)}\n </div>\n );\n }\n}\n\nLog.propTypes = {\n selected: PropTypes.string,\n socket: PropTypes.object,\n onLayoutChange: PropTypes.func,\n verticalLayout: PropTypes.bool\n};\n\nexport default withStyles(styles)(Log);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Fab from '@mui/material/Fab';\n\nimport {MdGTranslate as IconNoCheck} from 'react-icons/md';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nfunction isIdOfGlobalScript(id) {\n return /^script\\.js\\.global\\./.test(id);\n}\nlet index = 0;\nclass ScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: 'current',\n isDark: props.isDark || false,\n language: props.language || 'javascript',\n readOnly: props.readOnly || false,\n alive: true,\n check: false,\n searchText: this.props.searchText || '',\n typingsLoaded: false,\n };\n this.runningInstancesStr = JSON.stringify(this.props.runningInstances);\n this.monacoDiv = null; //ref\n this.editor = null;\n this.monaco = window.monaco;\n this.insert = '';\n this.originalCode = props.code || '';\n this.typings = {}; // TypeScript declarations\n this.lastSearch = '';\n }\n\n waitForMonaco(cb) {\n if (!this.monaco || !this.props.runningInstances) {\n this.monaco = window.monaco;\n this.monacoCounter = this.monacoCounter || 0;\n this.monacoCounter++;\n if (!this.monaco && this.monacoCounter < 20) {\n console.log('wait for monaco loaded');\n return setTimeout(() => this.waitForMonaco(cb), 200);\n } else if (this.monacoCounter >= 20) {\n console.error('Cannot load monaco!');\n }\n } else {\n cb && cb();\n }\n }\n\n loadTypings(runningInstances) {\n if (!this.editor) {\n return;\n }\n runningInstances = runningInstances || this.props.runningInstances;\n let scriptAdapterInstance = runningInstances && Object.keys(runningInstances).find(id => runningInstances[id]);\n if (scriptAdapterInstance) {\n this.props.socket.sendTo(scriptAdapterInstance.replace('system.adapter.', ''), 'loadTypings', null)\n .then(result => {\n this.setState({alive: true, check: true, typingsLoaded: true});\n this.setTypeCheck(true);\n if (result.typings) {\n this.typings = result.typings;\n this.setEditorTypings(this.state.name);\n } else {\n console.error(`failed to load typings: ${result.error}`);\n }\n });\n }\n }\n\n componentDidMount() {\n if (!this.monaco || !this.props.runningInstances) {\n this.monaco = window.monaco;\n if (!this.monaco) {\n console.log('wait for monaco loaded');\n return this.waitForMonaco(() => this.componentDidMount());\n }\n }\n if (!this.editor) {\n this.props.onRegisterSelect && this.props.onRegisterSelect(() => this.editor.getModel().getValueInRange(this.editor.getSelection()));\n // For some reason we have to get the original compiler options\n // and assign new properties one by one\n const compilerOptions = this.monaco.languages.typescript.typescriptDefaults['getCompilerOptions']();\n compilerOptions.target = this.monaco.languages.typescript.ScriptTarget.ES2015;\n compilerOptions.allowJs = true;\n compilerOptions.checkJs = this.props.checkJs !== false;\n compilerOptions.noLib = true;\n compilerOptions.lib = [];\n compilerOptions.useUnknownInCatchVariables = false;\n compilerOptions.moduleResolution = this.monaco.languages.typescript.ModuleResolutionKind.NodeJs;\n this.monaco.languages.typescript.typescriptDefaults.setCompilerOptions(compilerOptions);\n\n this.setTypeCheck(false);\n\n // Create the editor instances\n this.editor = this.monaco.editor.create(this.monacoDiv, {\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n automaticLayout: true,\n glyphMargin: !!this.props.breakpoints,\n });\n\n this.editor.onDidChangeModelContent(e =>\n this.onChange(this.editor.getValue()));\n\n // Load typings for the JS editor\n /** @type {string} */\n this.loadTypings();\n\n this.editor.addCommand(this.monaco.KeyMod.CtrlCmd | this.monaco.KeyCode.KEY_S, () =>\n this.onForceSave());\n\n setTimeout(() => {\n this.highlightText(this.state.searchText);\n this.location = this.props.location;\n this.breakpoints = this.props.breakpoints;\n this.showDecorators();\n });\n }\n const options = {\n selectOnLineNumbers: true,\n scrollBeyondLastLine: false,\n automaticLayout: true,\n readOnly: this.state.readOnly,\n language: this.state.language,\n isDark: this.state.isDark,\n };\n\n this.setEditorOptions(options);\n this.editor.focus();\n this.editor.setValue(this.originalCode);\n if (this.props.onToggleBreakpoint) {\n this.editor.onMouseDown(e => {\n if (e.target.detail && e.target.detail.glyphMarginLeft !== undefined) {\n this.props.onToggleBreakpoint(e.target.position.lineNumber - 1);\n }\n });\n } else {\n this.editor.onMouseDown(null);\n }\n }\n\n /**\n * Sets some options of the code editor\n * @param {object} options The editor options to change\n * @param {Partial<{readOnly: boolean, lineWrap: boolean, language: EditorLanguage, typeCheck: boolean}>} options\n */\n setEditorOptions(options) {\n if (options) {\n if (options.language) {\n this.setEditorLanguage(options.language);\n }\n if (options.readOnly !== undefined) {\n this.editor.updateOptions({readOnly: options.readOnly});\n }\n if (options.lineWrap !== undefined) {\n this.editor.updateOptions({wordWrap: options.lineWrap ? 'on' : 'off'});\n }\n if (options.typeCheck !== undefined) {\n this.setTypeCheck(options.typeCheck);\n }\n if (options.isDark !== undefined) {\n this.monaco.editor.setTheme(options.isDark ? 'vs-dark' : 'vs');\n }\n }\n }\n\n componentWillUnmount() {\n if (this.editor) {\n this.props.onRegisterSelect && this.props.onRegisterSelect(null);\n this.editor.dispose();\n this.editor = null;\n }\n }\n\n /** @typedef {\"javascript\" | \"typescript\" | \"coffeescript\"} EditorLanguage */\n\n /**\n * Sets the language of the code editor\n * @param {EditorLanguage} language\n */\n setEditorLanguage(language) {\n // we need to recreate the model when changing languages,\n // so remember its settings\n const model = this.editor.getModel();\n const code = model.getValue();\n const uri = model.uri.path;\n\n const filenameWithoutExtension =\n typeof uri === 'string' && uri.includes('.')\n ? uri.substr(0, uri.lastIndexOf('.'))\n : 'index';\n\n const extension =\n language === 'javascript' ? 'js'\n : (language === 'typescript' ? 'ts' : language);\n\n // get rid of the original model\n model.dispose();\n\n // Both JS and TS need the model to work in TypeScript as the script type\n // is inferred from the file extension\n const newLanguage = (language === 'javascript' || language === 'typescript') ? 'typescript' : language;\n\n const newModel = this.monaco.editor.createModel(\n code,\n newLanguage,\n this.monaco.Uri.from({path: `${filenameWithoutExtension}${index++}.${extension}`})\n );\n\n this.editor.setModel(newModel);\n }\n\n /**\n * Enables or disables the type checking in the editor\n * @param {boolean} enabled - Whether type checking is enabled or not\n */\n setTypeCheck(enabled) {\n const options = {\n noSemanticValidation: !this.state.alive || !enabled, // toggle the type checking\n noSyntaxValidation: !this.state.alive // always check the syntax\n };\n this.monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions(options);\n }\n\n /**\n * @param {string} [currentScriptName] The name of the current script\n */\n setEditorTypings(currentScriptName = '') {\n const isGlobalScript = isIdOfGlobalScript(currentScriptName);\n // The filename of the declarations this script can see if it is a global script\n const partialDeclarationsPath = `${currentScriptName}.d.ts`;\n const wantedTypings = [];\n for (const path of Object.keys(this.typings)) {\n // global scripts don't get to see all other global scripts\n // but only a part of them\n if (isGlobalScript) {\n if (path === 'global.d.ts') {\n continue;\n }\n if (path.startsWith('script.js.global') && path !== partialDeclarationsPath) {\n continue;\n }\n }\n wantedTypings.push({\n filePath: path,\n content: this.typings[path],\n });\n }\n\n // TODO BF: check https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-semantic-tokens-provider-example\n // to support 0.21.0\n\n if (this.monaco && this.monaco.languages.typescript.typescriptDefaults.setExtraLibs) {\n this.monaco.languages.typescript.typescriptDefaults.setExtraLibs(wantedTypings);\n } else if (this.monaco && this.monaco.languages.typescript.typescriptDefaults.addExtraLib) {\n const existingLibs = this.monaco.languages.typescript.typescriptDefaults.getExtraLibs();\n wantedTypings.forEach(lib => {\n if (!existingLibs[lib.filePath]) {\n this.monaco.languages.typescript.typescriptDefaults.addExtraLib(lib, lib.filePath);\n }\n });\n }\n }\n\n /**\n * Inserts some text into the given editor\n * @param {string} text The text to add\n */\n insertTextIntoEditor(text) {\n const selection = this.editor.getSelection();\n const range = new this.monaco.Range(\n selection.startLineNumber,\n selection.startColumn,\n selection.endLineNumber,\n selection.endColumn,\n );\n this.editor.executeEdits('', [{ range: range, text: text, forceMoveMarkers: true }]);\n this.editor.focus();\n }\n\n highlightText(text) {\n let range = text && this.editor.getModel().findMatches(text);\n if (range && range.length) {\n range.forEach(r => this.editor.setSelection(r.range));\n this.editor.revealLine(range[0].range.startLineNumber);\n } else if (this.editor) {\n const row = this.editor.getPosition().lineNumber;\n const col = this.editor.getPosition().column;\n this.editor.setSelection(new this.monaco.Range(row, col, row, col));\n }\n }\n\n showDecorators() {\n this.decorations = this.decorations || [];\n const decorations = [];\n if (this.location) {\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, this.location.columnNumber + 1, this.location.lineNumber + 1, 1000),\n options: {\n isWholeLine: false,\n className: this.props.isDark ? 'monacoCurrentLineDark' : 'monacoCurrentLine',\n }\n });\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, 0, this.location.lineNumber + 1, 0),\n options: {\n isWholeLine: true,\n className: this.props.isDark ? 'monacoCurrentFullLineDark' : 'monacoCurrentFullLine',\n }\n });\n }\n\n if (this.breakpoints) {\n this.breakpoints.forEach(bp => {\n decorations.push({\n range: new this.monaco.Range(bp.location.lineNumber + 1, 0, bp.location.lineNumber + 1, 100),\n options: {\n isWholeLine: true,\n glyphMarginClassName: this.props.isDark ? 'monacoBreakPointDark' : 'monacoBreakPoint',\n }\n });\n });\n }\n this.editor && (this.decorations =\n this.editor.deltaDecorations(this.decorations, decorations));\n }\n\n initNewScript(name, code) {\n this.setState({name});\n this.originalCode = code || '';\n this.editor && this.editor.setValue(code);\n this.highlightText(this.lastSearch);\n this.showDecorators();\n //this.setEditorLanguage();\n // Update the typings because global scripts need different typings than normal scripts\n // and each global script has different typings\n this.setEditorTypings(name);\n }\n\n scrollToLineIfNeeded(lineNumber) {\n if (this.editor) {\n const ranges = this.editor.getVisibleRanges();\n if (!ranges || !ranges[0] || ranges[0].startLineNumber > lineNumber || lineNumber > ranges[0].endLineNumber) {\n this.editor.revealLineInCenter(lineNumber);\n }\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const options = {};\n if (this.state.name !== nextProps.name) {\n // A different script was selected\n this.initNewScript(nextProps.name, nextProps.code);\n }\n\n // if some running instance will be found and\n if (JSON.stringify(nextProps.runningInstances) !== this.runningInstancesStr) {\n this.runningInstancesStr = JSON.stringify(nextProps.runningInstances);\n if (!this.state.typingsLoaded) {\n this.loadTypings(nextProps.runningInstances);\n }\n }\n\n // if the code not yet changed, update the new code\n if (!nextProps.changed && (nextProps.code !== this.originalCode || nextProps.code !== this.editor.getValue())) {\n this.originalCode = nextProps.code;\n this.editor.setValue(this.originalCode);\n this.showDecorators();\n this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.highlightText(this.lastSearch);\n }\n\n if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location) &&\n JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)\n ) {\n this.location = nextProps.location;\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n } else if (JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)) {\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n } else if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location)) {\n this.location = nextProps.location;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n }\n\n if (this.state.language !== (nextProps.language || 'javascript')) {\n this.setState({language: nextProps.language || 'javascript'});\n options.language = nextProps.language || 'javascript';\n } else if (this.state.readOnly !== (nextProps.readOnly || false)) {\n this.setState({readOnly: nextProps.readOnly || false});\n options.readOnly = nextProps.readOnly;\n } else if (this.state.isDark !== (nextProps.isDark || false)) {\n this.setState({isDark: nextProps.isDark || false});\n options.isDark = nextProps.isDark;\n }\n\n this.setEditorOptions(options);\n\n if (this.insert !== nextProps.insert) {\n this.insert = nextProps.insert;\n if (this.insert) {\n console.log('Insert text' + this.insert);\n setTimeout(insert => {\n this.insertTextIntoEditor(insert);\n setTimeout(() => this.props.onInserted && this.props.onInserted(), 100);\n }, 100, this.insert);\n }\n }\n }\n\n onChange(newValue, e) {\n if (!this.props.readOnly) {\n this.props.onChange && this.props.onChange(this.editor.getValue());\n }\n }\n\n render() {\n if (!this.monaco || !this.props.runningInstances) {\n setTimeout(() => {\n this.monaco = window.monaco;\n this.forceUpdate()\n }, 200);\n return null;\n }\n\n return <div ref={el => this.monacoDiv = el} style={{width: '100%', height: '100%', overflow: 'hidden', position: 'relative'}}>\n {!this.state.check && <Fab\n size=\"small\"\n title={I18n.t('Check is not active, because javascript adapter is disabled')}\n style={{bottom: 10, right: 10, opacity: 0.5, position: 'absolute', zIndex: 1, background: 'red', color: 'white'}}\n color=\"secondary\"><IconNoCheck/></Fab>}\n </div>;\n }\n}\n\nScriptEditor.propTypes = {\n adapterName: PropTypes.string.isRequired,\n socket: PropTypes.object,\n runningInstances: PropTypes.object,\n name: PropTypes.string,\n onChange: PropTypes.func,\n onForceSave: PropTypes.func,\n onInserted: PropTypes.func,\n isDark: PropTypes.bool,\n readOnly: PropTypes.bool,\n code: PropTypes.string,\n language: PropTypes.string,\n onRegisterSelect: PropTypes.func,\n searchText: PropTypes.string,\n checkJs: PropTypes.bool,\n changed: PropTypes.bool,\n\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default ScriptEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Popper from '@mui/material/Popper';\nimport Fade from '@mui/material/Fade';\nimport Paper from '@mui/material/Paper';\n\nimport IconCopy from '@mui/icons-material/FileCopy';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: '100%',\n height: '100%',\n overflow: 'auto'\n },\n textAreaLight: {\n background: 'lightgray'\n },\n dialog: {\n height: '95%'\n },\n typography: {\n padding: theme.spacing(2),\n },\n overflowY: {\n overflowY: 'hidden'\n }\n});\nclass DialogExport extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n anchorEl: null,\n popper: ''\n };\n }\n handleCancel = () => {\n this.props.onClose();\n };\n\n onCopy(event) {\n const el = window.document.getElementById('copy_input');\n if (el) {\n el.select();\n window.document.execCommand('copy');\n const target = event.currentTarget;\n\n setTimeout(() => {\n window.document.execCommand('copy');\n this.setState({ popper: I18n.t('Copied'), anchorEl: target });\n setTimeout(() => this.setState({ popper: '', anchorEl: null }), 1000);\n }, 50);\n\n }\n /*el.value = this.props.text;\n window.document.body.appendChild(el);\n el.select();*/\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n key=\"export-dialog\"\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth={true}\n open={this.props.open}\n aria-labelledby=\"export-dialog-title\"\n >\n <DialogTitle id=\"export-dialog-title\">{I18n.t('Export selected blocks')}</DialogTitle>\n <DialogContent\n classes={{ root: classes.overflowY }}>\n <pre\n id=\"export-text\"\n className={classes.textArea + ' ' + (this.props.themeType === 'dark' ? '' : classes.textAreaLight)}\n >{this.props.text}</pre>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={event => this.onCopy(event)} color=\"secondary\" startIcon={<IconCopy/>}>{I18n.t('Copy to clipboard')}</Button>\n <Button variant=\"contained\" onClick={() => this.handleCancel()} color=\"primary\" startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n\n <Popper\n id=\"popper\"\n style={{ zIndex: 10000 }}\n open={!!this.state.popper}\n placement=\"top\"\n anchorEl={this.state.anchorEl} transition>\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={350}>\n <Paper>\n <p className={classes.typography}>{this.state.popper}</p>\n </Paper>\n </Fade>\n )}\n </Popper>\n <textarea id=\"copy_input\" readOnly={true} style={{ position: 'absolute', left: -9999 }} tabIndex={-1} aria-hidden={true} value={this.props.text} />\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogExport.defaultProps = {\n open: true\n}\n\nDialogExport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogExport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n height: '100%',\n resize: 'none'\n },\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n});\n\nclass DialogImport extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n text: '',\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel() {\n this.props.onClose();\n }\n\n handleOk() {\n this.props.onClose(this.state.text);\n }\n\n onChange(e) {\n this.setState({ text: e.target.value });\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth={true}\n open={this.props.open}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import blocks')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <textarea\n autoFocus\n id=\"import-text-area\"\n className={classes.textArea}\n onChange={e => this.onChange(e)}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" disabled={!this.state.text} onClick={event => this.handleOk()} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Import')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImport.defaultProps = {\n open: true\n}\n\nDialogImport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogImport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogError from '../Dialogs/Error';\nimport DialogExport from '../Dialogs/Export';\nimport DialogImport from '../Dialogs/Import';\n\nlet languageBlocklyLoaded = false;\nlet languageOwnLoaded = false;\nlet toolboxText = null;\nlet toolboxXml;\nlet scriptsLoaded = [];\n\n// BF (2020-10-31) I have no Idea, why it does not work as static in BlocklyEditor, but outside of BlocklyEditor it works\nfunction searchXml(root, text, _id, _result) {\n _result = _result || [];\n if (root.tagName === 'BLOCK' || root.tagName === 'block') {\n _id = root.id;\n }\n if (root.tagName === 'FIELD' || root.tagName === 'field') {\n for (let a = 0; a < root.attributes.length; a++) {\n const val = (root.attributes[a].value || '').toLowerCase();\n if (root.attributes[a].nodeName === 'name' && (val === 'oid' || val === 'text')) {\n if ((root.innerHTML || root.innerText || '').toLowerCase().includes(text)) {\n _result.push(_id);\n }\n }\n }\n }\n root.childNodes.forEach(node =>\n searchXml(node, text, _id, _result));\n\n return _result;\n}\n\n\nclass BlocklyEditor extends React.Component {\n constructor(props) {\n super(props);\n\n this.blockly = null; //ref\n this.blocklyWorkspace = null;\n this.toolbox = null;\n this.Blockly = window.Blockly;\n\n this.state = {\n languageOwnLoaded,\n languageBlocklyLoaded,\n changed: false,\n message: '',\n error: '',\n themeType: this.props.themeType,\n exportText: '',\n importText: false,\n searchText: this.props.searchText || '',\n };\n this.originalCode = props.code || '';\n\n this.someSelected = null;\n this.changeTimer = null;\n\n this.onResizeBind = this.onResize.bind(this);\n\n this.lastCommand = '';\n this.lastSearch = this.props.searchText || '';\n this.blinkBlock = null;\n this.loadLanguages();\n }\n\n static loadJS(url, callback, location) {\n const scriptTag = document.createElement('script');\n try {\n scriptTag.src = url;\n\n scriptTag.onload = callback;\n scriptTag.onreadystatechange = callback;\n scriptTag.onerror = callback;\n\n (location || window.document.body).appendChild(scriptTag);\n } catch (e) {\n console.error('Cannot load ' + url + ': ' + e);\n callback && callback();\n }\n };\n\n static loadScripts(scripts, callback) {\n if (!scripts || !scripts.length) {\n return callback && callback();\n }\n const adapter = scripts.pop();\n if (scriptsLoaded.indexOf(adapter) === -1) {\n scriptsLoaded.push(adapter);\n BlocklyEditor.loadJS('../../adapter/' + adapter + '/blockly.js', (/*data, textStatus, jqxhr*/) =>\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0));\n } else {\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0);\n }\n }\n\n static loadCustomBlockly(adapters, callback) {\n // get all adapters, that can have blockly\n const toLoad = [];\n for (const id in adapters) {\n if (!adapters.hasOwnProperty(id) ||\n !adapters[id] ||\n !id.match(/^system\\.adapter\\./) ||\n adapters[id].type !== 'adapter'\n ) {\n continue;\n }\n\n if (adapters[id].common && adapters[id].common.blockly) {\n console.log('Detected custom blockly: ' + adapters[id].common.name);\n toLoad.push(adapters[id].common.name);\n }\n }\n\n BlocklyEditor.loadScripts(toLoad, callback);\n }\n\n static loadXMLDoc(text) {\n let parseXml;\n if (window.DOMParser) {\n parseXml = function(xmlStr) {\n return ( new window.DOMParser() ).parseFromString(xmlStr, \"text/xml\");\n };\n } else if (typeof window.ActiveXObject != \"undefined\" && new window.ActiveXObject(\"Microsoft.XMLDOM\")) {\n parseXml = function(xmlStr) {\n var xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = \"false\";\n xmlDoc.loadXML(xmlStr);\n return xmlDoc;\n };\n } else {\n parseXml = function() { return null; }\n }\n return parseXml(text);\n }\n\n searchBlocks(text) {\n if (this.blocklyWorkspace) {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const ids = searchXml(dom, text.toLowerCase());\n const allBlocks = this.blocklyWorkspace.getAllBlocks();\n const result = [];\n allBlocks.filter(b => ids.includes(b.id)).forEach(b => result.push(b));\n return result;\n }\n }\n\n searchId() {\n const blocks = this.lastSearch && this.searchBlocks(this.lastSearch);\n if (blocks && blocks.length) {\n this.someSelected = blocks;\n this.someSelected.forEach(b => b.addSelect());\n this.someSelectedTime = Date.now();\n } else if (this.someSelected) {\n // remove selection\n this.someSelected.forEach(b => b.removeSelect());\n this.someSelected = null;\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.command && this.lastCommand !== nextProps.command) {\n this.lastCommand = nextProps.command;\n setTimeout(() => this.lastCommand = '', 300);\n if (this.lastCommand === 'check') {\n this.blocklyCheckBlocks((err, badBlock) => {\n if (!err) {\n this.setState({message: I18n.t('Ok')});\n } else {\n badBlock && this.blocklyBlinkBlock(badBlock);\n this.setState({error: {text: I18n.t(err), title: I18n.t('Error was found')}});\n this.blinkBlock = badBlock;\n }\n });\n } else if (this.lastCommand === 'export') {\n this.exportBlocks();\n } else if (this.lastCommand === 'import') {\n this.importBlocks();\n }\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.searchId();\n }\n\n if (this.state.themeType !== nextProps.themeType) {\n this.setState({themeType: nextProps.themeType}, () => this.updateBackground());\n }\n\n if (this.originalCode !== nextProps.code) {\n this.originalCode = nextProps.code || '';\n this.loadCode();\n this.searchId();\n }\n }\n\n loadLanguages() {\n // load blockly language\n if (!languageBlocklyLoaded) {\n const fileLang = window.document.createElement('script');\n fileLang.setAttribute('type', 'text/javascript');\n fileLang.setAttribute('src', 'google-blockly/msg/js/' + I18n.getLanguage() + '.js');\n\n // most browsers\n fileLang.onload = () => {\n languageBlocklyLoaded = true;\n this.setState({languageBlocklyLoaded});\n };\n // IE 6 & 7\n fileLang.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageBlocklyLoaded = true;\n this.setState({languageBlocklyLoaded});\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileLang);\n }\n if (!languageOwnLoaded) {\n const fileCustom = window.document.createElement('script');\n fileCustom.setAttribute('type', 'text/javascript');\n fileCustom.setAttribute('src', 'google-blockly/own/msg/' + I18n.getLanguage() + '.js');\n // most browsers\n fileCustom.onload = () => {\n languageOwnLoaded = true;\n this.setState({languageOwnLoaded});\n };\n // IE 6 & 7\n fileCustom.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageOwnLoaded = true;\n this.setState({languageOwnLoaded});\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileCustom);\n }\n }\n\n onResize() {\n this.Blockly.svgResize(this.blocklyWorkspace);\n }\n\n jsCode2Blockly(text) {\n text = text || '';\n const lines = text.split(/[\\r\\n]+|\\r|\\n/g);\n let xml = '';\n for (let l = lines.length - 1; l >= 0; l--) {\n if (lines[l].substring(0, 2) === '//') {\n xml = lines[l].substring(2);\n break;\n }\n }\n if (xml.substring(0, 4) === '<xml') {\n return xml;\n } else {\n let code;\n try {\n code = window.decodeURIComponent(window.atob(xml));\n } catch (e) {\n code = null;\n console.error('cannot decode: ' + xml);\n console.error(e);\n }\n return code;\n }\n }\n\n blocklyBlinkBlock(block) {\n for (let i = 300; i < 3000; i = i + 300) {\n setTimeout(() => block.select(), i);\n setTimeout(() => block.unselect(), i + 150);\n }\n }\n\n blocklyRemoveOrphanedShadows() {\n if (this.blocklyWorkspace) {\n let blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.isShadow()) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.targetConnection) {\n // remove it\n block.dispose();\n break;\n }\n }\n }\n }\n }\n }\n\n blocklyCheckBlocks(cb) {\n let warningText;\n if (!this.blocklyWorkspace || this.blocklyWorkspace.getAllBlocks().length === 0) {\n cb && cb('no blocks found');\n return;\n }\n let badBlock = this.blocklyGetUnconnectedBlock();\n if (badBlock) {\n warningText = 'not properly connected';\n } else {\n badBlock = this.blocklyGetBlockWithWarning();\n if (badBlock) {\n warningText = 'warning on this block';\n }\n }\n\n if (badBlock) {\n if (cb) {\n cb(warningText, badBlock);\n } else {\n this.blocklyBlinkBlock(badBlock);\n }\n return false;\n }\n\n cb();\n\n return true;\n }\n\n // get unconnected block\n blocklyGetUnconnectedBlock () {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.sourceBlock_ || ((conn.type === this.Blockly.INPUT_VALUE || conn.type === this.Blockly.OUTPUT_VALUE) && !conn.targetConnection && !conn._optional)) {\n return block;\n }\n }\n }\n return null;\n }\n\n // get block with warning\n blocklyGetBlockWithWarning() {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.warning) {\n return block;\n }\n }\n return null;\n }\n\n blocklyCode2JSCode(oneWay) {\n let code = this.Blockly.JavaScript.workspaceToCode(this.blocklyWorkspace);\n if (!oneWay) {\n code += '\\n';\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const text = this.Blockly.Xml.domToText(dom);\n code += '//' + btoa(encodeURIComponent(text));\n }\n\n return code;\n }\n\n exportBlocks() {\n let exportText;\n if (this.Blockly.selected) {\n const xmlBlock = this.Blockly.Xml.blockToDom(this.Blockly.selected);\n if (this.Blockly.dragMode_ !== this.Blockly.DRAG_FREE) {\n this.Blockly.Xml.deleteNext(xmlBlock);\n }\n // Encode start position in XML.\n const xy = this.Blockly.selected.getRelativeToSurfaceXY();\n xmlBlock.setAttribute('x', this.Blockly.selected.RTL ? -xy.x : xy.x);\n xmlBlock.setAttribute('y', xy.y);\n\n exportText = this.Blockly.Xml.domToPrettyText(xmlBlock);\n } else {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n exportText = this.Blockly.Xml.domToPrettyText(dom);\n }\n this.setState({exportText});\n }\n\n importBlocks() {\n this.setState({importText: true});\n }\n\n onImportBlocks(xml) {\n xml = (xml || '').trim();\n if (xml) {\n try {\n if (!xml.startsWith('<xml')) {\n xml = '<xml xmlns=\"http://www.w3.org/1999/xhtml\">' + xml + '</xml>';\n }\n let variables = xml.replace(/[\\n\\r]/g, '').match(/<variables>(.*)<\\/variables>/);\n if (variables) {\n let vars = this.Blockly.utils.xml.textToDomDocument('<variables>' + variables[1] + '</variables>');\n if (vars) {\n let nodes = vars.childNodes && vars.childNodes[0] && vars.childNodes[0].childNodes;\n if (nodes) {\n for (let i = 0; i < nodes.length; i++) {\n nodes[i].id && this.blocklyWorkspace.createVariable(nodes[i].id);\n }\n }\n }\n }\n xml = xml.replace(/[\\n\\r]/g, '').replace(/<variables>.*<\\/variables>/g, '');\n window.scripts.loading = true;\n let xmlBlocks = this.Blockly.Xml.textToDom(xml);\n if (xmlBlocks.nodeName === 'xml') {\n for (let b = 0; b < xmlBlocks.children.length; b++) {\n this.blocklyWorkspace.paste(xmlBlocks.children[b]);\n }\n } else {\n this.blocklyWorkspace.paste(xmlBlocks);\n }\n\n window.scripts.loading = false;\n\n\n this.onBlocklyChanged();\n } catch (e) {\n this.setState({error: {text: e, title: I18n.t('Import error')}});\n }\n }\n }\n\n loadCode() {\n if (!this.blocklyWorkspace) {\n return;\n }\n\n this.ignoreChanges = true;\n this.blocklyWorkspace.clear();\n\n try {\n const xml = this.jsCode2Blockly(this.originalCode) || '<xml xmlns=\"http://www.w3.org/1999/xhtml\"></xml>';\n window.scripts.loading = true;\n const dom = this.Blockly.Xml.textToDom(xml);\n this.Blockly.Xml.domToWorkspace(dom, this.blocklyWorkspace);\n window.scripts.loading = false;\n } catch (e) {\n console.error(e);\n setTimeout(() => this.setState({error: I18n.t('Cannot extract Blockly code!')}));\n }\n setTimeout(() => this.ignoreChanges = false, 100);\n }\n\n onBlocklyChanged() {\n this.blocklyRemoveOrphanedShadows();\n this.setState({changed: true});\n this.onChange();\n }\n\n async componentDidUpdate() {\n if (!this.blockly) {\n return;\n }\n if (this.didUpdate) {\n clearTimeout(this.didUpdate);\n this.didUpdate = null;\n }\n\n if (this.blocklyWorkspace) {\n return;\n }\n\n window.addEventListener('resize', this.onResizeBind, false);\n toolboxText = toolboxText || (await this.getToolbox());\n toolboxXml = toolboxXml || this.Blockly.Xml.textToDom(toolboxText);\n\n this.blocklyWorkspace = this.Blockly.inject(\n this.blockly,\n {\n media: 'google-blockly/media/',\n toolbox: toolboxXml,\n zoom: {\n controls: true,\n wheel: false,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n move: {\n scrollbars: true,\n drag: true,\n wheel: true\n },\n trashcan: true,\n grid: {\n spacing: 25,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n sounds: false, // disable sounds\n }\n );\n // for blockly itself\n window.scripts = {\n blocklyWorkspace: this.blocklyWorkspace\n };\n\n // Listen to events on master workspace.\n this.blocklyWorkspace.addChangeListener(masterEvent => {\n if (this.someSelected && Date.now() - this.someSelectedTime > 500) {\n const allBlocks = this.blocklyWorkspace.getAllBlocks();\n this.someSelected = null;\n allBlocks.forEach(b => b.removeSelect());\n }\n\n if (masterEvent.type === this.Blockly.Events.UI || masterEvent.type === this.Blockly.Events.CREATE) {\n return; // Don't mirror UI events.\n }\n if (this.ignoreChanges) {\n return;\n }\n this.changeTimer && clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => {\n this.changeTimer = null;\n this.onBlocklyChanged();\n }, 200);\n });\n this.loadCode();\n this.onResize();\n // Move toolbar to the valid position\n const toolbar = document.getElementsByClassName('blocklyToolboxDiv')[0];\n this.blockly.appendChild(toolbar);\n\n this.updateBackground();\n setTimeout(() => this.searchId(), 200); // select found blocks\n }\n\n updateBackground() {\n const background = document.getElementsByClassName('blocklyMainBackground')[0];\n if (this.state.themeType === 'dark') {\n if (!background._originalStyle) {\n background._originalStyle = {\n stroke: background.style.stroke,\n fill: background.style.fill\n };\n }\n // add class\n background.style.stroke = '#3a3a3a';\n background.style.fill = '#515151';\n } else if (background._originalStyle) {\n background.style.stroke = background._originalStyle.stroke;\n background.style.fill = background._originalStyle.fill;\n }\n }\n\n componentWillUnmount() {\n if (!this.blocklyWorkspace) {\n return;\n }\n this.blocklyWorkspace.dispose();\n this.blocklyWorkspace = null;\n this.changeTimer && clearTimeout(this.changeTimer);\n this.changeTimer = null;\n window.removeEventListener('resize', this.onResizeBind);\n }\n\n onChange() {\n this.originalCode = this.blocklyCode2JSCode();\n this.props.onChange && this.props.onChange(this.originalCode);\n }\n\n async getToolbox(retry) {\n // Interpolate translated messages into toolbox.\n const el = window.document.getElementById('toolbox');\n let toolboxText = el && el.outerHTML;\n if (!toolboxText) {\n if (!retry) {\n return new Promise(resolve =>\n setTimeout(() => resolve(this.getToolbox(true)), 500));\n } else {\n console.error('Cannot load blocks!');\n return '';\n }\n }\n toolboxText = toolboxText.replace(/{(\\w+)}/g, (m, p1) => window.MSG[p1]);\n\n if (this.Blockly.CustomBlocks) {\n let blocks = '';\n const lang = I18n.getLanguage();\n for (let cb = 0; cb < this.Blockly.CustomBlocks.length; cb++) {\n const name = this.Blockly.CustomBlocks[cb];\n // add blocks\n blocks += '<category name=\"' + this.Blockly.Words[name][lang] + '\" colour=\"' + this.Blockly[name].HUE + '\">';\n for (const _b in this.Blockly[name].blocks) {\n if (this.Blockly[name].blocks.hasOwnProperty(_b)) {\n blocks += this.Blockly[name].blocks[_b];\n }\n }\n blocks += '</category>';\n }\n toolboxText = toolboxText.replace('<category><block>%%CUSTOM_BLOCKS%%</block></category>', blocks);\n }\n\n return toolboxText;\n }\n\n renderMessageDialog() {\n return this.state.message ?\n <DialogMessage\n key=\"dialogMessage\"\n text={typeof this.state.message === 'object' ? this.state.message.text : this.state.message}\n title={typeof this.state.message === 'object' ? this.state.message.title : ''}\n onClose={() => this.setState({message: ''})}\n /> :\n null;\n }\n\n renderErrorDialog() {\n return this.state.error ?\n <DialogError\n key=\"dialogError\"\n text={typeof this.state.error === 'object' ? this.state.error.text.toString() : this.state.error}\n title={typeof this.state.error === 'object' ? this.state.error.title : ''}\n onClose={() => {\n if (this.blinkBlock) {\n this.blocklyBlinkBlock(this.blinkBlock);\n this.blinkBlock = null;\n }\n this.setState({error: ''});\n }}/> :\n null;\n }\n\n renderExportDialog() {\n return this.state.exportText ? <DialogExport key=\"dialogExport\" theme={this.state.themeType} onClose={() => this.setState({exportText: ''})} text={this.state.exportText}/> : null;\n }\n\n renderImportDialog() {\n return this.state.importText ? <DialogImport key=\"dialogImport\" onClose={text => {\n this.setState({importText: false});\n this.onImportBlocks(text);\n }}/> : null;\n }\n\n render() {\n if (this.state.languageBlocklyLoaded && this.state.languageOwnLoaded) {\n this.didUpdate = setTimeout(() => {\n this.didUpdate = null;\n this.componentDidUpdate();\n }, 100);\n\n return [\n <div key=\"blocklyDOM\" ref={el => this.blockly = el} style={{\n //marginLeft: 180,\n width: '100%',//'calc(100% - 180px)',\n height: '100%',\n //overflow: 'hidden',\n position: 'relative'}}/>,\n\n this.renderMessageDialog(),\n this.renderErrorDialog(),\n this.renderExportDialog(),\n this.renderImportDialog(),\n ];\n } else {\n return null;\n }\n }\n}\n\nBlocklyEditor.propTypes = {\n command: PropTypes.string,\n onChange: PropTypes.func,\n searchText: PropTypes.string,\n themeType: PropTypes.string\n};\n\nexport default BlocklyEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconSave from '@mui/icons-material/Save';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n resize: 'none'\n },\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n args: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n height: 30,\n width: '100%',\n fontSize: 16\n },\n argsTitle: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n fontWeight: 'bold'\n }\n});\n\nclass DialogScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n changed: false,\n source: this.props.source,\n };\n if (!this.state.source && this.props.isReturn) {\n this.state.source = '\\nreturn false';\n }\n\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('source-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose(false);\n }\n\n handleOk () {\n if (this.props.isReturn && !this.state.source.includes('return ')) {\n\n } else {\n this.props.onClose(this.state.source);\n }\n }\n\n onChange(value) {\n this.setState({changed: true, source: value});\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{paper: classes.dialog}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"source-dialog-title\"\n >\n <DialogTitle id=\"source-dialog-title\">{I18n.t('Function editor')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n {this.props.args && (<div key=\"arguments\" className={classes.args}>\n <span className={classes.argsTitle}>{I18n.t('function (')}</span>\n {this.props.args}\n <span className={classes.argsTitle}>)</span>\n </div>)}\n <ScriptEditorComponent\n adapterName={this.props.adapterName}\n runningInstances={this.props.runningInstances}\n className={classes.textArea}\n style={{height: this.props.args ? 'calc(100% - 30px)' : '100%'}}\n key=\"scriptEditor\"\n name={'blockly'}\n socket={this.props.socket}\n readOnly={false}\n checkJs={false}\n changed={this.state.changed}\n code={this.state.source}\n isDark={this.props.themeType === 'dark'}\n onChange={newValue => this.onChange(newValue)}\n language={'javascript'}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" startIcon={<IconSave/>}>{I18n.t('Save')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogScriptEditor.propTypes = {\n classes: PropTypes.object.isRequired,\n adapterName: PropTypes.string.isRequired,\n runningInstances: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n source: PropTypes.string,\n args: PropTypes.string,\n isReturn: PropTypes.bool,\n themeType: PropTypes.string,\n socket: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogScriptEditor);\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapperRules\":\"style_wrapperRules__Js-Pp\",\"rootWrapper\":\"style_rootWrapper__0Dpqp\",\"addClass\":\"style_addClass__ry424\"};","// extracted by mini-css-extract-plugin\nexport default {\"switchesItem\":\"style_switchesItem__RBQz7\",\"switchesItemActive\":\"style_switchesItemActive__FU8S9\",\"iconTheme\":\"style_iconTheme__inJLE\"};","import { useState, useEffect } from 'react';\nimport * as Icons from '@mui/icons-material/';\n\nconst ICON_CACHE = {};\n\nconst MaterialDynamicIcon = ({ iconName, className, adapter, socket, onClick }) => {\n let [url, setUrl] = useState('');\n\n useEffect(() => {\n if (adapter && socket) {\n ICON_CACHE[adapter] = ICON_CACHE[adapter] || socket.getObject(`system.adapter.${adapter}`);\n ICON_CACHE[adapter].then(obj =>\n obj?.common?.icon && setUrl(`../../adapter/${adapter}/${obj.common.icon}`));\n }\n }, [adapter, socket]);\n\n if (adapter) {\n return <img onClick={e => onClick && onClick(e)} src={url || ''} className={className} alt=\"\" />;\n } else {\n const Element = Icons[iconName || 'Help'];\n return <Element\n className={className}\n onClick={e => onClick && onClick(e)}\n />;\n }\n}\n\nMaterialDynamicIcon.defaultProps = {\n className: null,\n iconName: 'Help'\n};\n\nexport default MaterialDynamicIcon;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport cls from './style.module.scss';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst CardMenu = ({ name, id, active, icon, adapter, socket, onDoubleClick, title, onTouchMove }) => <div\n onDoubleClick={onDoubleClick}\n onTouchMove={onTouchMove}\n key={id}\n title={I18n.t(title)}\n className={clsx(cls.switchesItem, active && cls.switchesItemActive, 'block-' + id)}\n>\n <MaterialDynamicIcon iconName={icon} className={cls.iconTheme} adapter={adapter} socket={socket} />\n <span>\n {name ? I18n.t(name) : ''}\n </span>\n</div>;\n\nCardMenu.defaultProps = {\n name: '',\n active: false,\n id: '',\n onDoubleClick: () => { }\n};\n\nCardMenu.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n active: PropTypes.bool\n};\n\nexport default CardMenu;","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__5c+lG\",\"cardStyleActive\":\"style_cardStyleActive__n6Nq8\",\"controlMenu\":\"style_controlMenu__J0sIm\",\"closeBtn\":\"style_closeBtn__TzVMw\",\"isDelete\":\"style_isDelete__0Sa6U\",\"drag_mobile\":\"style_drag_mobile__RVp7B\"};","export function deepCopy(name, userRules, additionalParameter) {\n let newItemsSwitches;\n switch (name) {\n case 'actions':\n newItemsSwitches = {\n ...userRules,\n [name]: {\n ...userRules[name],\n [additionalParameter]: [...userRules[name][additionalParameter]]\n }\n };\n return newItemsSwitches;\n\n default:\n newItemsSwitches = {\n ...userRules,\n [name]: [...userRules[name]]\n };\n return newItemsSwitches;\n }\n}","export function filterElement(name, userRules, additionalParameter, _id) {\n switch (name) {\n case 'actions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n case 'conditions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n default:\n userRules[name] = userRules[name].filter(el => el._id !== _id);\n return userRules;\n }\n}","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__A9pAJ\",\"nameCard\":\"style_nameCard__m2nJe\",\"cardStyleActive\":\"style_cardStyleActive__sMSgj\",\"iconThemCard\":\"style_iconThemCard__wx6Kq\",\"iconThemCardSelectable\":\"style_iconThemCardSelectable__H9okn\",\"iconHelp\":\"style_iconHelp__iIi1g\",\"inputCard\":\"style_inputCard__qf8Q+\",\"blockName\":\"style_blockName__CqwBy\",\"controlMenu\":\"style_controlMenu__8kQnd\",\"closeBtn\":\"style_closeBtn__LcbOd\",\"controlMenuTop\":\"style_controlMenuTop__AkzEp\",\"debugInfo\":\"style_debugInfo__wPdyv\",\"fadeIn\":\"style_fadeIn__zKsCh\",\"tagCard\":\"style_tagCard__CEY-X\",\"displayFlex\":\"style_displayFlex__5sr+i\",\"blockMarginTop\":\"style_blockMarginTop__Qn7Lh\",\"nameBlock\":\"style_nameBlock__MZ53S\",\"frontText\":\"style_frontText__3cVcg\",\"backText\":\"style_backText__sF8Y-\",\"iconTag\":\"style_iconTag__2cpM6\",\"displayItalic\":\"style_displayItalic__9KtQw\"};","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__h6PjP\",\"square\":\"style_square__ahzCN\",\"icon\":\"style_icon__jwNl0\"};","import { Button } from '@mui/material';\nimport React from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport cls from './style.module.scss';\nimport CustomIcon from '@iobroker/adapter-react-v5/Components/Icon';\n\nconst CustomButton = ({ fullWidth, size, onClick, style, className, value, square, icon }) => {\n return <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={onClick}\n fullWidth={fullWidth}\n style={style}\n className={clsx(cls.root, className, square ? cls.square : '')}\n margin=\"normal\"\n size={size}\n >{icon ? <CustomIcon className={cls.icon} src={icon} /> : value}</Button>;\n}\n\nCustomButton.defaultProps = {\n value: '',\n className: null,\n variant: 'standard',\n size: 'medium',\n fullWidth: false,\n square: false\n};\n\nCustomButton.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default CustomButton;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__8DT4l\"};","import { Checkbox } from '@mui/material';\nimport React, { memo, useState } from 'react';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nconst CustomCheckbox = ({ size, value, style, title, onChange, className, customValue, disabled }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n\n return <>\n <Checkbox\n disabled={disabled}\n checked={Boolean(customValue ? value : switchChecked)}\n // style={Object.assign(type ? color[type] : null, style)}\n className={clsx(cls.root, className)}\n onChange={e => {\n customValue && setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n {title || null}\n </>;\n}\n\nCustomCheckbox.defaultProps = {\n value: false,\n disabled: false,\n type: null,\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomCheckbox.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomCheckbox);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__WINKv\"};","import { TextField } from '@mui/material';\nimport React, { useState } from 'react';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport CustomIcon from '@iobroker/adapter-react-v5/Components/Icon';\n\nconst CustomInput = ({ autoFocus, fullWidth, disabled, multiline, rows, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, icon }) => {\n const [inputText, setInputText] = useState('');\n return <TextField\n error={!!error}\n autoFocus={autoFocus}\n fullWidth={fullWidth}\n label={label}\n disabled={disabled}\n variant={variant}\n multiline={multiline}\n rows={rows}\n value={customValue ? value : inputText}\n type={type}\n helperText={error}\n style={style}\n className={clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n InputProps={{\n endAdornment: icon ?\n <InputAdornment position=\"end\"><CustomIcon className={cls.icon} src={icon} /></InputAdornment>\n : null\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomInput.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n autoFocus: false,\n rows: 1\n};\n\nCustomInput.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomInput;","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport withStyles from '@mui/styles/withStyles';\nimport React, { useEffect, useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\n\nconst SelectMod = withStyles({\n root: {\n margin: '10px 0',\n '& .MuiFormControl-marginNormal': {\n marginTop: 0,\n marginBottom: 0,\n },\n '& > *': {\n color: '#2d0440 !important'\n },\n '& .MuiSelect-icon': {\n color: '#81688c'\n },\n '& label.Mui-focused': {\n color: '#81688c',\n },\n '& .MuiInput-underline:after': {\n borderBottomColor: '#510573',\n },\n '& .MuiInput-underline:before': {\n borderBottomColor: '#81688c',\n },\n '& .MuiInput-underline:hover:before': {\n borderBottomColor: '#81688c',\n },\n },\n})(FormControl);\n\nconst CustomInstance = ({ multiple, value, customValue, socket, title, attr, adapter, style, onChange, className, onInstanceHide }) => {\n const [inputText, setInputText] = useState(value || 'test1');\n const [options, setOptions] = useState([]);\n\n useEffect(() => {\n socket && socket.getAdapterInstances(adapter)\n .then(instances => {\n const _options = instances.map(obj => ({value: obj._id.replace('system.adapter.', ''), title: obj._id.replace('system.adapter.', '')}));\n if (_options.length === 1) {\n onInstanceHide(_options[0].value);\n } else {\n _options.unshift({value: adapter, title: I18n.t('All')});\n }\n setOptions(_options);\n });\n }, [socket, adapter, onInstanceHide]);\n\n return <SelectMod\n className={className}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={(customValue ? value : inputText) || '_'}\n fullWidth\n multiple={multiple}\n renderValue={(selected) => multiple && selected.join ? selected.join(', ') : selected}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n input={attr ? <Input name={attr} id={attr + '-helper'} /> : <Input name={attr} />}\n >\n {options.map(item =>\n <MenuItem style={{placeContent:'space-between'}} key={'key-' + item.value} value={item.value || '_'}>{I18n.t(item.title)}{item.title2 && <div>{item.title2}</div>}</MenuItem>)}\n </Select>\n <FormHelperText>{I18n.t(title)}</FormHelperText>\n </SelectMod>;\n}\n\nCustomInstance.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false\n};\n\nCustomInstance.propTypes = {\n title: PropTypes.string,\n socket: PropTypes.object,\n attr: PropTypes.string,\n adapter: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default CustomInstance;","// extracted by mini-css-extract-plugin\nexport default {\"modalContentWrapper\":\"style_modalContentWrapper__ewzzR\",\"modalButtonBlock\":\"style_modalButtonBlock__otBeq\",\"modalButtonBlockTwo\":\"style_modalButtonBlockTwo__bh8rw\",\"modalWrapper\":\"style_modalWrapper__VUeGq\",\"modalDialog\":\"style_modalDialog__MI8Ka\",\"close\":\"style_close__Z8qAY\"};","import React, {useState} from 'react';\nimport Button from '@mui/material/Button';\nimport { Dialog, DialogActions, DialogContent } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport i18n from '@iobroker/adapter-react-v5/i18n';\nimport CustomInput from \"../CustomInput\";\n\nconst CustomModal = ({ open, onClose, children, titleButtonApply, titleButtonClose, onApply, className, textInput, defaultValue}) => {\n let [value, setValue] = useState(defaultValue);\n\n return <Dialog\n open={open}\n maxWidth=\"md\"\n disableEscapeKeyDown={false}\n onClose={onClose}\n classes={{paper: cls.modalDialog, /*paper: classes.background*/}}\n className={cls.modalWrapper}\n >\n <DialogContent>\n {textInput && <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"medium\"\n rows={10}\n multiline\n value={value}\n onChange={setValue}\n customValue\n />}\n {!textInput && children}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onApply(textInput ? value : null)} variant=\"contained\" color=\"primary\">\n {i18n.t(titleButtonApply)}\n </Button>\n <Button color=\"grey\" onClick={onClose} variant=\"contained\">\n {i18n.t(titleButtonClose)}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nCustomModal.defaultProps = {\n open: false,\n onApply: () => { },\n onClose: () => { },\n titleButtonClose: 'Cancel',\n titleButtonApply: 'Ok'\n};\n\nCustomModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n children: PropTypes.any,\n titleButtonClose: PropTypes.string,\n titleButtonApply: PropTypes.string,\n onApply: PropTypes.func\n};\n\nexport default CustomModal;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__AZ3ER\"};","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport React, { useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport clsx from 'clsx';\nimport CustomCheckbox from '../CustomCheckbox';\n\nconst CustomSelect = ({ multiple, value, customValue, title, attr, options, style, onChange, className, doNotTranslate, doNotTranslate2 }) => {\n const [inputText, setInputText] = useState(value === undefined ? options[0].value : value);\n\n const v = customValue ? value : inputText;\n const text = v === '' || v === null || v === undefined ? '_' : v;\n\n return <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={text}\n fullWidth\n multiple={multiple}\n renderValue={selected => {\n if (multiple && selected.join) {\n // sort\n selected.sort();\n let pos = selected.indexOf('0');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.push('0');\n }\n pos = selected.indexOf('_');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.unshift('_');\n }\n\n const onlyItem = options.find(el => el.only);\n if (selected.includes(onlyItem.value)) {\n return onlyItem.titleShort ? (doNotTranslate ? onlyItem.titleShort : I18n.t(onlyItem.titleShort)) : (doNotTranslate ? onlyItem.title : I18n.t(onlyItem.title))\n }\n\n const titles = selected\n .map(sel => options.find(item => item.value === sel || (sel === '_' && item.value === '')) || sel)\n .map(item => typeof item === 'object' ? (item.titleShort ? (doNotTranslate ? item.titleShort : I18n.t(item.titleShort)) : (doNotTranslate ? item.title : I18n.t(item.title))) : (doNotTranslate ? item : I18n.t(item)));\n\n return titles.join(', ');\n } else {\n const item = options ? options.find(item => item.value === selected || (selected === '_' && item.value === '')) : null;\n return item?.title ? (doNotTranslate ? item?.title : I18n.t(item?.title)) : selected;\n }\n }}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n if (multiple) {\n const onlyItem = options.find(el => el.only);\n if (onlyItem) {\n const valueOnly = onlyItem.value;\n if (e.target.value.length === options.length - 1 && e.target.value.includes(valueOnly)) {\n return onChange(e.target.value.filter(el => el !== valueOnly), attr);\n }\n if (e.target.value.includes(valueOnly)) {\n return onChange(options.map(el => el.value), attr);\n }\n }\n }\n onChange(e.target.value, attr);\n }}\n input={attr ? <Input name={attr} id={attr + '-helper'} /> : <Input name={attr} />}\n >\n {!multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={'key-' + item.value} value={item.value === '' || item.value === null || item.value === undefined ? '_' : item.value}>{doNotTranslate ? item.title : I18n.t(item.title)}{item.title2 && <div>{doNotTranslate2 ? item.title2 : I18n.t(item.title2)}</div>}</MenuItem>)}\n {multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={'key-' + item.value} value={item.value || '_'}>{doNotTranslate ? item.title : I18n.t(item.title)} <CustomCheckbox customValue value={value.includes(item.value)} /></MenuItem>)}\n </Select>\n {title ? <FormHelperText>{I18n.t(title)}</FormHelperText> : null}\n </FormControl>;\n}\n\nCustomSelect.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false,\n multiple: false\n};\n\nCustomSelect.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n options: PropTypes.array.isRequired,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomSelect;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__BGOBc\",\"mark\":\"style_mark__MLqoT\"};","import React, { useState } from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { Slider } from '@mui/material';\n\nconst CustomSlider = ({ fullWidth, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, min, max, step, unit }) => {\n const [inputText, setInputText] = useState(0);\n min = min !== undefined ? min : 0;\n max = max !== undefined ? max : 0;\n step = step !== undefined ? step : (max - min) / 100;\n\n const marks = [\n {\n value: min,\n label: min + (unit || ''),\n },\n {\n value: max,\n label: max + (unit || ''),\n },\n ];\n\n return <Slider\n defaultValue={customValue ? value : inputText}\n // getAriaValueText={customValue ? value : inputText}\n aria-labelledby=\"discrete-slider\"\n valueLabelDisplay=\"auto\"\n classes={{mark: cls.mark}}\n marks={marks}\n step={step}\n min={min}\n max={max}\n error={error || ''}\n //fullWidth={fullWidth}\n label={label}\n variant={variant}\n value={customValue ? value : inputText}\n type={type}\n //helperText={error || ''}\n style={style}\n className={clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={(e, newValue) => {\n !customValue && setInputText(newValue);\n onChange(newValue);\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomSlider.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false\n};\n\nCustomSlider.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomSlider;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__anA9+\"};","import { FormControlLabel, Switch } from '@mui/material';\nimport React, { memo, useState } from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\n\nconst CustomSwitch = ({ label, size, value, style, onChange, className, customValue }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n return <FormControlLabel\n className={cls.root}\n control={<Switch\n checked={customValue ? value : switchChecked}\n style={style}\n className={className}\n onChange={e => {\n if (!customValue) setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n }\n label={label}\n />;\n}\n\nCustomSwitch.defaultProps = {\n value: false,\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomSwitch.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomSwitch);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__xyxno\"};","import { TextField } from '@mui/material';\nimport React from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nconst CustomTime = ({ value, style, onChange, className }) => {\n return <TextField\n variant=\"standard\"\n id=\"time\"\n type=\"time\"\n onChange={(e) => onChange(e.currentTarget.value)}\n value={value}\n className={clsx(cls.root, className)}\n fullWidth\n style={style}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n step: 300, // 5 min\n }}\n />;\n}\n\nCustomTime.defaultProps = {\n value: '',\n className: null,\n table: false\n};\n\nCustomTime.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomTime;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__FwemI\"};","import { FormControl, MenuItem, Select } from '@mui/material';\nimport React from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31 // 12\n];\n\nconst CustomDate = ({ value, onChange, className, title, style }) => {\n let [month, date] = (value || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n\n let days = [];\n for (let i = 0; i < DAYS[month]; i++) {\n days.push(i + 1);\n }\n\n return <div>\n <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Month')}\n onChange={e =>\n onChange(e.target.value.toString().padStart(2, '0') + '.' + date.toString().padStart(2, '0'))}\n value={month}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={0} value={0}>{I18n.t('Any month')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={1} value={1}>{I18n.t('January')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={2} value={2}>{I18n.t('February')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={3} value={3}>{I18n.t('March')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={4} value={4}>{I18n.t('April')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={5} value={5}>{I18n.t('May')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={6} value={6}>{I18n.t('June')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={7} value={7}>{I18n.t('July')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={8} value={8}>{I18n.t('August')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={9} value={9}>{I18n.t('September')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={10} value={10}>{I18n.t('October')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={11} value={11}>{I18n.t('November')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={12} value={12}>{I18n.t('December')}</MenuItem>\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Date')}\n onChange={e =>\n onChange(month.toString().padStart(2, '0') + '.' + e.target.value.toString().padStart(2, '0'))}\n value={date}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={'A'} value={0}>{I18n.t('Any')}</MenuItem>\n {days.map(i => <MenuItem style={{ placeContent: 'space-between' }} key={i} value={i}>{i}</MenuItem>)}\n </Select>\n </FormControl>\n </div>;\n}\n\nCustomDate.defaultProps = {\n value: '',\n className: null,\n};\n\nCustomDate.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomDate;","import I18n from '@iobroker/adapter-react-v5/i18n';\n\nlet lang;\nconst getName = obj => {\n lang = lang || I18n.getLanguage();\n if (typeof obj === 'object') {\n return obj[lang] || obj.en;\n } else {\n return obj;\n }\n};\n\nconst utils = {\n getName\n};\n\nexport default utils;","const STEPS = {\n selectTriggers: 0,\n addScheduleByDoubleClick: 1,\n openTagsMenu: 2,\n selectIntervalTag: 3,\n selectActions: 4,\n addActionPrintText: 5,\n showJavascript: 6,\n switchBackToRules: 7,\n saveTheScript: 8,\n};\n\nconst steps = [\n { // 0\n selector: '.blocks-triggers',\n content: 'Select triggers',\n },\n { // 1\n selector: '.block-TriggerScheduleBlock',\n content: 'Double click to add the block',\n },\n { // 2\n selector: '.tag-card',\n content: 'Open drop down menu',\n },\n { // 3\n selector: '.tag-card-interval',\n content: 'Select interval',\n },\n { // 4\n selector: '.blocks-actions',\n content: 'Select action blocks',\n },\n { // 5\n selector: '.block-ActionPrintText',\n content: 'Double click to add the block',\n },\n { // 6\n selector: '.button-js-code',\n content: 'Check the script',\n },\n { // 7\n selector: '.button-js-code',\n content: 'Switch back to rules',\n },\n { // 8\n selector: '.button-save',\n content: 'Save the script',\n }\n];\n\nexport {STEPS};\n\nexport default steps;","import React, { PureComponent, Fragment } from 'react';\nimport cls from './style.module.scss';\n\nimport { Menu, MenuItem } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\n\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\nimport DialogError from '@iobroker/adapter-react-v5/Dialogs/Error';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport CustomButton from '../CustomButton';\nimport CustomCheckbox from '../CustomCheckbox';\nimport CustomInput from '../CustomInput';\nimport CustomInstance from '../CustomInstance';\nimport CustomModal from '../CustomModal';\nimport CustomSelect from '../CustomSelect';\nimport CustomSlider from '../CustomSlider';\nimport CustomSwitch from '../CustomSwitch';\nimport CustomTime from '../CustomTime';\nimport CustomDate from '../CustomDate';\n\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport utils from '../../helpers/utils';\nimport clsx from 'clsx';\nimport { STEPS } from '../../helpers/Tour';\nimport { getSelectIdIcon } from '@iobroker/adapter-react-v5/Components/Icon';\n\nclass GenericBlock extends PureComponent {\n constructor(props, item) {\n super(props);\n item = item || {};\n let settings = props.settings || {\n tagCard: item.tagCardArray ? typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0] : ''\n }\n\n if (!settings.tagCard && item.tagCardArray) {\n settings.tagCard = typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0];\n }\n\n this.state = {\n inputs: item.inputs || props.inputs || [],\n name: item.name || props.name || '',\n icon: item.icon || props.icon || '',\n adapter: item.adapter || props.adapter || '',\n helpDialog: item.helpDialog || props.helpDialog || '',\n\n tagCardArray: item.tagCardArray || [],\n\n openTagMenu: false,\n openModal: false,\n iconTag: false,\n error: '',\n helpText: '',\n\n oid: {},\n instanceSelectionOptions: [],\n instanceSelectionDef: '',\n\n hideAttributes: [], // e.g. instance\n\n settings,\n debugMessage: null,\n enableSimulation: this.props.enableSimulation,\n };\n\n this.debugHideTimeout = null;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps || !nextProps.settings) {\n console.log(JSON.stringify(nextProps));\n return;\n }\n\n const settings = JSON.parse(JSON.stringify(nextProps.settings));\n if (!settings.tagCard && this.state.tagCardArray && this.state.tagCardArray.length) {\n settings.tagCard = typeof this.state.tagCardArray[0] !== 'string' ? this.state.tagCardArray[0].title : this.state.tagCardArray[0];\n }\n\n let newState = null;\n\n if (nextProps.onDebugMessage && nextProps.onDebugMessage.blockId === this.props._id) {\n newState = {};\n newState.debugMessage = JSON.parse(JSON.stringify(nextProps.onDebugMessage));\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = setTimeout(() =>\n this.setState({ debugMessage: null }),\n nextProps.onDebugMessage.hideTimeout || 5000);\n }\n\n if (JSON.stringify(settings) !== JSON.stringify(this.state.settings)) {\n newState = newState || {};\n newState.settings = settings;\n }\n\n if (this.state.enableSimulation !== nextProps.enableSimulation) {\n newState = newState || {};\n newState.enableSimulation = nextProps.enableSimulation;\n }\n\n newState && this.setState(newState);\n }\n\n componentWillUnmount() {\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = null;\n }\n\n // called every time, the tagCard changes or at start\n onTagChange(tagCard, cb) {\n // analyse inputs and fill the attributes with default values\n let changed = false;\n let settings = JSON.parse(JSON.stringify(this.state.settings));\n this.state.inputs.forEach(input => {\n if (input.attr && input.defaultValue !== undefined) {\n if (settings[input.attr] === undefined) {\n changed = true;\n settings[input.attr] = input.defaultValue;\n }\n }\n });\n if (changed) {\n this.setState({ settings }, () => cb && cb());\n this.props.onChange(settings);\n } else {\n cb && cb();\n }\n }\n\n // called if trigger added or removed\n onUpdate() {\n // do nothing, but blocks can overwrite it\n }\n\n // called every time if some attribute changes\n onValueChanged(value, attr) {\n // do nothing, but blocks can overwrite it\n }\n\n renderText = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, name, doNotTranslate, doNotTranslateBack } = input;\n return <Fragment key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n label={utils.getName(name)}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </Fragment>;\n }\n\n renderSwitch = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSwitch\n className={className}\n label=''\n customValue\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderNameText = ({ attr, signature, doNotTranslate, defaultValue }, value) => <div\n className={clsx(!!signature ? cls.displayItalic : cls.displayFlex, cls.blockMarginTop)}\n key={attr}>\n {doNotTranslate ? defaultValue : I18n.t(defaultValue)}\n </div>;\n\n renderNumber = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, openCheckbox, doNotTranslate, doNotTranslateBack } = input;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n return visibility ? <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={clsx(className, input.className)}\n fullWidth\n autoComplete=\"off\"\n label={input.noHelperText ? '' : 'number'}\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div> : null;\n }\n\n renderColor = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n type=\"color\"\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderCheckbox = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, defaultValue, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={cls.displayFlex}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomCheckbox\n className={className}\n size=\"small\"\n style={{ marginRight: 5 }}\n value={typeof settings[attr] === 'boolean' ? settings[attr] : defaultValue}\n customValue\n onChange={onChange}\n />\n {backText && <div onClick={() => onChange(typeof settings[attr] === 'boolean' ? !settings[attr] : !defaultValue)} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderSlider = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, min, max, step, unit, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={cls.displayFlex} style={{ marginRight: 20 }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSlider\n customValue\n min={min}\n max={max}\n step={step}\n unit={unit}\n className={className}\n autoComplete=\"off\"\n label=\"number\"\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={val => {\n console.log(val);\n onChange(val)\n }}\n />\n {backText && <div style={{ marginLeft: 20 }} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderButton = (input, value, onClick) => {\n const { className } = this.props;\n const { attr, frontText, backText, buttonText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomButton\n label={buttonText}\n fullWidth\n value={value}\n className={className}\n onClick={onClick}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n findIcon = obj => {\n if (!obj) {\n return Promise.resolve(null);\n } else\n if (obj.common?.icon) {\n return Promise.resolve(getSelectIdIcon(obj, '../..'));\n } else if (obj.type === 'state' || obj.type === 'channel') {\n const parts = obj._id.split('.');\n parts.pop();\n const newId = parts.join('.');\n return this.props.socket.getObject(newId)\n .then(obj => this.findIcon(obj))\n .catch(() => null);\n }\n }\n\n renderObjectID = (input, value, onChange) => {\n const { attr, openCheckbox, checkReadOnly } = input;\n const { settings } = this.state;\n const showSelectId = this.state['showSelectId' + attr];\n const { className, socket } = this.props;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n\n if (settings[attr] && !this.state[settings[attr]]) {\n setTimeout(() => {\n socket.getObject(value)\n .then(obj => {\n this.findIcon(obj)\n .then(icon => this.setState({\n [settings[attr]]: obj,\n [settings[attr] + '___icon']: icon,\n error: checkReadOnly && this.lastObjectIdChange && Date.now() - this.lastObjectIdChange < 1000 && obj?.common?.write === false ? I18n.t('Read only ID selected: %s', settings[attr]) : ''\n }))\n });\n }, 0);\n }\n\n // return null\n return visibility ? <div className={cls.blockMarginTop} key={attr}>\n <div className={cls.displayFlex}>\n {input.title ? <div>{I18n.t(input.title)}</div> : null}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n disabled\n variant=\"outlined\"\n size=\"small\"\n value={value}\n customValue\n />\n <CustomButton\n icon={this.state[this.state.settings[input.attr] + '___icon']}\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => {\n const settings = {};\n settings['showSelectId' + attr] = true;\n this.setState(settings);\n }}\n />\n </div>\n {this.state[this.state.settings[input.attr]] && <div className={clsx(cls.nameBlock, cls.displayItalic)}>{Utils.getObjectNameFromObj(this.state[settings[attr]], I18n.getLanguage())}</div>}\n {showSelectId ? <DialogSelectID\n imagePrefix=\"../..\"\n dialogName={'javascript'}\n themeType={Utils.getThemeName()}\n socket={socket}\n statesOnly={true}\n selected={value}\n onClose={() => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings);\n }}\n onOk={(selected, name, common) => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings, () =>\n // read type of object\n socket.getObject(selected)\n .then(obj => {\n this.lastObjectIdChange = Date.now();\n onChange({\n [attr]: selected,\n [attr + 'Role']: obj.common.role,\n [attr + 'Type']: obj.common.type,\n [attr + 'Unit']: obj.common.unit,\n [attr + 'States']: obj.common.states,\n [attr + 'Min']: obj.common.min,\n [attr + 'Max']: obj.common.max,\n [attr + 'Step']: obj.common.step,\n [attr + 'Def']: obj.common.def,\n [attr + 'Write']: obj.common.write,\n [attr + 'Read']: obj.common.read,\n }, null, () =>\n this.props.setOnUpdate && this.props.setOnUpdate(true))\n }))}\n }\n /> : null}\n </div> : null;\n }\n\n renderIconTag = () => {\n return <div\n className={cls.iconTag}\n onClick={e => {\n if (this.state.settings.tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}>\n {this.state.settings.tagCard}\n </div>;\n }\n\n renderTime = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomTime\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderSelect = (input, value, onChange) => {\n const { className } = this.props;\n const { name, options, frontText, backText, attr, multiple, doNotTranslate, doNotTranslate2, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{I18n.t(frontText)}</div>}\n <CustomSelect\n attr={attr}\n doNotTranslate={doNotTranslate}\n doNotTranslate2={doNotTranslate2}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n multiple={multiple}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderInstance = (input, value, onChange) => {\n const { className, socket } = this.props;\n const { name, options, frontText, backText, attr, adapter, doNotTranslate, doNotTranslateBack } = input;\n if (this.state.hideAttributes.includes(attr)) {\n return null;\n }\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInstance\n attr={attr}\n socket={socket}\n adapter={adapter}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n customValue\n onInstanceHide={value => this.setState({ hideAttributes: [...this.state.hideAttributes, attr] }, () => onChange(value))} // hide instance if only exactly one exists\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderDialog = (input, value, onChange) => {\n const { onShowDialog, frontText, backText, attr, icon, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <MaterialDynamicIcon\n iconName={icon}\n className={clsx(cls.iconDialog)}\n onClick={e => onShowDialog && onShowDialog()}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderModalInput = (input, value, onChange) => {\n const { openModal } = this.state;\n const { className } = this.props;\n const { attr, nameBlock, frontText, backText, noTextEdit, doNotTranslate, doNotTranslateBack} = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n disabled={!!noTextEdit}\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={onChange}\n customValue\n />\n <CustomButton\n square\n // fullWidth\n style={{ marginLeft: 5 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openModal: true })}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {openModal ? <CustomModal\n open={true}\n onApply={val =>\n this.setState({ openModal: false }, () =>\n val !== null && val !== undefined && onChange(val))}\n onClose={() => this.setState({ openModal: false })}\n defaultValue={value}\n textInput={true}\n /> : null}\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n };\n\n renderDate = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomDate\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n static getReplacesInText(context) {\n let value = '';\n if (context.trigger?.oidType) {\n value = '.replace(/%s/g, obj.state.val).replace(/%id/g, obj.id).replace(/%name/g, obj.common && obj.common.name).replace(/%old/g, obj.oldState.val)';\n }\n return value;\n }\n\n /////////////////////////////\n renderTags = () => {\n let { tagCardArray, openTagMenu } = this.state;\n let { tagCard } = this.state.settings;\n let result = tagCard !== '=' && tagCard !== '<>' && tagCard !== '>=' && tagCard !== '()' && tagCard !== '.' && tagCard !== '<=' && tagCard !== '<' && tagCard !== '>' ? I18n.t(tagCard) : tagCard;\n if (tagCardArray.length >= 3) {\n result = <div>\n <div aria-controls=\"simple-menu\" aria-haspopup=\"true\"\n onClick={e => {\n this.setState({ openTagMenu: e.currentTarget }, () => {\n this.props.isTourOpen &&\n this.props.tourStep === STEPS.openTagsMenu &&\n setTimeout(() => this.props.setTourStep(STEPS.selectIntervalTag), 300);\n });\n }}>{result}</div>\n <Menu\n id=\"simple-menu\"\n anchorEl={openTagMenu}\n keepMounted\n open={Boolean(openTagMenu)}\n onClose={() => this.setState({ openTagMenu: null })}\n >\n {tagCardArray.map(el => {\n let tag = el;\n if (typeof el !== 'string') {\n tag = el.title;\n }\n return (\n <MenuItem\n key={tag}\n selected={tag === tagCard}\n className={'tag-card-' + tag}\n style={{ placeContent: 'space-between' }}\n onClick={() => {\n const settings = { ...this.state.settings, tagCard: tag };\n this.setState({ openTagMenu: null, settings }, () => {\n this.props.onChange(settings);\n this.onTagChange(tag);\n });\n (this.props.isTourOpen &&\n (this.props.tourStep === STEPS.openTagsMenu ||\n this.props.tourStep === STEPS.selectIntervalTag) &&\n tag === 'interval' &&\n setTimeout(() => this.props.setTourStep(STEPS.selectActions), 500));\n\n }}>{tag.search(/>|<|<>|<=|>=|=/) !== -1 ? tag : I18n.t(tag)}{typeof el !== 'string' && el.title2 && <div style={{ marginLeft: 4 }}>{I18n.t(el.title2)}</div>}\n </MenuItem>\n );\n })}\n </Menu>\n </div>;\n }\n\n return result;\n };\n\n onChangeTag = () => {\n const { tagCardArray, settings, settings: { tagCard } } = this.state;\n let newTagCardArray = [...tagCardArray]\n if (typeof newTagCardArray[0] !== 'string') {\n newTagCardArray = newTagCardArray.map(el => el.title);\n }\n\n if (tagCard && newTagCardArray.length < 3) {\n const newSettings = { ...settings };\n const newTagCard = newTagCardArray[(newTagCardArray.indexOf(tagCard) + 1) % newTagCardArray.length]\n newSettings.tagCard = newTagCard;\n this.setState({ settings: newSettings }, () => {\n this.props.onChange(newSettings);\n this.onTagChange(newTagCard);\n });\n }\n };\n\n componentDidMount = () => {\n this.onTagChange();\n // detect changes\n };\n\n componentDidUpdate = prevProps => {\n if (this.props.acceptedBy !== 'triggers' && this.props.onUpdate) {\n setTimeout(() => this.onUpdate(), 0);\n }\n }\n\n onChangeInput = attribute => {\n return (value, attr, cb) => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n\n if (typeof value === 'object' && (!attr || typeof attr === 'function')) {\n Object.keys(value).forEach(_attr => settings[_attr] = value[_attr]);\n } else {\n settings[attr || attribute] = value;\n }\n settings.id = this.getData().id;\n settings._id = this.props._id;\n\n this.setState({ settings }, () => {\n this.onValueChanged(value, attr || attribute);\n this.props.onChange(settings);\n cb && cb();\n });\n }\n }\n\n renderSpecific() {\n return null; // it can be overloaded\n }\n\n renderDebugInfo() {\n if (this.state.debugMessage) {\n return <div className={cls.debugInfo} key={this.state.debugMessage.ts} style={{ opacity: 1, height: 22, bottom: -22 }}>\n {this.renderDebug ? this.renderDebug(this.state.debugMessage) : I18n.t('executed')}\n </div>;\n } else {\n return null;\n }\n }\n\n render = () => {\n const { inputs, name, icon, iconTag, settings, adapter, settings: { tagCard }, helpDialog } = this.state;\n const { socket, notFound } = this.props;\n\n return <Fragment>\n {iconTag ? this.renderIconTag() :\n <MaterialDynamicIcon\n iconName={icon}\n className={clsx(cls.iconThemCard, tagCard && this.state.tagCardArray.length && cls.iconThemCardSelectable)}\n adapter={adapter}\n socket={socket}\n onClick={e => {\n if (tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}\n />}\n <div className={cls.blockName}>\n <span className={cls.nameCard}>\n {I18n.t(name)}\n {!!notFound ? I18n.t(`%s not found`, settings.id) : ''}\n {helpDialog ? <IconButton className={cls.iconHelp} size=\"small\" onClick={() => this.setState({ helpText: I18n.t(helpDialog) })}><IconHelp /></IconButton> : null}\n </span>\n {inputs.filter(({ nameRender }) => this[nameRender])\n .map(input => {\n const { nameRender, defaultValue, attr, options } = input;\n return this[nameRender](\n input,\n settings[attr] !== undefined ? settings[attr] : defaultValue,\n this.onChangeInput(attr),\n options || []\n );\n })}\n </div>\n {tagCard && <div className={cls.controlMenuTop} style={{ opacity: 1, height: 22, top: -22 }}>\n <div onClick={() => this.onChangeTag()} className={clsx(cls.tagCard, 'tag-card')}>{this.renderTags()}</div>\n </div>}\n {this.renderDebugInfo()}\n {this.state.error ? <DialogError title={I18n.t('Warning')} text={this.state.error} onClose={() => this.setState({ error: '' })} /> : null}\n {this.state.helpText ? <DialogMessage title={I18n.t('Instructions')} text={this.state.helpText} onClose={() => this.setState({ helpText: '' })} /> : null}\n {this.renderSpecific()}\n </Fragment>;\n };\n}\n\nexport default GenericBlock;","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\n// copied from https://github.com/ioBroker/ioBroker.sayit/blob/master/admin/blockly.js#L37\nconst sayitEngines = {\n \"en\": {name: \"Google - English\", engine: \"google\", params: []},\n \"de\": {name: \"Google - Deutsch\", engine: \"google\", params: []},\n \"ru\": {name: \"Google - Русский\", engine: \"google\", params: []},\n \"it\": {name: \"Google - Italiano\", engine: \"google\", params: []},\n \"es\": {name: \"Google - Espaniol\", engine: \"google\", params: []},\n \"fr\": {name: \"Google - Français\", engine: \"google\", params: []},\n \"ru_YA\": {name: \"Yandex - Русский\", engine: \"yandex\", params: ['key', 'voice', 'emotion', 'ill', 'drunk', 'robot'], voice: ['jane', 'zahar'], emotion: ['none', 'good', 'neutral', 'evil', 'mixed']},\n \"ru_YA_CLOUD\": {name: \"Yandex Cloud - Русский\", engine: \"yandexCloud\", params: ['key', 'folderID', 'voice', 'emotion'], voice: ['alyss', 'oksana', 'jane', 'zahar'], emotion: [ 'good', 'neutral', 'evil']},\n\n \"en-US\": {name: \"PicoTTS - Englisch US\", engine: \"PicoTTS\", params: []},\n \"en-GB\": {name: \"PicoTTS - Englisch GB\", engine: \"PicoTTS\", params: []},\n \"de-DE\": {name: \"PicoTTS - Deutsch\", engine: \"PicoTTS\", params: []},\n \"it-IT\": {name: \"PicoTTS - Italiano\", engine: \"PicoTTS\", params: []},\n \"es-ES\": {name: \"PicoTTS - Espaniol\", engine: \"PicoTTS\", params: []},\n \"fr-FR\": {name: \"PicoTTS - Français\", engine: \"PicoTTS\", params: []},\n\n \"ru-RU_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"ru-RU\", ename: \"Tatyana\", ssml: true, name: \"Cloud - Русский - Татьяна\"},\n \"ru-RU_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"ru-RU\", ename: \"Maxim\", ssml: true, name: \"Cloud - Русский - Максим\"},\n \"de-DE_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"de-DE\", ename: \"Marlene\", ssml: true, name: \"Cloud - Deutsch - Marlene\"},\n \"de-DE_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"de-DE\", ename: \"Hans\", ssml: true, name: \"Cloud - Deutsch - Hans\"},\n \"en-US_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Salli\", ssml: true, name: \"Cloud - en-US - Female - Salli\"},\n \"en-US_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Joey\", ssml: true, name: \"Cloud - en-US - Male - Joey\"},\n \"da-DK_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"da-DK\", ename: \"Naja\", ssml: true, name: \"Cloud - da-DK - Female - Naja\"},\n \"da-DK_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"da-DK\", ename: \"Mads\", ssml: true, name: \"Cloud - da-DK - Male - Mads\"},\n \"en-AU_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-AU\", ename: \"Nicole\", ssml: true, name: \"Cloud - en-AU - Female - Nicole\"},\n \"en-AU_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-AU\", ename: \"Russell\", ssml: true, name: \"Cloud - en-AU - Male - Russell\"},\n \"en-GB_CLOUD_Female_Amy\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Amy\", ssml: true, name: \"Cloud - en-GB - Female - Amy\"},\n \"en-GB_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Brian\", ssml: true, name: \"Cloud - en-GB - Male - Brian\"},\n \"en-GB_CLOUD_Female_Emma\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Emma\", ssml: true, name: \"Cloud - en-GB - Female - Emma\"},\n \"en-GB-WLS_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB-WLS\", ename: \"Gwyneth\", ssml: true, name: \"Cloud - en-GB-WLS - Female - Gwyneth\"},\n \"en-GB-WLS_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-GB-WLS\", ename: \"Geraint\", ssml: true, name: \"Cloud - en-GB-WLS - Male - Geraint\"},\n \"cy-GB_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"cy-GB\", ename: \"Gwyneth\", ssml: true, name: \"Cloud - cy-GB - Female - Gwyneth\"},\n \"cy-GB_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"cy-GB\", ename: \"Geraint\", ssml: true, name: \"Cloud - cy-GB - Male - Geraint\"},\n \"en-IN_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-IN\", ename: \"Raveena\", ssml: true, name: \"Cloud - en-IN - Female - Raveena\"},\n \"en-US_CLOUD_Male_Chipmunk\":{gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Chipmunk\", ssml: true, name: \"Cloud - en-US - Male - Chipmunk\"},\n \"en-US_CLOUD_Male_Eric\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Eric\", ssml: true, name: \"Cloud - en-US - Male - Eric\"},\n \"en-US_CLOUD_Female_Ivy\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Ivy\", ssml: true, name: \"Cloud - en-US - Female - Ivy\"},\n \"en-US_CLOUD_Female_Jennifer\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Jennifer\", ssml: true, name: \"Cloud - en-US - Female - Jennifer\"},\n \"en-US_CLOUD_Male_Justin\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Justin\", ssml: true, name: \"Cloud - en-US - Male - Justin\"},\n \"en-US_CLOUD_Female_Kendra\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Kendra\", ssml: true, name: \"Cloud - en-US - Female - Kendra\"},\n \"en-US_CLOUD_Female_Kimberly\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Kimberly\", ssml: true, name: \"Cloud - en-US - Female - Kimberly\"},\n \"es-ES_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"es-ES\", ename: \"Conchita\", ssml: true, name: \"Cloud - es-ES - Female - Conchita\"},\n \"es-ES_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"es-ES\", ename: \"Enrique\", ssml: true, name: \"Cloud - es-ES - Male - Enrique\"},\n \"es-US_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"es-US\", ename: \"Penelope\", ssml: true, name: \"Cloud - es-US - Female - Penelope\"},\n \"es-US_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"es-US\", ename: \"Miguel\", ssml: true, name: \"Cloud - es-US - Male - Miguel\"},\n \"fr-CA_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"fr-CA\", ename: \"Chantal\", ssml: true, name: \"Cloud - fr-CA - Female - Chantal\"},\n \"fr-FR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"fr-FR\", ename: \"Celine\", ssml: true, name: \"Cloud - fr-FR - Female - Celine\"},\n \"fr-FR_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"fr-FR\", ename: \"Mathieu\", ssml: true, name: \"Cloud - fr-FR - Male - Mathieu\"},\n \"is-IS_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"is-IS\", ename: \"Dora\", ssml: true, name: \"Cloud - is-IS - Female - Dora\"},\n \"is-IS_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"is-IS\", ename: \"Karl\", ssml: true, name: \"Cloud - is-IS - Male - Karl\"},\n \"it-IT_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"it-IT\", ename: \"Carla\", ssml: true, name: \"Cloud - it-IT - Female - Carla\"},\n \"it-IT_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"it-IT\", ename: \"Giorgio\", ssml: true, name: \"Cloud - it-IT - Male - Giorgio\"},\n \"nb-NO_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"nb-NO\", ename: \"Liv\", ssml: true, name: \"Cloud - nb-NO - Female - Liv\"},\n \"nl-NL_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"nl-NL\", ename: \"Lotte\", ssml: true, name: \"Cloud - nl-NL - Female - Lotte\"},\n \"nl-NL_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"nl-NL\", ename: \"Ruben\", ssml: true, name: \"Cloud - nl-NL - Male - Ruben\"},\n \"pl-PL_CLOUD_Female_Agnieszka\":{gender: \"Female\", engine: \"cloud\",params: ['cloud'], language: \"pl-PL\", ename: \"Agnieszka\", ssml: true, name: \"Cloud - pl-PL - Female - Agnieszka\"},\n \"pl-PL_CLOUD_Male_Jacek\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Jacek\", ssml: true, name: \"Cloud - pl-PL - Male - Jacek\"},\n \"pl-PL_CLOUD_Female_Ewa\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Ewa\", ssml: true, name: \"Cloud - pl-PL - Female - Ewa\"},\n \"pl-PL_CLOUD_Male_Jan\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Jan\", ssml: true, name: \"Cloud - pl-PL - Male - Jan\"},\n \"pl-PL_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Maja\", ssml: true, name: \"Cloud - pl-PL - Female - Maja\"},\n \"pt-BR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pt-BR\", ename: \"Vitoria\", ssml: true, name: \"Cloud - pt-BR - Female - Vitoria\"},\n \"pt-BR_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pt-BR\", ename: \"Ricardo\", ssml: true, name: \"Cloud - pt-BR - Male - Ricardo\"},\n \"pt-PT_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pt-PT\", ename: \"Cristiano\", ssml: true, name: \"Cloud - pt-PT - Male - Cristiano\"},\n \"pt-PT_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pt-PT\", ename: \"Ines\", ssml: true, name: \"Cloud - pt-PT - Female - Ines\"},\n \"ro-RO_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"ro-RO\", ename: \"Carmen\", ssml: true, name: \"Cloud - ro-RO - Female - Carmen\"},\n \"sv-SE_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"sv-SE\", ename: \"Astrid\", ssml: true, name: \"Cloud - sv-SE - Female - Astrid\"},\n \"tr-TR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"tr-TR\", ename: \"Filiz\", ssml: true, name: \"Cloud - tr-TR - Female - Filiz\"},\n\n \"ru-RU_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ru-RU\", ename: \"Tatyana\", ssml: true, name: \"AWS Polly - Русский - Татьяна\"},\n \"ru-RU_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ru-RU\", ename: \"Maxim\", ssml: true, name: \"AWS Polly - Русский - Максим\"},\n \"de-DE_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Marlene\", ssml: true, name: \"AWS Polly - Deutsch - Marlene\"},\n \"de-DE_AP_Female_Vicky\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Vicky\", ssml: true, name: \"AWS Polly - Deutsch - Vicky\"},\n \"de-DE_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Hans\", ssml: true, name: \"AWS Polly - Deutsch - Hans\"},\n \"en-US_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Salli\", ssml: true, name: \"AWS Polly - en-US - Female - Salli\"},\n \"en-US_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Joey\", ssml: true, name: \"AWS Polly - en-US - Male - Joey\"},\n \"da-DK_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"da-DK\", ename: \"Naja\", ssml: true, name: \"AWS Polly - da-DK - Female - Naja\"},\n \"da-DK_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"da-DK\", ename: \"Mads\", ssml: true, name: \"AWS Polly - da-DK - Male - Mads\"},\n \"en-AU_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-AU\", ename: \"Nicole\", ssml: true, name: \"AWS Polly - en-AU - Female - Nicole\"},\n \"en-AU_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-AU\", ename: \"Russell\", ssml: true, name: \"AWS Polly - en-AU - Male - Russell\"},\n \"en-GB_AP_Female_Amy\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Amy\", ssml: true, name: \"AWS Polly - en-GB - Female - Amy\"},\n \"en-GB_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Brian\", ssml: true, name: \"AWS Polly - en-GB - Male - Brian\"},\n \"en-GB_AP_Female_Emma\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Emma\", ssml: true, name: \"AWS Polly - en-GB - Female - Emma\"},\n \"en-GB-WLS_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB-WLS\", ename: \"Gwyneth\", ssml: true, name: \"AWS Polly - en-GB-WLS - Female - Gwyneth\"},\n \"en-GB-WLS_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB-WLS\", ename: \"Geraint\", ssml: true, name: \"AWS Polly - en-GB-WLS - Male - Geraint\"},\n \"cy-GB_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"cy-GB\", ename: \"Gwyneth\", ssml: true, name: \"AWS Polly - cy-GB - Female - Gwyneth\"},\n \"cy-GB_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"cy-GB\", ename: \"Geraint\", ssml: true, name: \"AWS Polly - cy-GB - Male - Geraint\"},\n \"en-IN_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-IN\", ename: \"Raveena\", ssml: true, name: \"AWS Polly - en-IN - Female - Raveena\"},\n \"en-US_AP_Male_Chipmunk\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Chipmunk\", ssml: true, name: \"AWS Polly - en-US - Male - Chipmunk\"},\n \"en-US_AP_Male_Eric\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Eric\", ssml: true, name: \"AWS Polly - en-US - Male - Eric\"},\n \"en-US_AP_Female_Ivy\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Ivy\", ssml: true, name: \"AWS Polly - en-US - Female - Ivy\"},\n \"en-US_AP_Female_Jennifer\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Jennifer\", ssml: true, name: \"AWS Polly - en-US - Female - Jennifer\"},\n \"en-US_AP_Male_Justin\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Justin\", ssml: true, name: \"AWS Polly - en-US - Male - Justin\"},\n \"en-US_AP_Female_Kendra\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Kendra\", ssml: true, name: \"AWS Polly - en-US - Female - Kendra\"},\n \"en-US_AP_Female_Kimberly\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Kimberly\", ssml: true, name: \"AWS Polly - en-US - Female - Kimberly\"},\n \"es-ES_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-ES\", ename: \"Conchita\", ssml: true, name: \"AWS Polly - es-ES - Female - Conchita\"},\n \"es-ES_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-ES\", ename: \"Enrique\", ssml: true, name: \"AWS Polly - es-ES - Male - Enrique\"},\n \"es-US_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-US\", ename: \"Penelope\", ssml: true, name: \"AWS Polly - es-US - Female - Penelope\"},\n \"es-US_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-US\", ename: \"Miguel\", ssml: true, name: \"AWS Polly - es-US - Male - Miguel\"},\n \"fr-CA_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-CA\", ename: \"Chantal\", ssml: true, name: \"AWS Polly - fr-CA - Female - Chantal\"},\n \"fr-FR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-FR\", ename: \"Celine\", ssml: true, name: \"AWS Polly - fr-FR - Female - Celine\"},\n \"fr-FR_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-FR\", ename: \"Mathieu\", ssml: true, name: \"AWS Polly - fr-FR - Male - Mathieu\"},\n \"is-IS_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"is-IS\", ename: \"Dora\", ssml: true, name: \"AWS Polly - is-IS - Female - Dora\"},\n \"is-IS_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"is-IS\", ename: \"Karl\", ssml: true, name: \"AWS Polly - is-IS - Male - Karl\"},\n \"it-IT_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"it-IT\", ename: \"Carla\", ssml: true, name: \"AWS Polly - it-IT - Female - Carla\"},\n \"it-IT_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"it-IT\", ename: \"Giorgio\", ssml: true, name: \"AWS Polly - it-IT - Male - Giorgio\"},\n \"nb-NO_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nb-NO\", ename: \"Liv\", ssml: true, name: \"AWS Polly - nb-NO - Female - Liv\"},\n \"nl-NL_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nl-NL\", ename: \"Lotte\", ssml: true, name: \"AWS Polly - nl-NL - Female - Lotte\"},\n \"nl-NL_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nl-NL\", ename: \"Ruben\", ssml: true, name: \"AWS Polly - nl-NL - Male - Ruben\"},\n \"pl-PL_AP_Female_Agnieszka\":{gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Agnieszka\", ssml: true, name: \"AWS Polly - pl-PL - Female - Agnieszka\"},\n \"pl-PL_AP_Male_Jacek\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Jacek\", ssml: true, name: \"AWS Polly - pl-PL - Male - Jacek\"},\n \"pl-PL_AP_Female_Ewa\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Ewa\", ssml: true, name: \"AWS Polly - pl-PL - Female - Ewa\"},\n \"pl-PL_AP_Male_Jan\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Jan\", ssml: true, name: \"AWS Polly - pl-PL - Male - Jan\"},\n \"pl-PL_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Maja\", ssml: true, name: \"AWS Polly - pl-PL - Female - Maja\"},\n \"pt-BR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-BR\", ename: \"Vitoria\", ssml: true, name: \"AWS Polly - pt-BR - Female - Vitoria\"},\n \"pt-BR_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-BR\", ename: \"Ricardo\", ssml: true, name: \"AWS Polly - pt-BR - Male - Ricardo\"},\n \"pt-PT_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-PT\", ename: \"Cristiano\", ssml: true, name: \"AWS Polly - pt-PT - Male - Cristiano\"},\n \"pt-PT_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-PT\", ename: \"Ines\", ssml: true, name: \"AWS Polly - pt-PT - Female - Ines\"},\n \"ro-RO_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ro-RO\", ename: \"Carmen\", ssml: true, name: \"AWS Polly - ro-RO - Female - Carmen\"},\n \"sv-SE_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"sv-SE\", ename: \"Astrid\", ssml: true, name: \"AWS Polly - sv-SE - Female - Astrid\"},\n \"tr-TR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"tr-TR\", ename: \"Filiz\", ssml: true, name: \"AWS Polly - tr-TR - Female - Filiz\"}\n};\n\nclass ActionSayText extends GenericBlock {\n constructor(props) {\n super(props, ActionSayText.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Sayit ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${config.language && config.language !== '_' ? config.language + ';' : ''}${config.volume ? config.volume + ';' : ''}${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tawait setStateAsync(\"${config.instance}.tts.text\", subActionVar${config._id});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Say:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n const lang = I18n.getLanguage();\n const languages = Object.keys(sayitEngines).filter(l => l.startsWith(lang));\n const options = languages.map(lang => ({title: sayitEngines[lang].name, value: lang}));\n options.unshift({title: 'Default', value: '_'});\n\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n adapter: 'sayit',\n defaultValue: 'sayit.0',\n frontText: 'Instance:',\n },\n {\n nameRender: 'renderSelect',\n frontText: 'Language:',\n options,\n defaultValue: '_',\n attr: 'language',\n },\n {\n nameRender: 'renderNameText',\n defaultValue: 'Volume',\n attr: 'textVol',\n },\n {\n nameRender: 'renderSlider',\n attr: 'volume',\n defaultValue: 100,\n min: 0,\n max: 100\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Say It',\n id: 'ActionSayText',\n adapter: 'sayit',\n title: 'Say some text via sayit adapter',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSayText.getStaticData();\n }\n}\n\nexport default ActionSayText;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionSendEmail extends GenericBlock {\n constructor(props) {\n super(props, ActionSendEmail.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.recipients) {\n return `// no recipients defined'\n_sendToFrontEnd(${config._id}, {text: 'No recipients defined'});`;\n } else {\n return `// Send Email ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance || 'email.0'}\", {\n\\t\\t to: \"${config.recipients || ''}\",\n\\t\\t subject: \"${(config.subject || 'ioBroker').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t text: subActionVar${config._id}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n defaultValue: 'email.0',\n frontText: 'Instance:',\n adapter: 'email',\n },\n {\n attr: 'recipients',\n nameRender: 'renderText',\n defaultValue: 'user@mail.ru',\n frontText: 'To:',\n },\n {\n attr: 'subject',\n nameRender: 'renderText',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Subject:',\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Body:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Send email',\n id: 'ActionSendEmail',\n adapter: 'email',\n title: 'Sends an email',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSendEmail.getStaticData();\n }\n}\n\nexport default ActionSendEmail;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionTelegram extends GenericBlock {\n constructor(props) {\n super(props, ActionTelegram.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Telegram ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", ${config.user && config.user !== '_' ? `{user: \"${(config.user || '').replace(/\"/g, '\\\\\"')}\", text: subActionVar${config._id}}` : `subActionVar${config._id}`});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'instance') {\n this._setUsers(value);\n }\n }\n\n _setUsers(instance) {\n instance = instance || this.state.settings.instance || 'telegram.0';\n this.cachePromises[instance] = this.cachePromises[instance] || this.props.socket.getState(instance + '.communicate.users');\n if (!this.state.settings._id) {\n return this.setState({\n inputs: [\n {\n nameRender: 'renderSelect',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: [{title: 'telegram.0', value: 'telegram.0'}],\n defaultValue: '',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange());\n }\n\n this.cachePromises[instance]\n .then(users => {\n try {\n users = users?.val ? JSON.parse(users.val) : null;\n users = users && Object.keys(users).map(user => ({title: users[user].userName || users[user].firstName, value: user}));\n users = users || [];\n users.unshift({title: 'all', value: ''});\n } catch (e) {\n users = [{title: 'all', value: ''}];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: users,\n defaultValue: '_',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange());\n });\n }\n\n onTagChange(tagCard) {\n this._setUsers();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Telegram',\n id: 'ActionTelegram',\n adapter: 'telegram',\n title: 'Sends message via telegram',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionTelegram.getStaticData();\n }\n}\n\nexport default ActionTelegram;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushover extends GenericBlock {\n constructor(props) {\n super(props, ActionPushover.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushover ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\\`; \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t sound: \"${config.sound}\",\n\\t\\t priority: ${config.priority}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return 'Sent: ' + debugMessage.data.text;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushover',\n frontText: 'Instance:',\n defaultValue: 'pushover.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n {value: \"pushover\", title: \"pushover\"},\n {value: \"bike\", title: \"bike\"},\n {value: \"bugle\", title: \"bugle\"},\n {value: \"cashregister\", title: \"cashregister\"},\n {value: \"classical\", title: \"classical\"},\n {value: \"cosmic\", title: \"cosmic\"},\n {value: \"falling\", title: \"falling\"},\n {value: \"gamelan\", title: \"gamelan\"},\n {value: \"incoming\", title: \"incoming\"},\n {value: \"intermission\", title: \"intermission\"},\n {value: \"magic\", title: \"magic\"},\n {value: \"mechanical\", title: \"mechanical\"},\n {value: \"pianobar\", title: \"pianobar\"},\n {value: \"siren\", title: \"siren\"},\n {value: \"spacealarm\", title: \"spacealarm\"},\n {value: \"tugboat\", title: \"tugboat\"},\n {value: \"alien\", title: \"alien\"},\n {value: \"climb\", title: \"climb\"},\n {value: \"persistent\", title: \"persistent\"},\n {value: \"echo\", title: \"echo\"},\n {value: \"updown\", title: \"updown\"},\n {value: \"none\", title: \"none\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: -1,\n frontText: 'Priority:',\n options: [\n {value: -1, title: \"quiet\"},\n {value: 0, title: \"normal\"},\n {value: 1, title: \"high-priority\"},\n {value: 2, title: \"acknowledgment\"},\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushover',\n id: 'ActionPushover',\n adapter: 'pushover',\n title: 'Sends message via pushover',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPushover.getStaticData();\n }\n}\n\nexport default ActionPushover;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionWhatsappcmb extends GenericBlock {\n constructor(props) {\n super(props, ActionWhatsappcmb.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// whatsapp ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", {text: subActionVar${config._id}${config.phone ? `, phone: \"${config.phone.replace(/\"/g, '\\\\\"')}\"` : ''}});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'whatsapp-cmb',\n frontText: 'Instance:',\n defaultValue: 'whatsapp-cmb.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'phone',\n defaultValue: '',\n frontText: 'Phone:',\n backText: '(optional)'\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Whatsapp-cmb',\n id: 'ActionWhatsappcmb',\n adapter: 'whatsapp-cmb',\n title: 'Sends message via whatsapp-cmb',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionWhatsappcmb.getStaticData();\n }\n}\n\nexport default ActionWhatsappcmb;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushsafer extends GenericBlock {\n constructor(props) {\n super(props, ActionPushsafer.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushsafer ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}}); \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t ${config.device ? `device: \"${config.device}\",` : ''}\n\\t\\t ${config.sound && config.sound !== '_' ? `sound: \"${config.sound}\",` : ''}\n\\t\\t priority: ${config.priority},\n\\t\\t ${config.vibration && config.vibration !== '_' ? `vibration: ${config.vibration},` : ''}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return 'Sent: ' + debugMessage.data.text;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushsafer',\n frontText: 'Instance:',\n defaultValue: 'pushsafer.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n {value: \"_\", title: \"Device Default\"},\n {value: \"0 \", title: \"Silent\"},\n {value: \"1 \", title: \"Ahem (IM)\"},\n {value: \"2 \", title: \"Applause (Mail)\"},\n {value: \"3 \", title: \"Arrow (Reminder)\"},\n {value: \"4 \", title: \"Baby (SMS)\"},\n {value: \"5 \", title: \"Bell (Alarm)\"},\n {value: \"6 \", title: \"Bicycle (Alarm2)\"},\n {value: \"7 \", title: \"Boing (Alarm3)\"},\n {value: \"8 \", title: \"Buzzer (Alarm4)\"},\n {value: \"9 \", title: \"Camera (Alarm5)\"},\n {value: \"10\", title: \"Car Horn (Alarm6)\"},\n {value: \"11\", title: \"Cash Register (Alarm7)\"},\n {value: \"12\", title: \"Chime (Alarm8)\"},\n {value: \"13\", title: \"Creaky Door (Alarm9)\"},\n {value: \"14\", title: \"Cuckoo Clock (Alarm10)\"},\n {value: \"15\", title: \"Disconnect (Call)\"},\n {value: \"16\", title: \"Dog (Call2)\"},\n {value: \"17\", title: \"Doorbell (Call3)\"},\n {value: \"18\", title: \"Fanfare (Call4)\"},\n {value: \"19\", title: \"Gun Shot (Call5)\"},\n {value: \"20\", title: \"Honk (Call6)\"},\n {value: \"21\", title: \"Jaw Harp (Call7)\"},\n {value: \"22\", title: \"Morse (Call8)\"},\n {value: \"23\", title: \"Electricity (Call9)\"},\n {value: \"24\", title: \"Radio Tuner (Call10)\"},\n {value: \"25\", title: \"Sirens\"},\n {value: \"26\", title: \"Military Trumpets\"},\n {value: \"27\", title: \"Ufo\"},\n {value: \"28\", title: \"Whah Whah Whah\"},\n {value: \"29\", title: \"Man Saying Goodbye\"},\n {value: \"30\", title: \"Man Saying Hello\"},\n {value: \"31\", title: \"Man Saying No\"},\n {value: \"32\", title: \"Man Saying Ok\"},\n {value: \"33\", title: \"Man Saying Ooohhhweee\"},\n {value: \"34\", title: \"Man Saying Warning\"},\n {value: \"35\", title: \"Man Saying Welcome\"},\n {value: \"36\", title: \"Man Saying Yeah\"},\n {value: \"37\", title: \"Man Saying Yes\"},\n {value: \"38\", title: \"Beep short\"},\n {value: \"39\", title: \"Weeeee short\"},\n {value: \"40\", title: \"Cut in and out short\"},\n {value: \"41\", title: \"Finger flicking glas short\"},\n {value: \"42\", title: \"Wa Wa Waaaa short\"},\n {value: \"43\", title: \"Laser short\"},\n {value: \"44\", title: \"Wind Chime short\"},\n {value: \"45\", title: \"Echo short\"},\n {value: \"46\", title: \"Zipper short\"},\n {value: \"47\", title: \"HiHat short\"},\n {value: \"48\", title: \"Beep 2 short\"},\n {value: \"49\", title: \"Beep 3 short\"},\n {value: \"50\", title: \"Beep 4 short\"},\n {value: \"51\", title: \"The Alarm is armed\"},\n {value: \"52\", title: \"The Alarm is disarmed\"},\n {value: \"53\", title: \"The Backup is ready\"},\n {value: \"54\", title: \"The Door is closed\"},\n {value: \"55\", title: \"The Door is opend\"},\n {value: \"56\", title: \"The Window is closed\"},\n {value: \"57\", title: \"The Window is open\"},\n {value: \"58\", title: \"The Light is off\"},\n {value: \"59\", title: \"The Light is on\"},\n {value: \"60\", title: \"The Doorbell rings\"},\n {value: \"61\", title: \"Pager short\"},\n {value: \"62\", title: \"Pager long\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: 0,\n frontText: 'Priority:',\n options: [\n {value: -2, title: \"lowest priority\"},\n {value: -1, title: \"lower priority\"},\n {value: 0, title: \"normal priority\"},\n {value: 1, title: \"high priority\"},\n {value: 2, title: \"highest priority\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'vibration',\n defaultValue: 0,\n frontText: 'Vibration:',\n options: [\n {value: '_', title: \"default\"},\n {value: 1, title: \"1\"},\n {value: 2, title: \"2\"},\n {value: 3, title: \"3\"},\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushsafer',\n id: 'ActionPushsafer',\n adapter: 'pushsafer',\n title: 'Sends message via Pushsafer',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPushsafer.getStaticData();\n }\n}\n\nexport default ActionPushsafer;\n","// eslint-disable-next-line no-unused-vars\n\nconst STANDARD_FUNCTION_STATE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION_STATE_ONCHANGE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\n\nconst STANDARD_FUNCTION_ONCHANGE =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\n\nconst NO_FUNCTION = `\"__%%DEBUG_TRIGGER%%__\";\n__%%CONDITIONS_VARS%%__\nconst _cond = __%%CONDITION%%__;\n\n\"__%%DEBUG_CONDITIONS%%__\";\n\nif (_cond) {\n__%%THEN%%__\n} else {\n__%%ELSE%%__\n}`;\n\nconst DEFAULT_RULE = {\n triggers: [],\n conditions: [[]],\n justCheck: false,\n actions: {\n then: [],\n 'else': []\n }\n};\n\nfunction compileTriggers(json, context, blocks) {\n const triggers = [];\n let jsonTriggers = json.triggers;\n if (!jsonTriggers.length) {\n jsonTriggers = [{id: 'TriggerScriptSave'}];\n }\n\n const vars = [];\n let prelines = [];\n let hist = json.conditions.find(conds => conds.find(cond => cond.tagCard === '()'));\n\n jsonTriggers.forEach((trigger, i) => {\n const found = findBlock(trigger.id, blocks);\n if (found) {\n const _context = {\n trigger,\n condition: {},\n justCheck: hist ? false : (json.justCheck || (!json.conditions.length || !json.conditions[0].length)),\n conditionsDebug: [],\n conditionsVars: [],\n };\n const text = found.compile(trigger, _context);\n const conditions = compileConditions(json.conditions, _context, blocks);\n const then = compileActions(json.actions.then, _context, blocks);\n const _else = compileActions(json.actions.else, _context, blocks);\n\n // find indent\n vars.push('cond' + i);\n\n if (_context.prelines && _context.prelines.length) {\n _context.prelines.forEach(line => prelines.push(line));\n }\n\n if (text.includes(' __%%CONDITIONS_VARS%%__')) {\n _context.conditionsVars = _context.conditionsVars.map((v, i) => i ? ' ' + v : v);\n _context.conditionsDebug = _context.conditionsDebug.map((v, i) => i ? ' ' + v : v);\n }\n\n triggers.push(\n text\n .replace('__%%CONDITIONS_VARS%%__', _context.conditionsVars.join('\\n'))\n .replace('\"__%%DEBUG_CONDITIONS%%__\";', _context.conditionsDebug.join('\\n'))\n .replace('__%%CONDITION%%__', conditions)\n .replace('__%%THEN%%__', then || '// ignore')\n .replace('__%%ELSE%%__', _else || '// ignore')\n .replace(/__%%STATE%%__/g, 'cond' + i)\n );\n }\n });\n\n let text = triggers.join('\\n\\n');\n\n if (!json.justCheck || hist) {\n text = vars.map(v => `let ${v} = false;`).join('\\n') + '\\n\\n' + text;\n }\n if (prelines) {\n text = prelines.join('\\n') + '\\n\\n' + text;\n }\n\n return text;\n}\n\nfunction findBlock(type, blocks) {\n return blocks.find(block => block.getStaticData && block.getStaticData().id === type);\n}\n\nfunction compileActions(actions, context, blocks) {\n let result = [];\n actions && actions.forEach(action => {\n const found = findBlock(action.id, blocks);\n if (found) {\n result.push(found.compile(action, context));\n }\n });\n return `\\t\\t${result.join('\\n\\n\\t\\t')}` || '';\n}\n\nfunction compileConditions(conditions, context, blocks) {\n let result = [];\n let i = 0;\n conditions && conditions.forEach(ors => {\n if (ors.hasOwnProperty('length') && ors.length) {\n const _ors = [];\n _ors && ors.forEach(block => {\n const found = findBlock(block.id, blocks);\n if (found) {\n context.condition.index = i++;\n _ors.push(found.compile(block, context));\n }\n });\n result.push('(' + _ors.join(') &&\\n (') + ')');\n } else {\n const found = findBlock(ors.id, blocks);\n if (found) {\n context.condition.index = i++;\n result.push(found.compile(ors, context));\n }\n }\n });\n\n if (!result.length) {\n return 'true';\n } else\n if (result.length === 1) {\n return result[0] || 'true';\n } else {\n return '(' + result.join(') || (') + ')';\n }\n}\n\nfunction compile(json, blocks) {\n return compileTriggers(json, null, blocks);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction code2json(code) {\n if (!code) {\n return DEFAULT_RULE;\n } else {\n const lines = code.split('\\n');\n try {\n let json = lines.pop().replace(/^\\/\\//, '');\n json = JSON.parse(json);\n if (!json.triggers) {\n json = DEFAULT_RULE;\n }\n return json;\n } catch (e) {\n return DEFAULT_RULE;\n }\n }\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction json2code(json, blocks) {\n let code = '';\n\n const compiled = compile(json, blocks);\n code += compiled;\n\n code += `\\n/*const demo = ${JSON.stringify(json, null, 2)};*/\\n`;\n\n return code + '\\n//' + JSON.stringify(json);\n}\n\nconst Compile = {\n code2json,\n json2code,\n compile,\n STANDARD_FUNCTION,\n STANDARD_FUNCTION_ONCHANGE,\n STANDARD_FUNCTION_STATE,\n STANDARD_FUNCTION_STATE_ONCHANGE,\n NO_FUNCTION,\n};\n\nexport default Compile;","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\nimport Compile from '../../helpers/Compile';\n\nclass TriggerScriptSave extends GenericBlock {\n constructor(props) {\n super(props, TriggerScriptSave.getStaticData());\n }\n\n static compile(config, context) {\n return Compile.NO_FUNCTION.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Triggered');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNameText',\n defaultValue: 'On script save or adapter start',\n attr: 'script'\n },\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Start script',\n id: 'TriggerScriptSave',\n icon: 'PlayArrow',\n title: 'Triggers the on script saving or the javascript instance restart'\n }\n }\n\n getData() {\n return TriggerScriptSave.getStaticData();\n }\n}\n\nexport default TriggerScriptSave;\n","import React from 'react';\nimport SunCalc from 'suncalc2';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport CustomInput from '../CustomInput';\nimport CustomButton from '../CustomButton';\nimport CustomModal from '../CustomModal';\n\nimport ComplexCron from '@iobroker/adapter-react-v5/Components/ComplexCron';\nimport Schedule from '@iobroker/adapter-react-v5/Components/Schedule';\nimport convertCronToText from '@iobroker/adapter-react-v5/Components/SimpleCron/cronText';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DEFAULT_WIZARD = '{\"time\":{\"start\":\"00:00\",\"end\":\"24:00\",\"mode\":\"hours\",\"interval\":1},\"period\":{\"days\":1}}';\n\nclass TriggerScheduleBlock extends GenericBlock {\n constructor(props) {\n super(props, TriggerScheduleBlock.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n let text = '';\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n\n if (config.tagCard === 'interval') {\n text = `setInterval(${func}, ${config.interval || 1} * ${config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000)});`;\n } else if (config.tagCard === 'cron') {\n text = `schedule(\"${config.cron}\", ${func});`;\n } else if (config.tagCard === 'at') {\n const [hours, minutes] = (config.at || '').split(':');\n let dow = '*';\n if (config?.dow?.length && !config.dow.includes('_')) {\n const _dow = [...config.dow].map(item => parseInt(item, 10));\n _dow.sort();\n\n let intervals = [];\n let start = _dow[0];\n let i = 1\n for (; i < _dow.length; i++) {\n if (_dow[i] - _dow[i - 1] > 1) {\n if (start === _dow[i - 1]) {\n intervals.push(start);\n } else if (_dow[i - 1] - start === 1) {\n intervals.push(start + ',' + _dow[i - 1]);\n } else {\n intervals.push(start + '-' + _dow[i - 1]);\n }\n\n start = _dow[i];\n } else if (i === _dow.length - 1) {\n if (start === _dow[i - 1] || _dow[i] - start === 1) {\n intervals.push(start + ',' + _dow[i]);\n } else {\n intervals.push(start + '-' + _dow[i]);\n }\n }\n }\n\n dow = intervals.join(',')\n }\n text = `schedule(\"${minutes || '0'} ${hours || '0'} * * ${dow}\", ${func});`;\n } else if (config.tagCard === 'astro') {\n text = `schedule({astro: \"${config.astro}\", shift: ${config.offset ? config.offsetValue : 0}}, ${func});`;\n } else if (config.tagCard === 'wizard') {\n text = `schedule('${config.wizard}', ${func});`;\n }\n\n return text;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude\n }\n }\n });\n }\n\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${TriggerScheduleBlock._time2String(sunValue[name])}]`,\n order: sunValue ? TriggerScheduleBlock._time2String(sunValue[name]) : '??:??'\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(at ${TriggerScheduleBlock._time2String(astroTime)})`;// translate\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n frontText: 'at',\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes', // translate\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n } else {\n inputs = [\n {\n frontText: 'at', // translate\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset', // translate\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n async _setInterval(interval) {\n interval = parseInt(interval || this.state.settings.interval, 10) || 30;\n let options;\n if (interval === 1) {\n options = [\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' }\n ];\n } else {\n options = [\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' }\n ];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n prefix: {\n en: 'every'\n },\n attr: 'interval',\n frontText: 'every',\n defaultValue: 30,\n className: 'block-input-interval'\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 's',\n options\n }\n ]\n }, () => super.onTagChange());\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Triggered');\n }\n\n onValueChanged(value, attr) {\n if (this.state.settings.tagCard === 'astro') {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n } else if (this.state.settings.tagCard === 'interval') {\n if (attr === 'interval') {\n this._setInterval(value);\n }\n }\n }\n\n renderCron(input, value, onChange) {\n const { className } = this.props;\n let textCron = '';\n const { settings } = this.state;\n const { attr } = input;\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'baseline' }}>\n <div style={{ width: '100%' }}>\n {this.renderText({\n attr: 'text',\n defaultValue: value\n }, !!settings['text'] ? settings['text'] : value, onChange)}\n </div>\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={async () => {\n await onChange(textCron, 'text');\n await onChange(convertCronToText(textCron, I18n.getLanguage()), 'addText');\n this.setState({ openDialog: false });\n }}\n onClose={() => this.setState({ openDialog: false })}>\n <ComplexCron\n cronExpression={!!settings[input.attr] ? '' : settings[attr]}\n onChange={el => {textCron = el}} />\n </CustomModal>\n {this.renderNameText({\n defaultValue: 'every hour at 0 minutes',\n attr: 'addText',\n signature: true\n }, !!settings['addText'] ? settings['addText'] : 'every hour at 0 minutes', onChange)}\n </div>;\n }\n\n renderWizard(input, value, onChange) {\n const { className } = this.props;\n const { attr } = input;\n let wizardText = '';\n let wizard = null;\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'center', marginTop: 7 }}>\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n // disabled\n variant=\"outlined\"\n size=\"small\"\n multiline\n rows={2}\n value={this.state.settings[attr + 'Text']}\n onChange={(el) => onChange(el)}\n customValue\n />\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={() =>\n this.setState({ openDialog: false }, () =>\n onChange({\n [attr + 'Text']: wizardText,\n [attr]: wizard,\n }))}\n onClose={() => this.setState({ openDialog: false })}>\n <Schedule onChange={(val, text) => {\n wizardText = text;\n wizard = typeof val === 'object' ? JSON.parse(JSON.stringify(val)) : JSON.parse(val);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n wizard = JSON.stringify(wizard);\n }} />\n </CustomModal>\n </div>;\n }\n\n onTagChange(tagCard) {\n tagCard = tagCard || this.state.settings.tagCard;\n switch (tagCard) {\n case 'interval':\n this._setInterval();\n break;\n\n case 'cron':\n this.setState({\n inputs: [\n {\n nameRender: 'renderCron',\n attr: 'cron',\n defaultValue: '0 * * * *',\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'wizard':\n const wizard = JSON.parse(DEFAULT_WIZARD);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderWizard',\n attr: 'wizard',\n defaultValue: JSON.stringify(wizard),\n }\n ]\n }, () => super.onTagChange(null, () => {\n const wizardText = Schedule.state2text(this.state.settings.wizard || wizard);\n if (this.state.settings.wizardText !== wizardText) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n settings.wizardText = wizardText;\n this.setState({settings});\n this.props.onChange(settings);\n }\n }));\n break;\n\n case 'at':\n this.setState({\n inputs: [\n {\n nameRender: 'renderTime',\n prefix: 'at',\n attr: 'at',\n defaultValue: '07:30',\n },\n {\n nameRender: 'renderSelect',\n attr: 'dow',\n default: '',\n multiple: true,\n defaultValue: ['_', '1', '2', '3', '4', '5', '6', '0'],\n options: [\n { value: '_', title: 'Every day', only: true },\n { value: '1', title: 'Monday', titleShort: 'Mo' },\n { value: '2', title: 'Tuesday', titleShort: 'Tu' },\n { value: '3', title: 'Wednesday', titleShort: 'We' },\n { value: '4', title: 'Thursday', titleShort: 'Th' },\n { value: '5', title: 'Friday', titleShort: 'Fr' },\n { value: '6', title: 'Saturday', titleShort: 'Sa' },\n { value: '0', title: 'Sunday', titleShort: 'Su' },\n ]\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'astro':\n this._setAstro();\n break;\n\n default:\n break;\n }\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Schedule',\n id: 'TriggerScheduleBlock',\n icon: 'AccessTime',\n tagCardArray: ['cron', 'wizard', 'interval', 'at', 'astro'],\n title: 'Triggers the rule periodically or on some specific time'\n }\n }\n\n getData() {\n return TriggerScheduleBlock.getStaticData();\n }\n}\n\nexport default TriggerScheduleBlock;\n","import React from 'react';\nimport withStyles from '@mui/styles/withStyles';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport Button from '@mui/material/Button';\nimport Switch from '@mui/material/Switch';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Slide from '@mui/material/Slide';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { MdCancel as IconCancel } from 'react-icons/md';\nimport { MdCheck as IconCheck } from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323'\n },\n valueNotAck: {\n color: '#12ac15'\n },\n});\n\nconst Transition = React.forwardRef((props, ref) =>\n <Slide direction=\"up\" ref={ref} {...props} />);\n\nclass TriggerState extends GenericBlock {\n constructor(props) {\n super(props, TriggerState.getStaticData());\n this.inputRef = React.createRef();\n }\n\n static compile(config, context) {\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {val: obj.state.val, ack: obj.state.ack, valOld: obj.oldState && obj.oldState.val, ackOld: obj.oldState && obj.oldState.ack})`);\n return `on({id: \"${config.oid || ''}\", change: \"${config.tagCard === 'on update' ? 'any' : 'ne'}\"}, ${func});`\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n if (debugMessage.data.valOld !== undefined) {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ackOld ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.valOld)}</span> → <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n } else {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n }\n }\n\n onWriteValue() {\n this.setState({openSimulate: false});\n let simulateValue = this.state.simulateValue;\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}_ack`, this.state.simulateAck);\n\n if (this.state.settings.oidType === 'boolean') {\n simulateValue = simulateValue === true || simulateValue === 'true' || simulateValue === '1';\n } else if (this.state.settings.oidType === 'number') {\n simulateValue = parseFloat(simulateValue) || 0;\n }\n\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}`, simulateValue);\n this.props.socket.setState(this.state.settings.oid, { val: simulateValue, ack: !!this.state.simulateAck });\n }\n\n renderWriteState() {\n return <>\n <Button\n disabled={!this.state.settings.oid || !this.state.enableSimulation}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n this.setState({\n openSimulate: true,\n simulateValue: this.state.settings.oidType === 'boolean' ?\n window.localStorage.getItem('javascript.app.' + this.state.settings.oid) === 'true' :\n (window.localStorage.getItem('javascript.app.' + this.state.settings.oid) || ''),\n simulateAck: window.localStorage.getItem(`javascript.app.${this.state.settings.oid}_ack`) === 'true'\n });\n setTimeout(() => this.inputRef.current?.focus(), 200);\n }}>{I18n.t('Simulate')}</Button>\n <Dialog\n open={!!this.state.openSimulate}\n TransitionComponent={Transition}\n keepMounted\n onClose={() => this.setState({openSimulate: false})}\n aria-labelledby=\"simulate-dialog-slide-title\"\n aria-describedby=\"simulate-dialog-slide-description\"\n >\n <DialogTitle id=\"simulate-dialog-slide-title\">{I18n.t('Trigger with value')}</DialogTitle>\n <DialogContent>\n {this.state.settings.oidType === 'boolean' ?\n <FormControlLabel\n control={<Switch\n inputRef={this.inputRef}\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={!!this.state.simulateValue}\n onChange={e => this.setState({simulateValue: e.target.checked})}\n />}\n label={I18n.t('Value')}\n />\n : <TextField\n variant=\"standard\"\n inputRef={this.inputRef}\n label={I18n.t('Value')}\n fullWidth={true}\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={this.state.simulateValue}\n onChange={e => this.setState({simulateValue: e.target.value})}\n />\n }\n <br/>\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.simulateAck}\n onChange={e => this.setState({simulateAck: e.target.checked})}\n color=\"primary\"\n />\n }\n label={I18n.t('Ack')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.onWriteValue()}\n color=\"primary\">\n <IconCheck/>{I18n.t('Write')}\n </Button>\n <Button color=\"grey\"\n variant=\"contained\"\n onClick={() => this.setState({openSimulate: false})}\n >\n <IconCancel/>{I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </>;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: ''\n },\n {\n nameRender: 'renderWriteState',\n }\n ]\n }, () => {\n super.onTagChange();\n });\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'State',\n id: 'TriggerState',\n icon: 'FlashOn',\n tagCardArray: ['on change', 'on update'],\n title: 'Triggers the rule on update or change of some state' // translate\n }\n }\n\n getData() {\n return TriggerState.getStaticData();\n }\n}\nexport default withStyles(styles)(TriggerState);\n","import React from 'react';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\n\nimport GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport HysteresisImage from '../../../assets/hysteresis.png';\n\nconst HYSTERESIS = `function __hysteresis(val, limit, state, hist, comp) {\n let cond1, cond2;\n if (comp === '>') {\n cond1 = val > limit + hist;\n cond2 = val <= limit - hist;\n } else if (comp === '<') {\n cond1 = val < limit - hist;\n cond2 = val >= limit + hist;\n } else if (comp === '>=') {\n cond1 = val >= limit + hist;\n cond2 = val < limit - hist;\n } else if (comp === '<=') {\n cond1 = val <= limit - hist;\n cond2 = val > limit + hist;\n } else if (comp === '=') {\n cond1 = val <= limit + hist && val > limit - hist;\n cond2 = val > limit + hist || val <= limit - hist;\n } else if (comp === '<>') {\n cond1 = val > limit + hist || val <= limit - hist;\n cond2 = val <= limit + hist && val > limit - hist;\n }\n \n if (!state && cond1) {\n return true;\n } else if (state && cond2) {\n return false;\n } else {\n return state;\n }\n}`;\n\nclass ConditionState extends GenericBlock {\n constructor(props) {\n super(props, ConditionState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (value === null || value === undefined) {\n value = false;\n }\n let debugValue = '';\n\n let result;\n if (config.tagCard === '()') {\n context.prelines = context.prelines || [];\n !context.prelines.find(item => item !== HYSTERESIS) && context.prelines.push(HYSTERESIS);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (value === '') {\n value = 0;\n }\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n }\n } else\n if (config.tagCard !== 'includes') {\n const compare = config.tagCard === '=' ? '==' : (config.tagCard === '<>' ? '!=' : config.tagCard);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n }\n } else {\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `obj.state.val.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id}.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n }\n }\n context.conditionsVars.push(`const subCondVar${config._id} = ${debugValue};`);\n context.conditionsVars.push(`const subCond${config._id} = ${result};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}, value: subCondVar${config._id}, compareWith: ${value}});`);\n return 'subCond' + config._id;\n }\n\n renderDebug(debugMessage) {\n const condition = this.state.settings.tagCard;\n if (condition === '()') {\n // TODO\n } else {\n return debugMessage.data.result.toString().toUpperCase() + ' [' + debugMessage.data.value + ' ' + condition + ' ' + debugMessage.data.compareWith + ']';\n }\n\n return I18n.t('Triggered');\n }\n\n onShowHelp = () => this.setState({showHysteresisHelp: true});\n\n _setInputs(useTrigger, tagCard, oidType, oidUnit, oidStates) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n tagCard = tagCard || this.state.settings.tagCard;\n oidType = oidType || this.state.settings.oidType;\n oidUnit = oidUnit || this.state.settings.oidUnit;\n oidStates = oidStates || this.state.settings.oidStates;\n\n if (isAllTriggersOnState && useTrigger && this.props.userRules?.triggers?.length === 1) {\n oidType = this.props.userRules.triggers[0].oidType;\n oidUnit = this.props.userRules.triggers[0].oidUnit;\n oidStates = this.props.userRules.triggers[0].oidStates;\n }\n\n const _tagCardArray = ConditionState.getStaticData().tagCardArray;\n const tag = _tagCardArray.find(item => item.title === tagCard);\n let tagCardArray;\n let options = null;\n\n if (oidType === 'number') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis'\n }\n ];\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n }\n } else if (oidType === 'boolean') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ];\n options = [\n {title: 'false', value: false},\n {title: 'true', value: true},\n ];\n } else {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes'\n }\n ];\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n }\n }\n\n let settings = null;\n if (!tagCardArray.find(item => item.title === tagCard)) {\n tagCard = tagCardArray[0].title;\n settings = settings || {...this.state.settings};\n settings.tagCard = tagCard;\n }\n\n let inputs;\n let renderText = {\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value',\n frontText: tagCard === '()' ? 'Limit' : (tag?.text || 'compare with'),\n doNotTranslateBack: true,\n backText: oidUnit\n };\n\n if (options) {\n renderText = {\n nameRender: 'renderSelect',\n defaultValue: options[0].value,\n options,\n attr: 'value',\n frontText: tag?.text || 'compare with',\n doNotTranslateBack: true,\n backText: oidUnit\n };\n if (!options.find(item => item.value === this.state.settings.value)) {\n settings = settings || {...this.state.settings};\n settings.value = options[0].value;\n }\n if (options.length <= 2) {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ];\n }\n }\n\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n renderText,\n ];\n } else if (isAllTriggersOnState) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n },\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n }\n\n if (tagCard === '()') {\n inputs.splice(1, 0, {\n nameRender: 'renderDialog',\n icon: 'HelpOutline',\n frontText: 'Explanation',\n onShowDialog: this.onShowHelp,\n });\n inputs.splice(2, 0, {\n nameRender: 'renderSelect',\n attr: 'histComp',\n defaultValue: '>',\n frontText: 'Condition',\n doNotTranslate: true,\n options: [\n {title: '>', value: '>'},\n {title: '>=', value: '>='},\n {title: '<', value: '<'},\n {title: '<=', value: '<='},\n {title: '=', value: '='},\n {title: '<>', value: '<>'},\n ]\n });\n inputs.push({\n frontText: 'Δ',\n doNotTranslate: true,\n nameRender: 'renderNumber',\n noHelperText: true,\n attr: 'hist',\n defaultValue: 1,\n doNotTranslateBack: true,\n backText: oidUnit\n });\n }\n\n const state = {\n iconTag: true,\n tagCardArray,\n inputs\n };\n\n this.setState(state,() =>\n super.onTagChange(null, () => {\n if (settings) {\n this.setState({settings});\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n if (typeof value === 'object') {\n this._setInputs(value.useTrigger, value.tagCard, value.oidType, value.states);\n } else {\n if (attr === 'useTrigger') {\n this._setInputs(value);\n } else if (attr === 'oidType') {\n this._setInputs(value, undefined, value);\n } else if (attr === 'oidUnit') {\n this._setInputs(value, undefined, undefined, value);\n } else if (attr === 'oidStates') {\n this._setInputs(value, undefined, undefined, undefined, value);\n }\n }\n }\n\n onUpdate() {\n this._setInputs(this.state.settings.useTrigger);\n }\n\n onTagChange(tagCard) {\n this._setInputs(this.state.settings.useTrigger, tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'State condition',\n id: 'ConditionState',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes'\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis'\n }\n ],\n title: 'Compares the state value with user defined value'\n }\n }\n\n getData() {\n return ConditionState.getStaticData();\n }\n\n renderSpecific() {\n if (this.state.showHysteresisHelp) {\n return <Dialog\n open={true}\n maxWidth=\"md\"\n onClose={() => this.setState({showHysteresisHelp: false})}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <img src={HysteresisImage} alt=\"Hysteresis\"/>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.setState({showHysteresisHelp: false})} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n </Dialog>;\n } else {\n return null;\n }\n }\n}\n\nexport default ConditionState;\n","import GenericBlock from '../GenericBlock';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31 // 12\n];\n\nclass ConditionTime extends GenericBlock {\n constructor(props) {\n super(props, ConditionTime.getStaticData());\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let cond;\n\n if (config.withDate) {\n let [month, date] = (config.date || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n if (date && month) {\n cond = `formatDate(Date.now(), 'MM.DD-hh:mm') ${compare} \"${config.date}-${config.time}\"`;\n } else if (date === 0 && month) {\n cond = `formatDate(Date.now(), 'MM-hh:mm') ${compare} \"${month.toString().padStart(2, '0')}-${config.time}\"`;\n } else if (month === 0 && date) {\n cond = `formatDate(Date.now(), 'DD-hh:mm') ${compare} \"${date.toString().padStart(2, '0')}-${config.time}\"`;\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}});`);\n return 'subCond' + config._id;\n }\n\n _setInputs(tagCard, withDate, ) {\n withDate = withDate === undefined ? this.state.settings.withDate : withDate;\n tagCard = tagCard || this.state.settings.tagCard;\n const tagCardArray = ConditionTime.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === tagCard);\n const inputs = [\n {\n nameRender: 'renderNameText',\n attr: 'interval',\n defaultValue: 'Actual time of day',\n },\n {\n frontText: tag?.text || tagCard,\n nameRender: 'renderTime',\n attr: 'time',\n defaultValue: '12:00',\n },\n {\n frontText: 'with date',\n nameRender: 'renderCheckbox',\n attr: 'withDate',\n defaultValue: false,\n }\n ];\n if (withDate) {\n inputs.push({\n nameRender: 'renderDate',\n attr: 'date',\n defaultValue: '01.01',\n });\n }\n this.setState({\n inputs,\n iconTag:true\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'withDate') {\n this._setInputs(undefined, value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs(tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Time condition',\n id: 'ConditionTime',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ],\n title: 'Compares current time with the user specific time'\n }\n }\n\n getData() {\n return ConditionTime.getStaticData();\n }\n}\n\nexport default ConditionTime;\n","import GenericBlock from '../GenericBlock';\nimport SunCalc from 'suncalc2';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ConditionAstrological extends GenericBlock {\n constructor(props) {\n super(props, ConditionAstrological.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let offset;\n if (config.offset) {\n offset = parseInt(config.offsetValue, 10) || 0;\n }\n const cond = `formatDate(Date.now(), 'hh:mm') ${compare} formatDate(getAstroDate(\"${config.astro}\"${offset ? `, undefined, ${offset}` : ''}), 'hh:mm')`;\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: ${cond}});`);\n return cond;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude\n }\n }\n });\n }\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${ConditionAstrological._time2String(sunValue[name])}]`,\n order: ConditionAstrological._time2String(sunValue[name])\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n const tagCardArray = ConditionAstrological.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === this.state.settings.tagCard);\n\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(${I18n.t(tag.text)} ${ConditionAstrological._time2String(astroTime)})`;\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text'\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes',\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n }\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text'\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n }\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n onTagChange(tagCard) {\n this._setAstro();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Astrological',\n id: 'ConditionAstrological',\n icon: 'Brightness3',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal to'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal to'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ],\n title: 'Compares current time with astrological event'\n }\n }\n\n getData() {\n return ConditionAstrological.getStaticData();\n }\n}\n\nexport default ConditionAstrological;\n","import GenericBlock from '../GenericBlock';\nimport withStyles from '@mui/styles/withStyles';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323'\n },\n valueNotAck: {\n color: '#12ac15'\n },\n});\n\nclass ActionSetState extends GenericBlock {\n constructor(props) {\n super(props, ActionSetState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n return `// set state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} \n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetState.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const {oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep} = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n type = 'select';\n }\n }\n\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = {value: oidMax === undefined ? 0 : oidMax};\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value'\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = {value: oidMax};\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = {value: options[0].value};\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value'\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = {value: false};\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = {value: true};\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = {value: '#FFFFFF'};\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value'\n }];\n break;\n }\n\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n return {inputs, newSettings: settings};\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const {inputs, newSettings} = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set state action',\n id: 'ActionSetState',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSetState.getStaticData();\n }\n}\n\nexport default withStyles(styles)(ActionSetState);\n","import GenericBlock from '../GenericBlock';\n\nclass ActionExec extends GenericBlock {\n constructor(props) {\n super(props, ActionExec.getStaticData());\n }\n\n static compile(config, context) {\n return `// exec \"${config.exec}\"\n\\t\\tconst subActionVar${config._id} = \"${(config.exec || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {exec: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return 'Exec: ' + debugMessage.data.exec;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'exec',\n defaultValue: 'ls /opt/iobroker',\n nameBlock: 'Shell command'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Exec',\n id: 'ActionExec',\n icon: 'Apps',\n title: 'Executes some shell command',\n helpDialog: 'You can use %s in the command to use current trigger value or %id to use the triggered object ID'\n }\n }\n\n getData() {\n return ActionExec.getStaticData();\n }\n}\n\nexport default ActionExec;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionHTTPCall extends GenericBlock {\n constructor(props) {\n super(props, ActionHTTPCall.getStaticData());\n }\n\n static compile(config, context) {\n return `// HTTP request ${config.url}\n\\t\\tconst subActionVar${config._id} = \"${(config.url || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {url: subActionVar${config._id}});\n\\t\\trequest(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return 'URL: ' + debugMessage.data.url;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'url',\n defaultValue: 'http://mydevice.com?...',\n nameBlock: 'URL'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'HTTP Call',\n id: 'ActionHTTPCall',\n icon: 'Language',\n title: 'Make a HTTP get request',\n helpDialog: 'You can use %s in the URL to use current trigger value or %id to use the triggered object ID'\n }\n }\n\n getData() {\n return ActionHTTPCall.getStaticData();\n }\n}\n\nexport default ActionHTTPCall;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionPrintText extends GenericBlock {\n constructor(props) {\n super(props, ActionPrintText.getStaticData());\n }\n\n static compile(config, context) {\n return `// Log ${config.text}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Log: %s', debugMessage.data.text);\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'My device triggered',\n nameBlock: 'Log text'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Log text',\n id: 'ActionPrintText',\n icon: 'Subject',\n title: 'Print some text in log',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPrintText.getStaticData();\n }\n}\n\nexport default ActionPrintText;\n","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\n\nclass ActionPause extends GenericBlock {\n constructor(props) {\n super(props, ActionPause.getStaticData());\n }\n\n static compile(config, context) {\n const ms = config.unit === 'ms' ? 1 : (config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000))\n\n return `// pause for ${ms}ms\n\\t\\t_sendToFrontEnd(${config._id}, {paused: true});\\n\n\\t\\tawait wait(${config.pause} * ${ms});\\n\n\\t\\t_sendToFrontEnd(${config._id}, {paused: false});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Paused: %s', debugMessage.data.paused);\n }\n\n _getOptions(pause) {\n pause = pause === undefined ? this.state.settings.pause : pause;\n if (pause === 1 || pause === '1') {\n return [\n { value: 'ms', title: 'millisecond' },\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' }\n ];\n } else {\n return [\n { value: 'ms', title: 'milliseconds' },\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' }\n ];\n }\n }\n\n _setInputs(pause) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n attr: 'pause',\n defaultValue: 100,\n noHelperText: true,\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 'ms',\n options: this._getOptions(pause)\n },\n ]\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'pause') {\n this._setInputs(value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pause',\n id: 'ActionPause',\n icon: 'Pause',\n title: 'Make a pause between actions'\n }\n }\n\n getData() {\n return ActionPause.getStaticData();\n }\n}\n\nexport default ActionPause;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionFunction extends GenericBlock {\n constructor(props) {\n super(props, ActionFunction.getStaticData());\n }\n\n static compile(config, context) {\n const lines = (config.func || '')\n .split('\\n')\n .map((line, i) => ' ' + line);\n\n lines.unshift(`\\t\\t_sendToFrontEnd(${config._id}, {func: 'executed'});`);\n lines.unshift(`// user function`);\n\n return lines.join('\\n');\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Function: executed');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'func',\n noTextEdit: true,\n defaultValue: 'console.log(\"Test\")',\n nameBlock: 'Function'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'User function',\n id: 'ActionFunction',\n icon: 'Functions',\n title: 'Write your own code',\n helpDialog: 'This is advances option. You can write your own code here and it will be executed on trigger'\n }\n }\n\n getData() {\n return ActionFunction.getStaticData();\n }\n}\n\nexport default ActionFunction;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionSetStateDelayed extends GenericBlock {\n constructor(props) {\n super(props, ActionSetStateDelayed.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n\n return `// set delayed state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} with delay of ${config.delay}ms\n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tsetStateDelayed(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'}, ${parseInt(config.delay, 10)}, ${config.clearRunning ? 'true' : 'false'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetStateDelayed.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const {oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep} = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n type = 'select';\n }\n }\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = {value: oidMax === undefined ? 0 : oidMax};\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value'\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = {value: oidMax};\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = {value: options[0].value};\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value'\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = {value: false};\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = {value: true};\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = {value: '#FFFFFF'};\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value'\n }];\n break;\n }\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n inputs.push({\n backText: 'ms',\n frontText: 'Delay',\n nameRender: 'renderNumber',\n defaultValue: '1000',\n noHelperText: true,\n attr: 'delay'\n });\n inputs.push({\n backText: 'clear running',\n nameRender: 'renderCheckbox',\n defaultValue: true,\n attr: 'clearRunning'\n })\n\n return {inputs, newSettings: settings};\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const {inputs, newSettings} = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set with delay',\n id: 'ActionSetStateDelayed',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state with delay',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSetStateDelayed.getStaticData();\n }\n}\n\nexport default ActionSetStateDelayed;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionOperateStates extends GenericBlock {\n constructor(props) {\n super(props, ActionOperateStates.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let oid1 = `const val2_${config._id} = (await getStateAsync(\"${config.oid1}\")).val;`;\n let oid2 = `const val1_${config._id} = (await getStateAsync(\"${config.oid2}\")).val;`;\n\n return `// ${config.oid1} ${config.operation} ${config.oid2} => ${config.oidResult}\n\\t\\t ${oid1}\n\\t\\t ${oid2}\n\\t\\t_sendToFrontEnd(${config._id}, {val: val1_${config._id} ${config.operation} val2_${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oidResult}\", val1_${config._id} ${config.operation} val2_${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionOperateStates.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n const inputs = [];\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID1',\n attr: 'oid1',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderSelect',\n //frontText: 'with',\n options: [\n {value: '+', title: '+'},\n {value: '-', title: '-'},\n {value: '*', title: '*'},\n {value: '/', title: '/'},\n ],\n doNotTranslate: true,\n defaultValue: '+',\n attr: 'operation'\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID2',\n attr: 'oid2',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderNameText',\n defaultValue: 'store in',\n attr: 'textEqual',\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n attr: 'oidResult',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n this.props.onChange(settings);\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Operate two states',\n id: 'ActionOperateStates',\n icon: 'AddBox',\n tagCardArray: ['control', 'update'],\n title: 'Operations with two states',\n }\n }\n\n getData() {\n return ActionOperateStates.getStaticData();\n }\n}\n\nexport default ActionOperateStates;\n","import TriggerScriptSave from '../Blocks/TriggerScriptSave';\nimport TriggerSchedule from '../Blocks/TriggerSchedule';\nimport TriggerState from '../Blocks/TriggerState';\nimport ConditionState from '../Blocks/ConditionState';\nimport ConditionTime from '../Blocks/ConditionTime';\nimport ConditionAstrological from '../Blocks/ConditionAstrological';\nimport ActionSetState from '../Blocks/ActionSetState';\nimport ActionExec from '../Blocks/ActionExec';\nimport ActionHTTPCall from '../Blocks/ActionHTTPCall';\nimport ActionPrintText from '../Blocks/ActionPrintText';\nimport ActionPause from '../Blocks/ActionPause';\nimport ActionFunction from '../Blocks/ActionFunction';\nimport ActionSetStateDelayed from '../Blocks/ActionSetStateDelayed';\nimport ActionOperateStates from '../Blocks/ActionOperateStates';\n\nconst StandardBlocks = [\n TriggerSchedule,\n TriggerScriptSave,\n TriggerState,\n ConditionState,\n ConditionTime,\n ConditionAstrological,\n ActionSetState,\n ActionExec,\n ActionHTTPCall,\n ActionPrintText,\n ActionPause,\n ActionFunction,\n ActionSetStateDelayed,\n ActionOperateStates,\n];\n\nexport default StandardBlocks;","import React, {\n createContext,\n useEffect,\n useState,\n} from 'react';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ActionSayText from '../Blocks/ActionSayText';\nimport ActionSendEmail from '../Blocks/ActionSendEmail';\nimport ActionTelegram from '../Blocks/ActionTelegram';\nimport ActionPushover from '../Blocks/ActionPushover';\nimport ActionWhatsappcmb from '../Blocks/ActionWhatsappcmb';\nimport ActionPushsafer from '../Blocks/ActionPushsafer';\nimport StandardBlocks from '../StandardBlocks';\n\nconst ADAPTERS = {\n telegram: ActionTelegram,\n email: ActionSendEmail,\n sayit: ActionSayText,\n pushover: ActionPushover,\n 'whatsapp-cmb': ActionWhatsappcmb,\n pushsafer: ActionPushsafer,\n};\n\nexport const ContextWrapperCreate = createContext();\n\nconst getOrLoadRemote = (remote, shareScope, remoteFallbackUrl = undefined) =>\n new Promise((resolve, reject) => {\n // check if remote exists on window\n if (!window[remote]) {\n // search dom to see if remote tag exists, but might still be loading (async)\n const existingRemote = document.querySelector(`[data-webpack=\"${remote}\"]`);\n // when remote is loaded...\n const onload = async () => {\n // check if it was initialized\n if (!window[remote]) {\n return reject(`Cannot load Remote \"${remote}\" to inject`);\n }\n if (!window[remote].__initialized) {\n // if share scope doesn't exist (like in webpack 4) then expect shareScope to be a manual object\n if (typeof __webpack_share_scopes__ === 'undefined') {\n // use default share scope object passed in manually\n await window[remote].init(shareScope.default);\n } else {\n // otherwise, init share scope as usual\n // eslint-disable-next-line\n await window[remote].init(__webpack_share_scopes__[shareScope]);\n }\n // mark remote as initialized\n window[remote].__initialized = true;\n }\n // resolve promise so marking remote as loaded\n resolve();\n };\n if (existingRemote) {\n // if existing remote but not loaded, hook into its onload and wait for it to be ready\n existingRemote.onload = onload;\n existingRemote.onerror = reject;\n // check if remote fallback exists as param passed to function\n // TODO: should scan public config for a matching key if no override exists\n } else if (remoteFallbackUrl) {\n // inject remote if a fallback exists and call the same onload function\n const d = document;\n const script = d.createElement('script');\n script.type = 'text/javascript';\n // mark as data-webpack so runtime can track it internally\n script.setAttribute('data-webpack', `${remote}`);\n script.async = true;\n script.onerror = reject;\n script.onload = onload;\n script.src = remoteFallbackUrl;\n d.getElementsByTagName('head')[0].appendChild(script);\n } else {\n // no remote and no fallback exist, reject\n reject(`Cannot Find Remote ${remote} to inject`);\n }\n } else {\n // remote already instantiated, resolve\n resolve();\n }\n });\n\nconst loadComponent = (remote, sharedScope, module, url) => async () => {\n await getOrLoadRemote(remote, sharedScope, url);\n const container = window[remote];\n const factory = await container.get(module);\n const Module = factory();\n return Module;\n};\n\nexport const ContextWrapper = ({ children, socket }) => {\n const [blocks, setBlocks] = useState(null);\n const [onUpdate, setOnUpdate] = useState(false);\n const [onDebugMessage, setOnDebugMessage] = useState(false);\n const [enableSimulation, setEnableSimulation] = useState(false);\n\n useEffect(() => {\n onUpdate && setOnUpdate(false);\n }, [onUpdate]);\n\n useEffect(() => {\n (async () => {\n const instances = await socket.getAdapterInstances();\n const adapters = Object.keys(ADAPTERS).filter(adapter =>\n instances.find(obj => obj?.common?.name === adapter));\n\n const adapterDynamicBlocksArray = [];\n\n // find all adapters, that have custom rule blocks\n const dynamicRules = instances.filter(obj => obj.common.javascriptRules);\n\n const alreadyCreated = [];\n for (let k in dynamicRules) {\n const obj = dynamicRules[k];\n if (alreadyCreated.includes(obj.common.name)) {\n continue;\n }\n\n let url;\n if (obj.common.javascriptRules.url.startsWith('http:') || obj.common.javascriptRules.url.startsWith('https:')) {\n url = obj.common.javascriptRules.url;\n } else if (obj.common.javascriptRules.url.startsWith('./')) {\n url = `${window.location.protocol}//${window.location.host}${obj.common.javascriptRules.url.replace(/^\\./, '')}`;\n } else {\n url = `${window.location.protocol}//${window.location.host}/adapter/${obj.common.name}/${obj.common.javascriptRules.url}`;\n }\n\n if (obj.common.javascriptRules.i18n === true) {\n // load i18n from files\n const pos = url.lastIndexOf('/');\n let i18nURL;\n if (pos !== -1) {\n i18nURL = url.substring(0, pos);\n } else {\n i18nURL = url;\n }\n const lang = I18n.getLanguage();\n const file = `${i18nURL}/i18n/${lang}.json`;\n\n await fetch(file)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => {\n if (lang !== 'en') {\n // try to load english\n return fetch(`${i18nURL}/i18n/en.json`)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => console.error(`Cannot load i18n \"${file}\": ${error}`))\n } else {\n console.log(`Cannot load i18n \"${file}\": ${error}`)\n }\n });\n } else if (obj.common.javascriptRules.i18n && typeof obj.common.javascriptRules.i18n === 'object') {\n try {\n I18n.extendTranslations(obj.common.javascriptRules.i18n);\n } catch (error) {\n console.error(`Cannot import i18n: ${error}`);\n }\n }\n\n try {\n const Component = (await loadComponent(obj.common.javascriptRules.name, 'default', `./${obj.common.javascriptRules.name}`, url)()).default;\n\n if (Component) {\n adapterDynamicBlocksArray.push(Component);\n alreadyCreated.push(obj.common.name);\n ADAPTERS[obj.common.name] = null;\n }\n } catch (e) {\n console.error(`Cannot load component: ${e}`);\n }\n }\n\n const adapterBlocksArray = adapters.filter(adapter => ADAPTERS[adapter]).map(adapter => ADAPTERS[adapter]);\n\n setBlocks([...StandardBlocks, ...adapterBlocksArray, ...adapterDynamicBlocksArray]);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <ContextWrapperCreate.Provider value={{\n blocks,\n socket,\n onUpdate,\n setOnUpdate,\n onDebugMessage,\n setOnDebugMessage,\n enableSimulation,\n setEnableSimulation\n }}>\n {children}\n </ContextWrapperCreate.Provider>;\n};","export function findElement(settings, userRules, additionalParameter) {\n const { _id, acceptedBy } = settings;\n let block;\n\n if (!acceptedBy || !userRules[acceptedBy]) {\n console.warn('Cannot find ' + acceptedBy);\n return userRules;\n }\n\n switch (acceptedBy) {\n case 'actions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n case 'conditions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n default:\n block = userRules[acceptedBy].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][userRules[acceptedBy].indexOf(block)] = settings;\n }\n return userRules;\n }\n}","import React, {memo, useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport { findElement } from '../../helpers/findElement';\nimport GenericBlock from '../GenericBlock';\n\n// @iobroker/javascript-block\n\nconst CurrentItem = memo(props => {\n const { setUserRules, userRules, _id, id, blockValue, active, acceptedBy, isTourOpen, setTourStep, tourStep } = props;\n const [anchorEl, setAnchorEl] = useState(null);\n const { blocks, socket, onUpdate, setOnUpdate, onDebugMessage, enableSimulation } = useContext(ContextWrapperCreate);\n\n useEffect(() => {\n console.log('New message !!' + JSON.stringify(onDebugMessage));\n }, [onDebugMessage]);\n\n\n const findElementBlocks = useCallback(id => blocks.find(el => {\n const staticData = el.getStaticData();\n return staticData.id === id;\n }), [blocks]);\n\n const onChange = useCallback(settings => {\n let newUserRules = findElement(settings, userRules, blockValue);\n newUserRules && setUserRules(newUserRules);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules]);\n\n const handlePopoverOpen = event =>\n event.currentTarget !== anchorEl && setAnchorEl(event.currentTarget);\n\n const handlePopoverClose = () =>\n setAnchorEl(null);\n\n const blockInput = useMemo(() => {\n const CustomBlock = findElementBlocks(id) || GenericBlock;\n return <CustomBlock\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n notFound={!findElementBlocks(id)}\n {...props}\n onUpdate={onUpdate}\n setOnUpdate={setOnUpdate}\n enableSimulation={enableSimulation}\n onDebugMessage={onDebugMessage}\n onChange={onChange}\n className={null}\n socket={socket}\n />;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules, onUpdate, onDebugMessage, enableSimulation]);\n\n const [isDelete, setIsDelete] = useState(false);\n\n return <div\n onMouseMove={handlePopoverOpen}\n onMouseEnter={handlePopoverOpen}\n onMouseLeave={handlePopoverClose}\n onMouseDown={el => {\n if (el.ctrlKey) {\n let newItem;\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n if (blockValue !== \"triggers\") {\n newItem = newUserRules[acceptedBy][blockValue].find(el => el._id === _id);\n } else {\n newItem = newUserRules[acceptedBy].find(el => el._id === _id);\n }\n if (blockValue !== \"triggers\") {\n newUserRules[acceptedBy][blockValue].splice(newUserRules[acceptedBy][blockValue].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n } else {\n newUserRules[acceptedBy].splice(newUserRules[acceptedBy].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n }\n setUserRules(newUserRules);\n }\n }}\n id=\"height\"\n style={active ? { width: document.getElementById('width').clientWidth - 70 } : null}\n className={`${cls.cardStyle} ${active ? cls.cardStyleActive : null} ${isDelete ? cls.isDelete : null}`}>\n <div className={cls.drag_mobile} />\n {blockInput}\n {setUserRules && <div className={cls.controlMenu} style={Boolean(anchorEl) ? { opacity: 1 } : { opacity: 0 }}>\n <div onClick={e => {\n let newItemsSwitches = deepCopy(acceptedBy, userRules, blockValue);\n newItemsSwitches = filterElement(acceptedBy, newItemsSwitches, blockValue, _id);\n setIsDelete(true);\n setTimeout(() => {\n if (acceptedBy === 'triggers') {\n setOnUpdate(true);\n }\n setUserRules(newItemsSwitches);\n }, 300);\n }} className={cls.closeBtn} />\n </div>}\n </div>;\n});\n\nCurrentItem.defaultProps = {\n active: false\n};\n\nCurrentItem.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\n\nexport default CurrentItem;","import React from 'react';\nimport { useDragLayer } from 'react-dnd';\nimport CardMenu from '../CardMenu';\nimport CurrentItem from '../CurrentItem';\n\nconst layerStyles = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%'\n};\n\nconst snapToGrid = (x, y) => {\n const snappedX = Math.round(x / 32) * 32\n const snappedY = Math.round(y / 32) * 32\n return [snappedX, snappedY]\n}\n\nconst getItemStyles = (initialOffset, currentOffset, isSnapToGrid) => {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none'\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform\n };\n}\n\nexport const CustomDragLayer = props => {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n targetIds: monitor.getTargetIds()\n }));\n\n const renderItem = () => {\n switch (itemType) {\n case 'box':\n return targetIds.length ? <CurrentItem active {...item} allBlocks={props.allBlocks}/> :\n <CardMenu active {...item} socket={props.socket}/>;\n default:\n return null;\n }\n }\n\n if (!isDragging) {\n return null;\n }\n\n return <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>\n {renderItem()}\n </div>\n </div>;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"border\":\"style_border__Zz9Km\",\"emptyBlockStyle\":\"style_emptyBlockStyle__sE5FO\",\"emptyBlock\":\"style_emptyBlock__dMBHS\",\"marginTop\":\"style_marginTop__uK9O+\",\"selectOnChange\":\"style_selectOnChange__6r-uo\",\"selectOnChangeHelp\":\"style_selectOnChangeHelp__nP0g8\",\"selectOnChangeHelpIcon\":\"style_selectOnChangeHelpIcon__r7G9x\",\"emptyBlockNone\":\"style_emptyBlockNone__DS6GG\",\"mainBlockItemRules\":\"style_mainBlockItemRules__JYCaQ\",\"nameBlockItems\":\"style_nameBlockItems__sNeEH\",\"contentBlockItem\":\"style_contentBlockItem__SQejW\",\"wrapperMargin\":\"style_wrapperMargin__v8PwE\",\"contentHeightOn\":\"style_contentHeightOn__T3ZZ-\",\"heightBlock\":\"style_heightBlock__B96p1\",\"contentHeightOff\":\"style_contentHeightOff__eaSlV\",\"cardAdd\":\"style_cardAdd__SNY3P\",\"blockCardAdd\":\"style_blockCardAdd__xHdXK\",\"addClassOverflow\":\"style_addClassOverflow__bcVva\",\"addClassHeight\":\"style_addClassHeight__GJALi\"};","import * as React from 'react';\n\nexport function useStateLocal(events, nameEvents) {\n const [state, setState] = React.useState(\n localStorage.getItem(nameEvents) ? JSON.parse(localStorage.getItem(nameEvents)) : events\n );\n\n const eventsToInstall = (newHeadCells) => {\n localStorage.setItem(nameEvents, JSON.stringify(newHeadCells));\n setState(newHeadCells);\n };\n return [state, eventsToInstall, localStorage.getItem(nameEvents) ? true : false];\n}\n","import _ from \"lodash\";\n\nconst funcSet = _.throttle(\n (setCards, userRules) => setCards(userRules)\n , 0);\n\nconst moveCard = (\n id,\n atIndex,\n cards,\n setCards,\n userRules,\n acceptedBy,\n additionally,\n hoverClientY,\n hoverMiddleY) => {\n\n const { card, index } = findCard(id, cards);\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = _.clone(cards);\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n const newTriggers = _.clone(userRules);\n switch (acceptedBy) {\n case 'actions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n case 'conditions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n default:\n newTriggers[acceptedBy] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n }\n }\n};\nconst findCard = (id, cards) => {\n const card = cards.find((c) => c._id === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nexport { moveCard, findCard };","// extracted by mini-css-extract-plugin\nexport default {\"drag\":\"style_drag__Gq61w\",\"root\":\"style_root__nSnEB\"};","import React, { useContext, useEffect, useRef } from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { findCard, moveCard } from '../../helpers/cardSort';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport cls from './style.module.scss';\n\nconst DragWrapper = ({ typeBlocks, allProperties, id, isActive, setUserRules, userRules, children, _id, blockValue }) => {\n const { setOnUpdate } = useContext(ContextWrapperCreate);\n const [{ opacity }, drag, preview] = useDrag({\n type: 'box',\n item: () => ({ ...allProperties, id, isActive, _id }),\n end: (item, monitor) => {\n let { acceptedBy } = item;\n let dropResult = monitor.getDropResult();\n let newUserRules;\n if (!dropResult) {\n if (typeof _id === 'number' && !monitor.getTargetIds().length) {\n newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n setUserRules(newUserRules);\n }\n return null;\n }\n if (dropResult.blockValue !== blockValue) {\n let idNumber = typeof _id === 'number' ? _id : Date.now();\n newUserRules = deepCopy(acceptedBy, userRules, dropResult.blockValue);\n const newItem = { id: item.id, acceptedBy: item.acceptedBy }\n switch (acceptedBy) {\n case 'actions':\n if (blockValue) {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n case 'conditions':\n if (typeof blockValue === 'number') {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n default:\n setOnUpdate(true);\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n }\n }\n },\n collect: monitor => ({\n opacity: monitor.isDragging() ? 0.4 : 1,\n isDragging: monitor.isDragging(),\n }),\n });\n const ref = useRef(null)\n const [, drop] = useDrop({\n accept: 'box',\n canDrop: () => false,\n hover({ _id: draggedId, acceptedBy }, monitor) {\n if (!ref.current) {\n return;\n }\n if (typeBlocks !== acceptedBy) {\n return\n }\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n if (!!_id && draggedId !== _id) {\n switch (acceptedBy) {\n case 'actions':\n if (blockValue === 'then' || blockValue === 'else') {\n const { index: overIndexActions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexActions !== draggedId) {\n moveCard(draggedId,\n overIndexActions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n case 'conditions':\n if (typeof blockValue === 'number') {\n const { index: overIndexConditions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexConditions !== draggedId) {\n moveCard(draggedId,\n overIndexConditions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n default:\n const { index: overIndex } = findCard(_id, userRules[acceptedBy]);\n if (overIndex !== draggedId) {\n moveCard(draggedId,\n overIndex,\n userRules[acceptedBy],\n setUserRules,\n userRules,\n acceptedBy,\n null,\n hoverClientY,\n hoverMiddleY\n );\n }\n return;\n }\n }\n }\n });\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n drag(drop(ref));\n const isMobile = window.innerWidth < 600;\n return <div ref={isMobile && _id ? null : ref} className={cls.root} style={{ opacity }}><div className={_id ? cls.drag : null} ref={_id && isMobile ? ref : null} />{children}</div>;\n}\n\nDragWrapper.defaultProps = {\n name: '',\n active: false,\n id: '',\n _id: null\n};\n\nDragWrapper.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default DragWrapper;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DialogHelp = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <div style={{\n fontSize: '1rem',\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: '0.00938em'\n }} >\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus startIcon={<IconOk/>}>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog >;\n\nDialogHelp.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogHelp.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogHelp;","import React from 'react';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\n\nconst DialogCondition = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog>;\n\nDialogCondition.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogCondition.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogCondition;","\nimport React, { Fragment, useEffect, useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { useDrop } from 'react-dnd';\nimport Select from '@mui/material/Select';\nimport MenuItem from '@mui/material/MenuItem';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\nimport { deepCopy } from '../../helpers/deepCopy';\n\nimport CurrentItem from '../CurrentItem';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport DragWrapper from '../DragWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport DialogHelp from './DialogHelp';\nimport DialogCondition from './DialogCondition';\nimport clsx from 'clsx';\n\nconst AdditionallyContentBlockItems = ({ size, itemsSwitchesRender, blockValue, boolean, typeBlock, userRules, setUserRules, animation, setTourStep, tourStep, isTourOpen }) => {\n const [checkItem, setCheckItem] = useState(false);\n const [canDropCheck, setCanDropCheck] = useState(false);\n const [checkId, setCheckId] = useState(false);\n const [hoverBlock, setHoverBlock] = useState('');\n\n const options = useDrop({\n accept: 'box',\n drop: () => ({ blockValue }),\n hover: ({ acceptedBy, _id }, monitor) => {\n setCheckItem(acceptedBy === typeBlock);\n setCheckId(!!_id);\n setHoverBlock(monitor.getHandlerId());\n },\n canDrop: ({ acceptedBy }, monitor) => {\n setCanDropCheck(acceptedBy === typeBlock);\n return acceptedBy === typeBlock;\n },\n collect: monitor => ({\n isOver: monitor.isOver(),\n canDrop: monitor.getItem()?.acceptedBy === typeBlock,\n offset: monitor.getClientOffset(),\n targetId: monitor.targetId\n }),\n });\n\n const [{ canDrop, isOver, offset, targetId }, drop] = options;\n\n useEffect(() => { setHoverBlock('') }, [offset]);\n\n const isActive = canDrop && isOver;\n let backgroundColor = '';\n if (isActive) {\n backgroundColor = checkItem ? '#00fb003d' : '#fb00002e';\n } else if (canDrop) {\n backgroundColor = canDropCheck ? '#00fb003d' : '#fb00002e';\n } else if (offset) {\n backgroundColor = targetId === hoverBlock ? '#fb00002e' : '';\n }\n\n return <div ref={drop} style={{ backgroundColor }} className={`${clsx(cls.contentBlockItem,size && cls.addClassHeight)} ${boolean ? animation ? cls.contentHeightOn : null : cls.contentHeightOff}`}>\n <div className={cls.wrapperMargin}>{itemsSwitchesRender[blockValue]?.map(el => (\n <DragWrapper\n typeBlocks={typeBlock}\n key={el._id}\n {...el}\n blockValue={blockValue}\n allProperties={el}\n userRules={userRules}\n setUserRules={setUserRules}\n >\n <CurrentItem\n {...el}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n settings={el}\n blockValue={blockValue}\n userRules={userRules}\n setUserRules={setUserRules}\n />\n </DragWrapper>))}\n <div\n style={isActive && checkItem && !checkId ? { height: document.getElementById('height') ? document.getElementById('height').clientHeight : 200 } : null}\n className={`${cls.emptyBlockStyle} ${isActive && checkItem && !checkId ? cls.emptyBlock : cls.emptyBlockNone}`}\n />\n </div>\n </div>;\n}\n\nAdditionallyContentBlockItems.defaultProps = {\n children: null,\n boolean: true,\n animation: false\n};\n\nconst ContentBlockItems = ({ size, typeBlock, name, nameAdditionally, additionally, border, userRules, setUserRules, iconName, adapter, socket, setTourStep, tourStep, isTourOpen }) => {\n const [additionallyClickItems, setAdditionallyClickItems, checkLocal] = useStateLocal(typeBlock === 'actions' ? false : [], `additionallyClickItems_${typeBlock}`);\n const [showHelp, setShowHelp] = useState(false);\n const [showConditionDialog, setShowConditionDialog] = useState(false);\n\n useEffect(() => {\n if (typeBlock === 'conditions' && additionallyClickItems.length !== userRules['conditions'].length - 1) {\n let newArray = [];\n userRules['conditions'].forEach((el, idx) => {\n if (idx > 0) {\n newArray.push({\n _id: Date.now(),\n open: true\n });\n }\n });\n setAdditionallyClickItems([...additionallyClickItems, ...newArray]);\n }\n if (typeBlock === 'actions' && !checkLocal && userRules['actions']['else'].length) {\n setAdditionallyClickItems(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [animation, setAnimation] = useState(false);\n\n return <div className={`${clsx(cls.mainBlockItemRules, size && cls.addClassOverflow)} ${border && !size ? cls.border : null}`}>\n <span id='width' className={cls.nameBlockItems}>\n <MaterialDynamicIcon iconName={iconName} className={cls.iconThemCard} adapter={adapter} socket={socket} />{name}\n </span>\n {typeBlock === 'conditions' ?\n <div style={{ width: '100%' }}>\n <Select\n variant=\"standard\"\n className={cls.selectOnChange}\n value={userRules.justCheck || false}\n onChange={e => {\n const _userRules = deepCopy('conditions', userRules);\n _userRules.justCheck = e.target.value;\n setUserRules(_userRules);\n }}\n >\n <MenuItem value={false}>{I18n.t('on condition change')}</MenuItem>\n <MenuItem value={true}>{I18n.t('just check')}</MenuItem>\n </Select>\n <IconButton size=\"small\" title={I18n.t('Explanation')} className={cls.selectOnChangeHelp} onClick={() => setShowHelp(true)}>\n <IconHelp className={cls.selectOnChangeHelpIcon} />\n </IconButton>\n </div>\n : null}\n <AdditionallyContentBlockItems\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n blockValue={typeBlock === 'actions' ? 'then' : typeBlock === 'conditions' ? 0 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n userRules={userRules}\n size={size}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n />\n {additionally && [...Array(typeBlock === 'actions' ? 1 : userRules.conditions.length - 1)].map((e, index) => {\n const booleanAdditionally = (value = index) => Boolean(typeBlock === 'actions' ? additionallyClickItems : additionallyClickItems.find((el, idx) => idx === value && el.open));\n return <Fragment key={`${index}_block_${typeBlock}`}>\n <div\n onClick={() => {\n if (typeBlock === 'actions') {\n setAdditionallyClickItems(!additionallyClickItems);\n return null;\n }\n let newAdditionally = JSON.parse(JSON.stringify(additionallyClickItems));\n if (userRules['conditions'][index + 1].length) {\n newAdditionally[index].open = !newAdditionally[index].open\n setAdditionallyClickItems(newAdditionally);\n return null;\n }\n newAdditionally = newAdditionally.filter((el, idx) => idx !== index);\n setAdditionallyClickItems(newAdditionally);\n setAnimation(typeBlock === 'actions' ? true : index);\n setTimeout(() => {\n setAnimation(false);\n setUserRules({ ...userRules, conditions: [...userRules.conditions.filter((el, idx) => idx !== index + 1)] });\n }, 250);\n\n }}\n key={index} className={cls.blockCardAdd}>\n {booleanAdditionally() ? '-' : '+'}<div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>\n <AdditionallyContentBlockItems\n blockValue={typeBlock === 'actions' ? 'else' : typeBlock === 'conditions' ? index + 1 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n userRules={userRules}\n boolean={booleanAdditionally()}\n animation={Boolean(animation === index)}\n size={size}\n />\n </Fragment>\n })}\n {additionally && typeBlock === 'conditions' && <div\n onClick={() => {\n setAdditionallyClickItems([...additionallyClickItems, {\n _id: Date.now(),\n open: true\n }]);\n setUserRules({ ...userRules, conditions: [...userRules.conditions, []] });\n setAnimation(typeBlock === 'actions' ? true : userRules.conditions.length - 1);\n setTimeout(() => setAnimation(false), 1000);\n }}\n className={cls.blockCardAdd}\n >\n {'+'}\n <div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>}\n <DialogHelp open={showHelp} onClose={() => setShowHelp(false)} />\n <DialogCondition open={showConditionDialog} onClose={() => setShowConditionDialog(false)} />\n </div>;\n}\n\nContentBlockItems.defaultProps = {\n children: null,\n name: '',\n nameAdditionally: '',\n additionally: false,\n border: false,\n typeBlock: ''\n};\n\nContentBlockItems.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n nameAdditionally: PropTypes.string,\n border: PropTypes.bool,\n additionally: PropTypes.bool,\n children: PropTypes.object,\n typeBlock: PropTypes.string,\n blockValue: PropTypes.string,\n userRules: PropTypes.object,\n setUserRules: PropTypes.func,\n};\n\nexport default ContentBlockItems;","// extracted by mini-css-extract-plugin\nexport default {\"menuRules\":\"style_menuRules__NRFrw\",\"switchesRenderWrapper\":\"style_switchesRenderWrapper__MHBpo\",\"menuOff\":\"style_menuOff__GV8BN\",\"menuTitle\":\"style_menuTitle__bnI7K\",\"marginAuto\":\"style_marginAuto__h3I6J\",\"inputWidth\":\"style_inputWidth__Hkd3w\",\"menuWrapper\":\"style_menuWrapper__16zE-\",\"hamburgerWrapper\":\"style_hamburgerWrapper__+AsNg\",\"hamburgerOff\":\"style_hamburgerOff__Tmmok\",\"nothingFound\":\"style_nothingFound__hm0xN\",\"resetSearch\":\"style_resetSearch__oA8LS\",\"controlPanel\":\"style_controlPanel__ojI7Z\",\"controlPanelAppBar\":\"style_controlPanelAppBar__fjB3Y\",\"addClassMenu\":\"style_addClassMenu__3n58b\",\"addClassBackground\":\"style_addClassBackground__j1FHK\",\"addClassPosition\":\"style_addClassPosition__YL+W4\"};","import React from 'react';\nimport CardMenu from '.';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport DragWrapper from '../DragWrapper';\nimport { STEPS } from '../../helpers/Tour';\n\nconst CustomDragItem = props => {\n const { allProperties, allProperties: { acceptedBy, id }, setUserRules, userRules, setTourStep, tourStep, isTourOpen, onTouchMove } = props;\n return <DragWrapper {...props} {...allProperties}>\n <CardMenu\n onTouchMove={onTouchMove}\n onDoubleClick={() => {\n (isTourOpen &&\n tourStep === STEPS.addScheduleByDoubleClick &&\n id === 'TriggerScheduleBlock' &&\n setTourStep(STEPS.openTagsMenu)\n );\n (isTourOpen &&\n tourStep === STEPS.addActionPrintText &&\n id === 'ActionPrintText' &&\n setTourStep(STEPS.showJavascript)\n );\n let _id = Date.now();\n let blockValue;\n switch (acceptedBy) {\n case 'actions':\n blockValue = 'then';\n break;\n\n case 'conditions':\n blockValue = userRules[acceptedBy].length - 1;\n break;\n\n default:\n break;\n }\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n const newItem = { id, _id, acceptedBy };\n if (blockValue !== undefined) {\n newUserRules[acceptedBy][blockValue].push({ ...newItem });\n } else {\n newUserRules[acceptedBy].push({ ...newItem });\n }\n setUserRules(newUserRules);\n }} onDoubl {...props} {...allProperties} />\n </DragWrapper>;\n}\n\nexport default CustomDragItem;","// extracted by mini-css-extract-plugin\nexport default {\"menu_wrapper\":\"hamburgerMenu_menu_wrapper__H+bSr\",\"hamburgerMenu\":\"hamburgerMenu_hamburgerMenu__zKaBW\",\"animate\":\"hamburgerMenu_animate__CjZxq\",\"menu_conatiner_wrapper\":\"hamburgerMenu_menu_conatiner_wrapper__9BkY3\"};","import React from 'react';\nimport cls from './hamburgerMenu.module.scss';\nimport PropTypes from 'prop-types';\n\nconst HamburgerMenu = ({boolean}) => {\n return <div className={`${cls.hamburgerMenu} ${boolean ? cls.animate : ''}`}/>\n}\n\nHamburgerMenu.defaultProps = {\n boolean: false\n};\n\nHamburgerMenu.propTypes = {\n boolean: PropTypes.bool\n};\n\nexport default HamburgerMenu;","import React, { Fragment, useContext, useEffect } from 'react';\nimport cls from './style.module.scss';\nimport { AppBar, ClickAwayListener, Tab, Tabs } from '@mui/material';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport CustomInput from '../CustomInput';\nimport CustomDragItem from '../CardMenu/CustomDragItem';\nimport HamburgerMenu from '../HamburgerMenu';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { STEPS } from '../../helpers/Tour';\n\nconst Menu = ({ addClass, setAllBlocks, allBlocks, userRules, onChangeBlocks, setTourStep, tourStep, isTourOpen }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket } = useContext(ContextWrapperCreate);\n const [hamburgerOnOff, setHamburgerOnOff] = useStateLocal(false, 'hamburgerOnOff');\n const [filter, setFilter] = useStateLocal({\n text: '',\n type: 'triggers',\n index: 0\n }, 'filterControlPanel');\n\n const handleChange = (event, newValue) => {\n isTourOpen && (newValue === 0 && tourStep === STEPS.selectTriggers) && setTourStep(STEPS.addScheduleByDoubleClick);\n isTourOpen && (newValue === 2 && tourStep === STEPS.selectActions) && setTourStep(STEPS.addActionPrintText);\n setFilter({\n ...filter,\n index: newValue,\n type: ['triggers', 'conditions', 'actions'][newValue]\n });\n setBlocksFunc(filter.text, ['triggers', 'conditions', 'actions'][newValue]);\n };\n\n const setBlocksFunc = (text = filter.text, typeFunc = filter.type) => {\n if (!blocks) {\n return;\n }\n let newAllBlocks = [...blocks];\n newAllBlocks = newAllBlocks.filter(el => {\n if (!text) {\n return true;\n }\n const { name } = el.getStaticData();\n return name && I18n.t(name).toLowerCase().includes(text.toLowerCase());\n });\n newAllBlocks = newAllBlocks.filter(el => typeFunc === el.getStaticData().acceptedBy);\n setAllBlocks(newAllBlocks);\n };\n\n const a11yProps = index => ({\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`\n });\n\n useEffect(() => {\n setBlocksFunc();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [blocks]);\n return <ClickAwayListener\n mouseEvent={false}\n touchEvent=\"onTouchStart\"\n onClickAway={() => setHamburgerOnOff(true)}\n >\n <div className={clsx(cls.menuWrapper, addClass[1035] && cls.addClassMenu)}>\n <div className={`${cls.hamburgerWrapper} ${hamburgerOnOff ? cls.hamburgerOff : null}`}\n onClick={() => setHamburgerOnOff(!hamburgerOnOff)}><HamburgerMenu boolean={!hamburgerOnOff} />\n </div>\n <div className={`${clsx(cls.menuRules, addClass[1035] && cls.addClassBackground, addClass[835] && cls.addClassPosition)} ${hamburgerOnOff ? cls.menuOff : null}`}>\n <div className={cls.controlPanel}>\n <AppBar className={cls.controlPanelAppBar} position=\"static\">\n <Tabs\n value={filter.index}\n onChange={handleChange}\n >\n <Tab className=\"blocks-triggers\"\n title={I18n.t('Triggers')}\n icon={<MaterialDynamicIcon iconName='FlashOn' />}\n {...a11yProps(0)} />\n <Tab title={I18n.t('Conditions')} className=\"blocks-conditions\" icon={<MaterialDynamicIcon iconName='Help' />}\n {...a11yProps(1)} />\n <Tab title={I18n.t('Actions')} className=\"blocks-actions\" icon={<MaterialDynamicIcon iconName='PlayForWork' />}\n {...a11yProps(2)} />\n </Tabs>\n </AppBar>\n </div>\n <div className={cls.switchesRenderWrapper}>\n <span>\n {allBlocks.map(el => {\n const { name, id, icon, adapter } = el.getStaticData();\n return <Fragment key={id}>\n <CustomDragItem\n onTouchMove={() => setHamburgerOnOff(true)}\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n allProperties={el.getStaticData()}\n name={name}\n icon={icon}\n adapter={adapter}\n socket={socket}\n userRules={userRules}\n setUserRules={onChangeBlocks}\n isActive={false}\n id={id}\n />\n </Fragment>;\n })}\n {allBlocks.length === 0 && <div className={cls.nothingFound}>\n {I18n.t('Nothing found')}...\n <div className={cls.resetSearch} onClick={() => {\n setFilter({\n ...filter,\n text: ''\n });\n setBlocksFunc('');\n }}>{I18n.t('reset search')}</div>\n </div>}\n </span>\n </div>\n <div className={clsx(cls.menuTitle, cls.marginAuto)} />\n <CustomInput\n className={cls.inputWidth}\n fullWidth\n customValue\n value={filter.text}\n size=\"small\"\n autoComplete=\"off\"\n label={I18n.t('search')}\n variant=\"outlined\"\n onChange={(value) => {\n setFilter({ ...filter, text: value });\n setBlocksFunc(value);\n }}\n />\n </div>\n </div>\n </ClickAwayListener>;\n}\n\nMenu.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string\n};\n\nexport default Menu;\n","// extracted by mini-css-extract-plugin\nexport default {};","import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport cls from './style.module.scss';\n\nimport { CustomDragLayer } from './components/CustomDragLayer';\nimport ContentBlockItems from './components/ContentBlockItems';\nimport { ContextWrapperCreate } from './components/ContextWrapper';\nimport Compile from './helpers/Compile';\nimport PropTypes from 'prop-types';\nimport Menu from './components/Menu';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport './helpers/stylesVariables.scss';\n\nimport DialogExport from '../../Dialogs/Export';\nimport DialogImport from '../../Dialogs/Import';\nimport clsx from 'clsx';\n\nconst RulesEditor = ({ code, onChange, themeName, setTourStep, tourStep, isTourOpen, command, scriptId, changed, running }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket, setOnUpdate, setOnDebugMessage, setEnableSimulation } = useContext(ContextWrapperCreate);\n const [allBlocks, setAllBlocks] = useState([]);\n const [userRules, setUserRules] = useState(Compile.code2json(code));\n const [importExport, setImportExport] = useState('');\n const [modal, setModal] = useState(false);\n //const [jsAlive, setJsAlive] = useState(false);\n //const [jsInstance, setJsInstance] = useState(false);\n\n useEffect(() => {\n let _jsInstance;\n let _jsAlive;\n const handler = (id, obj) => {\n if (id === _jsInstance + '.alive') {\n if (_jsAlive !== obj?.val) {\n _jsAlive = obj?.val;\n //setJsAlive(_jsAlive);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n }\n } else {\n if (_jsInstance !== obj?.common?.engine) {\n _jsInstance && socket.unsubscribeState(`${_jsInstance}.alive`, handler);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n }\n }\n };\n\n const handlerStatus = (id, state) => {\n if (state) {\n try {\n let msg = JSON.parse(state.val);\n // if not from previous session\n if (msg.ruleId === scriptId && Date.now() - msg.ts < 1000) {\n setOnDebugMessage({blockId: msg.blockId, data: msg.data, ts: msg.ts});\n }\n } catch (e) {\n console.error('Cannot parse: ' + state.val);\n }\n }\n };\n\n socket.getObject(scriptId)\n .then(obj => {\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n socket.subscribeObject(scriptId, handler);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n _jsInstance && socket.subscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n });\n\n return function cleanup() {\n _jsInstance && socket.unsubscribeObject(`${_jsInstance}.alive`, handler);\n socket.unsubscribeState(scriptId, handler);\n _jsAlive && _jsInstance && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOff', scriptId);\n _jsInstance && socket.unsubscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setEnableSimulation(!changed && running);\n }, [changed, running, setEnableSimulation]);\n\n useEffect(() => {\n if (!!command) {\n setImportExport(command);\n if (!modal) {\n setModal(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [command]);\n\n useEffect(() => {\n const newUserRules = Compile.code2json(code);\n if (JSON.stringify(newUserRules) !== JSON.stringify(userRules)) {\n setUserRules(newUserRules);\n setOnUpdate(true);\n }\n // eslint-disable-next-line\n }, [code]);\n\n useEffect(() => {\n document.getElementsByTagName('HTML')[0].className = themeName || 'blue';\n }, [themeName]);\n\n const onChangeBlocks = useCallback(json => {\n setUserRules(json);\n onChange(Compile.json2code(json, blocks));\n }, [blocks, onChange]);\n\n const ref = useRef({ clientWidth: 0 });\n const [addClass, setAddClass] = useState({ 835: false, 1035: false });\n useEffect(() => {\n if (ref.current) {\n if (ref.current.clientWidth <= 1035) {\n setAddClass({ 835: false, 1035: true });\n }\n if (ref.current.clientWidth <= 835) {\n setAddClass({ 1035: true, 835: true });\n }\n if (ref.current.clientWidth > 1035) {\n setAddClass({ 835: false, 1035: false });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current.clientWidth])\n\n if (!blocks) {\n return null;\n }\n\n return <div key=\"rulesEditor\" className={cls.wrapperRules} ref={ref}>\n {<CustomDragLayer allBlocks={allBlocks} socket={socket} />}\n {importExport === \"export\" ?\n <DialogExport\n key=\"dialogExport\"\n onClose={() => setModal(false)}\n open={modal}\n text={JSON.stringify(userRules, null, 2)} /> :\n <DialogImport\n open={modal}\n key=\"dialogImport\"\n onClose={text => {\n setModal(false);\n if (text) {\n onChangeBlocks(JSON.parse(text));\n }\n }} />}\n {<div className={clsx(cls.rootWrapper, addClass[835] && cls.addClass)}>\n <Menu\n setAllBlocks={setAllBlocks}\n allBlocks={allBlocks}\n userRules={userRules}\n onChangeBlocks={onChangeBlocks}\n setTourStep={setTourStep}\n tourStep={tourStep}\n addClass={addClass}\n isTourOpen={isTourOpen}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n userRules={userRules}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n name={`${I18n.t('when')}...`}\n typeBlock=\"triggers\"\n iconName=\"FlashOn\"\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('and')}...`}\n typeBlock=\"conditions\"\n iconName=\"Help\"\n nameAdditionally={I18n.t('or')}\n additionally\n border\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('then')}`}\n typeBlock=\"actions\"\n iconName=\"PlayForWork\"\n nameAdditionally={I18n.t('else')}\n additionally\n size={addClass[835]}\n />\n </div>}\n </div>;\n}\n\nRulesEditor.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string,\n scriptId: PropTypes.string,\n setTourStep: PropTypes.func,\n tourStep: PropTypes.number,\n command: PropTypes.string,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n searchText: PropTypes.string,\n resizing: PropTypes.bool,\n\n};\n\nexport default RulesEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport ScriptEditorComponent from '../ScriptEditorVanilaMonaco';\n\nconst styles = theme => ({\n editorDiv: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n position: 'relative'\n },\n editor: {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n line: {\n width: '100%',\n whiteSpace: 'nowrap',\n },\n lineNumber: {\n width: 40,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n textAlign: 'right',\n fontSize: 14,\n marginRight: 1,\n borderRight: '1px solid #555',\n cursor: 'pointer'\n },\n lineBreakpoint: {\n background: '#330000',\n color: 'white',\n },\n lineCode: {\n //whiteSpace: 'nowrap',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n fontSize: 14,\n margin: 0,\n whiteSpace: 'pre',\n },\n lineCurrentCode: {\n background: 'red',\n color: 'white',\n },\n lineCurrent: {\n background: '#880000',\n color: 'white',\n },\n});\n\nclass Editor extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lines: (this.props.script || '').split(/\\r\\n|\\n/)\n };\n }\n\n editorDidMount(editor, monaco) {\n this.monaco = monaco;\n this.editor = editor;\n editor.focus();\n }\n\n render() {\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv2\">\n <ScriptEditorComponent\n key=\"scriptEditor2\"\n name={this.props.scriptName}\n adapterName={this.props.adapterName}\n readOnly={true}\n code={this.props.script || ''}\n isDark={this.props.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.props.runningInstances}\n language={'javascript'}\n\n breakpoints={this.props.breakpoints}\n location={this.props.paused ? this.props.location : null}\n onToggleBreakpoint={i => this.props.onToggleBreakpoint(i)}\n />\n </div>;\n }\n}\n\nEditor.propTypes = {\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n sourceId: PropTypes.string,\n script: PropTypes.string,\n scriptName: PropTypes.string,\n adapterName: PropTypes.string,\n paused: PropTypes.bool,\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport IconButton from '@mui/material/IconButton';\nimport {\n MdContentCopy as IconCopy,\n MdDeleteForever as IconDelete,\n MdVerticalAlignBottom as IconBottom,\n} from 'react-icons/md';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n consoleLine: {\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222'\n },\n console_log: {\n\n },\n console_warn: {\n backgroundColor: theme.palette.mode === 'dark' ? '#885900' : '#ffa500',\n },\n console_error: {\n backgroundColor: theme.palette.mode === 'dark' ? '#7a0000' : '#FF0000',\n },\n console_debug: {\n opacity: 0.6,\n },\n consoleSeverity: {\n verticalAlign: 'top',\n width: 50,\n textTransform: 'uppercase',\n },\n consoleTime: {\n whiteSpace: 'nowrap',\n verticalAlign: 'top',\n width: 170,\n\n },\n consoleText: {\n fontFamily: 'Lucida Console, Courier, monospace',\n paddingTop: 4,\n '&>pre': {\n margin: 0\n }\n },\n\n\n\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden'\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n },\n toolbox: {\n //position: 'absolute',\n //top: 0,\n //left: 0,\n //marginLeft: 2,\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold'\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4\n },\n});\n\nfunction copyToClipboard(str) {\n const el = window.document.createElement('textarea');\n el.value = str;\n window.document.body.appendChild(el);\n el.select();\n window.document.execCommand('copy');\n window.document.body.removeChild(el);\n}\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) i = '0' + i.toString();\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) i = '0' + i.toString();\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) i = '0' + i.toString();\n text += i + '.';\n i = d.getMilliseconds();\n if (i < 10) {\n i = '00' + i.toString();\n } else if (i < 100) {\n i = '0' + i.toString();\n }\n text += i;\n return text;\n}\n\nclass Console extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n };\n this.messagesEnd = React.createRef();\n }\n generateLine(message) {\n return <tr key={'tr_' + message.ts + '_' + message.text.substr(-10)} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.text}</td>\n </tr>;\n }\n renderLogList(lines) {\n if (lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>\n {lines.map((line, i) => this.generateLine(line))}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{float: 'left', clear: 'both'}}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{paddingLeft: 10}}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n onCopy() {\n copyToClipboard((this.props.console).join('\\n'));\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({behavior: 'smooth'});\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n render() {\n const lines = this.props.console;\n return (\n <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({goBottom: !this.state.goBottom})}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onClearAllLogs()}\n size=\"medium\"><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy/></IconButton> : null}\n </div>\n {this.renderLogList(lines)}\n </div>\n );\n }\n}\n\nConsole.propTypes = {\n theme: PropTypes.object,\n onClearAllLogs: PropTypes.func,\n console: PropTypes.array,\n};\n\nexport default withStyles(styles)(Console);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\nimport ReactJson from 'react-json-view';\n\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\n\nimport {MdCheck as CheckIcon} from 'react-icons/md';\nimport {MdAdd as IconAdd} from 'react-icons/md';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n frameRoot: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n frameTextRoot: {\n margin: 0,\n },\n frameTextPrimary: {\n color: theme.palette.mode === 'dark' ? '#CCC' : '#333',\n },\n frameTextSecondary: {\n fontStyle: 'italic',\n fontSize: 12,\n opacity: 0.6,\n paddingLeft: theme.spacing(1),\n },\n\n listRoot: {\n padding: 0,\n },\n\n scopeType: {\n verticalAlign: 'top',\n textTransform: 'uppercase',\n width: 50,\n },\n scopeType_local: {\n color: '#53a944'\n },\n scopeType_closure: {\n color: '#365b80'\n },\n scopeType_user: {\n color: '#a48a15'\n },\n scopeName: {\n color: '#bc5b5b',\n width: 'calc(100% - 82px)',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n scopeButton: {\n width: 32\n },\n scopeValueEditable: {\n cursor: 'pointer'\n },\n selectedFrame: {\n backgroundColor: '#777',\n color: 'white'\n },\n splitter: {\n width: '100%',\n height: 'calc(100% - 36px)',\n overflow: 'hidden',\n fontSize: 12\n },\n\n toolbarScopes: {\n width: 24,\n display: 'inline-block',\n height: '100%',\n background: theme.palette.mode === 'dark' ? '#222' : '#EEE',\n verticalAlign: 'top',\n },\n scopesAfterToolbar: {\n width: 'calc(100% - 24px)',\n display: 'inline-block',\n height: '100%',\n verticalAlign: 'top',\n },\n\n scopeNameName: {\n fontWeight: 'bold',\n display: 'inline-block',\n verticalAlign: 'top',\n },\n scopeNameEqual: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n verticalAlign: 'top',\n },\n scopeNameValue: {\n verticalAlign: 'top',\n display: 'inline-block',\n color: '#3b709f',\n whiteSpace: 'nowrap',\n },\n scopeButtonDel: {\n padding: 0,\n float: 'right',\n },\n\n valueNull: {\n color: '#a44a24'\n },\n valueUndefined: {\n color: '#a44a24'\n },\n valueString: {\n color: '#1e8816'\n },\n valueNumber: {\n color: '#163c88'\n },\n valueBoolean: {\n color: '#a44a24'\n },\n valueObject: {\n color: '#721b70'\n },\n valueNone: {\n color: '#8a8a8a'\n },\n valueFunc: {\n color: '#ac4343'\n }\n});\n\nclass Stack extends React.Component {\n constructor(props) {\n super(props);\n\n this.framesSize = parseFloat(window.localStorage.getItem('App.framesSize')) || 300;\n\n this.state = {\n editValue: null,\n callFrames: this.props.callFrames,\n };\n\n this.editRef = React.createRef();\n }\n\n onExpressionNameUpdate() {\n this.props.onExpressionNameUpdate(this.state.editValue.index, this.scopeValue, () => {\n this.setState({editValue: null});\n this.scopeValue = null;\n });\n }\n\n renderExpression(item, i) {\n const name = this.state.editValue && this.state.editValue.type === 'expression' && this.state.editValue.index === i ?\n <Input\n inputRef={this.editRef}\n fullWidth\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={item.name}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onExpressionNameUpdate();\n } else if (e.keyCode === 27) {\n this.setState({editValue: null});\n }\n }}\n\n onChange={e =>\n this.scopeValue = e.target.value}\n\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onExpressionNameUpdate()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to edit expression')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)}</div>\n ];\n\n return <tr key={`user_${i}${item.name}`}>\n <td className={clsx(this.props.classes.scopeType, this.props.classes['scopeType_user'])}>user</td>\n <td className={this.props.classes.scopeName}\n onDoubleClick={() => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n }}\n >{name}</td>\n <IconButton\n className={this.props.classes.scopeButtonDel}\n size=\"small\"\n disabled={!!this.state.editValue}\n onClick={() => this.props.onExpressionDelete(i)}\n >\n <IconDelete/>\n </IconButton>\n </tr>\n }\n\n renderExpressions() {\n return this.props.expressions.map((item, i) => this.renderExpression(item, i));\n }\n\n renderOneFrameTitle(frame, i) {\n if (this.props.mainScriptId === this.props.currentScriptId && frame.location.scriptId !== this.props.mainScriptId) {\n return null;\n }\n const fileName = frame.url.split('/').pop().replace(/^script\\.js\\./, '');\n return <ListItem\n key={frame.id}\n button\n onClick={() => this.props.onChangeCurrentFrame(i)}\n dense={true}\n selected={this.props.currentFrame === i}\n classes={{root: this.props.classes.frameRoot}}\n >\n <ListItemText\n classes={{root: this.props.classes.frameTextRoot, primary: this.props.classes.frameTextPrimary, secondary: this.props.classes.frameTextSecondary}}\n title={frame.url}\n primary={frame.functionName || 'anonymous'}\n secondary={`${fileName} (${frame.location.lineNumber}:${frame.location.columnNumber})`}\n />\n </ListItem>;\n }\n\n formatValue(value, forEdit) {\n if (!value) {\n if (forEdit) {\n return 'none';\n } else {\n return <span className={this.props.classes.valueNone}>none</span>;\n }\n } else if (value.type === 'function') {\n const text = value.description ? (value.description.length > 100 ? value.description.substring(0, 100) + '...' : value.description) : 'function';\n if (forEdit) {\n return text;\n } else {\n return <span className={this.props.classes.valueFunc} title={value.description}>{text}</span>;\n }\n } else if (value.value === undefined) {\n if (forEdit) {\n return 'undefined';\n } else {\n return <span className={this.props.classes.valueUndefined}>undefined</span>;\n }\n } else if (value.value === null) {\n if (forEdit) {\n return 'null';\n } else {\n return <span className={this.props.classes.valueNull}>null</span>;\n }\n } else if (value.type === 'string') {\n if (forEdit) {\n return value.value;\n } else {\n const text = value.value ? (value.value.length > 100 ? value.value.substring(0, 100) + '...' : value.value) : '';\n return <span className={this.props.classes.valueString} title={text}>\"{text}\"</span>;\n }\n } else if (value.type === 'boolean') {\n if (forEdit) {\n return value.value.toString();\n } else {\n return <span className={this.props.classes.valueBoolean}>{value.value.toString()}</span>;\n }\n } else if (value.type === 'object') {\n if (forEdit) {\n return JSON.stringify(value.value);\n } else {\n return <ReactJson\n enableClipboard={false}\n style={{backgroundColor: 'inherit', marginTop: 3}}\n src={value.value}\n collapsed={true}\n theme={this.props.themeType === 'dark' ? 'brewer' : 'rjv-default'}\n displayDataTypes={false}\n />;\n }\n } else {\n return value.value.toString();\n }\n }\n\n onWriteScopeValue() {\n if (this.scopeValue === 'true') {\n this.scopeValue = true;\n } else if (this.scopeValue === 'false') {\n this.scopeValue = false;\n } else if (this.scopeValue === 'null') {\n this.scopeValue = null;\n } else if (this.scopeValue === 'undefined') {\n this.scopeValue = undefined;\n } else\n if (parseFloat(this.scopeValue).toString() === this.scopeValue) {\n this.scopeValue = parseFloat(this.scopeValue);\n }\n\n this.props.onWriteScopeValue({\n variableName: this.state.editValue.name,\n scopeNumber: 0,\n newValue: {\n value: this.scopeValue,\n valueType: typeof this.scopeValue,\n },\n callFrameId: this.props.callFrames[this.props.currentFrame].callFrameId\n });\n\n this.setState({editValue: null});\n this.scopeValue = null;\n }\n\n componentDidUpdate() {\n //this.editRef.current?.select();\n this.editRef.current?.focus();\n }\n\n renderScope(scopeId, item, type) {\n const editable = !this.props.currentFrame && item.value && (item.value.type === 'undefined' || item.value.type === 'string' || item.value.type === 'number' || item.value.type === 'boolean' || item.value?.value === null || item.value?.value === undefined);\n\n const el = this.state.editValue && this.state.editValue.type === type && this.state.editValue.name === item.name ?\n [\n <div key=\"name\" className={this.props.classes.scopeNameName}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <Input\n inputRef={this.editRef}\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={this.formatValue(item.value, true)}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onWriteScopeValue()\n } else if (e.keyCode === 27) {\n this.setState({editValue: null})\n }\n }}\n onChange={e =>\n this.scopeValue = e.target.value}\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onWriteScopeValue()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n ]\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to write value')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)} ({item.value.type})</div>\n ];\n\n\n return <tr key={`${type}_${scopeId}_${item.name}`}>\n <td className={clsx(this.props.classes.scopeType, this.props.classes['scopeType_' + type])}>{type}</td>\n <td\n className={clsx(this.props.classes.scopeName, !this.props.currentFrame && editable && this.props.classes.scopeValueEditable)}\n onDoubleClick={() => {\n if (editable) {\n this.scopeValue = item.value.value;\n this.setState({\n editValue: {\n scopeId,\n type,\n valueType: item.value.type,\n name: item.name,\n value: item.value.value\n }\n });\n }\n }}\n >{el}</td>\n </tr>;\n }\n\n renderScopes(frame) {\n if (!frame) {\n return null;\n } else {\n // first local\n let result = this.renderExpressions();\n\n let items = this.props.scopes?.local?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'local'));\n items && items.forEach(item => result.push(item));\n\n items = this.props.scopes?.closure?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'closure'));\n items && items.forEach(item => result.push(item));\n\n return <table style={{width: '100%'}}>\n <tbody>\n {result}\n </tbody>\n </table>;\n }\n }\n\n render() {\n return <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryIndex={1}\n secondaryMinSize={200}\n primaryMinSize={200}\n vertical={false}\n secondaryInitialSize={this.framesSize}\n onSecondaryPaneSizeChange={size => this.framesSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.framesSize', this.framesSize.toString())}\n >\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <List classes={{root: this.props.classes.listRoot}}>\n {this.props.callFrames ? this.props.callFrames.map((frame, i) =>\n this.renderOneFrameTitle(frame, i)) : null}\n </List>\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <div className={this.props.classes.toolbarScopes}>\n <IconButton size=\"small\" onClick={() => this.props.onExpressionAdd((i, item) => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n })}><IconAdd/></IconButton>\n </div>\n <div className={this.props.classes.scopesAfterToolbar}>\n {this.props.callFrames && this.props.callFrames.length && this.renderScopes(this.props.callFrames[this.props.currentFrame])}\n </div>\n </div>\n </SplitterLayout>;\n }\n}\n\nStack.propTypes = {\n currentScriptId: PropTypes.string,\n mainScriptId: PropTypes.string,\n scopes: PropTypes.object,\n expressions: PropTypes.array,\n callFrames: PropTypes.array,\n currentFrame: PropTypes.number,\n onChangeCurrentFrame: PropTypes.func,\n onWriteScopeValue: PropTypes.func,\n onExpressionDelete: PropTypes.func,\n onExpressionAdd: PropTypes.func,\n onExpressionNameUpdate: PropTypes.func,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(Stack);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Toolbar from '@mui/material/Toolbar';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Dialog from '@mui/material/Dialog';\nimport Badge from '@mui/material/Badge';\n\nimport { MdClose as IconClose, MdPlayArrow as IconRun } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdArrowForward as IconNext } from 'react-icons/md';\nimport { MdArrowDownward as IconStep } from 'react-icons/md';\nimport { MdArrowUpward as IconOut } from 'react-icons/md';\nimport { MdRefresh as IconRestart } from 'react-icons/md';\nimport { MdWarning as IconException } from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\nimport DialogError from '../../Dialogs/Error';\nimport Editor from './Editor';\nimport Console from './Console';\nimport Stack from './Stack';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n height: `calc(100% - ${theme.toolbar.height + 38/*Theme.toolbar.height */ + 5}px)`,\n overflow: 'hidden',\n position: 'relative'\n },\n toolbar: {\n minHeight: 38,//Theme.toolbar.height,\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)'\n },\n buttonRun: {\n color: 'green'\n },\n buttonPause: {\n color: 'orange'\n },\n buttonRestart: {\n color: 'darkgreen'\n },\n buttonStop: {\n color: 'red'\n },\n buttonNext: {\n color: 'blue'\n },\n buttonStep: {\n color: 'blue'\n },\n buttonOut: {\n color: 'blue'\n },\n buttonException: {\n\n },\n\n tabFile: {\n textTransform: 'inherit',\n color: theme.palette.mode === 'dark' ? '#DDD' : 'inherit'\n },\n tabText: {\n maxWidth: 130,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n closeButton: {\n position: 'absolute',\n top: 8,\n right: 0,\n zIndex: 10,\n padding: 8,\n cursor: 'pointer'\n },\n\n tabsRoot: {\n minHeight: 24,\n background: theme.palette.mode === 'dark' ? '#333' : '#e6e6e6',\n color: theme.palette.mode === 'dark' ? 'white' : 'inherit'\n },\n tabRoot: {\n minHeight: 24,\n },\n\n bpListItem: {\n borderTop: '1px dashed #bfbfbf44',\n },\n monospace: {\n fontFamily: 'Courier New, monospace',\n whiteSpace: 'pre',\n fontSize: 12,\n },\n arrow: {\n color: '#fffa4f',\n },\n splitter: {\n height: 'calc(100% - 52px)',\n '& .layout-pane': {\n overflow: 'hidden',\n height: '100%'\n }\n }\n});\n\nclass Debugger extends React.Component {\n constructor(props) {\n super(props);\n let breakpoints = window.localStorage.getItem('javascript.tools.bp.' + this.props.src);\n try {\n breakpoints = breakpoints ? JSON.parse(breakpoints) : [];\n } catch (e) {\n breakpoints = [];\n }\n\n let expressions = window.localStorage.getItem('javascript.tools.exps.' + this.props.src);\n try {\n expressions = expressions ? JSON.parse(expressions) : [];\n expressions = expressions.map(name => ({name}));\n } catch (e) {\n expressions = [];\n }\n\n this.toolSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.toolSize')) || 150 : 150;\n\n this.state = {\n starting: true,\n selected: null,\n tabs: {},\n script: '',\n breakpoints,\n expressions,\n running: false,\n error: '',\n started: false,\n paused: true,\n location: null,\n toolsTab: window.localStorage.getItem('javascript.tools.tab') || 'console',\n stopOnException: window.localStorage.getItem('javascript.tools.stopOnException') === 'true',\n console: [],\n finished: false,\n currentFrame: 0,\n scopes: {},\n queryBreakpoints: null,\n logErrors: 0,\n logWarnings: 0,\n logs: 0,\n };\n\n this.scripts = {};\n this.mainScriptId = null;\n }\n\n componentDidMount() {\n new Promise(resolve => {\n if (this.props.debugInstance) {\n resolve(this.props.debugInstance.instance);\n } else {\n this.props.socket.getObject(this.props.src)\n .then(obj => resolve(obj?.common?.engine?.replace('system.adapter.', '')));\n }\n })\n .then(instance =>\n this.setState({instance: instance}, () => {\n if (this.state.instance) {\n this.props.socket.setState(this.state.instance + '.debug.from', { val: '{\"cmd\": \"subscribed\"}', ack: true });\n //.then(() => );\n setTimeout(() =>\n this.props.socket.subscribeState(this.state.instance + '.debug.from', this.fromInstance), 200);\n } else {\n this.setState({error: 'Unknown instance'});\n }\n }));\n }\n\n componentWillUnmount() {\n if (this.state.instance) {\n this.props.socket.unsubscribeState(this.state.instance + '.debug.from', this.fromInstance);\n this.props.socket.sendTo(this.state.instance, 'debugStop');\n }\n }\n\n sendToInstance(cmd) {\n this.props.socket.setState(this.state.instance + '.debug.to', { val: JSON.stringify(cmd), ack: false });\n }\n\n reinitBreakpoints(cb) {\n if (this.state.breakpoints.length) {\n let breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n breakpoints = breakpoints.map(item => item.location);\n this.setState({breakpoints: []}, () => {\n this.sendToInstance({breakpoints, cmd: 'sb'});\n if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n }\n\n cb && cb();\n });\n } else if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n cb && cb();\n } else {\n cb && cb();\n }\n }\n\n getLocation(context) {\n if (context.callFrames) {\n const frame = context.callFrames[0];\n return frame.location;\n }\n }\n\n readCurrentScope() {\n const frame = this.state.context.callFrames[this.state.currentFrame];\n if (frame) {\n const scopes = frame.scopeChain.filter(scope => scope.type !== 'global');\n if (scopes.length) {\n this.sendToInstance({cmd: 'scope', scopes});\n } else if (this.state.scopes.global || this.state.scopes.local || this.state.scopes.closure) {\n this.setState({scopes: {}});\n }\n }\n }\n\n readExpressions(i) {\n if (this.state.expressions.length && this.state.context?.callFrames && this.state.context.callFrames[this.state.currentFrame]) {\n if (i !== undefined) {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: [this.state.expressions[i]],\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n } else {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: this.state.expressions,\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n }\n }\n }\n\n fromInstance = (id, state) => {\n try {\n const data = JSON.parse(state.val);\n if (data.cmd === 'subscribed') {\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src});\n } else\n if (data.cmd === 'readyToDebug') {\n this.mainScriptId = data.scriptId;\n this.scripts[data.scriptId] = data.script;\n if (data.script.startsWith('(async () => {debugger;\\n')) {\n this.scripts[data.scriptId] = '(async () => {\\n' + data.script.substring('(async () => {debugger;\\n'.length);\n } else if (data.script.startsWith('debugger;')) {\n this.scripts[data.scriptId] = data.script.substring('debugger;'.length);\n }\n\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n tabs[data.scriptId] = this.props.debugInstance ? data.url: this.props.src.replace('script.js.', '');\n\n const ts = Date.now() + '.' + Math.random() * 10000;\n data.context.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n\n this.setState({\n starting: false,\n finished: false,\n selected: this.mainScriptId,\n script: this.scripts[data.scriptId],\n tabs,\n currentFrame: 0,\n started: true,\n paused: true,\n location: this.getLocation(data.context),\n context: data.context,\n }, () =>\n this.reinitBreakpoints(() => {\n this.readCurrentScope();\n this.readExpressions();\n }));\n } else if (data.cmd === 'paused') {\n const ts = Date.now() + '.' + Math.random() * 10000;\n data.context.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n const location = this.getLocation(data.context);\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n const parts = data.context.callFrames[0].url.split('iobroker.javascript');\n tabs[location.scriptId] = (parts[1] || parts[0]).replace('script.js.', '');\n\n const newState = {\n tabs,\n paused: true,\n location,\n currentFrame: 0,\n context: data.context,\n scope: {id: (data.context && data.context.callFrames && data.context.callFrames[0] && data.context.callFrames[0].id) || 0}\n };\n\n newState.script = this.scripts[location.scriptId] === undefined ? I18n.t('loading...') : this.scripts[location.scriptId];\n newState.selected = location.scriptId;\n\n this.setState(newState, () => {\n this.readCurrentScope();\n this.readExpressions();\n if (!this.scripts[location.scriptId]) {\n this.sendToInstance({cmd: 'source', scriptId: location.scriptId});\n }\n });\n } else if (data.cmd === 'script') {\n this.scripts[data.scriptId] = data.text;\n if (this.state.selected === data.scriptId) {\n this.setState({script: this.scripts[data.scriptId]});\n }\n } else if (data.cmd === 'resumed') {\n this.setState({paused: false});\n } else if (data.cmd === 'log') {\n if (this.state.toolsTab === 'console') {\n this.console = null;\n const console = [...this.state.console];\n console.push({text: data.text, severity: data.severity, ts: data.ts});\n this.setState({console});\n } else {\n if (data.severity === 'error') {\n this.setState({logErrors: this.state.logErrors + 1});\n } else if (data.severity === 'warn') {\n this.setState({logWarnings: this.state.logWarnings + 1});\n } else {\n this.setState({logs: this.state.logs + 1});\n }\n this.console = this.console || [...this.state.console];\n this.console.push({text: data.text, severity: data.severity, ts: data.ts});\n }\n } else if (data.cmd === 'error') {\n this.setState({error: data.error});\n } else if (data.cmd === 'finished' || data.cmd === 'debugStopped') {\n this.setState({\n finished: true,\n starting: false,\n started: true,\n });\n } else if (data.cmd === 'sb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n data.breakpoints.filter(bp => bp).forEach(bp => {\n const found = breakpoints.find(item =>\n item.location.scriptId === bp.location.scriptId && item.location.lineNumber === bp.location.lineNumber);\n if (!found) {\n changed = true;\n breakpoints.push(bp);\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'cb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n\n data.breakpoints.filter(id => id !== undefined && id !== null).forEach(id => {\n const found = breakpoints.find(item => item.id === id);\n if (found) {\n const pos = breakpoints.indexOf(found);\n breakpoints.splice(pos, 1);\n changed = true;\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'scope') {\n //const global = data.scopes.find(scope => scope.type === 'global') || null;\n const local = data.scopes.find(scope => scope.type === 'local') || null;\n const closure = data.scopes.find(scope => scope.type === 'closure') || null;\n\n console.log(JSON.stringify(closure));\n\n this.setState({scopes: {local, closure, id: this.state.scope.id + '_' + this.state.currentFrame}});\n } else if (data.cmd === 'setValue') {\n const scopes = JSON.parse(JSON.stringify(this.state.scopes));\n let item;\n if (data.scopeNumber === 0) {\n item = scopes.local && scopes.local.properties && scopes.local.properties.result && scopes.local.properties.result.find(item => item.name === data.variableName);\n } else {\n item = scopes.closure && scopes.closure.properties && scopes.closure.properties.result && scopes.closure.properties.result && scopes.closure.properties.result.find(item => item.name === data.variableName);\n }\n if (item) {\n item.value.value = data.newValue.value;\n this.setState({scopes});\n }\n } else if (data.cmd === 'expressions') {\n // update values\n let expressions = JSON.parse(JSON.stringify(this.state.expressions));\n let changed = false;\n data.expressions.forEach(item => {\n const expression = expressions.find(it => it.name === item.name);\n if (expression) {\n changed = true;\n expression.value = item.result;\n }\n });\n changed && this.setState({expressions});\n\n console.log('expressions: ' + JSON.stringify(data));\n } else if (data.cmd === 'getPossibleBreakpoints') {\n if (data.breakpoints?.locations?.length === 1) {\n this.sendToInstance({breakpoints: data.breakpoints.locations, cmd: 'sb'});\n } else if (!data.breakpoints?.locations?.length) {\n window.alert('cannot set');\n } else {\n this.setState({queryBreakpoints: data.breakpoints.locations});\n }\n } else {\n console.error(`Unknown command: ${JSON.stringify(data)}`);\n }\n } catch (e) {\n\n }\n }\n\n getTextAtLocation(location) {\n let line = this.state.script.split(/\\r\\n|\\n/)[location.lineNumber];\n let arrow = '';\n if (location.columnNumber >= 10) {\n line = line.substring(location.columnNumber - 10, location.columnNumber + 20);\n arrow = ''.padStart(10, ' ') + '↑';\n } else {\n line = line.substring(0, 30 - location.columnNumber);\n arrow = ''.padStart(location.columnNumber, ' ') + '↑';\n }\n return [\n <div className={this.props.classes.monospace}>{line}</div>,\n <div className={clsx(this.props.classes.monospace, this.props.classes.arrow)}>{arrow}</div>\n ];\n }\n\n renderQueryBreakpoints() {\n if (this.state.queryBreakpoints) {\n return <Dialog onClose={() => this.setState({queryBreakpoints: null})} aria-labelledby=\"bp-dialog-title\" open={true}>\n <DialogTitle id=\"bp-dialog-title\">{I18n.t('Select breakpoint')}</DialogTitle>\n <List>\n {this.state.queryBreakpoints.map((bp, i) => (\n <ListItem\n classes={{root: this.props.classes.bpListItem}}\n dense={true}\n button\n onClick={() => {\n this.sendToInstance({breakpoints: [bp], cmd: 'sb'});\n this.setState({queryBreakpoints: null})\n }}\n key={i}>\n <ListItemText\n classes={{primary: this.props.classes.bpListPrimary, secondary: this.props.classes.bpListSecondary}}\n primary={this.getTextAtLocation(bp)}\n />\n </ListItem>\n ))}\n </List>\n </Dialog>;\n } else {\n return null;\n }\n }\n\n renderError() {\n if (this.state.error) {\n return <DialogError key=\"dialogError\" onClose={() => this.setState({ error: '' })} text={this.state.error} />;\n } else {\n return null;\n }\n }\n\n closeTab(id, e) {\n e && e.stopPropagation();\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n delete tabs[id];\n const newState = {tabs, script: this.scripts[this.mainScriptId], selected: this.mainScriptId};\n if (this.state.location && this.state.location.scriptId !== this.mainScriptId) {\n newState.location = null;\n }\n this.setState(newState);\n }\n\n renderTabs() {\n const disabled = !this.state.tabs || !this.state.started;\n return <Tabs\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: 'calc(100% - 300px)', display: 'inline-block' }}\n value={this.state.selected}\n onChange={(event, value) => {\n if (this.scripts[value]) {\n this.setState({selected: value, script: this.scripts[value]});\n } else {\n this.setState({selected: value, script: 'loading...'}, () =>\n this.sendToInstance({cmd: 'source', scriptId: value}));\n }\n }}\n scrollButtons=\"auto\"\n >\n {Object.keys(this.state.tabs || [])\n .map(id => {\n let label = id;\n let title = this.state.tabs[id] || '';\n if (this.state.tabs[id]) {\n label = this.state.tabs[id].split('/').pop();\n }\n label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText)}>{label}</div>,\n id !== this.mainScriptId && <span key=\"icon\" className={this.props.classes.closeButton}>\n <IconClose key=\"close\" onClick={e => this.closeTab(id, e)} fontSize=\"small\" /></span>];\n\n return <Tab disabled={disabled} classes={{root: this.props.classes.tabFile}} label={label} title={title} key={id} value={id}/>;\n })}\n </Tabs>;\n }\n\n onResume() {\n this.sendToInstance({cmd: 'cont'});\n }\n\n onPause() {\n this.sendToInstance({cmd: 'pause'});\n }\n\n onNext() {\n this.sendToInstance({cmd: 'next'});\n }\n\n onStepIn() {\n this.sendToInstance({cmd: 'step'});\n }\n\n onStepOut() {\n this.sendToInstance({cmd: 'out'});\n }\n\n onRestart() {\n this.setState({started: false, starting: true}, () =>\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src}));\n }\n\n onToggleException() {\n const stopOnException = !this.state.stopOnException;\n window.localStorage.setItem('javascript.tools.stopOnException', stopOnException ? 'true' : 'false');\n this.setState({stopOnException}, () =>\n this.sendToInstance({cmd: 'stopOnException', state: stopOnException}));\n }\n\n renderToolbar() {\n const disabled = !this.state.started;\n return (\n <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n <IconButton\n className={this.props.classes.buttonRestart}\n disabled={disabled}\n onClick={() => this.onRestart()}\n title={I18n.t('Restart')}\n size=\"medium\"><IconRestart/></IconButton>\n {\n !this.state.finished && this.state.paused ?\n <IconButton\n className={this.props.classes.buttonRun}\n disabled={disabled}\n onClick={() => this.onResume()}\n title={I18n.t('Resume execution')}\n size=\"medium\"><IconRun/></IconButton>\n :\n !this.state.finished && <IconButton\n disabled={disabled}\n className={this.props.classes.buttonPause}\n onClick={() => this.onPause()}\n title={I18n.t('Pause execution')}\n size=\"medium\"><IconPause/></IconButton>\n }\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonNext}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onNext()}\n title={I18n.t('Go to next line')}\n size=\"medium\"><IconNext/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonStep}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepIn()}\n title={I18n.t('Step into function')}\n size=\"medium\"><IconStep/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonOut}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepOut()}\n title={I18n.t('Step out from function')}\n size=\"medium\"><IconOut/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonException}\n color={this.state.stopOnException ? 'primary' : 'default'}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onToggleException()}\n title={I18n.t('Stop on exception')}\n size=\"medium\"><IconException/></IconButton>}\n {this.renderTabs()}\n </Toolbar>\n );\n }\n\n getPossibleBreakpoints(bp) {\n const end = {...bp, columnNumber: 1000};\n this.sendToInstance({cmd: 'getPossibleBreakpoints', start: bp, end});\n }\n\n toggleBreakpoint(lineNumber) {\n let bp = this.state.breakpoints.find(item => item.location.scriptId === this.state.selected && item.location.lineNumber === lineNumber);\n if (bp) {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n this.setState({breakpoints}, () =>\n this.sendToInstance({breakpoints: [bp.id], cmd: 'cb'}));\n } else {\n bp = {scriptId: this.state.selected, lineNumber, columnNumber: 0};\n this.getPossibleBreakpoints(bp);\n }\n }\n\n renderCode() {\n if (this.state.script && this.state.started) {\n const breakpoints = this.state.breakpoints.filter(bp => bp.location.scriptId === this.state.selected);\n\n return <Editor\n runningInstances={this.props.runningInstances}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n scriptName={this.state.tabs[this.state.selected]}\n sourceId={this.state.selected}\n script={this.state.script}\n paused={this.state.paused}\n breakpoints={breakpoints}\n location={this.state.location}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n onToggleBreakpoint={i => this.toggleBreakpoint(i)}\n />\n }\n }\n\n renderFrames() {\n if (!this.state.paused) {\n return null;\n }\n\n return <Stack\n currentScriptId={this.state.selected}\n scopes={this.state.scopes}\n expressions={this.state.expressions}\n themeType={this.props.themeType}\n callFrames={this.state.context?.callFrames}\n currentFrame={this.state.currentFrame}\n onChangeCurrentFrame={i => {\n this.setState({currentFrame: i, scopes: {}}, () => {\n this.readCurrentScope();\n this.readExpressions();\n })\n }}\n onWriteScopeValue={obj => {\n this.sendToInstance({\n cmd: 'setValue',\n variableName: obj.variableName,\n scopeNumber: obj.scopeNumber,\n newValue: obj.newValue,\n callFrameId: obj.callFrameId\n });\n }}\n onExpressionDelete={i => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.splice(i, 1);\n this.setState({expressions});\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n onExpressionAdd={cb => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.push({name: '', value: {value: ''}});\n this.setState({expressions}, () => cb && cb(expressions.length - 1, this.state.expressions[expressions.length - 1]));\n }}\n onExpressionNameUpdate={(i, name, cb) => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n if (!name) {\n expressions.splice(i, 1);\n } else if (expressions.find(item => item.name === name)) {\n return cb && cb(false);\n } else {\n expressions[i].name = name;\n }\n\n this.setState({expressions}, () => {\n name && this.readExpressions(i);\n cb && cb();\n });\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n />;\n }\n\n renderConsole() {\n return <Console\n theme={this.props.theme}\n console={this.state.console}\n onClearAllLogs={() => this.setState({console: [], logErrors: 0, logWarning: 0, logs: 0})}\n />;\n }\n\n renderTools() {\n const disabled = !this.state.tabs || !this.state.started;\n\n let _console;\n if (this.state.logErrors) {\n _console = <Badge badgeContent={this.state.logErrors} color=\"error\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logWarnings) {\n _console = <Badge badgeContent={this.state.logWarnings} color=\"secondary\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logs) {\n _console = <Badge badgeContent={this.state.logs} color=\"default\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else {\n _console = I18n.t('Console');\n }\n\n return <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n <Tabs\n classes={{root: this.props.classes.tabsRoot}}\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: '100%' }}\n value={this.state.toolsTab}\n onChange={(event, value) => {\n const newState = {toolsTab: value};\n\n // load logs from buffer\n if (this.console && value === 'console') {\n newState.console = this.console;\n this.console = null;\n newState.logs = 0;\n newState.logWarnings = 0;\n newState.logErrors = 0;\n }\n\n window.localStorage.setItem('javascript.tools.tab', value);\n\n this.setState(newState);\n }}\n scrollButtons=\"auto\"\n >\n <Tab classes={{root: this.props.classes.tabRoot}} disabled={disabled} label={I18n.t('Stack')} value=\"stack\"/>\n <Tab\n classes={{root: this.props.classes.tabRoot}}\n disabled={disabled}\n label={_console}\n value=\"console\"\n />\n </Tabs>\n <div style={{width: '100%', height: 'calc(100% - 36px)', overflow: 'hidden'}}>\n {this.state.toolsTab === 'stack' && !disabled ? this.renderFrames() : null}\n {this.state.toolsTab === 'console' && !disabled ? this.renderConsole() : null}\n </div>\n </div>;\n }\n\n render() {\n return <div key=\"debugger\" style={this.props.style} className={clsx(this.props.classes.root, this.props.className)}>\n {this.state.starting ? <LinearProgress/> : null}\n {this.renderToolbar()}\n <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryMinSize={100}\n vertical={true}\n secondaryInitialSize={this.toolSize}\n onSecondaryPaneSizeChange={size => this.toolSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.toolSize', this.toolSize.toString())}\n //style={{width: '100%', height: 'calc(100% - 73px)', overflow: 'hidden'}}\n >\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderCode()}\n {this.renderQueryBreakpoints()}\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderTools()}\n </div>\n </SplitterLayout>\n {this.renderError()}\n </div>;\n }\n}\n\nDebugger.propTypes = {\n runningInstances: PropTypes.object,\n adapterName: PropTypes.string,\n src: PropTypes.string,\n socket: PropTypes.object.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n themeType: PropTypes.string,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n debugInstance: PropTypes.object,\n};\n\nexport default withStyles(styles)(Debugger);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Tour from 'reactour';\n\nimport Toolbar from '@mui/material/Toolbar';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Badge from '@mui/material/Badge';\nimport Snackbar from '@mui/material/Snackbar';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { red, green } from '@mui/material/colors';\n\nimport { MdSave as IconSave } from 'react-icons/md';\nimport { MdCancel as IconCancel } from 'react-icons/md';\nimport { MdClose as IconClose } from 'react-icons/md';\nimport { MdRefresh as IconRestart } from 'react-icons/md';\nimport { MdInput as IconDoEdit } from 'react-icons/md';\nimport { FaClock as IconCron } from 'react-icons/fa';\nimport { FaClipboardList as IconSelectId } from 'react-icons/fa';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport { FaFileImport as IconImport } from 'react-icons/fa';\nimport { FaFlagCheckered as IconCheck } from 'react-icons/fa';\nimport { MdGpsFixed as IconLocate } from 'react-icons/md';\nimport { MdClearAll as IconCloseAll } from 'react-icons/md';\nimport { MdBuild as IconDebugMenu } from 'react-icons/md';\nimport { MdBugReport as IconDebug } from 'react-icons/md';\nimport { MdPlaylistAddCheck as IconVerbose } from 'react-icons/md';\nimport { MdBugReport as IconDebugMode } from 'react-icons/md';\nimport { MdPlayArrow as IconPlay } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgBlockly2Js from './assets/blockly2js.png';\nimport ImgRules2Js from './assets/rules2js.png';\nimport ImgRules from './assets/rules.png';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogCron from '@iobroker/adapter-react-v5/Dialogs/Cron';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\n\nimport ScriptEditorComponent from './Components/ScriptEditorVanilaMonaco';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport DialogScriptEditor from './Dialogs/ScriptEditor';\nimport RulesEditor from './Components/RulesEditor';\nimport Debugger from './Components/Debugger';\nimport steps, { STEPS } from './Components/RulesEditor/helpers/Tour';\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n 'Rules': ImgRules,\n def: ImgJS,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_DEBUG = '#02a102';\nconst COLOR_VERBOSE = '#70aae9';\nconst COLOR_RUN = green[400];\nconst COLOR_PAUSE = red[400];\n\nconst styles = theme => ({\n\n toolbar: {\n minHeight: 38,//Theme.toolbar.height,\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)'\n },\n toolbarButtons: {\n padding: 4,\n marginLeft: 4\n },\n toolbarButtonsDisabled: {\n filter: 'grayscale(100%)',\n opacity: 0.5,\n },\n editorDiv: {\n height: `calc(100% - ${theme.toolbar.height + 38/*Theme.toolbar.height */ + 5}px)`,\n width: '100%',\n overflow: 'hidden',\n position: 'relative'\n },\n textButton: {\n marginRight: 10,\n minHeight: 24,\n padding: '6px 16px'\n },\n saveButton: {\n background: '#ff9900'\n },\n textIcon: {\n marginLeft: theme.spacing(1),\n },\n tabIcon: {\n width: 24,\n height: 24,\n verticalAlign: 'middle',\n marginBottom: 2,\n marginRight: 2,\n borderRadius: 3\n },\n hintIcon: {\n //fontSize: 32,\n padding: '0 8px 0 8px'\n },\n hintText: {\n //fontSize: 18\n },\n hintButton: {\n marginTop: 8,\n marginLeft: 20\n },\n tabMenuButton: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n tabChanged: {\n color: theme.palette.secondary.main\n },\n tabText: {\n maxWidth: 130,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n tabChangedIcon: {\n color: '#FF0000',\n fontSize: 16\n },\n closeButton: {\n position: 'absolute',\n top: 0,\n right: -5,\n zIndex: 10,\n padding: 8,\n cursor: 'pointer'\n },\n closeButtonIcon: {\n background: theme.palette.mode === 'dark' ? '#000' : '#FFF',\n borderRadius: '50%',\n opacity: 0.7,\n },\n notRunning: {\n color: '#ffbc00',\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n tabButton: {\n minHeight: 48,\n },\n tabButtonWrapper: {\n display: 'inline-block',\n },\n menuIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginRight: 5\n },\n});\n\nclass Editor extends React.Component {\n constructor(props) {\n super(props);\n\n const selected = window.localStorage.getItem('Editor.selected') || '';\n let editing = window.localStorage.getItem('Editor.editing') || '[]';\n try {\n editing = JSON.parse(editing);\n } catch (e) {\n editing = [];\n }\n if (selected && editing.indexOf(selected) === -1) {\n editing.push(selected);\n }\n\n this.tabsRef = React.createRef();\n\n this.state = {\n selected: selected,\n editing: editing, // array of opened scripts\n changed: {}, // for every script\n blockly: null,\n rules: null,\n debugEnabled: false,\n verboseEnabled: false,\n showCompiledCode: false,\n showSelectId: false,\n showCron: false,\n showScript: false,\n insert: '',\n searchText: '',\n themeType: this.props.themeType,\n visible: props.visible,\n cmdToBlockly: '',\n cmdToRules: '',\n menuOpened: !!this.props.menuOpened,\n menuTabsOpened: false,\n menuTabsAnchorEl: null,\n runningInstances: this.props.runningInstances || {},\n showDebugMenu: false,\n toast: '',\n instancesLoaded: false,\n isTourOpen: window.localStorage.getItem('tour') !== 'true',\n tourStep: STEPS.selectTriggers,\n showAdapterDebug: false,\n };\n\n this.setChangedInAdmin();\n\n /* ----------------------- */\n // required by selectIdDialog in Blockly\n this.selectId = {\n initValue: null,\n callback: null\n };\n this.cron = {\n initValue: null,\n callback: null\n };\n this.scriptDialog = {\n initValue: null,\n callback: null,\n args: null,\n isReturn: false\n };\n\n window.systemLang = I18n.getLanguage();\n window.main = {\n objects: {},\n getObject: (id, cb) => this.props.socket.getObject(id).then(obj => cb && cb(null, obj)).catch(err => cb && cb(err)),\n instances: [],\n selectIdDialog: (initValue, type, cb) => {\n if (typeof type === 'function') {\n cb = type;\n type = null;\n }\n this.selectId.callback = cb;\n this.selectId.initValue = initValue;\n this.selectId.type = type;\n this.setState({ showSelectId: true });\n },\n cronDialog: (initValue, cb) => {\n this.cron.callback = cb;\n this.cron.initValue = initValue;\n this.setState({ showCron: true });\n },\n showScriptDialog: (value, args, isReturn, cb) => {\n this.scriptDialog.callback = cb;\n this.scriptDialog.initValue = value;\n this.scriptDialog.args = args;\n this.scriptDialog.isReturn = isReturn || false;\n this.setState({ showScript: true });\n }\n };\n\n this.objects = props.objects;\n /* ----------------------- */\n\n this.scripts = {};\n\n if (!this.state.selected && this.state.editing.length) {\n this.state.selected = this.state.editing[0];\n }\n\n this.getAllAdapterInstances()\n .then(() => {\n // to enable logging\n if (this.props.onSelectedChange && this.state.selected) {\n setTimeout(() => this.props.onSelectedChange(this.state.selected, this.state.editing), 100);\n }\n });\n }\n\n getAllAdapterInstances() {\n return this.props.socket.getAdapterInstances(true)\n .then(instanceObjects => {\n const objects = {};\n const instances = instanceObjects.map(obj => {\n objects[obj._id] = obj;\n return obj._id;\n });\n window.main.objects = objects;\n window.main.instances = instances;\n this.setState({ instancesLoaded: true });\n });\n }\n\n onInstanceChanged = (id, obj) => {\n if (!id) {\n return;\n }\n\n if (!obj && window.main.instances.includes[id]) {\n delete window.main.objects[id];\n const pos = window.main.instances.indexOf(id);\n window.main.instances.splice(pos, 1);\n } else\n if (obj && obj.type === 'instance') {\n // update instances\n if (!window.main.instances.includes(id)) {\n window.main.instances.push(id);\n window.main.instances.sort();\n }\n window.main.objects[id] = obj;\n }\n };\n\n setChangedInAdmin() {\n const isChanged = Object.keys(this.state.changed).find(id => this.state.changed[id]);\n\n if (typeof window.parent !== 'undefined' && window.parent) {\n window.parent.configNotSaved = !!isChanged;\n }\n }\n\n componentDidMount() {\n window.addEventListener('beforeunload', this.onBrowserClose, false);\n this.props.socket.subscribeObject('system.adapter.*', this.onInstanceChanged);\n }\n\n componentWillUnmount() {\n window.removeEventListener('beforeunload', this.onBrowserClose);\n this.props.socket.unsubscribeObject('system.adapter.*', this.onInstanceChanged);\n }\n\n onBrowserClose = e => {\n const isChanged = Object.keys(this.scripts).find(id =>\n JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common));\n\n if (!!isChanged) {\n console.log('Script ' + JSON.stringify(this.scripts[isChanged]));\n const message = I18n.t('Configuration not saved.');\n e = e || window.event;\n // For IE and Firefox\n if (e) {\n e.returnValue = message;\n }\n\n // For Safari\n return message;\n }\n };\n\n removeNonExistingScripts(nextProps, newState) {\n nextProps = nextProps || this.props;\n newState = newState || {};\n\n let _changed = false;\n if (this.state.editing) {\n const isAnyNonExists = this.state.editing.find(id => !nextProps.objects[id]);\n\n if (isAnyNonExists) {\n // remove non-existing scripts\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n for (let i = editing.length - 1; i >= 0; i--) {\n if (!this.objects[editing[i]]) {\n _changed = true;\n editing.splice(i, 1);\n }\n }\n if (_changed) {\n newState.editing = editing;\n }\n if (this.state.selected && !this.objects[this.state.selected]) {\n _changed = true;\n newState.selected = editing[0] || '';\n if (this.scripts[newState.selected]) {\n if (this.state.blockly !== (this.scripts[newState.selected].engineType === 'Blockly')) {\n newState.blockly = this.scripts[newState.selected].engineType === 'Blockly';\n _changed = true;\n }\n if (this.state.rules !== (this.scripts[newState.selected].engineType === 'Rules')) {\n newState.rules = this.scripts[newState.selected].engineType === 'Rules';\n _changed = true;\n }\n if (this.state.verboseEnabled !== this.scripts[newState.selected].verbose) {\n newState.verboseEnabled = this.scripts[newState.selected].verbose;\n _changed = true;\n }\n if (this.state.debugEnabled !== this.scripts[newState.selected].debug) {\n newState.debugEnabled = this.scripts[newState.selected].debug;\n _changed = true;\n }\n }\n }\n }\n }\n return _changed;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const newState = {};\n let _changed = false;\n\n if (JSON.stringify(nextProps.runningInstances) !== JSON.stringify(this.state.runningInstances)) {\n _changed = true;\n newState.runningInstances = nextProps.runningInstances;\n }\n\n if (this.state.menuOpened !== nextProps.menuOpened) {\n newState.menuOpened = nextProps.menuOpened;\n _changed = true;\n }\n\n if (this.state.themeType !== nextProps.themeType) {\n newState.themeType = nextProps.themeType;\n _changed = true;\n }\n\n // check if all opened files still exists\n if (this.removeNonExistingScripts(nextProps, newState)) {\n _changed = true;\n }\n\n // update search text\n if (this.state.searchText !== nextProps.searchText) {\n newState.searchText = nextProps.searchText;\n _changed = true;\n }\n\n // if objects read\n if (this.objects !== nextProps.objects) {\n this.objects = nextProps.objects;\n window.main.objects = nextProps.objects;\n\n // update all scripts\n Object.keys(this.scripts).forEach(id => {\n const source = this.scripts[id].source;\n this.scripts[id] = JSON.parse(JSON.stringify(this.objects[id].common));\n this.scripts[id].source = source;\n });\n\n // if script is blockly\n if (this.state.selected && this.objects[this.state.selected]) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.objects[this.state.selected].common));\n if (this.state.blockly !== (this.scripts[this.state.selected].engineType === 'Blockly')) {\n newState.blockly = this.scripts[this.state.selected].engineType === 'Blockly';\n _changed = true;\n }\n if (this.state.rules !== (this.scripts[this.state.selected].engineType === 'Rules')) {\n newState.rules = this.scripts[this.state.selected].engineType === 'Rules';\n _changed = true;\n }\n if (this.state.verboseEnabled !== this.scripts[this.state.selected].verbose) {\n newState.verboseEnabled = this.scripts[this.state.selected].verbose;\n _changed = true;\n }\n if (this.state.debugEnabled !== this.scripts[this.state.selected].debug) {\n newState.debugEnabled = this.scripts[this.state.selected].debug;\n _changed = true;\n }\n }\n\n // remove non-existing scripts\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n for (let i = editing.length - 1; i >= 0; i--) {\n if (!this.objects[editing[i]]) {\n _changed = true;\n editing.splice(i, 1);\n if (this.state.changed[editing[i]] !== undefined) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n delete newState.changed[editing[i]];\n }\n }\n }\n if (this.state.selected && !this.objects[this.state.selected]) {\n newState.selected = editing[0] || '';\n }\n if (_changed) {\n newState.editing = editing;\n }\n } else {\n // update all scripts\n for (const id in this.scripts) {\n if (!this.scripts.hasOwnProperty(id)) continue;\n if (this.objects[id] && this.objects[id].common) {\n const oldSource = this.scripts[id].source;\n const commonLocal = JSON.parse(JSON.stringify(this.scripts[id]));\n commonLocal.source = this.objects[id].common.source;\n // if anything except source was changed\n if (JSON.stringify(commonLocal) !== JSON.stringify(this.objects[id].common)) {\n this.scripts[id] = JSON.parse(JSON.stringify(this.objects[id].common));\n this.scripts[id].source = oldSource;\n }\n\n if (oldSource !== this.objects[id].common.source) {\n // take new script if it not yet changed\n if (!this.state.changed[id]) {\n // just use new value\n this.scripts[id].source = this.objects[id].common.source;\n } else {\n if (this.objects[id].from && this.objects[id].from.startsWith('system.adapter.javascript.')) {\n this.objects[id].from = 'system.adapter.admin.0';\n // show that script was changed from outside\n this.setState({ toast: I18n.t('Script %s was modified on disk.', id.split('.').pop()) });\n }\n }\n } else {\n if (this.state.changed[id]) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[id] = false;\n _changed = true;\n }\n }\n } else {\n delete this.scripts[id];\n if (this.state.selected === id) {\n if (this.state.editing.indexOf(id) !== -1) {\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n const pos = editing.indexOf(id);\n if (pos !== -1) {\n editing.splice(pos, 1);\n newState.editing = editing;\n _changed = true;\n }\n }\n newState.selected = this.state.editing[0] || '';\n _changed = true;\n }\n }\n }\n }\n\n if (this.state.selected !== nextProps.selected && nextProps.selected) {\n if (nextProps.selected) {\n this.scripts[nextProps.selected] = this.scripts[nextProps.selected] || JSON.parse(JSON.stringify(this.props.objects[nextProps.selected].common));\n }\n\n const nextCommon = this.props.objects[nextProps.selected] && this.props.objects[nextProps.selected].common;\n\n const changed = nextCommon && JSON.stringify(this.scripts[nextProps.selected]) !== JSON.stringify(nextCommon);\n\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n if (nextProps.selected && editing.indexOf(nextProps.selected) === -1) {\n editing.push(nextProps.selected);\n this.props.onSelectedChange(nextProps.selected, editing);\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n }\n\n _changed = true;\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[nextProps.selected] = changed;\n newState.editing = editing;\n newState.selected = nextProps.selected;\n newState.blockly = this.scripts[nextProps.selected].engineType === 'Blockly';\n newState.rules = this.scripts[nextProps.selected].engineType === 'Rules';\n newState.verboseEnabled = this.scripts[nextProps.selected].verbose;\n newState.debugEnabled = this.scripts[nextProps.selected].debug;\n newState.showCompiledCode = false;\n } else {\n\n }\n\n if (this.state.visible !== nextProps.visible) {\n _changed = true;\n newState.visible = nextProps.visible;\n }\n\n _changed && this.setState(newState, () => this.setChangedInAdmin());\n }\n\n onRestart() {\n this.props.onRestart && this.props.onRestart(this.state.selected);\n }\n\n onStartStop() {\n const common = JSON.parse(JSON.stringify(this.scripts[this.state.selected]));\n common.enabled = !common.enabled;\n this.props.onChange && this.props.onChange(this.state.selected, common);\n }\n\n onSave() {\n if (this.state.isTourOpen && this.state.tourStep === STEPS.saveTheScript) {\n this.setState({ isTourOpen: false });\n window.localStorage.setItem('tour', 'true');\n }\n\n if (this.state.changed[this.state.selected]) {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = false;\n this.setState({ changed }, () => {\n this.setChangedInAdmin();\n this.props.onChange && this.props.onChange(this.state.selected, this.scripts[this.state.selected]);\n });\n }\n }\n\n onSaveAll() {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n Object.keys(changed)\n .forEach(id => {\n if (changed[id]) {\n changed[id] = false;\n this.props.onChange && this.props.onChange(id, this.scripts[id]);\n }\n });\n\n this.setState({ changed }, () =>\n this.setChangedInAdmin());\n }\n\n onCancel() {\n this.scripts[this.state.selected] = JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = false;\n\n this.setState({ changed }, () => this.setChangedInAdmin());\n }\n\n onRegisterSelect(func) {\n this.getSelect = func;\n }\n\n onConvertBlockly2JS() {\n this.showConfirmDialog(I18n.t('It will not be possible to revert this operation.'), result => {\n if (result) {\n this.scripts[this.state.selected].engineType = 'Javascript/js';\n let source = this.scripts[this.state.selected].source;\n const lines = source.split('\\n');\n lines.pop();\n this.scripts[this.state.selected].source = lines.join('\\n');\n const nowSelected = this.state.selected;\n\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = true;\n\n this.setState({ changed, blockly: false, selected: '' }, () => {\n this.setChangedInAdmin();\n // force update of the editor\n setTimeout(() => this.setState({ selected: nowSelected }), 100);\n });\n }\n });\n }\n\n onChange(options) {\n options = options || {};\n if (options.script !== undefined) {\n this.scripts[this.state.selected].source = options.script;\n }\n if (options.debug !== undefined) {\n this.scripts[this.state.selected].debug = options.debug;\n }\n if (options.verbose !== undefined) {\n this.scripts[this.state.selected].verbose = options.verbose;\n }\n const _changed = JSON.stringify(this.scripts[this.state.selected]) !== JSON.stringify(this.props.objects[this.state.selected].common);\n if (_changed !== (this.state.changed[this.state.selected] || false)) {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = _changed;\n this.objects[this.state.selected].from = 'system.adapter.admin.0';\n this.setState({ changed }, () => this.setChangedInAdmin());\n\n }\n }\n\n onTabChange(event, selected) {\n if (this.props.debugMode) {\n return;\n }\n window.localStorage && window.localStorage.setItem('Editor.selected', selected);\n const common = this.scripts[selected] || (this.props.objects[selected] && this.props.objects[selected].common);\n this.setState({\n selected,\n rules: common.engineType === 'Rules',\n blockly: common.engineType === 'Blockly',\n showCompiledCode: false,\n verboseEnabled: common.verbose,\n debugEnabled: common.debug\n });\n this.props.onSelectedChange && this.props.onSelectedChange(selected, this.state.editing);\n }\n\n isScriptChanged(id) {\n return this.scripts[id] && this.props.objects[id] && JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common);\n }\n\n onTabClose(id, e) {\n e && e.stopPropagation();\n\n const pos = this.state.editing.indexOf(id);\n if (this.state.editing.includes(id)) {\n if (this.isScriptChanged(id)) {\n this.showConfirmDialog(I18n.t('Discard changes for %s', this.props.objects[id].common.name), ok => {\n if (ok) {\n delete this.scripts[id];\n this.onTabClose(id);\n }\n });\n } else {\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n editing.splice(pos, 1);\n const newState = { editing };\n if (id === this.state.selected) {\n if (editing.length) {\n if (pos === 0 || editing.length === 1) {\n newState.selected = editing[0];\n } else {\n newState.selected = editing[pos - 1];\n }\n } else {\n newState.selected = '';\n }\n } else if (this.state.selected && !editing.length) {\n newState.selected = '';\n }\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n if (newState.selected !== undefined) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[newState.selected] = this.isScriptChanged(newState.selected);\n const common = newState.selected && (this.scripts[newState.selected] || (this.props.objects[newState.selected] && this.props.objects[newState.selected].common));\n newState.blockly = common ? common.engineType === 'Blockly' : false;\n newState.rules = common ? common.engineType === 'Rules' : false;\n newState.verboseEnabled = common ? common.verbose : false;\n newState.debugEnabled = common ? common.debug : false;\n newState.showCompiledCode = false;\n }\n\n this.setState(newState, () => {\n this.setChangedInAdmin();\n\n if (newState.selected !== undefined) {\n this.props.onSelectedChange && this.props.onSelectedChange(newState.selected, this.state.editing);\n window.localStorage && window.localStorage.setItem('Editor.selected', newState.selected);\n } else {\n this.props.onSelectedChange && this.props.onSelectedChange(this.state.selected, this.state.editing);\n }\n });\n }\n }\n }\n\n showConfirmDialog(question, cb) {\n this.confirmCallback = cb;\n this.setState({ confirm: question });\n }\n\n sendCommandToBlockly(cmd) {\n this.setState({ cmdToBlockly: cmd }, () =>\n setTimeout(() =>\n this.setState({ cmdToBlockly: '' }), 200));\n }\n\n sendCommandToRules(cmd) {\n this.setState({ cmdToRules: cmd }, () =>\n setTimeout(() =>\n this.setState({ cmdToRules: '' }), 200));\n }\n\n static getText(text) {\n if (typeof text === 'object') {\n return text[I18n.getLanguage()] || text.en;\n }\n return text;\n }\n\n getScriptFullName(id) {\n const parts = id.split('.');\n parts.shift(); // remove \"script.\"\n parts.shift(); // remove \"js.\"\n const result = [];\n let _id = 'script.js';\n for (let i = 0; i < parts.length; i++) {\n _id += '.' + parts[i];\n if (this.props.objects[_id] && this.props.objects[_id].common) {\n result.push(Editor.getText(this.props.objects[_id].common.name));\n } else {\n result.push(parts[i]);\n }\n }\n return `/ ${result.join(' / ')}`;\n }\n\n getTabs() {\n if (this.state.editing.length) {\n return [<Tabs\n component={'div'}\n key=\"tabs1\"\n value={this.props.debugInstance ? this.props.debugInstance.adapter : this.state.selected}\n onChange={(event, value) => this.onTabChange(event, value)}\n indicatorColor=\"primary\"\n style={{ position: 'relative', marginLeft: 10, width: this.state.editing.length > 1 ? 'calc(100% - 50px)' : '100%', display: 'inline-block' }}\n textColor=\"primary\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {this.state.editing.map(id => {\n if (!this.props.objects[id]) {\n const label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{id.split('.').pop()}</div>,\n <span key=\"icon\" className={this.props.classes.closeButton}>\n <IconClose className={this.props.classes.closeButtonIcon} onClick={e => this.onTabClose(id, e)} fontSize=\"small\" />\n </span>];\n return <Tab\n wrapped\n component={'div'}\n href={'#' + id}\n key={id}\n label={label}\n value={id}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n />;\n } else {\n let text = Editor.getText(this.props.objects[id].common.name) || '';\n let title = this.getScriptFullName(id);\n if (text.length > 18) {\n text = text.substring(0, 15) + '...';\n }\n const changed = this.props.objects[id].common && this.scripts[id] && this.props.objects[id].common.source !== this.scripts[id].source;\n const label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{text}</div>,\n changed ? <span key=\"changedSign\" className={this.props.classes.tabChangedIcon}>▣</span> : null,\n (!this.props.debugInstance && (!this.props.debugMode || this.state.selected !== id)) &&\n <span key=\"close\" className={this.props.classes.closeButton}>\n <IconClose className={this.props.classes.closeButtonIcon} onClick={e => this.onTabClose(id, e)} fontSize=\"small\" />\n </span>,\n ];\n\n return <Tab\n disabled={this.props.debugInstance || (this.state.selected !== id && this.props.debugMode)}\n wrapped\n component={'div'}\n iconPosition=\"start\"\n icon={<img key=\"icon\" alt=\"\" src={images[this.props.objects[id].common.engineType] || images.def} className={this.props.classes.tabIcon} />}\n href={'#' + id}\n key={id}\n label={label}\n className={this.props.classes.tabButton}\n value={id}\n title={title}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n />;\n }\n })}\n {this.props.debugInstance ? <Tab\n disabled={false}\n wrapped\n component={'div'}\n href={'#' + this.props.debugInstance.adapter}\n key={this.props.debugInstance.adapter}\n label={this.props.debugInstance.adapter}\n className={this.props.classes.tabButton}\n value={this.props.debugInstance.adapter}\n title={this.props.debugInstance.adapter}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n /> : ''}\n </Tabs>,\n this.state.editing.length > 1 ? <IconButton\n key=\"menuButton\"\n href=\"#\"\n aria-label=\"Close all but current\"\n className={this.props.classes.tabMenuButton}\n title={I18n.t('Close all but current')}\n aria-haspopup=\"false\"\n onClick={_event => {\n const editing = [this.state.selected];\n // Do not close not saved tabs\n Object.keys(this.scripts).forEach(id =>\n id !== this.state.selected &&\n JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common) &&\n editing.push(id)\n );\n\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n this.setState({ menuTabsOpened: false, menuTabsAnchorEl: null, editing: editing });\n }}\n size=\"medium\">\n <IconCloseAll />\n </IconButton> : null\n ];\n } else {\n return <div key=\"tabs2\" className={this.props.classes.toolbar}>\n <Button color=\"grey\" key=\"select1\" disabled={true} className={this.props.classes.hintButton} href=\"\">\n <span key=\"select2\">{I18n.t('Click on this icon')}</span>\n <IconDoEdit key=\"select3\" className={this.props.classes.hintIcon} />\n <span key=\"select4\">{I18n.t('for edit or create script')}</span>\n </Button>\n </div>;\n }\n }\n\n getDebugMenu() {\n if (!this.state.showDebugMenu) {\n return null;\n }\n\n return <Menu\n key=\"menuDebug\"\n id=\"menu-debug\"\n anchorEl={this.state.menuDebugAnchorEl}\n open={this.state.showDebugMenu}\n onClose={() => this.setState({ showDebugMenu: false, menuDebugAnchorEl: null })}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n },\n }}\n >\n <MenuItem key=\"debugEnabled\"\n title={I18n.t('debug_help')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ showDebugMenu: false, menuDebugAnchorEl: null, debugEnabled: !this.state.debugEnabled }, () => this.onChange({ debug: this.state.debugEnabled }));\n }}>\n <Checkbox checked={this.state.debugEnabled} />\n <IconDebug className={this.props.classes.menuIcon} style={{ color: COLOR_DEBUG }} />\n {I18n.t('debug_label')}\n </MenuItem>\n <MenuItem key=\"verboseEnabled\"\n title={I18n.t('verbose_help')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ showDebugMenu: false, menuDebugAnchorEl: null, verboseEnabled: !this.state.verboseEnabled }, () => this.onChange({ verbose: this.state.verboseEnabled }));\n }}>\n <Checkbox checked={this.state.verboseEnabled} />\n <IconVerbose className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />\n {I18n.t('verbose_label')}\n </MenuItem>\n </Menu>;\n }\n\n getDebugBadge() {\n return [\n this.state.debugEnabled && this.state.verboseEnabled && <IconDebug key=\"DebugVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />,\n this.state.debugEnabled && !this.state.verboseEnabled && <IconDebug key=\"DebugNoVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_DEBUG }} />,\n !this.state.debugEnabled && this.state.verboseEnabled && <IconVerbose key=\"noDebugVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />,\n ]\n }\n\n getAskAboutDebug() {\n if (this.state.askAboutDebug) {\n return <DialogConfirm\n onClose={() => {\n this.setState({ askAboutDebug: false }, () =>\n this.props.onDebugModeChange(true));\n }}\n ok={I18n.t('Yes')}\n cancel={I18n.t('Cancel')}\n text={I18n.t('The script will be stopped and must be activated manually after debugging. Continue?')}\n />;\n } else {\n return null;\n }\n }\n\n getToolbar() {\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n const isScriptRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].enabled;\n\n if (this.state.selected) {\n const changedAll = Object.keys(this.state.changed).filter(id => this.state.changed[id]).length;\n const changed = this.state.changed[this.state.selected];\n return (\n <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n {!this.props.debugInstance && this.state.menuOpened && this.props.onLocate && <IconButton\n className={this.props.classes.toolbarButtons}\n key=\"locate\"\n title={I18n.t('Locate file')}\n onClick={() => this.props.onLocate(this.state.selected)}\n size=\"medium\"\n >\n <IconLocate />\n </IconButton>}\n {!this.props.debugInstance && !changed && isInstanceRunning && <IconButton\n key=\"restart\"\n disabled={this.props.debugMode}\n variant=\"contained\"\n className={this.props.classes.toolbarButtons}\n onClick={() => this.onRestart()}\n title={I18n.t('Restart')}\n size=\"medium\"\n >\n <IconRestart />\n </IconButton>}\n {!this.props.debugInstance && !changed && <IconButton\n key=\"start-stop\"\n disabled={this.props.debugMode}\n variant=\"contained\"\n className={this.props.classes.toolbarButtons}\n onClick={() => this.onStartStop()}\n title={isScriptRunning ? I18n.t('Pause script') : I18n.t('Run script')}\n size=\"medium\"\n style={{ color: isScriptRunning ? COLOR_RUN : COLOR_PAUSE }}\n >\n {isScriptRunning ? <IconPause /> : <IconPlay />}\n </IconButton>}\n {!this.props.debugInstance && !changed && !isScriptRunning && <span className={this.props.classes.notRunning}>{I18n.t('Script is not running')}</span>}\n {!changed && isScriptRunning && !isInstanceRunning && <span className={this.props.classes.notRunning}>{I18n.t('Instance is disabled')}</span>}\n {changed && <Button color=\"grey\" key=\"save\" variant=\"contained\" className={clsx(this.props.classes.textButton, this.props.classes.saveButton, 'button-save')} onClick={() => this.onSave()}>{I18n.t('Save')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {(changedAll > 1 || (changedAll === 1 && !changed)) && <Button color=\"grey\" key=\"saveall\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onSaveAll()}>{I18n.t('Save all')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {changed && <Button color=\"grey\" key=\"cancel\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onCancel()}>{I18n.t('Cancel')}<IconCancel className={this.props.classes.textIcon} /></Button>}\n <div style={{ flex: 2 }} />\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"export\"\n aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('export')}\n size=\"medium\"\n >\n <IconExport />\n </IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"import\"\n aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('import')}\n size=\"medium\"\n >\n <IconImport />\n </IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"check\"\n aria-label=\"Check code\"\n title={I18n.t('Check blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('check')}\n size=\"medium\"\n >\n <IconCheck />\n </IconButton>}\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton\n key=\"select-cron\"\n aria-label=\"create CRON\"\n title={I18n.t('Create or edit CRON or time wizard')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.setState({ showCron: true })}\n size=\"medium\"\n >\n <IconCron />\n </IconButton>}\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton\n key=\"select-id\"\n aria-label=\"select ID\"\n title={I18n.t('Insert object ID')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.setState({ showSelectId: true })}\n size=\"medium\"\n >\n <IconSelectId />\n </IconButton>}\n\n {this.state.blockly && !this.state.rules && this.state.showCompiledCode && <Button color=\"grey\" key=\"convert2js\" aria-label=\"convert to javascript\"\n title={I18n.t('Convert blockly to javascript for ever.')}\n onClick={() => this.onConvertBlockly2JS()}\n >Blockly=>JS</Button>}\n {this.state.rules && !this.state.showCompiledCode &&\n <IconButton\n key=\"export\"\n aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('export')}\n size=\"medium\"\n >\n <IconExport />\n </IconButton>}\n {this.state.rules && !this.state.showCompiledCode &&\n <IconButton\n key=\"import\"\n aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('import')}\n size=\"medium\"\n >\n <IconImport />\n </IconButton>}\n\n {this.props.expertMode && !changed && (this.props.debugMode || (!this.state.blockly && !this.state.rules) || ((this.state.blockly || this.state.rules) && this.state.showCompiledCode)) && <IconButton\n className={this.props.classes.toolbarButtons}\n color={this.props.debugMode ? 'primary' : 'default'}\n disabled={!this.props.debugMode && !isInstanceRunning}\n onClick={() => {\n if (!this.props.debugMode && isScriptRunning) {\n this.setState({ askAboutDebug: true })\n } else {\n this.props.onDebugModeChange(!this.props.debugMode);\n }\n }}\n size=\"medium\"\n >\n <IconDebugMode style={{ fontSize: 32 }} />\n </IconButton>}\n\n {(this.state.blockly || this.state.rules) && <Button\n key=\"blockly-code\"\n aria-label=\"blockly\"\n title={I18n.t('Show javascript code')}\n className={clsx(this.props.classes.toolbarButtons, 'button-js-code', this.props.debugMode && this.props.classes.toolbarButtonsDisabled)}\n color={this.state.showCompiledCode ? 'secondary' : 'inherit'}\n disabled={this.props.debugMode}\n style={{ padding: '0 5px' }}\n onClick={() => {\n if (this.props.debugMode) {\n return;\n }\n this.setState({ showCompiledCode: !this.state.showCompiledCode });\n this.state.isTourOpen && this.state.tourStep === STEPS.showJavascript && this.setState({ tourStep: STEPS.switchBackToRules });\n this.state.isTourOpen && this.state.tourStep === STEPS.switchBackToRules && this.setState({ tourStep: STEPS.saveTheScript });\n }}>\n <img alt={this.state.blockly ? \"blockly2js\" : \"rules2js\"} src={this.state.blockly ? ImgBlockly2Js : ImgRules2Js} /></Button>}\n <IconButton\n key=\"debug\"\n disabled={this.props.debugMode}\n aria-label=\"Debug menu\"\n title={I18n.t('Debug options')}\n className={this.props.classes.toolbarButtons}\n onClick={e => this.setState({ showDebugMenu: true, menuDebugAnchorEl: e.currentTarget })}\n size=\"medium\"\n >\n <Badge className={this.props.classes.badgeMargin} badgeContent={this.getDebugBadge()}>\n <IconDebugMenu />\n </Badge>\n </IconButton>\n </Toolbar>\n );\n } else {\n return null;\n }\n }\n\n getScriptEditor() {\n if (!this.props.debugMode &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly !== null &&\n (!this.state.blockly || this.state.showCompiledCode) &&\n (!this.state.rules || this.state.showCompiledCode)\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv\">\n <ScriptEditorComponent\n key=\"scriptEditor1\"\n name={this.state.selected}\n adapterName={this.props.adapterName}\n insert={this.state.insert}\n onInserted={() => this.setState({ insert: '' })}\n onForceSave={() => this.onSave()}\n searchText={this.state.searchText}\n onRegisterSelect={func => this.onRegisterSelect(func)}\n readOnly={this.state.showCompiledCode}\n changed={this.state.changed[this.state.selected]}\n code={this.scripts[this.state.selected].source || ''}\n isDark={this.state.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n onChange={newValue => this.onChange({ script: newValue })}\n language={this.scripts[this.state.selected].engineType === 'TypeScript/ts' ? 'typescript' : 'javascript'}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getBlocklyEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"blocklyEditorDiv\">\n <BlocklyEditor\n command={this.state.cmdToBlockly}\n key=\"BlocklyEditor\"\n themeType={this.state.themeType}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getRulesEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n const isScriptRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].enabled;\n\n return <div className={clsx(this.props.classes.editorDiv)} key=\"flowEditorDiv\">\n <RulesEditor\n scriptId={this.state.selected}\n setTourStep={this.setTourStep}\n tourStep={this.state.tourStep}\n isTourOpen={this.state.isTourOpen}\n changed={this.state.changed[this.state.selected]}\n running={isInstanceRunning && isScriptRunning}\n command={this.state.cmdToRules}\n key=\"flowEditor\"\n themeType={this.state.themeType}\n themeName={this.props.themeName}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getConfirmDialog() {\n if (this.state.confirm) {\n return <DialogConfirm\n key=\"dialogConfirm1\"\n text={this.state.confirm}\n onClose={result => {\n if (this.confirmCallback) {\n const cb = this.confirmCallback;\n this.confirmCallback = null;\n cb(result);\n }\n this.setState({ confirm: '' });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getSelectIdDialog() {\n if (this.state.showSelectId) {\n let selectedId = this.selectId.callback ? this.selectId.initValue || '' : this.getSelect ? this.getSelect() : '';\n // it could be:\n // - 'id.xx'/* aksjdhsdf*/\n // - \"id.xx\"/* aksjdhsdf*/\n // - \"id.xx\"//\n let pos = selectedId.indexOf('/*');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n pos = selectedId.indexOf('//');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n let m = selectedId.match(/\"([^\"]+)\"/);\n if (m) {\n selectedId = m[1];\n }\n m = selectedId.match(/'([^']+)'/);\n if (m) {\n selectedId = m[1];\n }\n\n return <DialogSelectID\n key=\"dialogSelectID1\"\n imagePrefix=\"../..\"\n themeName={this.props.themeName}\n themeType={this.state.themeType}\n socket={this.props.socket}\n selected={selectedId}\n expertMode={this.selectId.type === 'script' ? true : undefined}\n // statesOnly={!this.selectId.type || this.selectId.type === 'state'}\n types={[this.selectId.type || 'state']}\n onClose={() => {\n this.setState({ showSelectId: false });\n if (this.selectId.callback) {\n this.selectId.callback = null;\n }\n }}\n onOk={(selected, name) => {\n this.selectId.initValue = null;\n if (this.selectId.callback) {\n this.selectId.callback(selected);\n this.selectId.callback = null;\n } else {\n this.setState({ insert: `'${selected}'/*${name}*/` })\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getCronDialog() {\n if (this.state.showCron) {\n return <DialogCron\n key=\"dialogCron1\"\n cron={this.cron.callback ? this.cron.initValue || '' : this.getSelect ? this.getSelect() : '* * * * *'}\n onClose={() => this.setState({ showCron: false })}\n onOk={cron => {\n this.cron.initValue = null;\n if (this.cron.callback) {\n this.cron.callback(cron);\n this.cron.callback = null;\n } else {\n this.setState({ insert: `'${cron}'` });\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getEditorDialog() {\n if (this.state.showScript) {\n return <DialogScriptEditor\n key=\"scriptEditorDialog\"\n adapterName={this.props.adapterName}\n source={this.scriptDialog.initValue}\n args={this.scriptDialog.args ? this.scriptDialog.args.join(', ') : ''}\n isReturn={this.scriptDialog.isReturn}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n themeType={this.state.themeType}\n onClose={result => {\n this.scriptDialog.initValue = null;\n if (this.scriptDialog.callback) {\n result !== false && this.scriptDialog.callback(result || '');\n this.scriptDialog.callback = null;\n }\n this.setState({ showScript: false });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getToast() {\n return <Snackbar\n key=\"toast\"\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={!!this.state.toast}\n autoHideDuration={6000}\n onClose={() => this.setState({ toast: '' })}\n ContentProps={{ 'aria-describedby': 'message-id' }}\n message={<span id=\"message-id\">{this.state.toast}</span>}\n action={[\n <IconButton\n key=\"close\"\n aria-label=\"close\"\n color=\"inherit\"\n className={this.props.classes.closeToast}\n onClick={() => this.setState({ toast: '' })}\n size=\"medium\"\n >\n <IconClose />\n </IconButton>,\n ]}\n />;\n }\n\n setTourStep = tourStep => this.setState({ tourStep });\n\n getTour() {\n if (this.state.instancesLoaded &&\n this.state.selected &&\n this.props.isAnyRulesExists === 1 &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n this.state.visible) {\n return <Tour\n key=\"tour\"\n steps={steps}\n isOpen={this.state.isTourOpen}\n onRequestClose={() => {\n this.setState({ isTourOpen: false });\n window.localStorage.setItem('tour', 'true');\n this.props.socket.setState('javascript.0.variables.rulesTour', { val: true, ack: true });\n }}\n //getCurrentStep={tourStep => this.setTourStep(tourStep)}\n goToStep={this.state.tourStep}\n />;\n }\n }\n\n getDebug() {\n if (this.props.debugMode) {\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n if (isInstanceRunning) {\n return <Debugger\n key=\"debugger\"\n runningInstances={this.state.runningInstances}\n adapterName={this.props.adapterName}\n socket={this.props.socket}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n src={this.props.debugInstance ? this.props.debugInstance.adapter : this.state.selected}\n debugInstance={this.props.debugInstance}\n />;\n } else {\n setTimeout(() => this.props.onDebugModeChange(false));\n return null;\n }\n } else {\n return null;\n }\n }\n\n render() {\n if (this.state.selected && this.props.objects[this.state.selected] && this.state.blockly === null && this.state.rules === null) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n setTimeout(() => {\n const newState = {\n blockly: this.scripts[this.state.selected].engineType === 'Blockly',\n rules: this.scripts[this.state.selected].engineType === 'Rules',\n showCompiledCode: false,\n debugEnabled: this.scripts[this.state.selected].debug,\n verboseEnabled: this.scripts[this.state.selected].verbose,\n };\n\n // check if all opened files still exists\n this.removeNonExistingScripts(null, newState);\n this.setState(newState);\n }, 100);\n }\n\n return [\n this.getTabs(),\n this.getToolbar(),\n this.getScriptEditor(),\n this.getAskAboutDebug(),\n this.getBlocklyEditor(),\n this.getRulesEditor(),\n this.getDebug(),\n this.getConfirmDialog(),\n this.getSelectIdDialog(),\n this.getCronDialog(),\n this.getEditorDialog(),\n this.getDebugMenu(),\n this.getToast(),\n this.getTour(),\n ];\n }\n}\n\nEditor.propTypes = {\n objects: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n adapterName: PropTypes.string.isRequired,\n selected: PropTypes.string.isRequired,\n onSelectedChange: PropTypes.func.isRequired,\n onRestart: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n visible: PropTypes.bool,\n menuOpened: PropTypes.bool,\n onLocate: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n searchText: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onDebugModeChange: PropTypes.func,\n debugMode: PropTypes.bool,\n debugInstance: PropTypes.object,\n expertMode: PropTypes.bool,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Dropzone from 'react-dropzone';\nimport DialogError from './Error';\nimport {MdFileUpload as IconUpload} from 'react-icons/md';\nimport {MdCancel as IconNo} from 'react-icons/md';\nimport {MdPlusOne as IconPlus} from 'react-icons/md';\n\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n dropzone: {\n marginTop: 20,\n width: '100%',\n borderWidth: 5,\n borderStyle: 'dashed',\n borderColor: '#d0cccc',\n textAlign: 'center',\n boxSizing: 'border-box',\n paddingTop: 45,\n borderRadius: 10,\n height: 'calc(100% - 10px)'\n },\n dropzoneDiv: {\n width: '100%',\n height: '100%'\n },\n dropzoneRejected: {\n borderColor: '#970000',\n },\n dropzoneAccepted: {\n borderColor: '#17cd02',\n },\n icon: {\n height: '30%',\n width: '30%',\n color: '#eeeeee',\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n zIndex: 0,\n },\n iconError: {\n color: '#ffc3c6',\n },\n iconOk: {\n color: '#aaeebc',\n },\n text: {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n color: '#868686',\n position: 'absolute',\n zIndex: 1,\n }\n});\n\nclass DialogImportFile extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n error: '',\n imageStatus: ''\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose();\n }\n\n onChange(e) {\n this.setState({text: e.target.value});\n }\n\n static readFileDataUrl(file, cb) {\n const reader = new FileReader();\n reader.onload = () => {\n cb(null, {data: reader.result, name: file.name});\n };\n reader.onabort = () => {\n console.error('file reading was aborted');\n cb(I18n.t('file reading was aborted'));\n };\n reader.onerror = (e) => {\n console.error('file reading has failed');\n cb(I18n.t('file reading has failed: %s', e));\n };\n\n reader.readAsDataURL(file)\n }\n\n handleDropFile(files) {\n if (files && files.hasOwnProperty('target')) {\n files = files.target.files;\n }\n\n if (!files && !files.length) {\n return;\n }\n\n const file = files[files.length - 1];\n\n if (!file) {\n return;\n }\n DialogImportFile.readFileDataUrl(file, (err, result) => {\n if (err) {\n this.setState({error: err})\n } else {\n this.props.onClose(result && result.data);\n }\n });\n }\n\n render() {\n const classes = this.props.classes;\n const className = classes.dropzone + ' ' + (this.state.imageStatus === 'accepted' ? classes.dropzoneAccepted : (this.state.imageStatus === 'rejected' ? classes.dropzoneRejected : ''));\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{paper: classes.dialog}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import scripts')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <Dropzone key='image-drop'\n\n maxSize={50000000}\n acceptClassName={classes.dropzoneAccepted}\n rejectClassName={classes.dropzoneRejected}\n onDrop={files => this.handleDropFile(files)}\n multiple={false}\n accept='application/zip,application/x-zip-compressed'\n className={className}>\n {\n ({ getRootProps, getInputProps, isDragActive, isDragReject}) => {\n if (isDragReject) {\n if (this.state.imageStatus !== 'rejected') {\n this.setState({imageStatus: 'rejected'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Some files will be rejected')}</span>\n <IconNo key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconError}/>\n </div>);\n } else if (isDragActive) {\n if (this.state.imageStatus !== 'accepted') {\n this.setState({imageStatus: 'accepted'});\n }\n\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('All files will be accepted')}</span>\n <IconPlus key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconOk}/>\n </div>);\n } else {\n if (this.state.imageStatus !== 'wait') {\n this.setState({imageStatus: 'wait'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Drop some files here or click...')}</span>\n <IconUpload key=\"icon\" className={this.props.classes.icon}/>\n </div>);\n }\n }\n }\n </Dropzone>\n {this.state.error ? (<DialogError text={this.state.error} onClose={() => this.setState({error: ''})}/>) : null}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImportFile.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nexport default withStyles(styles)(DialogImportFile);\n","import React from 'react';\n// import ReactDOM from 'react-dom';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport 'react-splitter-layout/lib/index.css';\n\nimport GenericApp from '@iobroker/adapter-react-v5/GenericApp';\nimport Loader from '@iobroker/adapter-react-v5/Components/Loader'\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nimport { MdMenu as IconMenuClosed } from 'react-icons/md';\nimport { MdArrowBack as IconMenuOpened } from 'react-icons/md';\nimport { MdVisibility as IconShowLog } from 'react-icons/md';\n\nimport SideMenu from './SideMenu';\nimport Log from './Log';\nimport Editor from './Editor';\nimport DialogError from './Dialogs/Error';\nimport DialogImportFile from './Dialogs/ImportFile';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport { ContextWrapper } from './Components/RulesEditor/components/ContextWrapper';\n\nconst styles = theme => ({\n root: {\n flexGrow: 1,\n display: 'flex',\n width: '100%',\n height: '100%'\n },\n menuDiv: {\n overflow: 'hidden',\n },\n splitterDivs: {\n '&>div': {\n overflow: 'hidden',\n width: '100%',\n height: '100%',\n },\n '& .layout-splitter': {\n background: theme.palette.mode === 'dark' ? '#595858' : '#ccc;'\n }\n },\n mainDiv: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n /*appBarWithMenu: {\n width: `calc(100% - ${Theme.menu.width}px)`,\n marginLeft: Theme.menu.width,\n },\n appBarWithoutMenu: {\n width: `100%`,\n marginLeft: 0,\n },*/\n content: {\n width: '100%',\n height: '100%',\n backgroundColor: theme.palette.background && theme.palette.background.default,\n position: 'relative'\n },\n splitterDivWithMenu: {\n width: `calc(100% - 300px)`,\n height: '100%'\n },\n menuDivWithoutMenu: {\n '&>div:first-child': {\n display: 'none'\n },\n '&>.layout-splitter': {\n display: 'none'\n },\n },\n progress: {\n margin: 100\n },\n menuOpenCloseButton: {\n position: 'absolute',\n left: 0,\n borderRadius: '0 5px 5px 0',\n top: 6,\n paddingTop: 8,\n cursor: 'pointer',\n zIndex: 1,\n height: 25,\n width: 20,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 3,\n '&:hover': {\n color: 'white'\n }\n },\n showLogButton: {\n position: 'absolute',\n right: 3,\n borderRadius: '5px 5px 0 0',\n bottom: 0,\n paddingTop: 3,\n cursor: 'pointer',\n zIndex: 10,\n height: 20,\n width: 25,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 8,\n '&:hover': {\n color: 'white'\n }\n }\n});\n\nclass App extends GenericApp {\n constructor(props) {\n super(props, {\n translations: {\n en: require('./i18n/en'),\n de: require('./i18n/de'),\n es: require('./i18n/es'),\n fr: require('./i18n/fr'),\n it: require('./i18n/it'),\n nl: require('./i18n/nl'),\n pl: require('./i18n/pl'),\n pt: require('./i18n/pt'),\n ru: require('./i18n/ru'),\n uk: require('./i18n/uk'),\n 'zh-cn': require('./i18n/zh-cn'),\n },\n bottomButtons: false,\n socket: {\n autoSubscribeLog: true,\n },\n sentryDSN: window.sentryDSN,\n });\n\n // this.logIndex = 0;\n this.logSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.logSize')) || 150 : 150;\n this.menuSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.menuSize')) || 500 : 500;\n this.hosts = [];\n this.importFile = null;\n this.scripts = {};\n\n window.alert = message => {\n console.error(message);\n this.showError(message.toString());\n };\n }\n\n onScriptsChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n if (id.startsWith('script.js.')) {\n if (obj) {\n if (JSON.stringify(this.scripts[id]) !== JSON.stringify(obj)) {\n this.scripts[id] = obj;\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n } else if (this.scripts[id]) {\n delete this.scripts[id];\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onInstanceChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.match(/^system\\.adapter\\.[-_\\w\\d]+\\$/)) {\n // update instances\n if (id.startsWith(`system.adapter.${this.adapterName}.`)) {\n if (obj && obj.type === 'instance') {\n if (!this.state.instances.includes(id)) {\n newState.instances = [...this.state.instances];\n newState.instances.push(id);\n newState.instances.sort();\n changed = true;\n // request alive\n this.socket.subscribeState(obj._id + '.alive', this.onInstanceAliveChange);\n }\n } else if (!obj && this.state.instances.includes(id)) {\n this.socket.unsubscribeState(id + '.alive', this.onInstanceAliveChange);\n newState.instances = [...this.state.instances];\n const pos = newState.instances.indexOf(id);\n newState.instances.splice(pos, 1);\n changed = true;\n }\n }\n\n if (obj && obj[id].common && obj[id].common.blockly) {\n this.confirmCallback = result => result && window.location.reload();\n newState.confirm = I18n.t('Some blocks were updated. Reload admin?');\n changed = true;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onHostChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.startsWith('system.host.')) {\n if (obj && obj.type === 'host') {\n if (!this.hosts.includes(id)) {\n this.hosts.push(id);\n this.hosts.sort();\n }\n } else if (!obj && this.hosts.includes(id)) {\n const pos = this.hosts.indexOf(id);\n this.hosts.splice(pos, 1);\n }\n }\n\n changed && this.setState(newState);\n };\n\n onConnectionReady() {\n window.systemLang = this.socket.systemLang;\n this.setState({\n ready: false,\n updateScripts: 0,\n scriptsHash: 0,\n instances: [],\n updating: false,\n resizing: false,\n selected: null,\n logMessage: {},\n editing: [],\n menuOpened: window.localStorage.getItem('App.menuOpened') !== 'false',\n menuSelectId: '',\n expertMode: window.localStorage.getItem('App.expertMode') === 'true',\n logHorzLayout: window.localStorage.getItem('App.logHorzLayout') === 'true',\n runningInstances: {},\n confirm: '',\n importFile: false,\n message: '',\n searchText: '',\n hideLog: window.localStorage.getItem('App.hideLog') === 'true',\n debugMode: false,\n debugInstance: null,\n });\n\n const newState = {};\n\n // load instances & scripts\n // Read all instances\n this.subscribeOnInstances()\n .then(result => {\n newState.instances = result.instances;\n newState.runningInstances = result.runningInstances;\n\n return this.readAdaptersWithBlockly();\n })\n .then(() => this.socket.getHosts())\n .then(hosts => {\n this.hosts = hosts.map(obj => obj._id);\n // load all scripts\n return this.readAllScripts();\n })\n .then(scripts => {\n if (window.localStorage && window.localStorage.getItem('App.expertMode') !== 'true' && window.localStorage.getItem('App.expertMode') !== 'false') {\n // detect if some global scripts exists\n if (Object.keys(scripts).find(id => id.startsWith('script.js.global.') && scripts.type === 'script')) {\n newState.expertMode = true;\n }\n }\n this.scripts = scripts;\n\n let scriptsHash = this.state.scriptsHash;\n if (this.compareScripts(scripts)) {\n scriptsHash++;\n }\n newState.scriptsHash = scriptsHash;\n newState.ready = true;\n this.socket.subscribeObject('script.*', this.onScriptsChanged);\n this.socket.subscribeObject('system.adapter.*', this.onInstanceChanged);\n this.socket.subscribeObject('system.host.*', this.onHostChanged);\n\n this.setState(newState);\n });\n }\n\n subscribeOnInstances() {\n return this.socket.getAdapterInstances(this.adapterName)\n .then(instancesArray => {\n const instances = instancesArray.map(obj => parseInt(obj._id.split('.').pop())).sort();\n const runningInstances = {};\n instances.forEach(id => runningInstances[`system.adapter.${this.adapterName}.${id}`] = false);\n\n const promises = [];\n\n // subscribe on instances\n instances.forEach(instance => {\n const instanceId = `system.adapter.${this.adapterName}.${instance}`;\n const id = `${instanceId}.alive`;\n promises.push(this.socket.getState(id)\n .then(state => {\n runningInstances[instanceId] = state ? state.val : false;\n this.socket.subscribeState(id, this.onInstanceAliveChange);\n }));\n });\n\n return Promise.all(promises)\n .then(() => ({ instances, runningInstances }));\n })\n }\n\n readAllScripts() {\n return this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'channel')\n .then(folders =>\n this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'script')\n .then(scripts => {\n Object.keys(scripts).forEach(id => folders[id] = scripts[id]);\n return folders;\n }));\n }\n\n readAdaptersWithBlockly() {\n return this.socket.getObjectView('system.adapter.', 'system.adapter.\\u9999', 'adapter')\n .then(adapters =>\n new Promise(resolve =>\n BlocklyEditor.loadCustomBlockly(adapters, () => resolve())));\n }\n\n onInstanceAliveChange = (id, state) => {\n if (id) {\n id = id && id.substring(0, id.length - 6); // - .alive\n\n if (this.state.runningInstances[id] !== (state ? state.val : false)) {\n const runningInstances = JSON.parse(JSON.stringify(this.state.runningInstances));\n runningInstances[id] = state ? state.val : false;\n this.setState({ runningInstances });\n }\n }\n };\n\n onToggleExpertMode(expertMode) {\n this.onExpertModeChange(expertMode);\n }\n\n compareScripts(newScripts) {\n const oldIds = Object.keys(this.scripts);\n const newIds = Object.keys(newScripts);\n if (oldIds.length !== newIds.length) {\n this.scripts = this.newScripts;\n return true;\n }\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n this.scripts = this.newScripts;\n return true;\n }\n for (let i = 0; i < oldIds.length; i++) {\n let oldScript = this.scripts[oldIds[i]].common;\n let newScript = newScripts[oldIds[i]].common;\n if (oldScript.name !== newScript.name) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engine !== newScript.engine) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engineType !== newScript.engineType) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.enabled !== newScript.enabled) {\n this.scripts = this.newScripts;\n return true;\n }\n }\n }\n\n onRename(oldId, newId, newName, newInstance) {\n if (newId.trim().endsWith('.')) {\n newId = newId.replace(/\\.\\s*$/, '_');\n }\n console.log(`Rename ${oldId} => ${newId}`);\n let promise;\n this.setState({ updating: true });\n\n // Rename script.js.common.Skript_1 => script.js.common.New folder.Skript_1\n\n if (this.scripts[oldId] && this.scripts[oldId].type === 'script') {\n const common = JSON.parse(JSON.stringify(this.scripts[oldId].common));\n common.name = newName || common.name;\n if (newInstance !== undefined) {\n common.engine = 'system.adapter.javascript.' + newInstance;\n }\n // Check if the script is not a children of other script\n const parts = newId.split('.');\n parts.pop();\n const parentID = parts.join('.');\n\n if (this.scripts[parentID] && this.scripts[parentID].type === 'script') {\n parts.pop();\n newId = parts.join('.') + '.' + newId.split('.').pop();\n }\n\n promise = this.updateScript(oldId, newId, common);\n } else {\n promise = this.renameGroup(oldId, newId, newName);\n }\n\n promise\n .then(() => this.setState({ updating: false }))\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n\n renameGroup(id, newId, newName, _list) {\n if (!_list) {\n _list = [];\n\n // collect all elements to rename\n // find all elements\n _list = Object.keys(this.scripts).filter(_id => _id.startsWith(id + '.'));\n\n return this.socket.getObject(id)\n .then(obj => {\n obj = obj || { common: {} };\n obj.common.name = newName || obj.common.name || id.split('.').pop();\n obj._id = newId;\n\n this.socket.delObject(id)\n .catch(() => { })\n .then(() => this.socket.setObject(newId, obj))\n .then(() => this.renameGroup(id, newId, newName, _list))\n .catch(e => {\n console.log(e);\n });\n })\n .catch(e => {\n console.log(e);\n const obj = {\n _id: newId,\n type: 'channel',\n common: {\n name: newName || id.split('.').pop(),\n expert: true\n },\n native: {}\n };\n // may be it is virtual folder\n return this.socket.setObject(newId, obj)\n .then(() => this.renameGroup(id, newId, newName, _list));\n });\n } else if (_list.length) {\n let nId = _list.pop();\n\n return this.socket.getObject(nId)\n .then(obj =>\n this.socket.delObject(nId)\n .catch(() => { })\n .then(() => {\n nId = newId + nId.substring(id.length);\n obj._id = nId;\n obj.common = obj.common || {};\n obj.common.expert = true;\n return this.socket.setObject(nId, obj);\n })\n .then(() => this.renameGroup(id, newId, newName, _list))\n );\n } else {\n return Promise.resolve();\n }\n }\n\n onUpdateScript(id, common) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n this.updateScript(id, id, common)\n .then(() => { })\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n onSelect(selected) {\n if (this.scripts[selected] && this.scripts[selected].common && this.scripts[selected].type === 'script') {\n this.setState({ selected, menuSelectId: selected }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300);\n }\n }\n\n onExpertModeChange(expertMode) {\n if (this.state.expertMode !== expertMode) {\n window.localStorage && window.localStorage.setItem('App.expertMode', expertMode ? 'true' : 'false');\n this.setState({ expertMode });\n }\n }\n\n showError(err) {\n this.setState({ errorText: err ? err.toString() : '' });\n }\n\n showMessage(message) {\n this.setState({ message: message ? message.toString() : '' });\n }\n\n onDelete(id) {\n this.socket.delObject(id)\n .then(() => { })\n .catch(err =>\n this.showError(err));\n }\n\n onEdit(id) {\n if (this.state.selected !== id) {\n this.setState({ selected: id });\n }\n }\n\n onAddNew(id, name, isFolder, instance, type, source) {\n const reg = new RegExp(`^${id}\\\\.`);\n\n if (Object.keys(this.scripts).find(_id => id === _id || reg.test(id))) {\n return this.showError(I18n.t('Yet exists!'));\n }\n\n if (isFolder) {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true\n },\n type: 'channel'\n })\n .then(() =>\n setTimeout(() => this.setState({ menuSelectId: id }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300), 1000))\n .catch(err => this.showError(err));\n } else {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true,\n engineType: type,\n engine: 'system.adapter.javascript.' + (instance || 0),\n source: source || '',\n debug: false,\n verbose: false\n },\n type: 'script'\n })\n .then(() => setTimeout(() => this.onSelect(id), 1000))\n .catch(err => this.showError(err));\n }\n }\n\n updateScript(oldId, newId, newCommon) {\n return this.socket.getObject(oldId)\n .then(_obj => {\n const obj = { common: {} };\n\n if (newCommon.engine !== undefined) obj.common.engine = newCommon.engine;\n if (newCommon.enabled !== undefined) obj.common.enabled = newCommon.enabled;\n if (newCommon.source !== undefined) obj.common.source = newCommon.source;\n if (newCommon.debug !== undefined) obj.common.debug = newCommon.debug;\n if (newCommon.verbose !== undefined) obj.common.verbose = newCommon.verbose;\n\n obj.from = 'system.adapter.admin.0'; // we must distinguish between GUI(admin.0) and disk(javascript.0)\n\n if (oldId === newId && _obj && _obj.common && newCommon.name === _obj.common.name) {\n if (!newCommon.engineType || newCommon.engineType !== _obj.common.engineType) {\n if (newCommon.engineType !== undefined) {\n obj.common.engineType = newCommon.engineType || 'Javascript/js';\n }\n }\n obj.type = 'script';\n return this.socket.extendObject(oldId, obj);\n } else {\n // let prefix;\n\n // let parts = _obj.common.engineType.split('/');\n\n // prefix = 'script.' + (parts[1] || parts[0]) + '.';\n\n if (_obj && _obj.common) {\n _obj.common.engineType = newCommon.engineType || _obj.common.engineType || 'Javascript/js';\n return this.socket.delObject(oldId)\n .then(() => {\n if (obj.common.engine !== undefined) _obj.common.engine = obj.common.engine;\n if (obj.common.enabled !== undefined) _obj.common.enabled = obj.common.enabled;\n if (obj.common.source !== undefined) _obj.common.source = obj.common.source;\n if (obj.common.name !== undefined) _obj.common.name = obj.common.name;\n if (obj.common.debug !== undefined) _obj.common.debug = obj.common.debug;\n if (obj.common.verbose !== undefined) _obj.common.verbose = obj.common.verbose;\n\n delete _obj._rev;\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n this.socket.setObject(newId, _obj);\n });\n } else {\n _obj = obj;\n }\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n return this.socket.setObject(newId, _obj);\n }\n });\n }\n\n onEnableDisable(id, enabled) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n const common = this.scripts[id].common;\n common.enabled = enabled;\n common.expert = true;\n this.updateScript(id, id, common)\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n getLiveHost(cb, _list) {\n if (!_list) {\n _list = this.hosts ? [...this.hosts] : [];\n }\n\n if (_list.length) {\n const id = _list.shift();\n this.socket.getState(id + '.alive')\n .then(state => {\n if (state && state.val) {\n cb(id);\n } else {\n setTimeout(() => this.getLiveHost(cb, _list));\n }\n });\n } else {\n cb();\n }\n }\n\n onExport() {\n this.getLiveHost(host => {\n if (!host) {\n return this.showError(I18n.t('No active host found'));\n }\n\n const d = new Date();\n let date = d.getFullYear();\n let m = d.getMonth() + 1;\n if (m < 10) {\n m = '0' + m;\n }\n date += '-' + m;\n m = d.getDate();\n if (m < 10) {\n m = '0' + m;\n }\n date += '-' + m + '-';\n\n this.socket.getRawSocket().emit('sendToHost', host, 'readObjectsAsZip', {\n adapter: 'javascript',\n id: 'script.js',\n link: date + 'scripts.zip' // request link to file and not the data itself\n }, data => {\n if (typeof data === 'string') {\n // it is a link to created file\n const a = document.createElement('a');\n // the data is \"system.host.HOST.zip.2020-01-26-scripts.zip\"\n const parts = data.split('.zip.');\n a.href = '/zip/' + parts[0] + '/' + parts[1];\n document.body.appendChild(a);\n a.click();\n a.remove();\n } else {\n data.error && this.showError(data.error);\n if (data.data) {\n const a = document.createElement('a');\n a.href = 'data: application/zip;base64,' + data.data;\n a.download = date + 'scripts.zip';\n document.body.appendChild(a);\n a.click();\n a.remove();\n }\n }\n });\n });\n }\n\n onImport(data) {\n this.importFile = data;\n if (data) {\n this.confirmCallback = this.onImportConfirmed.bind(this);\n this.setState({ importFile: false, confirm: I18n.t('Existing scripts will be overwritten.') });\n } else {\n this.setState({ importFile: false });\n }\n }\n\n onImportConfirmed(ok) {\n let data = this.importFile;\n this.importFile = null;\n if (ok && data) {\n data = data.split(',')[1];\n this.getLiveHost(host => {\n if (!host) {\n this.showError(I18n.t('No active host found'));\n return;\n }\n this.socket.getRawSocket().emit('sendToHost', host, 'writeObjectsAsZip', {\n data: data,\n adapter: 'javascript',\n id: 'script.js'\n }, data => {\n if (data === 'permissionError') {\n this.showError(I18n.t(data));\n } else if (!data || data.error) {\n this.showError(data ? I18n.t(data.error) : I18n.t('Unknown error'));\n } else {\n this.showMessage(I18n.t('Done'));\n }\n });\n });\n }\n }\n\n toggleLogLayout() {\n window.localStorage && window.localStorage.setItem('App.logHorzLayout', this.state.logHorzLayout ? 'false' : 'true');\n this.setState({ logHorzLayout: !this.state.logHorzLayout });\n }\n\n renderEditor() {\n const isAnyRulesExists = Object.keys(this.scripts).reduce((sum, id) =>\n sum + (this.scripts[id].common.engineType === 'Rules' ? 1 : 0), 0);\n\n return <Editor\n key=\"editor\"\n debugMode={this.state.debugMode}\n onDebugModeChange={value => {\n if (!value) {\n this.setState({debugMode: false, debugInstance: null});\n } else {\n this.setState({debugMode: true});\n }\n }}\n visible={!this.state.resizing}\n socket={this.socket}\n adapterName={this.adapterName}\n onLocate={menuSelectId => this.setState({ menuSelectId })}\n runningInstances={this.state.runningInstances}\n menuOpened={this.state.menuOpened}\n searchText={this.state.searchText}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n onChange={(id, common) => this.onUpdateScript(id, common)}\n isAnyRulesExists={isAnyRulesExists}\n debugInstance={this.state.debugInstance}\n onSelectedChange={(id, editing) => {\n const newState = {};\n let changed = false;\n if (id !== this.state.selected) {\n changed = true;\n newState.selected = id;\n }\n if (JSON.stringify(editing) !== JSON.stringify(this.state.editing)) {\n changed = true;\n newState.editing = JSON.parse(JSON.stringify(editing));\n }\n changed && this.setState(newState);\n }}\n onRestart={id => this.socket.extendObject(id, { common: { enabled: true } })}\n selected={this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].type === 'script' ? this.state.selected : ''}\n objects={this.scripts}\n instances={this.state.instances}\n />;\n }\n\n showLogButton() {\n return <div\n key=\"showLog\"\n title={I18n.t('Show logs')}\n className={this.props.classes.showLogButton}\n onClick={() => {\n window.localStorage.setItem('App.hideLog', 'false');\n this.setState({ hideLog: false, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n >\n <IconShowLog />\n </div>;\n }\n\n renderErrorDialog() {\n return this.state.errorText ?\n <DialogError\n key=\"dialogError\"\n onClose={() => this.setState({ errorText: '' })}\n text={this.state.errorText}\n /> :\n null;\n }\n\n renderMain() {\n const { classes } = this.props;\n return [\n this.state.message ? <DialogMessage key=\"dialogMessage\" onClose={() => this.setState({ message: '' })} text={this.state.message} /> : null,\n this.renderErrorDialog(),\n this.state.importFile ? <DialogImportFile key=\"dialogImportFile\" onClose={data => this.onImport(data)} /> : null,\n this.state.confirm ? <DialogConfirm\n key=\"dialogConfirm\"\n onClose={result => {\n this.state.confirm && this.setState({ confirm: '' });\n this.confirmCallback && this.confirmCallback(result);\n this.confirmCallback = null;\n }}\n text={this.state.confirm} /> : null,\n <div className={classes.content + ' iobVerticalSplitter'} key=\"main\">\n <div key=\"closeMenu\" className={classes.menuOpenCloseButton} onClick={() => {\n window.localStorage.setItem('App.menuOpened', this.state.menuOpened ? 'false' : 'true');\n this.setState({ menuOpened: !this.state.menuOpened, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}>\n {this.state.menuOpened ? <IconMenuOpened /> : <IconMenuClosed />}\n </div>\n <SplitterLayout\n key=\"splitterLayout\"\n vertical={!this.state.logHorzLayout}\n primaryMinSize={100}\n secondaryInitialSize={this.state.hideLog ? 0 : this.logSize}\n //customClassName={classes.menuDiv + ' ' + classes.splitterDivWithoutMenu}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.state.hideLog ? 0 : this.logSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.logSize', this.logSize.toString());\n }}\n >\n <>\n {this.renderEditor()}\n {!this.state.debugMode && this.state.hideLog && this.showLogButton()}\n </>\n {!this.state.debugMode && !this.state.hideLog && <Log\n key=\"log\"\n verticalLayout={!this.state.logHorzLayout}\n onLayoutChange={() => this.toggleLogLayout()}\n editing={this.state.editing}\n socket={this.socket}\n selected={this.state.selected}\n onHideLog={() => {\n window.localStorage.setItem('App.hideLog', 'true');\n this.setState({ hideLog: true, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n />}\n </SplitterLayout>\n </div>,\n ];\n }\n\n render() {\n const { classes } = this.props;\n\n if (!this.state.ready) {\n // return (<CircularProgress className={classes.progress} size={50} />);\n return <Loader theme={this.state.themeType} />;\n }\n\n return <div className={classes.root}>\n <ContextWrapper socket={this.socket}>\n <SplitterLayout\n key=\"menuSplitter\"\n vertical={false}\n primaryMinSize={300}\n primaryIndex={1}\n secondaryMinSize={300}\n secondaryInitialSize={this.menuSize}\n customClassName={classes.splitterDivs + ' ' + (!this.state.menuOpened ? classes.menuDivWithoutMenu : '')}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.menuSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.menuSize', this.menuSize.toString());\n }}\n >\n <div className={classes.mainDiv} key=\"menu\">\n <SideMenu\n debugMode={this.state.debugMode}\n onDebugInstance={data => {\n\n this.setState({debugInstance: data, debugMode: !!data});\n }}\n key=\"sidemenu\"\n scripts={this.scripts}\n scriptsHash={this.state.scriptsHash}\n instances={this.state.instances}\n update={this.state.updateScripts}\n onRename={this.onRename.bind(this)}\n onSelect={this.onSelect.bind(this)}\n socket={this.socket}\n selectId={this.state.menuSelectId}\n onEdit={this.onEdit.bind(this)}\n expertMode={this.state.expertMode}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n onThemeChange={themeName => {\n Utils.setThemeName(themeName);\n const themeType = Utils.getThemeType(themeName);\n this.setState({ themeName, themeType }, () => this.props.onThemeChange(themeName));\n }}\n runningInstances={this.state.runningInstances}\n onExpertModeChange={this.onExpertModeChange.bind(this)}\n onDelete={this.onDelete.bind(this)}\n onAddNew={this.onAddNew.bind(this)}\n onEnableDisable={this.onEnableDisable.bind(this)}\n onExport={this.onExport.bind(this)}\n width={this.menuSize}\n onImport={() => this.setState({ importFile: true })}\n onSearch={searchText => this.setState({ searchText })}\n />\n </div>\n {this.renderMain()}\n </SplitterLayout>\n </ContextWrapper>\n </div>;\n }\n}\n\nexport default withStyles(styles)(App);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { StylesProvider, createGenerateClassName } from '@mui/styles';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport pgk from '../package.json';\nimport theme from '@iobroker/adapter-react-v5/Theme';\n// import Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport { Utils } from '@iobroker/adapter-react-v5';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\nimport GenericBlock from './Components/RulesEditor/components/GenericBlock/index.jsx'\n\nwindow.GenericBlock = GenericBlock;\n\nwindow.adapterName = 'javascript';\nwindow.sentryDSN = 'https://504499a725eb4898930d3b9e9da95740@sentry.iobroker.net/56';\n\nlet themeName = Utils.getThemeName();\n\nconsole.log(`iobroker.${window.adapterName}@${pgk.version} using theme \"${themeName}\"`);\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'iob',\n});\n\nfunction build() {\n const isMobile = window.innerWidth < 600;\n const container = document.getElementById('root');\n const root = createRoot(container);\n return root.render(<StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme(themeName)}>\n <DndProvider backend={isMobile ? TouchBackend : HTML5Backend}>\n <App onThemeChange={_theme => {\n themeName = _theme;\n build();\n }} />\n </DndProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>);\n}\n\nbuild();\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n\n/*\n improved VSCode editor. This has to be down here, or we get conflicts\n between loader.js and require calls in jQuery and other loaded modules\n*/\n// loader must be after socket.io, elsewise there is no window.io\nconst loadDynamicScript = window.loadDynamicScript;\nloadDynamicScript && loadDynamicScript(window.location.port === '3000' ? window.location.protocol + '//' + window.location.hostname + ':8081/lib/js/socket.io.js' : './../../lib/js/socket.io.js', function () {\n loadDynamicScript('vs/loader.js', function () {\n loadDynamicScript('vs/configure.js', function () {\n typeof window.socketLoadedHandler === 'function' && window.socketLoadedHandler();\n });\n });\n});"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://js/./src/index.css?449b","Dialogs/Rename.jsx","Dialogs/Delete.jsx","Dialogs/AddNewScript.jsx","Dialogs/New.jsx","Dialogs/Error.jsx","Dialogs/AdapterDebug.jsx","SideMenu.jsx","Log.jsx","Components/ScriptEditorVanilaMonaco.jsx","Dialogs/Export.jsx","Dialogs/Import.jsx","Components/BlocklyEditor.jsx","Dialogs/ScriptEditor.jsx","webpack://js/./src/Components/RulesEditor/style.module.scss?0da4","webpack://js/./src/Components/RulesEditor/components/CardMenu/style.module.scss?2b24","Components/RulesEditor/helpers/MaterialDynamicIcon.jsx","Components/RulesEditor/components/CardMenu/index.jsx","webpack://js/./src/Components/RulesEditor/components/CurrentItem/style.module.scss?c87c","Components/RulesEditor/helpers/deepCopy.jsx","Components/RulesEditor/helpers/filterElement.jsx","webpack://js/./src/Components/RulesEditor/components/GenericBlock/style.module.scss?b0aa","webpack://js/./src/Components/RulesEditor/components/CustomButton/style.module.scss?fd2f","Components/RulesEditor/components/CustomButton/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomCheckbox/style.module.scss?da33","Components/RulesEditor/components/CustomCheckbox/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomInput/style.module.scss?9fc8","Components/RulesEditor/components/CustomInput/index.jsx","Components/RulesEditor/components/CustomInstance/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomModal/style.module.scss?395b","Components/RulesEditor/components/CustomModal/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSelect/style.module.scss?925a","Components/RulesEditor/components/CustomSelect/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSlider/style.module.scss?1345","Components/RulesEditor/components/CustomSlider/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSwitch/style.module.scss?f9f3","Components/RulesEditor/components/CustomSwitch/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomTime/style.module.scss?75e5","Components/RulesEditor/components/CustomTime/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomDate/style.module.scss?9309","Components/RulesEditor/components/CustomDate/index.jsx","Components/RulesEditor/helpers/utils.jsx","Components/RulesEditor/helpers/Tour.jsx","Components/RulesEditor/components/GenericBlock/index.jsx","Components/RulesEditor/components/Blocks/ActionSayText.jsx","Components/RulesEditor/components/Blocks/ActionSendEmail.jsx","Components/RulesEditor/components/Blocks/ActionTelegram.jsx","Components/RulesEditor/components/Blocks/ActionPushover.jsx","Components/RulesEditor/components/Blocks/ActionWhatsappcmb.jsx","Components/RulesEditor/components/Blocks/ActionPushsafer.jsx","Components/RulesEditor/helpers/Compile.jsx","Components/RulesEditor/components/Blocks/TriggerScriptSave.jsx","Components/RulesEditor/components/Blocks/TriggerSchedule.jsx","Components/RulesEditor/components/Blocks/TriggerState.jsx","Components/RulesEditor/components/Blocks/ConditionState.jsx","Components/RulesEditor/components/Blocks/ConditionTime.jsx","Components/RulesEditor/components/Blocks/ConditionAstrological.jsx","Components/RulesEditor/components/Blocks/ActionSetState.jsx","Components/RulesEditor/components/Blocks/ActionExec.jsx","Components/RulesEditor/components/Blocks/ActionHTTPCall.jsx","Components/RulesEditor/components/Blocks/ActionPrintText.jsx","Components/RulesEditor/components/Blocks/ActionPause.jsx","Components/RulesEditor/components/Blocks/ActionFunction.jsx","Components/RulesEditor/components/Blocks/ActionSetStateDelayed.jsx","Components/RulesEditor/components/Blocks/ActionOperateStates.jsx","Components/RulesEditor/components/StandardBlocks/index.jsx","Components/RulesEditor/components/ContextWrapper/index.jsx","Components/RulesEditor/helpers/findElement.jsx","Components/RulesEditor/components/CurrentItem/index.jsx","Components/RulesEditor/components/CustomDragLayer/index.jsx","webpack://js/./src/Components/RulesEditor/components/ContentBlockItems/style.module.scss?e805","Components/RulesEditor/hooks/useStateLocal.jsx","Components/RulesEditor/helpers/cardSort.jsx","webpack://js/./src/Components/RulesEditor/components/DragWrapper/style.module.scss?4797","Components/RulesEditor/components/DragWrapper/index.jsx","Components/RulesEditor/components/ContentBlockItems/DialogHelp.jsx","Components/RulesEditor/components/ContentBlockItems/DialogCondition.jsx","Components/RulesEditor/components/ContentBlockItems/index.jsx","webpack://js/./src/Components/RulesEditor/components/Menu/style.module.scss?20d7","Components/RulesEditor/components/CardMenu/CustomDragItem.jsx","webpack://js/./src/Components/RulesEditor/components/HamburgerMenu/hamburgerMenu.module.scss?8911","Components/RulesEditor/components/HamburgerMenu/index.jsx","Components/RulesEditor/components/Menu/index.jsx","webpack://js/./src/Components/RulesEditor/helpers/stylesVariables.scss?3d86","Components/RulesEditor/index.jsx","Components/Debugger/Editor.jsx","Components/Debugger/Console.jsx","Components/Debugger/Stack.jsx","Components/Debugger/index.jsx","Editor.jsx","Dialogs/ImportFile.jsx","App.jsx","serviceWorker.jsx","bootstrap.jsx"],"names":["styles","theme","DialogRename","props","name","id","parts","nextProps","Dialog","event","reason","DialogTitle","DialogContent","TextField","ev","FormControl","InputLabel","Select","instance","MenuItem","DialogActions","Button","withStyles","DialogDelete","DialogAddNew","type","html","lang","Card","CardActionArea","CardMedia","CardContent","CardActions","DialogNew","parent","names","i","el","item","DialogError","DialogContentText","DialogAdapterDebug","obj","instances","adapter","a","b","jsInstance","jsInstanceObj","jsInstanceHost","adapterToDebug","js","Grid","List","ListItem","ListItemIcon","ListItemText","Input","InputAdornment","IconButton","MENU_ITEM_HEIGHT","COLOR_RUN","green","COLOR_PROBLEM","yellow","COLOR_PAUSE","red","ROOT_ID","COMMON_ID","GLOBAL_ID","NARROW_WIDTH","LEVEL_PADDING","SELECTED_STYLE","getObjectName","prepareList","data","result","ids","modified","it","idA","idB","Droppable","onDrop","isOver","isOverAny","drop","useDrop","e","monitor","Draggable","opacity","drag","useDrag","SideDrawer","expanded","newExp","cb","tasks","that","_id","err","state","changed","pos","isSearchEnabled","listItems","searchMode","searchText","objects","newState","text","found","selected","nState","isAllZeroInstances","children","color","resolve","childrenFiltered","depthPx","title","reorder","style","isExpanded","iconStyle","iconClass","childrenCount","ListItemSecondaryAction","source","target","newId","items","dragging","element","reactChildren","copyId","word","m","selectedItem","Menu","newThemeName","classes","folders","statusFilter","typeFilter","renamingItem","copingItem","Drawer","Divider","oldId","newName","newInstance","IconVerticalSplit","IconHorizontalSplit","getTimeString","d","TOOLBOX_WIDTH","copyToClipboard","str","paddingMs","ms","gText","Log","message","allLines","lines","severity","date","editing","isIdOfGlobalScript","index","ScriptEditor","runningInstances","scriptAdapterInstance","compilerOptions","options","language","model","code","uri","filenameWithoutExtension","extension","newLanguage","newModel","enabled","currentScriptName","isGlobalScript","partialDeclarationsPath","wantedTypings","path","existingLibs","lib","selection","range","r","row","col","decorations","bp","lineNumber","ranges","insert","newValue","Fab","DialogExport","Popper","TransitionProps","Fade","Paper","DialogImport","languageBlocklyLoaded","languageOwnLoaded","toolboxText","toolboxXml","scriptsLoaded","searchXml","root","_result","val","node","BlocklyEditor","url","callback","location","scriptTag","scripts","adapters","toLoad","parseXml","xmlStr","xmlDoc","dom","allBlocks","blocks","badBlock","fileLang","fileCustom","xml","l","block","connections","conn","j","warningText","oneWay","exportText","xmlBlock","xy","variables","vars","nodes","xmlBlocks","masterEvent","toolbar","background","retry","p1","_b","DialogScriptEditor","value","ICON_CACHE","MaterialDynamicIcon","iconName","className","socket","onClick","setUrl","Element","CardMenu","active","icon","onDoubleClick","onTouchMove","deepCopy","userRules","additionalParameter","newItemsSwitches","filterElement","CustomButton","fullWidth","size","square","CustomCheckbox","onChange","customValue","disabled","switchChecked","setSwitchChecked","CustomInput","autoFocus","multiline","rows","autoComplete","label","error","variant","inputText","setInputText","SelectMod","CustomInstance","multiple","attr","onInstanceHide","setOptions","_options","CustomModal","open","onClose","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","setValue","i18n","CustomSelect","doNotTranslate","doNotTranslate2","onlyItem","sel","valueOnly","CustomSlider","min","max","step","unit","marks","CustomSwitch","CustomTime","DAYS","CustomDate","month","days","STEPS","GenericBlock","input","frontText","backText","nameBlock","doNotTranslateBack","signature","settings","openCheckbox","visibility","buttonText","checkReadOnly","showSelectId","Utils","common","onShowDialog","openModal","noTextEdit","tagCardArray","openTagMenu","tagCard","tag","newTagCardArray","newSettings","newTagCard","prevProps","attribute","_attr","inputs","iconTag","helpDialog","notFound","nameRender","context","sayitEngines","ActionSayText","config","debugMessage","ActionSendEmail","ActionTelegram","users","user","ActionPushover","ActionWhatsappcmb","ActionPushsafer","STANDARD_FUNCTION_STATE","STANDARD_FUNCTION_STATE_ONCHANGE","STANDARD_FUNCTION","STANDARD_FUNCTION_ONCHANGE","NO_FUNCTION","DEFAULT_RULE","compileTriggers","json","triggers","jsonTriggers","prelines","hist","conds","cond","trigger","findBlock","_context","conditions","compileConditions","then","compileActions","_else","line","v","actions","action","ors","_ors","compile","code2json","json2code","compiled","TriggerScriptSave","DEFAULT_WIZARD","TriggerScheduleBlock","func","hours","minutes","dow","_dow","intervals","start","time","astro","offset","offsetValue","latitude","longitude","sunValue","astroTime","interval","textCron","ComplexCron","wizardText","wizard","Schedule","Transition","ref","Slide","TriggerState","simulateValue","FormControlLabel","Switch","Checkbox","HYSTERESIS","ConditionState","debugValue","compare","condition","useTrigger","oidType","oidUnit","oidStates","isAllTriggersOnState","renderText","ConditionTime","withDate","ConditionAstrological","ActionSetState","toggle","oidMax","oidMin","oidRole","oidWrite","oidStep","f","ignore","ActionExec","ActionHTTPCall","ActionPrintText","ActionPause","pause","ActionFunction","ActionSetStateDelayed","ActionOperateStates","oid1","oid2","TriggerSchedule","ADAPTERS","ContextWrapperCreate","getOrLoadRemote","remote","shareScope","remoteFallbackUrl","reject","existingRemote","onload","script","loadComponent","sharedScope","module","ContextWrapper","setBlocks","onUpdate","setOnUpdate","onDebugMessage","setOnDebugMessage","enableSimulation","setEnableSimulation","adapterDynamicBlocksArray","dynamicRules","alreadyCreated","k","i18nURL","file","Component","adapterBlocksArray","findElement","acceptedBy","CurrentItem","setUserRules","blockValue","isTourOpen","setTourStep","tourStep","anchorEl","setAnchorEl","findElementBlocks","newUserRules","handlePopoverOpen","handlePopoverClose","blockInput","CustomBlock","isDelete","setIsDelete","newItem","layerStyles","snapToGrid","x","y","snappedX","snappedY","getItemStyles","initialOffset","currentOffset","isSnapToGrid","transform","CustomDragLayer","itemType","isDragging","targetIds","useDragLayer","renderItem","useStateLocal","events","nameEvents","setState","newHeadCells","funcSet","setCards","moveCard","atIndex","cards","additionally","hoverClientY","hoverMiddleY","card","findCard","copyCard","newTriggers","c","DragWrapper","typeBlocks","allProperties","isActive","preview","dropResult","idNumber","draggedId","hoverBoundingRect","overIndexActions","overIndexConditions","overIndex","getEmptyImage","isMobile","DialogHelp","DialogCondition","AdditionallyContentBlockItems","itemsSwitchesRender","boolean","typeBlock","animation","checkItem","setCheckItem","canDropCheck","setCanDropCheck","checkId","setCheckId","hoverBlock","setHoverBlock","_a","canDrop","targetId","backgroundColor","ContentBlockItems","nameAdditionally","border","additionallyClickItems","setAdditionallyClickItems","checkLocal","showHelp","setShowHelp","showConditionDialog","setShowConditionDialog","newArray","idx","setAnimation","_userRules","booleanAdditionally","newAdditionally","HamburgerMenu","addClass","setAllBlocks","onChangeBlocks","hamburgerOnOff","setHamburgerOnOff","filter","setFilter","handleChange","setBlocksFunc","typeFunc","newAllBlocks","a11yProps","RulesEditor","themeName","command","scriptId","running","importExport","setImportExport","modal","setModal","_jsInstance","_jsAlive","handler","handlerStatus","msg","setAddClass","Editor","editor","monaco","Console","Stack","frame","fileName","forEdit","scopeId","editable","Debugger","tabs","ts","console","breakpoints","local","scope","closure","scopes","expressions","expression","cmd","arrow","Tabs","Tab","stopOnException","Toolbar","end","_console","Badge","LinearProgress","COLOR_DEBUG","COLOR_VERBOSE","isChanged","initValue","args","isReturn","instanceObjects","_changed","oldSource","commonLocal","nextCommon","nowSelected","ok","question","_event","isInstanceRunning","isScriptRunning","changedAll","selectedId","cron","Snackbar","DialogImportFile","reader","files","getRootProps","getInputProps","isDragActive","isDragReject","App","GenericApp","hosts","scriptsHash","instancesArray","promises","instanceId","expertMode","newScripts","oldIds","newIds","oldScript","newScript","promise","parentID","_list","nId","isFolder","reg","newCommon","_obj","host","isAnyRulesExists","sum","menuSelectId","SideMenu","themeType","Loader","isLocalhost","register","swUrl","checkValidServiceWorker","registerValidSW","registration","installingWorker","response","unregister","generateClassName","build","container","StyledEngineProvider","ThemeProvider","DndProvider","_theme","loadDynamicScript"],"mappings":"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","file":"static/js/62.666bdc0e.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n});\n\nclass DialogRename extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n instance: props.instance || 0\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n this.prefix = this.getPrefix(props.id);\n this.oldId = props.id;\n }\n\n getPrefix(id) {\n const parts = (id || '').split('.');\n parts.pop();\n return parts.join('.');\n }\n\n getId(name) {\n name = (name || '').replace(/[\\\\/\\][*,;'\"`<>?\\s]/g, '_');\n return this.prefix + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.prefix = this.getPrefix(nextProps.id);\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onRename(this.oldId, this.state.id, this.state.name, this.state.instance);\n this.props.onClose();\n };\n\n handleChange = name => {\n this.setState({name, id: this.getId(name)});\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth={true}\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Rename')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n label={I18n.t('Name')}\n value={this.state.name}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.state.id}\n disabled={true}\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance'}}\n >\n {this.props.instances.map(instance => <MenuItem key={instance} value={instance}>{instance || '0'}</MenuItem>)}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogRename.propTypes = {\n onClose: PropTypes.func,\n onRename: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n folder: PropTypes.bool,\n};\n\nexport default withStyles(styles)(DialogRename);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\n\nconst styles = theme => ({\n\n});\n\nclass DialogDelete extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n };\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose(null);\n };\n\n handleOk = () => {\n this.props.onDelete(this.state.id);\n this.props.onClose(this.props.value);\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Are you sure?')}</DialogTitle>\n <DialogContent>\n <IconDelete/>\n <span style={{fontSize: 14, fontWeight: 'bold'}}>{I18n.t('Delete %s', this.state.name)}</span>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogDelete.propTypes = {\n onClose: PropTypes.func,\n onDelete: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogDelete);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Card from '@mui/material/Card';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport CardMedia from '@mui/material/CardMedia';\n\nimport ImgJS from '../assets/tileJS.png';\nimport ImgTS from '../assets/tileTS.png';\nimport ImgBlockly from '../assets/tileBlockly.png';\nimport ImgRules from '../assets/tileRules.png';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n card: {\n maxWidth: 345,\n display: 'inline-block',\n margin: '0 10px 0 10px'\n },\n media: {\n height: 100,\n },\n text: {\n maxWidth: 200,\n },\n complexity: {\n fontWeight: 'bold',\n fontStyle: 'italic',\n marginBottom: theme.spacing(1),\n }\n});\n\nclass DialogAddNew extends React.Component {\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = type => {\n this.props.onClose(type);\n };\n\n openHtml(html) {\n const lang = I18n.getLanguage();\n if (!html.includes('javascript.md') && (lang === 'de' || lang === 'ru')) {\n html = html.replace(/\\/en\\//, '/' + lang + '/');\n }\n const win = window.open(html, '_blank');\n win.focus();\n }\n\n getJSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea\n onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgJS}\n title=\"Javascript\"\n />\n <CardContent>\n <h2>Javascript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for programmers')}</div>\n <div className={this.props.classes.text}>{I18n.t('JS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getTSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea\n onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgTS}\n title=\"Typescript\"\n />\n <CardContent>\n <h2>Typescript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for professionals')}</div>\n <div className={this.props.classes.text}>{I18n.t('TS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getBlocklyCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Blockly')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgBlockly}\n title=\"Blockly\"\n />\n <CardContent>\n <h2>Blockly</h2>\n <div className={this.props.classes.complexity}>{I18n.t('normal')}</div>\n <div className={this.props.classes.text}>{I18n.t('Blockly description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Blockly')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/blockly.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getRulesCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Rules')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgRules}\n title=\"Rules\"\n />\n <CardContent>\n <h2>Rules</h2>\n <div className={this.props.classes.complexity}>{I18n.t('easy')}</div>\n <div className={this.props.classes.text}>{I18n.t('Rules description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Rules')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n render() {\n return <Dialog\n onClose={() => false}\n maxWidth=\"lg\"\n fullWidth\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Add new script')}</DialogTitle>\n <DialogContent style={{ textAlign: 'center' }}>\n {this.getRulesCard()}\n {this.getBlocklyCard()}\n {this.getJSCard()}\n {this.getTSCard()}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAddNew.propTypes = {\n onClose: PropTypes.func\n};\n\nexport default withStyles(styles)(DialogAddNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n\n});\n\nclass DialogNew extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name || 'Script',\n instance: props.instance || 0,\n parent: props.parent,\n error: ''\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n }\n\n getId(name) {\n name = name || this.state.name || '';\n name = name.replace(/[\\\\/\\][.*,;'\"`<>?\\s]/g, '_').trim().replace(/\\.$/, '_');\n return (this.state ? this.state.parent : this.props.parent) + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onAdd(this.getId(this.state.name), this.state.name, this.state.instance, this.props.type);\n this.props.onClose();\n };\n\n handleChange = name => {\n const id = this.getId(name);\n if (!name) {\n this.setState({name, id, error: I18n.t('Empty name is not allowed')});\n } else\n if (this.props.existingItems && this.props.existingItems.indexOf(id) !== -1) {\n this.setState({name, id, error: I18n.t('Duplicate name')});\n } else {\n this.setState({name, id, error: ''});\n }\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth={true}\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Create new')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n error={!!this.state.error}\n label={I18n.t('Name')}\n value={this.state.name}\n helperText={this.state.error}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <FormControl variant=\"standard\" style={{minWidth: 100}}>\n <InputLabel htmlFor=\"parent\">{I18n.t('Folder')}</InputLabel>\n <Select\n variant=\"standard\"\n style={{width: '100%'}}\n value={this.state.parent}\n onChange={e => this.setState({parent: e.target.value})}\n inputProps={{name: 'parent', id: 'parent',}}\n >\n {this.props.parents.map(parent => {\n const parts = parent.id.split('.');\n parts.splice(0, 2); // remove script.js\n const names = [];\n let id = 'script.js';\n parts.forEach((n, i) => {\n id += '.' + n;\n const el = this.props.parents.find(item => item.id === id);\n if (el) {\n names.push(el.name);\n } else {\n names.push(n);\n }\n });\n if (!names.length) {\n names.push(parent.name);\n }\n return (<MenuItem key={parent.id} value={parent.id}>{names.join(' / ')}</MenuItem>)\n })}\n </Select>\n </FormControl>\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.getId()}\n disabled={true}\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance',}}\n >\n {this.props.instances.map(instance => (<MenuItem key={'instance' + instance} value={instance}>{instance || '0'}</MenuItem>))}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!!this.state.error} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogNew.propTypes = {\n onClose: PropTypes.func,\n onAdd: PropTypes.func,\n name: PropTypes.string,\n title: PropTypes.string,\n parent: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n parents: PropTypes.array,\n existingItems: PropTypes.array,\n folder: PropTypes.bool,\n type: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n titleBackground: {\n background: theme.palette.error.main,\n },\n titleColor: {\n color: theme.palette.error.contrastText,\n '&>h2': {\n color: theme.palette.error.contrastText,\n }\n },\n});\n\nclass DialogError extends React.Component {\n constructor(props) {\n super(props);\n console.log('Error created')\n }\n handleOk = () => {\n this.props.onClose && this.props.onClose();\n };\n\n render() {\n return <Dialog\n open={true}\n maxWidth=\"sm\"\n fullWidth={true}\n onClose={() => this.handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle className={this.props.classes.titleBackground}\n classes={{root: this.props.classes.titleColor}}\n id=\"alert-dialog-title\">{this.props.title || I18n.t('Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n {this.props.text || I18n.t('Unknown error!')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" autoFocus startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogError.propTypes = {\n onClose: PropTypes.func,\n title: PropTypes.string,\n text: PropTypes.string,\n icon: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogError);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Grid from '@mui/material/Grid';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconClose from '@mui/icons-material/Close';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n icon: {\n width: 24,\n height: 24,\n },\n filter: {\n width: '100%',\n },\n filterWithButton: {\n width: '100%',\n },\n title: {\n fontWeight: 'bold',\n marginTop: theme.spacing(2),\n }\n});\n\n\nclass DialogAdapterDebug extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n instances: [],\n filter: window.localStorage.getItem('javascript.debug.filter') || '',\n showAskForStop: false,\n jsInstance: window.localStorage.getItem('javascript.debug.instance') || '',\n jsInstanceHost: '',\n adapterToDebug: window.localStorage.getItem('javascript.debug.adapter') || '',\n };\n }\n\n componentDidMount() {\n this.props.socket.getAdapterInstances()\n .then(instances => {\n instances = instances.filter(i => i && !i.common?.onlyWWW).map(item => {\n const name = item._id.replace(/^system\\.adapter\\./, '');\n const [adapter] = name.split('.');\n return {\n id: name,\n enabled: item.common?.enabled,\n host: item.common?.host,\n icon: item.common?.icon ? `../../adapter/${adapter}/${item.common.icon}` : '',\n };\n });\n instances.sort((a, b) => a.id > b.id ? 1 : (a.id < b.id ? -1 : 0));\n let jsInstance = this.state.jsInstance || '';\n let jsInstanceObj = this.state.jsInstance && instances.find(item => item.id === this.state.jsInstance);\n let jsInstanceHost;\n\n // check if selected instance is in the list\n if (!this.state.jsInstance || !jsInstanceObj) {\n jsInstance = instances.find(item => item.id.startsWith('javascript.')); // take the first one\n jsInstanceHost = jsInstance ? jsInstance.host : '';\n jsInstance = jsInstance ? jsInstance.id : '';\n } else {\n jsInstanceHost = jsInstanceObj ? jsInstanceObj.host : '';\n }\n\n let adapterToDebug = this.state.adapterToDebug || '';\n if (adapterToDebug && !instances.find(item => item.id === adapterToDebug)) {\n adapterToDebug = '';\n }\n\n this.setState({instances, jsInstance, adapterToDebug, jsInstanceHost});\n });\n }\n\n handleOk = () => {\n // TODO\n if (this.state.instances.find(item => item.id === this.state.adapterToDebug).enabled) {\n return this.props.socket.getObject('system.adapter.' + this.state.adapterToDebug)\n .then(obj => {\n obj.common.enabled = false;\n this.props.socket.setObject(obj._id, obj)\n .then(() =>\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug));\n })\n } else {\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug);\n }\n };\n\n\n renderJavascriptList() {\n const js = this.state.instances.filter(item => item.id.startsWith('javascript.'));\n if (js.length < 2) {\n return null;\n } else {\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Host')}</div>\n <List component=\"nav\">\n {js.map(item => <ListItem\n button\n selected={this.state.jsInstance === item.id}\n onClick={this.setState({jsInstance: item.id, jsInstanceHost: item.host})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n renderInstances() {\n if (!this.state.jsInstance) {\n return <Grid item/>;\n } else {\n const instances = this.state.instances.filter(item =>\n item.id !== this.state.jsInstance && item.host === this.state.jsInstanceHost && (!this.state.filter || item.id.includes(this.state.filter.toLowerCase()) ));\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Instances')}</div>\n <List component=\"nav\">\n {instances.map(item => <ListItem\n button\n selected={this.state.adapterToDebug === item.id}\n onDoubleClick={() => this.setState({adapterToDebug: item.id}, () => this.handleOk())}\n onClick={() => this.setState({adapterToDebug: item.id})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n render() {\n return <Dialog\n maxWidth=\"md\"\n fullWidth={false}\n open={true}\n onClose={(event, reason) => false}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Debug instance')}</DialogTitle>\n <DialogContent>\n <Grid container direction=\"column\">\n <Grid item>\n <Input\n classes={{root: this.props.classes.filterWithButton}}\n value={this.state.filter}\n placeholder={I18n.t('Filter')}\n onChange={e => {\n this.setState({filter: e.target.value});\n window.localStorage.setItem('javascript.debug.filter', e.target.value);\n }}\n endAdornment={\n <InputAdornment position=\"end\">\n {this.state.filter ? <IconButton\n size=\"small\"\n aria-label=\"toggle password visibility\"\n onClick={() => this.setState({filter: ''})}\n >\n <IconClose />\n </IconButton> : ''}\n </InputAdornment>\n }\n />\n </Grid>\n <Grid item>\n <Grid container>\n {this.renderJavascriptList()}\n {this.renderInstances()}\n </Grid>\n </Grid>\n </Grid>\n\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!this.state.jsInstance || !this.state.adapterToDebug} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Start')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.props.onClose()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAdapterDebug.propTypes = {\n socket: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n onDebug: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(DialogAdapterDebug);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '@mui/styles/withStyles';\nimport Drawer from '@mui/material/Drawer';\nimport Divider from '@mui/material/Divider';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';\nimport ListItemText from '@mui/material/ListItemText';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Input from '@mui/material/Input';\nimport { useDrag, useDrop, DndProvider as DragDropContext } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nimport { MdMoreVert as IconMore } from 'react-icons/md';\nimport { FaFolder as IconFolder } from 'react-icons/fa';\nimport { FaFolderOpen as IconFolderOpened } from 'react-icons/fa';\nimport { MdContentCopy as IconCopy } from 'react-icons/md';\nimport { MdDelete as IconDelete } from 'react-icons/md';\nimport { MdInput as IconDoEdit } from 'react-icons/md';\nimport { MdClose as IconClear } from 'react-icons/md';\nimport { MdFormatClear as IconClose } from 'react-icons/md';\nimport { MdPlayArrow as IconPlay } from 'react-icons/md';\nimport { MdAdd as IconAdd } from 'react-icons/md';\nimport { MdCreateNewFolder as IconAddFolder } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdSwapVert as IconReorder } from 'react-icons/md';\nimport { MdEdit as IconEdit } from 'react-icons/md';\nimport { MdSearch as IconFind } from 'react-icons/md';\nimport { MdPersonPin as IconExpert } from 'react-icons/md';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport { FaFileImport as IconImport } from 'react-icons/fa';\nimport { MdPalette as IconDark } from 'react-icons/md';\nimport { MdUnfoldMore as IconExpandAll } from 'react-icons/md';\nimport { MdUnfoldLess as IconCollapseAll } from 'react-icons/md';\nimport { MdBugReport as IconDebug } from 'react-icons/md';\n\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgRules from './assets/rules.png';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogRename from './Dialogs/Rename';\nimport DialogDelete from './Dialogs/Delete';\nimport DialogAddNewScript from './Dialogs/AddNewScript';\nimport DialogNew from './Dialogs/New';\nimport DialogError from './Dialogs/Error';\nimport DialogAdapterDebug from './Dialogs/AdapterDebug';\n\nimport { red, green, yellow } from '@mui/material/colors';\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_RUN = green[400];\nconst COLOR_PROBLEM = yellow[400];\nconst COLOR_PAUSE = red[400];\nconst ROOT_ID = 'script.js';\nconst COMMON_ID = ROOT_ID + '.common';\nconst GLOBAL_ID = ROOT_ID + '.global';\nconst NARROW_WIDTH = 350;\nconst LEVEL_PADDING = 16;\n\nconst SELECTED_STYLE = {\n background: '#164477',\n color: 'white'\n};\n\nconst styles = theme => ({\n drawerPaper: {\n position: 'relative',\n width: '100%', //Theme.menu.width,\n height: '100%',\n overflow: 'hidden'\n },\n toolbar: {\n height: theme.toolbar.height\n },\n toolbarButtons: {\n color: theme.palette.mode === 'dark'? 'white !important' : 'black !important'\n },\n iconButtonsDisabled: {\n filter: 'grayscale(100%)',\n opacity: 0.5,\n },\n toolbarSearch: {\n width: 'calc(100% - 105px)',\n lineHeight: '34px',\n marginLeft: 5\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 2\n },\n iconDropdownMenu: {\n paddingRight: 5\n },\n iconOnTheRight: {\n position: 'absolute',\n right: 10,\n top: 'calc(50% - 8px)'\n },\n menu: {\n width: '100%',\n height: '100%'\n },\n innerMenu: {\n width: '100%',\n height: 'calc(100% - 76px)',\n overflowX: 'hidden',\n overflowY: 'auto'\n },\n listItemIcon: {\n minWidth: 32,\n },\n filterIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginRight: 5\n },\n scriptIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginTop: 4,\n marginBottom: 4,\n marginLeft: 8,\n marginRight: 4,\n },\n folder: {\n //background: theme.palette.mode === 'dark' ? '#6a6a6a' : '#e2e2e2',\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none'\n },\n folderReorder: {\n opacity: 0.3,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity'\n },\n folderIcon: {\n width: 20,\n height: 20,\n },\n folderIconReorder: {\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n folderIconNoReorder: {\n cursor: 'pointer',\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n script: {\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none'\n },\n scriptReorder: {\n opacity: 1,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity'\n },\n reorder: {\n //padding: '9px 16px 9px 9px',\n },\n expandButton: {\n width: 37,\n height: 37\n },\n selected: SELECTED_STYLE,\n instances: {\n color: 'gray',\n fontSize: 'smaller'\n },\n childrenCount: {\n float: 'right',\n marginRight: 5,\n fontSize: 10,\n opacity: 0.4,\n },\n footer: {\n height: 24,\n },\n footerButtons: {\n '&:hover': {\n backgroundColor: '#dbdbdb'\n },\n color: theme.palette.mode === 'dark' ? '#ffffff' : '#111111',\n cursor: 'pointer',\n marginTop: 1,\n marginRight: 2,\n height: 22,\n width: 22,\n },\n footerButtonsRight: {\n float: 'right'\n },\n\n mainList: {\n '& .js-folder-dragover>div>li>.folder-reorder': {\n background: '#40adff'\n },\n '& .js-folder-dragging .folder-reorder': {\n opacity: 1,\n },\n '& .js-folder-dragging .script-reorder': {\n opacity: 0.3,\n }\n }\n});\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n def: ImgJS,\n 'Rules':ImgRules,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst getObjectName = (id, obj, lang) => {\n lang = lang || I18n.getLanguage();\n if (obj && obj.common && obj.common.name) {\n if (typeof obj.common.name === 'object') {\n return (obj.common.name[lang] || obj.common.name.en || id.replace(/^script\\.js./, '')).toString();\n } else {\n return obj.common.name.toString();\n }\n } else {\n return id.replace(/^script\\.js./, '');\n }\n};\n\nconst prepareList = data => {\n const result = [{\n id: ROOT_ID,\n depth: 0,\n index: 0,\n parent: null,\n title: 'root',\n type: 'folder'\n }];\n const ids = Object.keys(data);\n\n /*ids.sort((a, b) => {\n if ((a === 'script.js.common' || a === 'script.js.global') && (b === 'script.js.common' || b === 'script.js.global')) {\n return a > b ? 1 : -1;\n } else if (a === 'script.js.common' || a === 'script.js.global' || b === 'script.js.common' || b === 'script.js.global') {\n return 1;\n } else {\n return a > b ? 1 : -1;\n }\n });*/\n\n for (let i = 0; i < ids.length; i++) {\n const obj = data[ids[i]];\n const parts = ids[i].split('.');\n parts.pop();\n result.push({\n id: ids[i],\n title: getObjectName(ids[i], obj),\n enabled: obj && obj.common && obj.common.enabled,\n depth: parts.length - 1,\n type: obj.type === 'script' ? obj.common.engineType : 'folder',\n parent: parts.length > 1 ? parts.join('.') : null,\n instance: obj.common.engine ? parseInt(obj.common.engine.split('.').pop(), 10) || 0 : null\n });\n }\n\n // Place all folder-less scripts at start\n /*result.sort((a, b) => {\n // without folders => always at start\n if (!a.parent && a.type !== 'folder' && !b.parent && b.type !== 'folder') {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (!a.parent && a.type !== 'folder') {\n return -1;\n } else if (!b.parent && b.type !== 'folder') {\n return 1;\n } else {\n // common and global are always at the end\n if ((a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) &&\n (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global'))) {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) {\n return 1;\n } else if (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global')) {\n return -1;\n } else {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n }\n }\n });*/\n\n let modified;\n do {\n modified = false;\n // check if all parents exists\n // eslint-disable-next-line\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (!parent) {\n const parts = item.parent.split('.');\n parts.pop();\n result.push({\n id: item.parent,\n title: item.parent.split('.').pop(),\n depth: parts.length - 1,\n type: 'folder',\n parent: parts.length > 1 ? parts.join('.') : null\n });\n modified = true;\n }\n }\n });\n } while (modified);\n\n // Folders first\n result.sort((a, b) => {\n const idA = a.id.toLowerCase();\n const idB = b.id.toLowerCase();\n if (a.type === 'folder' && b.type !== 'folder') {\n return -1;\n } else if (b.type === 'folder' && a.type !== 'folder') {\n return 1;\n }\n\n if (idA > idB) {\n return 1;\n } else if (idA < idB) {\n return -1;\n } else {\n return 0;\n }\n });\n\n // Fill all index\n result.forEach((item, i) => item.index = i);\n\n // Fill all parentIndex\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (parent) {\n item.parentIndex = parent.index;\n }\n }\n });\n\n return result;\n};\n\nexport const Droppable = (props) => {\n const { onDrop} = props;\n\n const [{ isOver, isOverAny}, drop] = useDrop({\n accept: ['script'],\n drop: e => isOver ? onDrop(e) : undefined,\n collect: monitor => ({\n isOver: monitor.isOver({ shallow: true }),\n isOverAny: monitor.isOver(),\n }),\n });\n\n return <div ref={drop} className={clsx(isOver && 'js-folder-dragover', isOverAny && 'js-folder-dragging')}>\n {props.children}\n </div>;\n};\n\nexport const Draggable = props => {\n const { name } = props;\n const [{ opacity }, drag] = useDrag({\n type: 'script',\n item: () => ({name}),\n collect: monitor => ({opacity: monitor.isDragging() ? 0.3 : 1,}),\n });\n // About transform: https://github.com/react-dnd/react-dnd/issues/832#issuecomment-442071628\n return <div ref={drag} style={{ opacity, transform: 'translate3d(0, 0, 0)' }}>\n {props.children}\n </div>;\n};\n\nclass SideDrawer extends React.Component {\n constructor(props) {\n super(props);\n\n let expanded = window.localStorage ? window.localStorage.getItem('SideMenu.expanded') : '[]';\n try {\n expanded = JSON.parse(expanded) || [];\n } catch (e) {\n expanded = [];\n }\n\n this.inputRef = new React.createRef();\n\n this.state = {\n listItems: prepareList(props.scripts || {}),\n expanded: expanded,\n problems: [],\n reorder: false,\n themeName: this.props.themeName,\n selected: window.localStorage ? window.localStorage.getItem('SideMenu.selected') || null : null,\n creatingScript: false,\n creatingFolder: false,\n copingScript: '',\n renaming: null,\n deleting: null,\n choosingType: null,\n errorText: '',\n instances: props.instances || [],\n menuOpened: false,\n menuAnchorEl: null,\n searchMode: false,\n expertMode: this.props.expertMode,\n searchText: '',\n width: this.props.width || 300,\n typeFilter: window.localStorage ? window.localStorage.getItem('SideMenu.typeFilter') || '' : '', // blockly, js, ts\n statusFilter: window.localStorage ? window.localStorage.getItem('SideMenu.statusFilter') || '' : '',\n runningInstances: this.props.runningInstances || {},\n scriptsHash: props.scriptsHash,\n showAdapterDebug: false,\n };\n\n const newExp = this.ensureSelectedIsVisible();\n if (newExp) {\n this.state.expanded = newExp;\n }\n\n // debounce search process\n this.filterTimer = null;\n\n this.state.isAllZeroInstances = this.getIsAllZeroInstances();\n\n this.problems = null; //cache\n this.problemsTimer = null;\n this.onProblemUpdatedBound = this.onProblemUpdated.bind(this);\n }\n\n readProblems(cb, tasks) {\n if (!tasks) {\n tasks = Object.keys(this.props.scripts);\n }\n if (!tasks || !tasks.length) {\n cb && cb();\n } else {\n const id = tasks.shift();\n if (this.props.scripts[id] &&\n this.props.scripts[id].type === 'script' &&\n this.props.scripts[id].common &&\n this.props.scripts[id].common.enabled &&\n !id.match(/^script\\.js\\.global\\./) // GLOBAL_ID\n ) {\n const instance = this.props.scripts[id].common.engine.split('.').pop();\n const that = this; // sometimes lambda does not work\n const _id = 'javascript.' + instance + '.scriptProblem.' + id.substring(ROOT_ID.length + 1);\n\n this.props.socket.getState(_id, (err, state) => {\n that.onProblemUpdated(_id, state);\n setTimeout(() => that.readProblems(cb, tasks), 0);\n });\n } else {\n setTimeout(() => this.readProblems(cb, tasks), 0);\n }\n }\n }\n\n componentDidMount() {\n this.readProblems(() => {\n this.props.instances.forEach(instance => {\n this.props.socket.subscribeState('javascript.' + instance + '.scriptProblem.*', this.onProblemUpdatedBound);\n });\n });\n }\n\n componentWillUnmount() {\n this.props.instances.forEach(instance => {\n this.props.socket.unsubscribeState('javascript.' + instance + '.scriptProblem.*', this.onProblemUpdatedBound);\n });\n }\n\n onProblemUpdated(id, state) {\n if (!state || !id) return;\n id = ROOT_ID + '.' + id.replace(/^javascript\\.\\d+\\.scriptProblem\\./, '');\n\n if (!this.problems) {\n this.problems = JSON.parse(JSON.stringify(this.state.problems));\n }\n let changed = false;\n\n if (state.val) {\n if (this.problems.indexOf(id) === -1) {\n this.problems.push(id);\n changed = true;\n }\n } else {\n const pos = this.problems.indexOf(id);\n if (pos !== -1) {\n this.problems.splice(pos, 1);\n changed = true;\n }\n }\n\n if (changed && !this.problemsTimer) {\n this.problemsTimer = setTimeout(() => {\n this.problemsTimer = null;\n this.setState({problems: this.problems});\n this.problems = null;\n }, 300);\n }\n }\n\n static filterListStatic(isSearchEnabled, listItems, searchMode, searchText, objects) {\n listItems = JSON.parse(JSON.stringify(listItems));\n let changed = false;\n let newState = {listItems};\n if (isSearchEnabled !== false && searchMode && searchText) {\n const text = searchText.toLowerCase();\n listItems.forEach(item => {\n const id = item.title.toLowerCase();\n item.filteredPartly = false;\n let found = id.indexOf(text) !== -1;\n if (!found && (objects && objects[item.id] && objects[item.id].common && objects[item.id].common.source)) {\n if (objects[item.id].common.engineType === 'Blockly') {\n const pos = objects[item.id].common.source.lastIndexOf('//');\n found = objects[item.id].common.source.substring(0, pos).toLowerCase().indexOf(text) !== -1;\n } else {\n found = objects[item.id].common.source.toLowerCase().indexOf(text) !== -1;\n }\n }\n if (found) {\n if (item.filtered) {\n item.filtered = false;\n changed = true;\n }\n } else if (!item.filtered) {\n item.filtered = true;\n changed = true;\n }\n });\n\n if (changed) {\n // check that all parents of every non-filtered item are visible\n for (let i = listItems.length - 1; i >= 0; i--) {\n const item = listItems[i];\n if (!item.filtered || item.filteredPartly) {\n let it = item;\n do {\n if (it.parent && listItems[it.parentIndex]) {\n changed = true;\n listItems[it.parentIndex].filteredPartly = true;\n }\n it = it.parent && listItems[it.parentIndex] ? listItems[it.parentIndex] : null;\n } while(it);\n }\n }\n }\n } else {\n listItems.forEach(item => {\n if (item.filtered || item.filteredPartly) {\n item.filtered = false;\n item.filteredPartly = false;\n changed = true;\n }\n });\n if (isSearchEnabled === false) {\n newState.searchText = '';\n newState.searchMode = false;\n changed = true;\n }\n }\n\n return changed ? newState : null;\n }\n\n filterList(isSearchEnabled, cb) {\n const newState = SideDrawer.filterListStatic(\n isSearchEnabled,\n this.state.listItems,\n this.state.searchMode,\n this.state.searchText,\n this.props.scripts\n );\n\n if (newState) {\n this.setState(newState, () => cb && cb());\n } else if (cb) {\n cb();\n }\n }\n\n static ensureSelectedIsVisibleStatic(selected, expanded, listItems) {\n expanded = JSON.parse(JSON.stringify(expanded));\n let changed = false;\n\n // ensure that the item is visible\n let el = typeof selected === 'object' ? selected : listItems.find(it => it.id === selected);\n do {\n // eslint-disable-next-line\n el = el && el.parent && listItems.find(it => it.id === el.parent);\n if (el) {\n if (expanded.indexOf(el.id) === -1) {\n expanded.push(el.id);\n changed = true;\n }\n }\n } while(el);\n return changed && expanded;\n }\n\n ensureSelectedIsVisible(selected, expanded) {\n SideDrawer.ensureSelectedIsVisibleStatic(selected || this.state.selected, expanded || this.state.expanded, this.state.listItems);\n }\n\n static getDerivedStateFromProps(props, state) {\n const newState = {};\n let changed = false;\n if (state.expertMode !== props.expertMode) {\n changed = true;\n newState.expertMode = props.expertMode;\n }\n if (state.scriptsHash !== props.scriptsHash && props.scripts) {\n const listItems = prepareList(props.scripts || {});\n\n newState.listItems = listItems;\n\n if (state.searchText) {\n const nState = SideDrawer.filterListStatic(true, listItems, state.searchMode, state.searchText, props.scripts);\n nState && Object.assign(newState, nState);\n }\n\n const isAllZeroInstances = SideDrawer.getIsAllZeroInstancesStatic(listItems, props.instances || []);\n\n const newExp = SideDrawer.ensureSelectedIsVisibleStatic(state.selected, state.expanded, state.listItems);\n\n newState.isAllZeroInstances = isAllZeroInstances;\n if (newExp) {\n newState.expanded = newExp;\n }\n changed = true;\n }\n\n if (state.width !== props.width) {\n changed = true;\n newState.width = props.width;\n }\n if (state.themeName !== props.themeName) {\n changed = true;\n newState.themeName = props.themeName;\n }\n\n if (props.selectId && state.selected !== props.selectId) {\n const item = state.listItems.find(item => item.id === props.selectId);\n\n if (!state.reorder && item) {\n const expanded = SideDrawer.ensureSelectedIsVisibleStatic(item, state.expanded, state.listItems);\n newState.selected = item.id;\n if (expanded) {\n newState.expanded = expanded;\n }\n changed = true;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n if (changed) {\n return newState;\n } else {\n return null;\n }\n }\n\n static getIsAllZeroInstancesStatic(listItems, instances) {\n let isAllZeroInstances = !instances[0] && instances.length <= 1;\n\n if (isAllZeroInstances) {\n listItems.forEach(item => {\n if (item.type !== 'folder' && item.instance !== 0) {\n isAllZeroInstances = false;\n }\n });\n }\n return isAllZeroInstances;\n }\n\n getIsAllZeroInstances(listItems, instances) {\n listItems = listItems || this.state.listItems;\n instances = instances || this.state.instances;\n return SideDrawer.getIsAllZeroInstancesStatic(listItems || this.state.listItems, instances || this.state.instances);\n }\n\n saveExpanded(expanded) {\n window.localStorage.setItem('SideMenu.expanded', JSON.stringify(expanded || this.state.expanded));\n }\n\n showError(err) {\n this.setState({errorText: err});\n }\n\n onToggle(id, e) {\n e && e.stopPropagation();\n if (id === ROOT_ID) {\n return;\n }\n const expanded = [...this.state.expanded];\n const newState = {expanded};\n const pos = expanded.indexOf(id);\n if (pos !== -1) {\n expanded.splice(pos, 1);\n if (this.state.selected && this.state.selected.startsWith(id + '.')) {\n newState.selected = id;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', id);\n }\n } else {\n expanded.push(id);\n expanded.sort();\n }\n this.setState({expanded});\n this.saveExpanded(expanded);\n }\n\n renderItemButtonsOnEnd(item, children) {\n if (this.state.reorder) {\n return null;\n }\n if (item.type !== 'folder') {\n let color = item.enabled ? COLOR_RUN : COLOR_PAUSE;\n if (item.enabled && this.state.problems.includes(item.id)) {\n color = COLOR_PROBLEM;\n }\n\n return [\n <IconButton\n className={clsx(this.props.classes.iconButtons, this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n onClick={e => {\n e.stopPropagation();\n this.props.onEnableDisable && this.props.onEnableDisable(item.id, !item.enabled)\n }}\n title={item.enabled ? I18n.t('Pause script') : I18n.t('Run script')}\n disabled={this.props.debugMode}\n key=\"startStop\"\n style={{ color }}\n size=\"medium\"\n >\n {item.enabled ? <IconPause /> : <IconPlay />}\n </IconButton>,\n this.state.width > NARROW_WIDTH ? <IconButton\n key=\"delete\"\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n title={I18n.t('Delete script')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"\n >\n <IconDelete/>\n </IconButton> : null,\n <IconButton\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n key=\"openInEdit\"\n title={I18n.t('Edit script or just double click')}\n onClick={e => this.onEdit(item, e)}\n size=\"medium\">\n <IconDoEdit/>\n </IconButton>,\n ];\n } else if (this.state.width > NARROW_WIDTH) {\n if (item.id !== ROOT_ID && item.id !== COMMON_ID && item.id !== GLOBAL_ID && (!children || !children.length)) {\n return (\n <IconButton\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n key=\"delete\"\n title={I18n.t('Delete folder')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"><IconDelete/></IconButton>\n );\n } else {\n return null;\n }\n }\n }\n\n onDelete(item, e) {\n e && e.stopPropagation();\n return new Promise(resolve => {\n if (typeof item !== 'object') {\n this.setState({deleting: item});\n } else {\n this.setState({deleting: item.id});\n }\n });\n }\n\n onEdit(item, e) {\n this.onClick(item, e);\n this.props.onEdit && this.props.onEdit(item.id);\n }\n\n getTextStyle(item) {\n if (!this.state.reorder && item.type !== 'folder') {\n return {\n //width: 130,\n width: `calc(100% - ${this.state.width > NARROW_WIDTH ? 185 : 137}px)`,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n flex: 'none',\n padding: '0 16px 0 0'\n };\n } else {\n return {\n whiteSpace: 'nowrap',\n padding: '0 16px 0 0'\n };\n }\n }\n\n onClick(item, e) {\n e && e.stopPropagation();\n if (!this.state.reorder && item) {\n const expanded = this.ensureSelectedIsVisible(item);\n const newState = {selected: item.id};\n if (expanded) {\n newState.expanded = expanded;\n }\n this.setState(newState);\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n onDblClick(item, e) {\n e && e.stopPropagation();\n if (this.state.reorder) {\n return;\n }\n if (item.type === 'folder') {\n this.onToggle(item.id);\n } else {\n this.onEdit(item);\n }\n }\n\n isFilteredOut(item) {\n if (item.filtered && !item.filteredPartly) return true;\n\n if (this.state.typeFilter && item.type !== 'folder' && item.type !== this.state.typeFilter) {\n return true;\n }\n\n if (this.state.statusFilter &&\n item.type !== 'folder' &&\n (\n (this.state.statusFilter === 'running' && !item.enabled) ||\n (this.state.statusFilter === 'paused' && item.enabled) ||\n (this.state.statusFilter === 'problems' && (!item.enabled || this.state.problems.indexOf(item.id) === -1)))\n ) {\n return true;\n }\n\n return (item.id === GLOBAL_ID && !this.state.expertMode);\n }\n\n renderListItem(item, children, childrenFiltered) {\n if (item.id === ROOT_ID && !this.state.reorder) {\n return null;\n }\n\n const depthPx = (this.state.reorder ? item.depth : item.depth - 1) * LEVEL_PADDING;\n\n let title = item.title;\n\n if (this.state.searchText) {\n const pos = title.toLowerCase().indexOf(this.state.searchText.toLowerCase());\n if (pos !== -1) {\n title = [\n (<span key=\"first\">{title.substring(0, pos)}</span>),\n (<span key=\"second\" style={{color: 'orange'}}>{title.substring(pos, pos + this.state.searchText.length)}</span>),\n (<span key=\"third\">{title.substring(pos + this.state.searchText.length)}</span>),\n ];\n }\n }\n\n if (!this.state.isAllZeroInstances && item.type !== 'folder') {\n title = [\n <span key=\"instance\" title={I18n.t('Instance')} className={this.props.classes.instances}>[{item.instance}] </span>,\n <span key=\"title\">{title}</span>\n ];\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const style = Object.assign({\n marginLeft: depthPx,\n cursor: item.type === 'folder' && reorder ? 'default' : 'inherit',\n width: `calc(100% - ${depthPx}px)`\n }, item.id === this.state.selected && !reorder ? SELECTED_STYLE : {});\n\n if (!reorder) {\n style.opacity = item.filteredPartly ? 0.5 : 1;\n }\n\n if (item.id === GLOBAL_ID && item.id !== this.state.selected) {\n style.color = '#00a200';\n }\n\n let isExpanded = item.id === ROOT_ID;\n if (!isExpanded && children) {\n isExpanded = this.state.expanded.includes(item.id);\n }\n\n let iconStyle = {};\n if (item.id === GLOBAL_ID) {\n iconStyle.color = '#356956';\n } else if (item.id === COMMON_ID) {\n iconStyle.color = '#4899e1';\n }\n let iconClass;\n if (item.type === 'folder') {\n iconClass = clsx(this.props.classes.folderIcon, reorder ? this.props.classes.folderIconReorder : this.props.classes.folderIconNoReorder);\n } else {\n iconClass = clsx(this.props.classes.scriptIcon, reorder ? this.props.classes.scriptIconReorder : this.props.classes.scriptIconNoReorder);\n }\n\n let childrenCount = null;\n if ((childrenFiltered && childrenFiltered.length) || (children && children.length)) {\n childrenCount = <span className={this.props.classes.childrenCount}>{childrenFiltered && childrenFiltered.length !== children.length ? `${childrenFiltered.length}(${children.length})` : children.length}</span>;\n }\n\n return <ListItem\n key={item.id}\n style={style}\n className={clsx(\n item.type === 'folder' ? this.props.classes.folder : this.props.classes.script,\n reorder && item.type === 'folder' && 'folder-reorder',\n reorder && item.type !== 'folder' && 'script-reorder',\n reorder && this.props.classes.reorder,\n reorder && item.type !== 'folder' && this.props.classes.scriptReorder,\n reorder && item.type === 'folder' && this.props.classes.folderReorder,\n )}\n onClick={e => this.onClick(item, e)}\n onDoubleClick={e => this.onDblClick(item, e)}\n >\n <ListItemIcon\n classes={{root: this.props.classes.listItemIcon}}\n >{\n item.type === 'folder' ? (\n reorder || isExpanded ?\n <IconFolderOpened className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)}/> :\n <IconFolder className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)}/>\n )\n :\n <img className={iconClass} alt={item.type} src={images[item.type] || images.def}/>\n }</ListItemIcon>\n <ListItemText\n classes={{primary: item.id === this.state.selected && !reorder ? this.props.classes.selected : undefined}}\n style={this.getTextStyle(item)} primary={(<span>{title}{childrenCount}</span>)}/>\n <ListItemSecondaryAction>{this.renderItemButtonsOnEnd(item, children)}</ListItemSecondaryAction>\n </ListItem>;\n }\n\n onDragFinish(source, target) {\n let newId = target + '.' + source.split('.').pop();\n if (newId !== source) {\n // If target yet exists => add Copy to\n if (this.state.listItems.find(item => item.id === newId)) {\n newId += '_' + I18n.t('copy');\n }\n\n this.props.onRename && this.props.onRename(source, newId);\n }\n return undefined;\n }\n\n renderOneItem(items, item, dragging) {\n let childrenFiltered = (this.state.statusFilter || this.state.typeFilter) && items.filter(i => i.parent === item.id ? !this.isFilteredOut(i) : false);\n let children = items.filter(i => i.parent === item.id);\n\n if (this.isFilteredOut(item)) {\n return;\n }\n\n if (item.type === 'folder' && (this.state.statusFilter || this.state.typeFilter) && !childrenFiltered.length) {\n return;\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const element = this.renderListItem(item, children, childrenFiltered);\n const result = [];\n let reactChildren;\n if (children && (reorder || this.state.expanded.includes(item.id) || item.id === ROOT_ID)) {\n reactChildren = children.map(it => this.renderOneItem(items, it));\n }\n\n if (reorder) {\n if (item.type === 'folder') {\n result.push(<Droppable key={'droppable_' + item.id} onDrop={e => this.onDragFinish(e.name, item.id)}>\n <Draggable key={'draggable_' + item.id} name={item.id}>{element}</Draggable>\n {reactChildren || null}\n </Droppable>);\n } else {\n result.push(<Draggable key={'draggable_' + item.id} name={item.id}>\n {element}\n {reactChildren || null}\n </Draggable>);\n }\n } else {\n result.push(element);\n reactChildren && reactChildren.forEach(e => result.push(e));\n }\n\n return result;\n }\n\n renderAllItems(items) {\n const result = items\n .filter(item => !item.parent)\n .map(item =>\n this.renderOneItem(items, item));\n\n return <List\n dense={true}\n disablePadding={true}\n className={this.props.classes.mainList}\n >\n {result}\n </List>;\n }\n\n onAddNew(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({choosingType: true});\n }\n\n onCopy(e, id) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === id);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({copingScript: id});\n }\n\n onAddNewFolder(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({creatingFolder: true});\n }\n\n onRename(e) {\n e && e.stopPropagation();\n this.setState({renaming: this.state.selected});\n }\n\n getUniqueName(copyId) {\n let i = 1;\n let word = I18n.t('Script') + ' ';\n if (copyId) {\n let name = getObjectName(copyId, this.props.scripts[copyId]);\n const m = name.match(/\\d+$/);\n if (m) {\n word = name.replace(/\\d+$/, '');\n i = parseInt(m[0], 10) + 1;\n } else {\n word = name;\n }\n }\n\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === `${this.parent}.${word.replace(/\\.\\s/g, '_')}${i}`)) {\n i++;\n }\n /*ignore jslint end*/\n return word + i;\n }\n\n getUniqueFolderName() {\n let i = 1;\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === `${this.parent}.${I18n.t('Folder')}_${i}`)) {\n i++;\n }\n return `${I18n.t('Folder')} ${i}`;\n }\n\n onCloseMenu(cb) {\n this.setState({menuOpened: false, menuAnchorEl: null, menuAnchorFilterEl: null}, cb);\n }\n\n getFilterBadge() {\n return [\n this.state.statusFilter === true && <IconPlay className={this.props.classes.filterIcon} style={{color: COLOR_RUN}}/>,\n this.state.statusFilter === false && <IconPause className={this.props.classes.filterIcon} style={{color: COLOR_PAUSE}}/>,\n this.state.typeFilter === 'Blockly' && 'Bl',\n this.state.typeFilter === 'Javascript/js' && 'JS',\n this.state.typeFilter === 'TypeScript/ts' && 'TS',\n ];\n }\n\n getMainMenu(children, selectedItem) {\n return <Menu\n key=\"menu\"\n id=\"long-menu\"\n anchorEl={this.state.menuAnchorEl}\n open={this.state.menuOpened}\n onClose={() => this.setState({menuOpened: false, menuAnchorEl: null})}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n //width: 200,\n },\n }}\n >\n {this.state.width <= NARROW_WIDTH ? <MenuItem\n key=\"delete\"\n disabled={this.props.debugMode || !this.state.selected || this.state.selected === GLOBAL_ID || this.state.selected === COMMON_ID || (children && children.length)}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n if (this.state.listItems.find(item => item.parent === this.state.selected)) {\n this.showError(I18n.t('Cannot delete non empty item!'));\n return;\n }\n\n this.setState({menuOpened: false, menuAnchorEl: null}, () =>\n this.onDelete(this.state.selected).then(() => {}));\n }}><IconDelete className={this.props.classes.iconDropdownMenu} style={{color: 'red'}}/>{I18n.t('Delete')}\n </MenuItem> : null}\n <MenuItem\n key=\"expertMode\"\n disabled={this.props.debugMode}\n selected={this.state.expertMode}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.props.onExpertModeChange && this.props.onExpertModeChange(!this.state.expertMode));\n }}>\n <IconExpert className={this.props.classes.iconDropdownMenu} style={{color: this.state.expertMode ? 'orange' : 'inherit'}}/>{I18n.t('Expert mode')}\n </MenuItem>\n {this.props.onExport && <MenuItem\n key=\"exportAll\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onExport());\n }}>\n <IconExport className={this.props.classes.iconDropdownMenu} />{I18n.t('Export all scripts')}\n </MenuItem>}\n {this.props.onImport && <MenuItem\n disabled={this.props.debugMode}\n key=\"import\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onImport());\n }}>\n <IconImport className={this.props.classes.iconDropdownMenu} />{I18n.t('Import scripts')}\n </MenuItem>}\n {this.props.onThemeChange && <MenuItem\n key=\"dark\"\n onClick={() =>\n this.onCloseMenu(() => {\n // TODO: use Utils.toggleTheme(themeName)\n // newThemeName = Utils.toggleTheme(themeName);\n const newThemeName = this.state.themeName === 'dark' ? 'blue' :\n this.state.themeName === 'blue' ? 'colored' : this.state.themeName === 'colored' ? 'light' :\n this.state.themeName === 'light' ? 'dark' : 'colored';\n this.props.onThemeChange(newThemeName);\n })}>\n <IconDark className={this.props.classes.iconDropdownMenu} />{I18n.t('Change theme (actual \"%s\")', this.state.themeName)}\n </MenuItem>}\n {this.props.onAddNew && <MenuItem key=\"copy\"\n disabled={!this.state.selected || !selectedItem || selectedItem.type === 'folder'}\n onClick={event => {\n const selected = this.state.selected;\n this.onCloseMenu(() => this.onCopy(event, selected))\n }}>\n <IconCopy className={this.props.classes.iconDropdownMenu} />{I18n.t('Copy script')}\n </MenuItem>}\n {this.state.expertMode && <MenuItem\n disabled={this.props.debugMode}\n key=\"debugInstance\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.setState({showAdapterDebug: true}));\n }}>\n <IconDebug className={this.props.classes.iconDropdownMenu}/>{I18n.t('Debug instance')}\n </MenuItem>}\n </Menu>;\n }\n\n // render menu and toolbar\n getToolbarButtons() {\n const result = [];\n const classes = this.props.classes;\n const reorder = this.state.reorder && !this.props.debugMode;\n if (this.state.searchMode && !this.props.debugMode) {\n result.push(<Input\n key=\"searchInput\"\n value={this.state.searchText}\n className={classes.toolbarSearch}\n ref={this.inputRef}\n autoFocus={true}\n placeholder={I18n.t('Search...')}\n onChange={e => {\n this.setState({searchText: e.target.value});\n this.filterTimer && clearTimeout(this.filterTimer);\n this.filterTimer = setTimeout(() => {\n this.filterTimer = null;\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n }, 400);\n }}\n />);\n\n result.push(<IconButton\n key=\"disableSearch\"\n className={classes.toolbarButtons}\n style={{float: 'right'}}\n title={I18n.t('End search mode')}\n onClick={e => {\n e.stopPropagation();\n this.filterList(false, () => this.props.onSearch && this.props.onSearch(this.state.searchText));\n }}\n size=\"medium\"><IconClose /></IconButton>);\n\n this.state.searchText && result.push(<IconButton\n key=\"cleanSearch\"\n mini=\"true\"\n title={I18n.t('Clear search input')}\n className={classes.toolbarButtons}\n style={{marginTop: 7, float: 'right'}}\n onClick={e => {\n e.stopPropagation();\n this.setState({searchText: ''}, () => {\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n });\n }}\n size=\"medium\"><IconClear fontSize=\"small\"/></IconButton>);\n } else {\n if (!reorder) {\n // Open Menu\n result.push(<IconButton\n key=\"menuButton\"\n aria-label=\"More\"\n aria-owns={this.state.menuOpened ? 'long-menu' : undefined}\n title={I18n.t('Menu')}\n aria-haspopup=\"true\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({menuOpened: true, menuAnchorEl: event.currentTarget});\n }}\n size=\"medium\">\n {/*<Badge className={classes.margin} badgeContent={this.getFilterBadge()}>*/}\n <IconMore />\n {/*</Badge>*/}\n </IconButton>);\n\n const selectedItem = this.state.listItems.find(it => it.id === this.state.selected);\n let children;\n if (selectedItem && this.state.width <= NARROW_WIDTH && selectedItem.type === 'folder') {\n children = this.state.listItems.filter(i => i.parent === this.state.selected);\n }\n\n // Menu\n result.push(this.getMainMenu(children, selectedItem));\n\n // New Script\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-script\"\n title={I18n.t('Create new script')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit'}}\n onClick={e => this.onAddNew(e)}\n size=\"medium\"><IconAdd/></IconButton>);\n\n // New Folder\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-folder\"\n title={I18n.t('Create new folder')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit'}}\n onClick={() => this.onAddNewFolder()}\n size=\"medium\"><IconAddFolder/></IconButton>);\n }\n\n // Search\n result.push(<IconButton\n key=\"search\"\n disabled={reorder || this.props.debugMode}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n title={I18n.t('Search in scripts')}\n style={{float: 'right', opacity: this.props.debugMode ? 0.5 : (reorder ? 0 : 1)}}\n onClick={e => {\n e.stopPropagation();\n this.setState({searchMode: true});\n }}\n size=\"medium\"><IconFind/></IconButton>);\n\n // Reorder button\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"reorder\"\n title={I18n.t('Reorder scripts in folders')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit', float: 'right'}}\n onClick={e => {\n e.stopPropagation();\n this.setState({reorder: !this.state.reorder});\n }}\n size=\"medium\"><IconReorder/></IconButton>);\n\n if (!reorder && this.state.selected && this.state.selected !== GLOBAL_ID && this.state.selected !== COMMON_ID) {\n // Rename\n result.push(<IconButton\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n title={I18n.t('Rename')}\n key=\"rename\"\n onClick={e => this.onRename(e)}\n size=\"medium\"><IconEdit/></IconButton>);\n\n\n // const selectedItem = this.state.listItems.find(i => i.id === this.state.selected);\n // if (selectedItem && selectedItem.type !== 'folder') {\n // // Restart\n // result.push((<IconButton className={classes.toolbarButtons}\n // key=\"restart\"\n // onClick={e => {\n // e.stopPropagation();\n // this.props.onEnableDisable && this.props.onEnableDisable();\n // }}\n // ><IconRestart/></IconButton>));\n // }\n }\n\n }\n return result;\n }\n\n getFolders() {\n const folders = [{id: ROOT_ID, name: I18n.t('Root folder')}];\n this.state.listItems.forEach(item =>\n item.type === 'folder' && folders.push({id: item.id, name: item.title})\n );\n return folders;\n }\n\n onCollapseAll() {\n this.setState({expanded: []});\n this.saveExpanded([]);\n }\n\n onExpandAll() {\n const expanded = [];\n this.state.listItems.forEach(item =>\n this.state.listItems.find(it => it.parent === item.id) && expanded.push(item.id));\n this.setState({expanded});\n this.saveExpanded(expanded);\n }\n\n getBottomButtons() {\n if (this.state.reorder || this.props.debugMode) {\n return null;\n }\n return [\n <IconPause\n key=\"filterByRunning\"\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_RUN, opacity: this.state.statusFilter === 'running' ? 1 : 0.3, background: this.state.statusFilter === 'running' ? 'gray' : 'inherit' }}\n title={I18n.t('Show only running scripts')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n const statusFilter = this.state.statusFilter === 'running' ? '' : 'running';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({statusFilter});\n }}\n />,\n\n <IconPlay\n key=\"filterByPaused\"\n title={I18n.t('Show only paused scripts')}\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_PAUSE, opacity: this.state.statusFilter === 'paused' ? 1 : 0.3, background: this.state.statusFilter === 'paused' ? 'gray' : 'inherit' }}\n onClick={() => {\n const statusFilter = this.state.statusFilter === 'paused' ? '' : 'paused';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({statusFilter});\n }}\n />,\n <IconPause\n key=\"filterByProblem\"\n title={I18n.t('Show only scripts with problems')}\n className={this.props.classes.footerButtons}\n style={{ color: COLOR_PROBLEM, opacity: this.state.statusFilter === 'problems' ? 1 : 0.3, background: this.state.statusFilter === 'problems' ? 'gray' : 'inherit' }}\n onClick={() => {\n const statusFilter = this.state.statusFilter === 'problems' ? '' : 'problems';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({statusFilter});\n }}\n />,\n <img\n key=\"filterBlockly\"\n className={this.props.classes.footerButtons}\n alt=\"Blockly\"\n style={{ opacity: this.state.typeFilter === 'Blockly' ? 1 : 0.3, background: this.state.typeFilter === 'Blockly' ? 'gray' : 'inherit' }}\n src={images.Blockly || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'Blockly' ? '' : 'Blockly';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <img\n key=\"filterJS\"\n className={this.props.classes.footerButtons}\n alt=\"Javascript\"\n style={{ opacity: this.state.typeFilter === 'Javascript/js' ? 1 : 0.3, background: this.state.typeFilter === 'Javascript/js' ? 'gray' : 'inherit' }}\n src={images['Javascript/js'] || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'Javascript/js' ? '' : 'Javascript/js';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <img\n key=\"filterTS\"\n className={this.props.classes.footerButtons}\n alt=\"TypeScript\"\n style={{ opacity: this.state.typeFilter === 'TypeScript/ts' ? 1 : 0.3, background: this.state.typeFilter === 'TypeScript/ts' ? 'gray' : 'inherit' }}\n src={images['TypeScript/ts'] || images.def}\n onClick={() => {\n const typeFilter = this.state.typeFilter === 'TypeScript/ts' ? '' : 'TypeScript/ts';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <img\n key=\"filterRules\"\n className={this.props.classes.footerButtons}\n alt=\"Rules\"\n style={{ opacity: this.state.typeFilter === 'Rules' ? 1 : 0.3, background: this.state.typeFilter === 'Rules' ? 'gray' : 'inherit' }}\n src={images['Rules'] || images.def}\n onClick={event => {\n const typeFilter = this.state.typeFilter === 'Rules' ? '' : 'Rules';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <IconExpandAll key=\"expandAll\" className={this.props.classes.footerButtons + ' ' + this.props.classes.footerButtonsRight} title={I18n.t('Expand all')} onClick={() => this.onExpandAll()}/>,\n this.state.expanded.length ? <IconCollapseAll key=\"collapseAll\" className={this.props.classes.footerButtons + ' ' + this.props.classes.footerButtonsRight} title={I18n.t('Collapse all')} onClick={() => this.onCollapseAll()}/> : null,\n ];\n }\n\n getAdapterDebugDialog() {\n if (this.state.showAdapterDebug) {\n return <DialogAdapterDebug\n socket={this.props.socket}\n onClose={() => this.setState({showAdapterDebug: false})}\n onDebug={(instance, adapter) => this.setState({showAdapterDebug: false}, () => this.props.onDebugInstance({instance, adapter}))}\n />;\n }\n }\n\n render() {\n const {classes} = this.props;\n\n const renamingItem = this.state.renaming && this.state.listItems.find(i => i.id === this.state.renaming);\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n\n return [\n <Drawer\n key=\"drawer\"\n variant=\"permanent\"\n className={classes.menu}\n classes={{paper: classes.drawerPaper}}\n anchor='left'\n onClick={() => this.onClick({id: ''})}\n >\n <div className={classes.toolbar}>\n {this.getToolbarButtons()}\n </div>\n\n <Divider/>\n\n <DragDropContext backend={HTML5Backend}>\n <div className={classes.innerMenu}>\n {this.renderAllItems(this.state.listItems)}\n </div>\n </DragDropContext>\n\n <Divider/>\n\n <div className={classes.footer}>{this.getBottomButtons()}</div>\n </Drawer>,\n\n renamingItem ? <DialogRename\n key=\"dialog-rename\"\n name={renamingItem.title}\n title={I18n.t('Rename')}\n id={this.state.renaming}\n folder={renamingItem.type === 'folder'}\n instance={renamingItem.instance}\n instances={this.props.instances}\n onClose={() => this.setState({renaming: false})}\n onRename={(oldId, newName, newId, newInstance) => this.props.onRename && this.props.onRename(oldId, newName, newId, newInstance)}\n /> : null,\n\n this.state.deleting ? <DialogDelete\n key=\"dialog-delete\"\n name={this.state.listItems.find(i => i.id === this.state.deleting).title}\n id={this.state.deleting}\n onClose={() => this.setState({deleting: false})}\n onDelete={id => this.props.onDelete && this.props.onDelete(id)}\n /> : null,\n\n this.state.choosingType ? <DialogAddNewScript\n key=\"dialog-script-type\"\n onClose={type => {\n this.setState({choosingType: false});\n type && this.setState({creatingScript: type})\n }}\n /> : null,\n\n this.state.creatingScript ? <DialogNew\n key=\"dialog-new-script\"\n onClose={() => this.setState({creatingScript: false})}\n title={I18n.t('Create new script')}\n name={ this.getUniqueName() }\n parents={ this.getFolders() }\n folder={ false }\n existingItems={this.state.listItems.map(item => item.id)}\n instance={this.props.instances[0] || 0}\n instances={this.props.instances}\n type={this.state.creatingScript}\n parent={this.parent}\n onAdd={(id, name, instance, type) =>\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type)}\n /> : null,\n\n this.state.copingScript ? <DialogNew\n key=\"dialog-copy-script\"\n onClose={() => this.setState({copingScript: ''})}\n title={I18n.t('Copy script')}\n name={ this.getUniqueName(this.state.copingScript) }\n parents={this.getFolders()}\n folder={false}\n instance={parseInt((copingItem && copingItem.common && copingItem.common.engine && copingItem.common.engine.split('.').pop()) || 0, 10)}\n instances={this.props.instances}\n type={(copingItem && copingItem.common && copingItem.common.engineType) || 'Javascript/js'}\n parent={this.parent}\n onAdd={(id, name, instance, type) => {\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n if (copingItem && copingItem.common) {\n // disable script by coping\n copingItem.common.enabled = false;\n }\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type, copingItem && copingItem.common && copingItem.common.source);\n }}\n /> : null,\n\n this.state.creatingFolder ? <DialogNew\n key=\"dialog-new-folder\"\n onClose={() => this.setState({creatingFolder: false})}\n title={I18n.t('Create new folder')}\n parents={this.getFolders()}\n name={this.getUniqueFolderName()}\n parent={this.parent}\n onAdd={(id, name) =>\n this.props.onAddNew && this.props.onAddNew(id, name, true)}\n /> : null,\n\n this.state.errorText ? <DialogError onClose={() => this.setState({errorText: ''})} text={this.state.errorText}/> : null,\n\n this.getAdapterDebugDialog(),\n ];\n }\n}\n\nSideDrawer.propTypes = {\n classes: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n scripts: PropTypes.object.isRequired,\n scriptsHash: PropTypes.number,\n onEdit: PropTypes.func,\n selectId: PropTypes.string,\n expertMode: PropTypes.bool,\n onExpertModeChange: PropTypes.func,\n onEnableDisable: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onSelect: PropTypes.func,\n onAddNew: PropTypes.func,\n onRename: PropTypes.func,\n onDelete: PropTypes.func,\n onImport: PropTypes.func,\n onExport: PropTypes.func,\n onSearch: PropTypes.func,\n onThemeChange: PropTypes.func,\n onDebugInstance: PropTypes.func,\n width: PropTypes.number,\n debugMode: PropTypes.bool,\n};\n\nexport default withStyles(styles)(SideDrawer);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport IconButton from '@mui/material/IconButton';\nimport {MdDeleteForever as IconDelete} from 'react-icons/md';\nimport {MdVerticalAlignBottom as IconBottom} from 'react-icons/md';\nimport {MdContentCopy as IconCopy} from 'react-icons/md';\nimport {MdVisibilityOff as IconHide} from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\n\n// replace later with MdHorizontalSplit and MdVerticalSplit\nconst IconVerticalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAACFJREFUeAFjAIJRwP////8PYIKWHCigNQdKj/pn1D+jAABTG16wVQqVpQAAAABJRU5ErkJggg==';\nconst IconHorizontalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAABtJREFUeAFjAIJRwP8fCj7QkENn/4z6Z5QzCgBjbWaoyx1PqQAAAABJRU5ErkJggg==';\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) i = '0' + i.toString();\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) i = '0' + i.toString();\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) i = '0' + i.toString();\n text += i + '.';\n i = d.getMilliseconds();\n if (i < 10) {\n i = '00' + i.toString();\n } else if (i < 100) {\n i = '0' + i.toString();\n }\n text += i;\n return text;\n}\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden'\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n\n },\n toolbox: {\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold'\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4\n },\n layoutIcon: {\n width: 24,\n height: 24,\n background: theme.palette.mode === 'dark' ? '#9d9d9d' : undefined,\n borderRadius: theme.palette.mode === 'dark' ? 30 : undefined,\n },\n});\n\nfunction copyToClipboard(str) {\n const el = window.document.createElement('textarea');\n el.value = str;\n window.document.body.appendChild(el);\n el.select();\n window.document.execCommand('copy');\n window.document.body.removeChild(el);\n}\n\nfunction paddingMs(ms) {\n if (ms < 10) {\n return '00' + ms;\n }\n if (ms < 100) {\n return '0' + ms;\n }\n return ms;\n}\n\nlet gText = {};\n\nclass Log extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n selected: null,\n editing: this.props.editing || []\n };\n this.lastIndex = null;\n this.messagesEnd = React.createRef();\n }\n\n generateLine(message) {\n return <tr key={'tr_' + message.ts + '_' + message.message.substr(-10)} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.message}</td>\n </tr>;\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({behavior: 'smooth'});\n }\n logHandler = message => {\n let allLines = this.state.lines;\n const selected = this.state.editing.find(id => message.message.indexOf(id) !== -1);\n if (!selected) {\n return;\n }\n\n let lines = allLines[selected] || [];\n let text = gText[selected] || [];\n\n lines.push(this.generateLine(message));\n let severity = message.severity;\n if (severity === 'info' || severity === 'warn') {\n severity += ' ';\n }\n const date = new Date(message.ts);\n text.push(`${date.toLocaleString()}.${paddingMs(date.getMilliseconds())}\\t[${severity}]: ${message.message}`);\n if (lines.length > 300) {\n lines.splice(0, lines.length - 300);\n text.splice(0, lines.length - 300);\n }\n gText[selected] = text;\n allLines[selected] = lines;\n\n this.setState({lines: allLines});\n }\n\n componentDidMount() {\n this.props.socket.registerLogHandler(this.logHandler);\n }\n\n componentWillUnmount() {\n this.props.socket.unregisterLogHandler(this.logHandler);\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n static getDerivedStateFromProps(props, state) {\n let changed = false;\n let newState = {};\n\n if (props.selected !== state.selected) {\n let selected = props.selected;\n let allLines = state.lines;\n allLines[selected] = allLines[selected] || [];\n gText[selected] = gText[selected] || [];\n newState.selected = selected;\n changed = true;\n }\n\n if (JSON.stringify(props.editing) !== JSON.stringify(state.editing)) {\n const editing = JSON.parse(JSON.stringify(props.editing));\n changed = true;\n let allLines = state.lines;\n\n for (const id in gText) {\n if (gText.hasOwnProperty(id)) {\n if (!editing.includes(id)) {\n delete gText[id];\n delete allLines[id];\n }\n }\n }\n\n newState.editing = editing;\n }\n return changed ? newState : null;\n }\n\n onCopy() {\n copyToClipboard((gText[this.state.selected] || []).join('\\n'));\n }\n\n clearLog() {\n let allLines = this.state.lines;\n if (allLines[this.state.selected]) {\n allLines[this.state.selected] = [];\n }\n if (gText[this.state.selected]) {\n gText[this.state.selected] = [];\n }\n this.setState({lines: allLines});\n }\n\n renderLogList(lines) {\n if (this.state.selected && lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>{lines}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{float: 'left', clear: 'both'}}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{paddingLeft: 10}}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n render() {\n const lines = this.state.selected && this.state.lines[this.state.selected];\n return (\n <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({goBottom: !this.state.goBottom})}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.clearLog()}\n size=\"medium\"><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy/></IconButton> : null}\n {this.props.onLayoutChange ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onLayoutChange()}\n title={I18n.t('Change layout')}\n size=\"medium\"><img className={this.props.classes.layoutIcon} alt=\"split\" src={this.props.verticalLayout ? IconVerticalSplit : IconHorizontalSplit} /></IconButton> : null}\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onHideLog()}\n title={I18n.t('Hide logs')}\n size=\"medium\"><IconHide /></IconButton>\n </div>\n {this.renderLogList(lines)}\n </div>\n );\n }\n}\n\nLog.propTypes = {\n selected: PropTypes.string,\n socket: PropTypes.object,\n onLayoutChange: PropTypes.func,\n verticalLayout: PropTypes.bool\n};\n\nexport default withStyles(styles)(Log);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Fab from '@mui/material/Fab';\n\nimport {MdGTranslate as IconNoCheck} from 'react-icons/md';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nfunction isIdOfGlobalScript(id) {\n return /^script\\.js\\.global\\./.test(id);\n}\nlet index = 0;\nclass ScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: 'current',\n isDark: props.isDark || false,\n language: props.language || 'javascript',\n readOnly: props.readOnly || false,\n alive: true,\n check: false,\n searchText: this.props.searchText || '',\n typingsLoaded: false,\n };\n this.runningInstancesStr = JSON.stringify(this.props.runningInstances);\n this.monacoDiv = null; //ref\n this.editor = null;\n this.monaco = window.monaco;\n this.insert = '';\n this.originalCode = props.code || '';\n this.typings = {}; // TypeScript declarations\n this.lastSearch = '';\n }\n\n waitForMonaco(cb) {\n if (!this.monaco || !this.props.runningInstances) {\n this.monaco = window.monaco;\n this.monacoCounter = this.monacoCounter || 0;\n this.monacoCounter++;\n if (!this.monaco && this.monacoCounter < 20) {\n console.log('wait for monaco loaded');\n return setTimeout(() => this.waitForMonaco(cb), 200);\n } else if (this.monacoCounter >= 20) {\n console.error('Cannot load monaco!');\n }\n } else {\n cb && cb();\n }\n }\n\n loadTypings(runningInstances) {\n if (!this.editor) {\n return;\n }\n runningInstances = runningInstances || this.props.runningInstances;\n let scriptAdapterInstance = runningInstances && Object.keys(runningInstances).find(id => runningInstances[id]);\n if (scriptAdapterInstance) {\n this.props.socket.sendTo(scriptAdapterInstance.replace('system.adapter.', ''), 'loadTypings', null)\n .then(result => {\n this.setState({alive: true, check: true, typingsLoaded: true});\n this.setTypeCheck(true);\n if (result.typings) {\n this.typings = result.typings;\n this.setEditorTypings(this.state.name);\n } else {\n console.error(`failed to load typings: ${result.error}`);\n }\n });\n }\n }\n\n componentDidMount() {\n if (!this.monaco || !this.props.runningInstances) {\n this.monaco = window.monaco;\n if (!this.monaco) {\n console.log('wait for monaco loaded');\n return this.waitForMonaco(() => this.componentDidMount());\n }\n }\n if (!this.editor) {\n this.props.onRegisterSelect && this.props.onRegisterSelect(() => this.editor.getModel().getValueInRange(this.editor.getSelection()));\n // For some reason we have to get the original compiler options\n // and assign new properties one by one\n const compilerOptions = this.monaco.languages.typescript.typescriptDefaults['getCompilerOptions']();\n compilerOptions.target = this.monaco.languages.typescript.ScriptTarget.ES2015;\n compilerOptions.allowJs = true;\n compilerOptions.checkJs = this.props.checkJs !== false;\n compilerOptions.noLib = true;\n compilerOptions.lib = [];\n compilerOptions.useUnknownInCatchVariables = false;\n compilerOptions.moduleResolution = this.monaco.languages.typescript.ModuleResolutionKind.NodeJs;\n this.monaco.languages.typescript.typescriptDefaults.setCompilerOptions(compilerOptions);\n\n this.setTypeCheck(false);\n\n // Create the editor instances\n this.editor = this.monaco.editor.create(this.monacoDiv, {\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n automaticLayout: true,\n glyphMargin: !!this.props.breakpoints,\n });\n\n this.editor.onDidChangeModelContent(e =>\n this.onChange(this.editor.getValue()));\n\n // Load typings for the JS editor\n /** @type {string} */\n this.loadTypings();\n\n this.editor.addCommand(this.monaco.KeyMod.CtrlCmd | this.monaco.KeyCode.KEY_S, () =>\n this.onForceSave());\n\n setTimeout(() => {\n this.highlightText(this.state.searchText);\n this.location = this.props.location;\n this.breakpoints = this.props.breakpoints;\n this.showDecorators();\n });\n }\n const options = {\n selectOnLineNumbers: true,\n scrollBeyondLastLine: false,\n automaticLayout: true,\n readOnly: this.state.readOnly,\n language: this.state.language,\n isDark: this.state.isDark,\n };\n\n this.setEditorOptions(options);\n this.editor.focus();\n this.editor.setValue(this.originalCode);\n if (this.props.onToggleBreakpoint) {\n this.editor.onMouseDown(e => {\n if (e.target.detail && e.target.detail.glyphMarginLeft !== undefined) {\n this.props.onToggleBreakpoint(e.target.position.lineNumber - 1);\n }\n });\n } else {\n this.editor.onMouseDown(null);\n }\n }\n\n /**\n * Sets some options of the code editor\n * @param {object} options The editor options to change\n * @param {Partial<{readOnly: boolean, lineWrap: boolean, language: EditorLanguage, typeCheck: boolean}>} options\n */\n setEditorOptions(options) {\n if (options) {\n if (options.language) {\n this.setEditorLanguage(options.language);\n }\n if (options.readOnly !== undefined) {\n this.editor.updateOptions({readOnly: options.readOnly});\n }\n if (options.lineWrap !== undefined) {\n this.editor.updateOptions({wordWrap: options.lineWrap ? 'on' : 'off'});\n }\n if (options.typeCheck !== undefined) {\n this.setTypeCheck(options.typeCheck);\n }\n if (options.isDark !== undefined) {\n this.monaco.editor.setTheme(options.isDark ? 'vs-dark' : 'vs');\n }\n }\n }\n\n componentWillUnmount() {\n if (this.editor) {\n this.props.onRegisterSelect && this.props.onRegisterSelect(null);\n this.editor.dispose();\n this.editor = null;\n }\n }\n\n /** @typedef {\"javascript\" | \"typescript\" | \"coffeescript\"} EditorLanguage */\n\n /**\n * Sets the language of the code editor\n * @param {EditorLanguage} language\n */\n setEditorLanguage(language) {\n // we need to recreate the model when changing languages,\n // so remember its settings\n const model = this.editor.getModel();\n const code = model.getValue();\n const uri = model.uri.path;\n\n const filenameWithoutExtension =\n typeof uri === 'string' && uri.includes('.')\n ? uri.substr(0, uri.lastIndexOf('.'))\n : 'index';\n\n const extension =\n language === 'javascript' ? 'js'\n : (language === 'typescript' ? 'ts' : language);\n\n // get rid of the original model\n model.dispose();\n\n // Both JS and TS need the model to work in TypeScript as the script type\n // is inferred from the file extension\n const newLanguage = (language === 'javascript' || language === 'typescript') ? 'typescript' : language;\n\n const newModel = this.monaco.editor.createModel(\n code,\n newLanguage,\n this.monaco.Uri.from({path: `${filenameWithoutExtension}${index++}.${extension}`})\n );\n\n this.editor.setModel(newModel);\n }\n\n /**\n * Enables or disables the type checking in the editor\n * @param {boolean} enabled - Whether type checking is enabled or not\n */\n setTypeCheck(enabled) {\n const options = {\n noSemanticValidation: !this.state.alive || !enabled, // toggle the type checking\n noSyntaxValidation: !this.state.alive // always check the syntax\n };\n this.monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions(options);\n }\n\n /**\n * @param {string} [currentScriptName] The name of the current script\n */\n setEditorTypings(currentScriptName = '') {\n const isGlobalScript = isIdOfGlobalScript(currentScriptName);\n // The filename of the declarations this script can see if it is a global script\n const partialDeclarationsPath = `${currentScriptName}.d.ts`;\n const wantedTypings = [];\n for (const path of Object.keys(this.typings)) {\n // global scripts don't get to see all other global scripts\n // but only a part of them\n if (isGlobalScript) {\n if (path === 'global.d.ts') {\n continue;\n }\n if (path.startsWith('script.js.global') && path !== partialDeclarationsPath) {\n continue;\n }\n }\n wantedTypings.push({\n filePath: path,\n content: this.typings[path],\n });\n }\n\n // TODO BF: check https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-semantic-tokens-provider-example\n // to support 0.21.0\n\n if (this.monaco && this.monaco.languages.typescript.typescriptDefaults.setExtraLibs) {\n this.monaco.languages.typescript.typescriptDefaults.setExtraLibs(wantedTypings);\n } else if (this.monaco && this.monaco.languages.typescript.typescriptDefaults.addExtraLib) {\n const existingLibs = this.monaco.languages.typescript.typescriptDefaults.getExtraLibs();\n wantedTypings.forEach(lib => {\n if (!existingLibs[lib.filePath]) {\n this.monaco.languages.typescript.typescriptDefaults.addExtraLib(lib, lib.filePath);\n }\n });\n }\n }\n\n /**\n * Inserts some text into the given editor\n * @param {string} text The text to add\n */\n insertTextIntoEditor(text) {\n const selection = this.editor.getSelection();\n const range = new this.monaco.Range(\n selection.startLineNumber,\n selection.startColumn,\n selection.endLineNumber,\n selection.endColumn,\n );\n this.editor.executeEdits('', [{ range: range, text: text, forceMoveMarkers: true }]);\n this.editor.focus();\n }\n\n highlightText(text) {\n let range = text && this.editor.getModel().findMatches(text);\n if (range && range.length) {\n range.forEach(r => this.editor.setSelection(r.range));\n this.editor.revealLine(range[0].range.startLineNumber);\n } else if (this.editor) {\n const row = this.editor.getPosition().lineNumber;\n const col = this.editor.getPosition().column;\n this.editor.setSelection(new this.monaco.Range(row, col, row, col));\n }\n }\n\n showDecorators() {\n this.decorations = this.decorations || [];\n const decorations = [];\n if (this.location) {\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, this.location.columnNumber + 1, this.location.lineNumber + 1, 1000),\n options: {\n isWholeLine: false,\n className: this.props.isDark ? 'monacoCurrentLineDark' : 'monacoCurrentLine',\n }\n });\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, 0, this.location.lineNumber + 1, 0),\n options: {\n isWholeLine: true,\n className: this.props.isDark ? 'monacoCurrentFullLineDark' : 'monacoCurrentFullLine',\n }\n });\n }\n\n if (this.breakpoints) {\n this.breakpoints.forEach(bp => {\n decorations.push({\n range: new this.monaco.Range(bp.location.lineNumber + 1, 0, bp.location.lineNumber + 1, 100),\n options: {\n isWholeLine: true,\n glyphMarginClassName: this.props.isDark ? 'monacoBreakPointDark' : 'monacoBreakPoint',\n }\n });\n });\n }\n this.editor && (this.decorations =\n this.editor.deltaDecorations(this.decorations, decorations));\n }\n\n initNewScript(name, code) {\n this.setState({name});\n this.originalCode = code || '';\n this.editor && this.editor.setValue(code);\n this.highlightText(this.lastSearch);\n this.showDecorators();\n //this.setEditorLanguage();\n // Update the typings because global scripts need different typings than normal scripts\n // and each global script has different typings\n this.setEditorTypings(name);\n }\n\n scrollToLineIfNeeded(lineNumber) {\n if (this.editor) {\n const ranges = this.editor.getVisibleRanges();\n if (!ranges || !ranges[0] || ranges[0].startLineNumber > lineNumber || lineNumber > ranges[0].endLineNumber) {\n this.editor.revealLineInCenter(lineNumber);\n }\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const options = {};\n if (this.state.name !== nextProps.name) {\n // A different script was selected\n this.initNewScript(nextProps.name, nextProps.code);\n }\n\n // if some running instance will be found and\n if (JSON.stringify(nextProps.runningInstances) !== this.runningInstancesStr) {\n this.runningInstancesStr = JSON.stringify(nextProps.runningInstances);\n if (!this.state.typingsLoaded) {\n this.loadTypings(nextProps.runningInstances);\n }\n }\n\n // if the code not yet changed, update the new code\n if (!nextProps.changed && (nextProps.code !== this.originalCode || nextProps.code !== this.editor.getValue())) {\n this.originalCode = nextProps.code;\n this.editor.setValue(this.originalCode);\n this.showDecorators();\n this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.highlightText(this.lastSearch);\n }\n\n if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location) &&\n JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)\n ) {\n this.location = nextProps.location;\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n } else if (JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)) {\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n } else if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location)) {\n this.location = nextProps.location;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n }\n\n if (this.state.language !== (nextProps.language || 'javascript')) {\n this.setState({language: nextProps.language || 'javascript'});\n options.language = nextProps.language || 'javascript';\n } else if (this.state.readOnly !== (nextProps.readOnly || false)) {\n this.setState({readOnly: nextProps.readOnly || false});\n options.readOnly = nextProps.readOnly;\n } else if (this.state.isDark !== (nextProps.isDark || false)) {\n this.setState({isDark: nextProps.isDark || false});\n options.isDark = nextProps.isDark;\n }\n\n this.setEditorOptions(options);\n\n if (this.insert !== nextProps.insert) {\n this.insert = nextProps.insert;\n if (this.insert) {\n console.log('Insert text' + this.insert);\n setTimeout(insert => {\n this.insertTextIntoEditor(insert);\n setTimeout(() => this.props.onInserted && this.props.onInserted(), 100);\n }, 100, this.insert);\n }\n }\n }\n\n onChange(newValue, e) {\n if (!this.props.readOnly) {\n this.props.onChange && this.props.onChange(this.editor.getValue());\n }\n }\n\n render() {\n if (!this.monaco || !this.props.runningInstances) {\n setTimeout(() => {\n this.monaco = window.monaco;\n this.forceUpdate()\n }, 200);\n return null;\n }\n\n return <div ref={el => this.monacoDiv = el} style={{width: '100%', height: '100%', overflow: 'hidden', position: 'relative'}}>\n {!this.state.check && <Fab\n size=\"small\"\n title={I18n.t('Check is not active, because javascript adapter is disabled')}\n style={{bottom: 10, right: 10, opacity: 0.5, position: 'absolute', zIndex: 1, background: 'red', color: 'white'}}\n color=\"secondary\"><IconNoCheck/></Fab>}\n </div>;\n }\n}\n\nScriptEditor.propTypes = {\n adapterName: PropTypes.string.isRequired,\n socket: PropTypes.object,\n runningInstances: PropTypes.object,\n name: PropTypes.string,\n onChange: PropTypes.func,\n onForceSave: PropTypes.func,\n onInserted: PropTypes.func,\n isDark: PropTypes.bool,\n readOnly: PropTypes.bool,\n code: PropTypes.string,\n language: PropTypes.string,\n onRegisterSelect: PropTypes.func,\n searchText: PropTypes.string,\n checkJs: PropTypes.bool,\n changed: PropTypes.bool,\n\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default ScriptEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Popper from '@mui/material/Popper';\nimport Fade from '@mui/material/Fade';\nimport Paper from '@mui/material/Paper';\n\nimport IconCopy from '@mui/icons-material/FileCopy';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: '100%',\n height: '100%',\n overflow: 'auto'\n },\n textAreaLight: {\n background: 'lightgray'\n },\n dialog: {\n height: '95%'\n },\n typography: {\n padding: theme.spacing(2),\n },\n overflowY: {\n overflowY: 'hidden'\n }\n});\nclass DialogExport extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n anchorEl: null,\n popper: ''\n };\n }\n handleCancel = () => {\n this.props.onClose();\n };\n\n onCopy(event) {\n const el = window.document.getElementById('copy_input');\n if (el) {\n el.select();\n window.document.execCommand('copy');\n const target = event.currentTarget;\n\n setTimeout(() => {\n window.document.execCommand('copy');\n this.setState({ popper: I18n.t('Copied'), anchorEl: target });\n setTimeout(() => this.setState({ popper: '', anchorEl: null }), 1000);\n }, 50);\n\n }\n /*el.value = this.props.text;\n window.document.body.appendChild(el);\n el.select();*/\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n key=\"export-dialog\"\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth={true}\n open={this.props.open}\n aria-labelledby=\"export-dialog-title\"\n >\n <DialogTitle id=\"export-dialog-title\">{I18n.t('Export selected blocks')}</DialogTitle>\n <DialogContent\n classes={{ root: classes.overflowY }}>\n <pre\n id=\"export-text\"\n className={classes.textArea + ' ' + (this.props.themeType === 'dark' ? '' : classes.textAreaLight)}\n >{this.props.text}</pre>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={event => this.onCopy(event)} color=\"secondary\" startIcon={<IconCopy/>}>{I18n.t('Copy to clipboard')}</Button>\n <Button variant=\"contained\" onClick={() => this.handleCancel()} color=\"primary\" startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n\n <Popper\n id=\"popper\"\n style={{ zIndex: 10000 }}\n open={!!this.state.popper}\n placement=\"top\"\n anchorEl={this.state.anchorEl} transition>\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={350}>\n <Paper>\n <p className={classes.typography}>{this.state.popper}</p>\n </Paper>\n </Fade>\n )}\n </Popper>\n <textarea id=\"copy_input\" readOnly={true} style={{ position: 'absolute', left: -9999 }} tabIndex={-1} aria-hidden={true} value={this.props.text} />\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogExport.defaultProps = {\n open: true\n}\n\nDialogExport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogExport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n height: '100%',\n resize: 'none'\n },\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n});\n\nclass DialogImport extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n text: '',\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel() {\n this.props.onClose();\n }\n\n handleOk() {\n this.props.onClose(this.state.text);\n }\n\n onChange(e) {\n this.setState({ text: e.target.value });\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth={true}\n open={this.props.open}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import blocks')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <textarea\n autoFocus\n id=\"import-text-area\"\n className={classes.textArea}\n onChange={e => this.onChange(e)}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" disabled={!this.state.text} onClick={event => this.handleOk()} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Import')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImport.defaultProps = {\n open: true\n}\n\nDialogImport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogImport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogError from '../Dialogs/Error';\nimport DialogExport from '../Dialogs/Export';\nimport DialogImport from '../Dialogs/Import';\n\nlet languageBlocklyLoaded = false;\nlet languageOwnLoaded = false;\nlet toolboxText = null;\nlet toolboxXml;\nlet scriptsLoaded = [];\n\n// BF (2020-10-31) I have no Idea, why it does not work as static in BlocklyEditor, but outside of BlocklyEditor it works\nfunction searchXml(root, text, _id, _result) {\n _result = _result || [];\n if (root.tagName === 'BLOCK' || root.tagName === 'block') {\n _id = root.id;\n }\n if (root.tagName === 'FIELD' || root.tagName === 'field') {\n for (let a = 0; a < root.attributes.length; a++) {\n const val = (root.attributes[a].value || '').toLowerCase();\n if (root.attributes[a].nodeName === 'name' && (val === 'oid' || val === 'text')) {\n if ((root.innerHTML || root.innerText || '').toLowerCase().includes(text)) {\n _result.push(_id);\n }\n }\n }\n }\n root.childNodes.forEach(node =>\n searchXml(node, text, _id, _result));\n\n return _result;\n}\n\n\nclass BlocklyEditor extends React.Component {\n constructor(props) {\n super(props);\n\n this.blockly = null; //ref\n this.blocklyWorkspace = null;\n this.toolbox = null;\n this.Blockly = window.Blockly;\n\n this.state = {\n languageOwnLoaded,\n languageBlocklyLoaded,\n changed: false,\n message: '',\n error: '',\n themeType: this.props.themeType,\n exportText: '',\n importText: false,\n searchText: this.props.searchText || '',\n };\n this.originalCode = props.code || '';\n\n this.someSelected = null;\n this.changeTimer = null;\n\n this.onResizeBind = this.onResize.bind(this);\n\n this.lastCommand = '';\n this.lastSearch = this.props.searchText || '';\n this.blinkBlock = null;\n this.loadLanguages();\n }\n\n static loadJS(url, callback, location) {\n const scriptTag = document.createElement('script');\n try {\n scriptTag.src = url;\n\n scriptTag.onload = callback;\n scriptTag.onreadystatechange = callback;\n scriptTag.onerror = callback;\n\n (location || window.document.body).appendChild(scriptTag);\n } catch (e) {\n console.error('Cannot load ' + url + ': ' + e);\n callback && callback();\n }\n };\n\n static loadScripts(scripts, callback) {\n if (!scripts || !scripts.length) {\n return callback && callback();\n }\n const adapter = scripts.pop();\n if (scriptsLoaded.indexOf(adapter) === -1) {\n scriptsLoaded.push(adapter);\n BlocklyEditor.loadJS('../../adapter/' + adapter + '/blockly.js', (/*data, textStatus, jqxhr*/) =>\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0));\n } else {\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0);\n }\n }\n\n static loadCustomBlockly(adapters, callback) {\n // get all adapters, that can have blockly\n const toLoad = [];\n for (const id in adapters) {\n if (!adapters.hasOwnProperty(id) ||\n !adapters[id] ||\n !id.match(/^system\\.adapter\\./) ||\n adapters[id].type !== 'adapter'\n ) {\n continue;\n }\n\n if (adapters[id].common && adapters[id].common.blockly) {\n console.log('Detected custom blockly: ' + adapters[id].common.name);\n toLoad.push(adapters[id].common.name);\n }\n }\n\n BlocklyEditor.loadScripts(toLoad, callback);\n }\n\n static loadXMLDoc(text) {\n let parseXml;\n if (window.DOMParser) {\n parseXml = function(xmlStr) {\n return ( new window.DOMParser() ).parseFromString(xmlStr, \"text/xml\");\n };\n } else if (typeof window.ActiveXObject != \"undefined\" && new window.ActiveXObject(\"Microsoft.XMLDOM\")) {\n parseXml = function(xmlStr) {\n var xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = \"false\";\n xmlDoc.loadXML(xmlStr);\n return xmlDoc;\n };\n } else {\n parseXml = function() { return null; }\n }\n return parseXml(text);\n }\n\n searchBlocks(text) {\n if (this.blocklyWorkspace) {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const ids = searchXml(dom, text.toLowerCase());\n const allBlocks = this.blocklyWorkspace.getAllBlocks();\n const result = [];\n allBlocks.filter(b => ids.includes(b.id)).forEach(b => result.push(b));\n return result;\n }\n }\n\n searchId() {\n const blocks = this.lastSearch && this.searchBlocks(this.lastSearch);\n if (blocks && blocks.length) {\n this.someSelected = blocks;\n this.someSelected.forEach(b => b.addSelect());\n this.someSelectedTime = Date.now();\n } else if (this.someSelected) {\n // remove selection\n this.someSelected.forEach(b => b.removeSelect());\n this.someSelected = null;\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.command && this.lastCommand !== nextProps.command) {\n this.lastCommand = nextProps.command;\n setTimeout(() => this.lastCommand = '', 300);\n if (this.lastCommand === 'check') {\n this.blocklyCheckBlocks((err, badBlock) => {\n if (!err) {\n this.setState({message: I18n.t('Ok')});\n } else {\n badBlock && this.blocklyBlinkBlock(badBlock);\n this.setState({error: {text: I18n.t(err), title: I18n.t('Error was found')}});\n this.blinkBlock = badBlock;\n }\n });\n } else if (this.lastCommand === 'export') {\n this.exportBlocks();\n } else if (this.lastCommand === 'import') {\n this.importBlocks();\n }\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.searchId();\n }\n\n if (this.state.themeType !== nextProps.themeType) {\n this.setState({themeType: nextProps.themeType}, () => this.updateBackground());\n }\n\n if (this.originalCode !== nextProps.code) {\n this.originalCode = nextProps.code || '';\n this.loadCode();\n this.searchId();\n }\n }\n\n loadLanguages() {\n // load blockly language\n if (!languageBlocklyLoaded) {\n const fileLang = window.document.createElement('script');\n fileLang.setAttribute('type', 'text/javascript');\n fileLang.setAttribute('src', 'google-blockly/msg/js/' + I18n.getLanguage() + '.js');\n\n // most browsers\n fileLang.onload = () => {\n languageBlocklyLoaded = true;\n this.setState({languageBlocklyLoaded});\n };\n // IE 6 & 7\n fileLang.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageBlocklyLoaded = true;\n this.setState({languageBlocklyLoaded});\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileLang);\n }\n if (!languageOwnLoaded) {\n const fileCustom = window.document.createElement('script');\n fileCustom.setAttribute('type', 'text/javascript');\n fileCustom.setAttribute('src', 'google-blockly/own/msg/' + I18n.getLanguage() + '.js');\n // most browsers\n fileCustom.onload = () => {\n languageOwnLoaded = true;\n this.setState({languageOwnLoaded});\n };\n // IE 6 & 7\n fileCustom.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageOwnLoaded = true;\n this.setState({languageOwnLoaded});\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileCustom);\n }\n }\n\n onResize() {\n this.Blockly.svgResize(this.blocklyWorkspace);\n }\n\n jsCode2Blockly(text) {\n text = text || '';\n const lines = text.split(/[\\r\\n]+|\\r|\\n/g);\n let xml = '';\n for (let l = lines.length - 1; l >= 0; l--) {\n if (lines[l].substring(0, 2) === '//') {\n xml = lines[l].substring(2);\n break;\n }\n }\n if (xml.substring(0, 4) === '<xml') {\n return xml;\n } else {\n let code;\n try {\n code = window.decodeURIComponent(window.atob(xml));\n } catch (e) {\n code = null;\n console.error('cannot decode: ' + xml);\n console.error(e);\n }\n return code;\n }\n }\n\n blocklyBlinkBlock(block) {\n for (let i = 300; i < 3000; i = i + 300) {\n setTimeout(() => block.select(), i);\n setTimeout(() => block.unselect(), i + 150);\n }\n }\n\n blocklyRemoveOrphanedShadows() {\n if (this.blocklyWorkspace) {\n let blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.isShadow()) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.targetConnection) {\n // remove it\n block.dispose();\n break;\n }\n }\n }\n }\n }\n }\n\n blocklyCheckBlocks(cb) {\n let warningText;\n if (!this.blocklyWorkspace || this.blocklyWorkspace.getAllBlocks().length === 0) {\n cb && cb('no blocks found');\n return;\n }\n let badBlock = this.blocklyGetUnconnectedBlock();\n if (badBlock) {\n warningText = 'not properly connected';\n } else {\n badBlock = this.blocklyGetBlockWithWarning();\n if (badBlock) {\n warningText = 'warning on this block';\n }\n }\n\n if (badBlock) {\n if (cb) {\n cb(warningText, badBlock);\n } else {\n this.blocklyBlinkBlock(badBlock);\n }\n return false;\n }\n\n cb();\n\n return true;\n }\n\n // get unconnected block\n blocklyGetUnconnectedBlock () {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.sourceBlock_ || ((conn.type === this.Blockly.INPUT_VALUE || conn.type === this.Blockly.OUTPUT_VALUE) && !conn.targetConnection && !conn._optional)) {\n return block;\n }\n }\n }\n return null;\n }\n\n // get block with warning\n blocklyGetBlockWithWarning() {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.warning) {\n return block;\n }\n }\n return null;\n }\n\n blocklyCode2JSCode(oneWay) {\n let code = this.Blockly.JavaScript.workspaceToCode(this.blocklyWorkspace);\n if (!oneWay) {\n code += '\\n';\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const text = this.Blockly.Xml.domToText(dom);\n code += '//' + btoa(encodeURIComponent(text));\n }\n\n return code;\n }\n\n exportBlocks() {\n let exportText;\n if (this.Blockly.selected) {\n const xmlBlock = this.Blockly.Xml.blockToDom(this.Blockly.selected);\n if (this.Blockly.dragMode_ !== this.Blockly.DRAG_FREE) {\n this.Blockly.Xml.deleteNext(xmlBlock);\n }\n // Encode start position in XML.\n const xy = this.Blockly.selected.getRelativeToSurfaceXY();\n xmlBlock.setAttribute('x', this.Blockly.selected.RTL ? -xy.x : xy.x);\n xmlBlock.setAttribute('y', xy.y);\n\n exportText = this.Blockly.Xml.domToPrettyText(xmlBlock);\n } else {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n exportText = this.Blockly.Xml.domToPrettyText(dom);\n }\n this.setState({exportText});\n }\n\n importBlocks() {\n this.setState({importText: true});\n }\n\n onImportBlocks(xml) {\n xml = (xml || '').trim();\n if (xml) {\n try {\n if (!xml.startsWith('<xml')) {\n xml = '<xml xmlns=\"http://www.w3.org/1999/xhtml\">' + xml + '</xml>';\n }\n let variables = xml.replace(/[\\n\\r]/g, '').match(/<variables>(.*)<\\/variables>/);\n if (variables) {\n let vars = this.Blockly.utils.xml.textToDomDocument('<variables>' + variables[1] + '</variables>');\n if (vars) {\n let nodes = vars.childNodes && vars.childNodes[0] && vars.childNodes[0].childNodes;\n if (nodes) {\n for (let i = 0; i < nodes.length; i++) {\n nodes[i].id && this.blocklyWorkspace.createVariable(nodes[i].id);\n }\n }\n }\n }\n xml = xml.replace(/[\\n\\r]/g, '').replace(/<variables>.*<\\/variables>/g, '');\n window.scripts.loading = true;\n let xmlBlocks = this.Blockly.Xml.textToDom(xml);\n if (xmlBlocks.nodeName === 'xml') {\n for (let b = 0; b < xmlBlocks.children.length; b++) {\n this.blocklyWorkspace.paste(xmlBlocks.children[b]);\n }\n } else {\n this.blocklyWorkspace.paste(xmlBlocks);\n }\n\n window.scripts.loading = false;\n\n\n this.onBlocklyChanged();\n } catch (e) {\n this.setState({error: {text: e, title: I18n.t('Import error')}});\n }\n }\n }\n\n loadCode() {\n if (!this.blocklyWorkspace) {\n return;\n }\n\n this.ignoreChanges = true;\n this.blocklyWorkspace.clear();\n\n try {\n const xml = this.jsCode2Blockly(this.originalCode) || '<xml xmlns=\"http://www.w3.org/1999/xhtml\"></xml>';\n window.scripts.loading = true;\n const dom = this.Blockly.Xml.textToDom(xml);\n this.Blockly.Xml.domToWorkspace(dom, this.blocklyWorkspace);\n window.scripts.loading = false;\n } catch (e) {\n console.error(e);\n setTimeout(() => this.setState({error: I18n.t('Cannot extract Blockly code!')}));\n }\n setTimeout(() => this.ignoreChanges = false, 100);\n }\n\n onBlocklyChanged() {\n this.blocklyRemoveOrphanedShadows();\n this.setState({changed: true});\n this.onChange();\n }\n\n async componentDidUpdate() {\n if (!this.blockly) {\n return;\n }\n if (this.didUpdate) {\n clearTimeout(this.didUpdate);\n this.didUpdate = null;\n }\n\n if (this.blocklyWorkspace) {\n return;\n }\n\n window.addEventListener('resize', this.onResizeBind, false);\n toolboxText = toolboxText || (await this.getToolbox());\n toolboxXml = toolboxXml || this.Blockly.Xml.textToDom(toolboxText);\n\n this.blocklyWorkspace = this.Blockly.inject(\n this.blockly,\n {\n media: 'google-blockly/media/',\n toolbox: toolboxXml,\n zoom: {\n controls: true,\n wheel: false,\n startScale: 1.0,\n maxScale: 3,\n minScale: 0.3,\n scaleSpeed: 1.2\n },\n move: {\n scrollbars: true,\n drag: true,\n wheel: true\n },\n trashcan: true,\n grid: {\n spacing: 25,\n length: 3,\n colour: '#ccc',\n snap: true\n },\n sounds: false, // disable sounds\n }\n );\n // for blockly itself\n window.scripts = {\n blocklyWorkspace: this.blocklyWorkspace\n };\n\n // Listen to events on master workspace.\n this.blocklyWorkspace.addChangeListener(masterEvent => {\n if (this.someSelected && Date.now() - this.someSelectedTime > 500) {\n const allBlocks = this.blocklyWorkspace.getAllBlocks();\n this.someSelected = null;\n allBlocks.forEach(b => b.removeSelect());\n }\n\n if (masterEvent.type === this.Blockly.Events.UI || masterEvent.type === this.Blockly.Events.CREATE) {\n return; // Don't mirror UI events.\n }\n if (this.ignoreChanges) {\n return;\n }\n this.changeTimer && clearTimeout(this.changeTimer);\n this.changeTimer = setTimeout(() => {\n this.changeTimer = null;\n this.onBlocklyChanged();\n }, 200);\n });\n this.loadCode();\n this.onResize();\n // Move toolbar to the valid position\n const toolbar = document.getElementsByClassName('blocklyToolboxDiv')[0];\n this.blockly.appendChild(toolbar);\n\n this.updateBackground();\n setTimeout(() => this.searchId(), 200); // select found blocks\n }\n\n updateBackground() {\n const background = document.getElementsByClassName('blocklyMainBackground')[0];\n if (this.state.themeType === 'dark') {\n if (!background._originalStyle) {\n background._originalStyle = {\n stroke: background.style.stroke,\n fill: background.style.fill\n };\n }\n // add class\n background.style.stroke = '#3a3a3a';\n background.style.fill = '#515151';\n } else if (background._originalStyle) {\n background.style.stroke = background._originalStyle.stroke;\n background.style.fill = background._originalStyle.fill;\n }\n }\n\n componentWillUnmount() {\n if (!this.blocklyWorkspace) {\n return;\n }\n this.blocklyWorkspace.dispose();\n this.blocklyWorkspace = null;\n this.changeTimer && clearTimeout(this.changeTimer);\n this.changeTimer = null;\n window.removeEventListener('resize', this.onResizeBind);\n }\n\n onChange() {\n this.originalCode = this.blocklyCode2JSCode();\n this.props.onChange && this.props.onChange(this.originalCode);\n }\n\n async getToolbox(retry) {\n // Interpolate translated messages into toolbox.\n const el = window.document.getElementById('toolbox');\n let toolboxText = el && el.outerHTML;\n if (!toolboxText) {\n if (!retry) {\n return new Promise(resolve =>\n setTimeout(() => resolve(this.getToolbox(true)), 500));\n } else {\n console.error('Cannot load blocks!');\n return '';\n }\n }\n toolboxText = toolboxText.replace(/{(\\w+)}/g, (m, p1) => window.MSG[p1]);\n\n if (this.Blockly.CustomBlocks) {\n let blocks = '';\n const lang = I18n.getLanguage();\n for (let cb = 0; cb < this.Blockly.CustomBlocks.length; cb++) {\n const name = this.Blockly.CustomBlocks[cb];\n // add blocks\n blocks += '<category name=\"' + this.Blockly.Words[name][lang] + '\" colour=\"' + this.Blockly[name].HUE + '\">';\n for (const _b in this.Blockly[name].blocks) {\n if (this.Blockly[name].blocks.hasOwnProperty(_b)) {\n blocks += this.Blockly[name].blocks[_b];\n }\n }\n blocks += '</category>';\n }\n toolboxText = toolboxText.replace('<category><block>%%CUSTOM_BLOCKS%%</block></category>', blocks);\n }\n\n return toolboxText;\n }\n\n renderMessageDialog() {\n return this.state.message ?\n <DialogMessage\n key=\"dialogMessage\"\n text={typeof this.state.message === 'object' ? this.state.message.text : this.state.message}\n title={typeof this.state.message === 'object' ? this.state.message.title : ''}\n onClose={() => this.setState({message: ''})}\n /> :\n null;\n }\n\n renderErrorDialog() {\n return this.state.error ?\n <DialogError\n key=\"dialogError\"\n text={typeof this.state.error === 'object' ? this.state.error.text.toString() : this.state.error}\n title={typeof this.state.error === 'object' ? this.state.error.title : ''}\n onClose={() => {\n if (this.blinkBlock) {\n this.blocklyBlinkBlock(this.blinkBlock);\n this.blinkBlock = null;\n }\n this.setState({error: ''});\n }}/> :\n null;\n }\n\n renderExportDialog() {\n return this.state.exportText ? <DialogExport key=\"dialogExport\" theme={this.state.themeType} onClose={() => this.setState({exportText: ''})} text={this.state.exportText}/> : null;\n }\n\n renderImportDialog() {\n return this.state.importText ? <DialogImport key=\"dialogImport\" onClose={text => {\n this.setState({importText: false});\n this.onImportBlocks(text);\n }}/> : null;\n }\n\n render() {\n if (this.state.languageBlocklyLoaded && this.state.languageOwnLoaded) {\n this.didUpdate = setTimeout(() => {\n this.didUpdate = null;\n this.componentDidUpdate();\n }, 100);\n\n return [\n <div key=\"blocklyDOM\" ref={el => this.blockly = el} style={{\n //marginLeft: 180,\n width: '100%',//'calc(100% - 180px)',\n height: '100%',\n //overflow: 'hidden',\n position: 'relative'}}/>,\n\n this.renderMessageDialog(),\n this.renderErrorDialog(),\n this.renderExportDialog(),\n this.renderImportDialog(),\n ];\n } else {\n return null;\n }\n }\n}\n\nBlocklyEditor.propTypes = {\n command: PropTypes.string,\n onChange: PropTypes.func,\n searchText: PropTypes.string,\n themeType: PropTypes.string\n};\n\nexport default BlocklyEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconSave from '@mui/icons-material/Save';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n resize: 'none'\n },\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n args: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n height: 30,\n width: '100%',\n fontSize: 16\n },\n argsTitle: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n fontWeight: 'bold'\n }\n});\n\nclass DialogScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n changed: false,\n source: this.props.source,\n };\n if (!this.state.source && this.props.isReturn) {\n this.state.source = '\\nreturn false';\n }\n\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('source-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose(false);\n }\n\n handleOk () {\n if (this.props.isReturn && !this.state.source.includes('return ')) {\n\n } else {\n this.props.onClose(this.state.source);\n }\n }\n\n onChange(value) {\n this.setState({changed: true, source: value});\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{paper: classes.dialog}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"source-dialog-title\"\n >\n <DialogTitle id=\"source-dialog-title\">{I18n.t('Function editor')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n {this.props.args && (<div key=\"arguments\" className={classes.args}>\n <span className={classes.argsTitle}>{I18n.t('function (')}</span>\n {this.props.args}\n <span className={classes.argsTitle}>)</span>\n </div>)}\n <ScriptEditorComponent\n adapterName={this.props.adapterName}\n runningInstances={this.props.runningInstances}\n className={classes.textArea}\n style={{height: this.props.args ? 'calc(100% - 30px)' : '100%'}}\n key=\"scriptEditor\"\n name={'blockly'}\n socket={this.props.socket}\n readOnly={false}\n checkJs={false}\n changed={this.state.changed}\n code={this.state.source}\n isDark={this.props.themeType === 'dark'}\n onChange={newValue => this.onChange(newValue)}\n language={'javascript'}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" startIcon={<IconSave/>}>{I18n.t('Save')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogScriptEditor.propTypes = {\n classes: PropTypes.object.isRequired,\n adapterName: PropTypes.string.isRequired,\n runningInstances: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n source: PropTypes.string,\n args: PropTypes.string,\n isReturn: PropTypes.bool,\n themeType: PropTypes.string,\n socket: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogScriptEditor);\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapperRules\":\"style_wrapperRules__Js-Pp\",\"rootWrapper\":\"style_rootWrapper__0Dpqp\",\"addClass\":\"style_addClass__ry424\"};","// extracted by mini-css-extract-plugin\nexport default {\"switchesItem\":\"style_switchesItem__RBQz7\",\"switchesItemActive\":\"style_switchesItemActive__FU8S9\",\"iconTheme\":\"style_iconTheme__inJLE\"};","import { useState, useEffect } from 'react';\nimport * as Icons from '@mui/icons-material/';\n\nconst ICON_CACHE = {};\n\nconst MaterialDynamicIcon = ({ iconName, className, adapter, socket, onClick }) => {\n let [url, setUrl] = useState('');\n\n useEffect(() => {\n if (adapter && socket) {\n ICON_CACHE[adapter] = ICON_CACHE[adapter] || socket.getObject(`system.adapter.${adapter}`);\n ICON_CACHE[adapter].then(obj =>\n obj?.common?.icon && setUrl(`../../adapter/${adapter}/${obj.common.icon}`));\n }\n }, [adapter, socket]);\n\n if (adapter) {\n return <img onClick={e => onClick && onClick(e)} src={url || ''} className={className} alt=\"\" />;\n } else {\n const Element = Icons[iconName || 'Help'];\n return <Element\n className={className}\n onClick={e => onClick && onClick(e)}\n />;\n }\n}\n\nMaterialDynamicIcon.defaultProps = {\n className: null,\n iconName: 'Help'\n};\n\nexport default MaterialDynamicIcon;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport cls from './style.module.scss';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst CardMenu = ({ name, id, active, icon, adapter, socket, onDoubleClick, title, onTouchMove }) => <div\n onDoubleClick={onDoubleClick}\n onTouchMove={onTouchMove}\n key={id}\n title={I18n.t(title)}\n className={clsx(cls.switchesItem, active && cls.switchesItemActive, 'block-' + id)}\n>\n <MaterialDynamicIcon iconName={icon} className={cls.iconTheme} adapter={adapter} socket={socket} />\n <span>\n {name ? I18n.t(name) : ''}\n </span>\n</div>;\n\nCardMenu.defaultProps = {\n name: '',\n active: false,\n id: '',\n onDoubleClick: () => { }\n};\n\nCardMenu.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n active: PropTypes.bool\n};\n\nexport default CardMenu;","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__5c+lG\",\"cardStyleActive\":\"style_cardStyleActive__n6Nq8\",\"controlMenu\":\"style_controlMenu__J0sIm\",\"closeBtn\":\"style_closeBtn__TzVMw\",\"isDelete\":\"style_isDelete__0Sa6U\",\"drag_mobile\":\"style_drag_mobile__RVp7B\"};","export function deepCopy(name, userRules, additionalParameter) {\n let newItemsSwitches;\n switch (name) {\n case 'actions':\n newItemsSwitches = {\n ...userRules,\n [name]: {\n ...userRules[name],\n [additionalParameter]: [...userRules[name][additionalParameter]]\n }\n };\n return newItemsSwitches;\n\n default:\n newItemsSwitches = {\n ...userRules,\n [name]: [...userRules[name]]\n };\n return newItemsSwitches;\n }\n}","export function filterElement(name, userRules, additionalParameter, _id) {\n switch (name) {\n case 'actions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n case 'conditions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n default:\n userRules[name] = userRules[name].filter(el => el._id !== _id);\n return userRules;\n }\n}","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__A9pAJ\",\"nameCard\":\"style_nameCard__m2nJe\",\"cardStyleActive\":\"style_cardStyleActive__sMSgj\",\"iconThemCard\":\"style_iconThemCard__wx6Kq\",\"iconThemCardSelectable\":\"style_iconThemCardSelectable__H9okn\",\"iconHelp\":\"style_iconHelp__iIi1g\",\"inputCard\":\"style_inputCard__qf8Q+\",\"blockName\":\"style_blockName__CqwBy\",\"controlMenu\":\"style_controlMenu__8kQnd\",\"closeBtn\":\"style_closeBtn__LcbOd\",\"controlMenuTop\":\"style_controlMenuTop__AkzEp\",\"debugInfo\":\"style_debugInfo__wPdyv\",\"fadeIn\":\"style_fadeIn__zKsCh\",\"tagCard\":\"style_tagCard__CEY-X\",\"displayFlex\":\"style_displayFlex__5sr+i\",\"blockMarginTop\":\"style_blockMarginTop__Qn7Lh\",\"nameBlock\":\"style_nameBlock__MZ53S\",\"frontText\":\"style_frontText__3cVcg\",\"backText\":\"style_backText__sF8Y-\",\"iconTag\":\"style_iconTag__2cpM6\",\"displayItalic\":\"style_displayItalic__9KtQw\"};","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__h6PjP\",\"square\":\"style_square__ahzCN\",\"icon\":\"style_icon__jwNl0\"};","import { Button } from '@mui/material';\nimport React from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport cls from './style.module.scss';\nimport CustomIcon from '@iobroker/adapter-react-v5/Components/Icon';\n\nconst CustomButton = ({ fullWidth, size, onClick, style, className, value, square, icon }) => {\n return <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={onClick}\n fullWidth={fullWidth}\n style={style}\n className={clsx(cls.root, className, square ? cls.square : '')}\n margin=\"normal\"\n size={size}\n >{icon ? <CustomIcon className={cls.icon} src={icon} /> : value}</Button>;\n}\n\nCustomButton.defaultProps = {\n value: '',\n className: null,\n variant: 'standard',\n size: 'medium',\n fullWidth: false,\n square: false\n};\n\nCustomButton.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default CustomButton;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__8DT4l\"};","import { Checkbox } from '@mui/material';\nimport React, { memo, useState } from 'react';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nconst CustomCheckbox = ({ size, value, style, title, onChange, className, customValue, disabled }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n\n return <>\n <Checkbox\n disabled={disabled}\n checked={Boolean(customValue ? value : switchChecked)}\n // style={Object.assign(type ? color[type] : null, style)}\n className={clsx(cls.root, className)}\n onChange={e => {\n customValue && setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n {title || null}\n </>;\n}\n\nCustomCheckbox.defaultProps = {\n value: false,\n disabled: false,\n type: null,\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomCheckbox.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomCheckbox);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__WINKv\"};","import { TextField } from '@mui/material';\nimport React, { useState } from 'react';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport CustomIcon from '@iobroker/adapter-react-v5/Components/Icon';\n\nconst CustomInput = ({ autoFocus, fullWidth, disabled, multiline, rows, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, icon }) => {\n const [inputText, setInputText] = useState('');\n return <TextField\n error={!!error}\n autoFocus={autoFocus}\n fullWidth={fullWidth}\n label={label}\n disabled={disabled}\n variant={variant}\n multiline={multiline}\n rows={rows}\n value={customValue ? value : inputText}\n type={type}\n helperText={error}\n style={style}\n className={clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n InputProps={{\n endAdornment: icon ?\n <InputAdornment position=\"end\"><CustomIcon className={cls.icon} src={icon} /></InputAdornment>\n : null\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomInput.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n autoFocus: false,\n rows: 1\n};\n\nCustomInput.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomInput;","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport withStyles from '@mui/styles/withStyles';\nimport React, { useEffect, useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\n\nconst SelectMod = withStyles({\n root: {\n margin: '10px 0',\n '& .MuiFormControl-marginNormal': {\n marginTop: 0,\n marginBottom: 0,\n },\n '& > *': {\n color: '#2d0440 !important'\n },\n '& .MuiSelect-icon': {\n color: '#81688c'\n },\n '& label.Mui-focused': {\n color: '#81688c',\n },\n '& .MuiInput-underline:after': {\n borderBottomColor: '#510573',\n },\n '& .MuiInput-underline:before': {\n borderBottomColor: '#81688c',\n },\n '& .MuiInput-underline:hover:before': {\n borderBottomColor: '#81688c',\n },\n },\n})(FormControl);\n\nconst CustomInstance = ({ multiple, value, customValue, socket, title, attr, adapter, style, onChange, className, onInstanceHide }) => {\n const [inputText, setInputText] = useState(value || 'test1');\n const [options, setOptions] = useState([]);\n\n useEffect(() => {\n socket && socket.getAdapterInstances(adapter)\n .then(instances => {\n const _options = instances.map(obj => ({value: obj._id.replace('system.adapter.', ''), title: obj._id.replace('system.adapter.', '')}));\n if (_options.length === 1) {\n onInstanceHide(_options[0].value);\n } else {\n _options.unshift({value: adapter, title: I18n.t('All')});\n }\n setOptions(_options);\n });\n }, [socket, adapter, onInstanceHide]);\n\n return <SelectMod\n className={className}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={(customValue ? value : inputText) || '_'}\n fullWidth\n multiple={multiple}\n renderValue={(selected) => multiple && selected.join ? selected.join(', ') : selected}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n input={attr ? <Input name={attr} id={attr + '-helper'} /> : <Input name={attr} />}\n >\n {options.map(item =>\n <MenuItem style={{placeContent:'space-between'}} key={'key-' + item.value} value={item.value || '_'}>{I18n.t(item.title)}{item.title2 && <div>{item.title2}</div>}</MenuItem>)}\n </Select>\n <FormHelperText>{I18n.t(title)}</FormHelperText>\n </SelectMod>;\n}\n\nCustomInstance.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false\n};\n\nCustomInstance.propTypes = {\n title: PropTypes.string,\n socket: PropTypes.object,\n attr: PropTypes.string,\n adapter: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default CustomInstance;","// extracted by mini-css-extract-plugin\nexport default {\"modalContentWrapper\":\"style_modalContentWrapper__ewzzR\",\"modalButtonBlock\":\"style_modalButtonBlock__otBeq\",\"modalButtonBlockTwo\":\"style_modalButtonBlockTwo__bh8rw\",\"modalWrapper\":\"style_modalWrapper__VUeGq\",\"modalDialog\":\"style_modalDialog__MI8Ka\",\"close\":\"style_close__Z8qAY\"};","import React, {useState} from 'react';\nimport Button from '@mui/material/Button';\nimport { Dialog, DialogActions, DialogContent } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport i18n from '@iobroker/adapter-react-v5/i18n';\nimport CustomInput from \"../CustomInput\";\n\nconst CustomModal = ({ open, onClose, children, titleButtonApply, titleButtonClose, onApply, className, textInput, defaultValue}) => {\n let [value, setValue] = useState(defaultValue);\n\n return <Dialog\n open={open}\n maxWidth=\"md\"\n disableEscapeKeyDown={false}\n onClose={onClose}\n classes={{paper: cls.modalDialog, /*paper: classes.background*/}}\n className={cls.modalWrapper}\n >\n <DialogContent>\n {textInput && <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"medium\"\n rows={10}\n multiline\n value={value}\n onChange={setValue}\n customValue\n />}\n {!textInput && children}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onApply(textInput ? value : null)} variant=\"contained\" color=\"primary\">\n {i18n.t(titleButtonApply)}\n </Button>\n <Button color=\"grey\" onClick={onClose} variant=\"contained\">\n {i18n.t(titleButtonClose)}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nCustomModal.defaultProps = {\n open: false,\n onApply: () => { },\n onClose: () => { },\n titleButtonClose: 'Cancel',\n titleButtonApply: 'Ok'\n};\n\nCustomModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n children: PropTypes.any,\n titleButtonClose: PropTypes.string,\n titleButtonApply: PropTypes.string,\n onApply: PropTypes.func\n};\n\nexport default CustomModal;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__AZ3ER\"};","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport React, { useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport clsx from 'clsx';\nimport CustomCheckbox from '../CustomCheckbox';\n\nconst CustomSelect = ({ multiple, value, customValue, title, attr, options, style, onChange, className, doNotTranslate, doNotTranslate2 }) => {\n const [inputText, setInputText] = useState(value === undefined ? options[0].value : value);\n\n const v = customValue ? value : inputText;\n const text = v === '' || v === null || v === undefined ? '_' : v;\n\n return <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={text}\n fullWidth\n multiple={multiple}\n renderValue={selected => {\n if (multiple && selected.join) {\n // sort\n selected.sort();\n let pos = selected.indexOf('0');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.push('0');\n }\n pos = selected.indexOf('_');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.unshift('_');\n }\n\n const onlyItem = options.find(el => el.only);\n if (selected.includes(onlyItem.value)) {\n return onlyItem.titleShort ? (doNotTranslate ? onlyItem.titleShort : I18n.t(onlyItem.titleShort)) : (doNotTranslate ? onlyItem.title : I18n.t(onlyItem.title))\n }\n\n const titles = selected\n .map(sel => options.find(item => item.value === sel || (sel === '_' && item.value === '')) || sel)\n .map(item => typeof item === 'object' ? (item.titleShort ? (doNotTranslate ? item.titleShort : I18n.t(item.titleShort)) : (doNotTranslate ? item.title : I18n.t(item.title))) : (doNotTranslate ? item : I18n.t(item)));\n\n return titles.join(', ');\n } else {\n const item = options ? options.find(item => item.value === selected || (selected === '_' && item.value === '')) : null;\n return item?.title ? (doNotTranslate ? item?.title : I18n.t(item?.title)) : selected;\n }\n }}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n if (multiple) {\n const onlyItem = options.find(el => el.only);\n if (onlyItem) {\n const valueOnly = onlyItem.value;\n if (e.target.value.length === options.length - 1 && e.target.value.includes(valueOnly)) {\n return onChange(e.target.value.filter(el => el !== valueOnly), attr);\n }\n if (e.target.value.includes(valueOnly)) {\n return onChange(options.map(el => el.value), attr);\n }\n }\n }\n onChange(e.target.value, attr);\n }}\n input={attr ? <Input name={attr} id={attr + '-helper'} /> : <Input name={attr} />}\n >\n {!multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={'key-' + item.value} value={item.value === '' || item.value === null || item.value === undefined ? '_' : item.value}>{doNotTranslate ? item.title : I18n.t(item.title)}{item.title2 && <div>{doNotTranslate2 ? item.title2 : I18n.t(item.title2)}</div>}</MenuItem>)}\n {multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={'key-' + item.value} value={item.value || '_'}>{doNotTranslate ? item.title : I18n.t(item.title)} <CustomCheckbox customValue value={value.includes(item.value)} /></MenuItem>)}\n </Select>\n {title ? <FormHelperText>{I18n.t(title)}</FormHelperText> : null}\n </FormControl>;\n}\n\nCustomSelect.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false,\n multiple: false\n};\n\nCustomSelect.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n options: PropTypes.array.isRequired,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomSelect;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__BGOBc\",\"mark\":\"style_mark__MLqoT\"};","import React, { useState } from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { Slider } from '@mui/material';\n\nconst CustomSlider = ({ fullWidth, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, min, max, step, unit }) => {\n const [inputText, setInputText] = useState(0);\n min = min !== undefined ? min : 0;\n max = max !== undefined ? max : 0;\n step = step !== undefined ? step : (max - min) / 100;\n\n const marks = [\n {\n value: min,\n label: min + (unit || ''),\n },\n {\n value: max,\n label: max + (unit || ''),\n },\n ];\n\n return <Slider\n defaultValue={customValue ? value : inputText}\n // getAriaValueText={customValue ? value : inputText}\n aria-labelledby=\"discrete-slider\"\n valueLabelDisplay=\"auto\"\n classes={{mark: cls.mark}}\n marks={marks}\n step={step}\n min={min}\n max={max}\n error={error || ''}\n //fullWidth={fullWidth}\n label={label}\n variant={variant}\n value={customValue ? value : inputText}\n type={type}\n //helperText={error || ''}\n style={style}\n className={clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={(e, newValue) => {\n !customValue && setInputText(newValue);\n onChange(newValue);\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomSlider.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false\n};\n\nCustomSlider.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomSlider;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__anA9+\"};","import { FormControlLabel, Switch } from '@mui/material';\nimport React, { memo, useState } from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\n\nconst CustomSwitch = ({ label, size, value, style, onChange, className, customValue }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n return <FormControlLabel\n className={cls.root}\n control={<Switch\n checked={customValue ? value : switchChecked}\n style={style}\n className={className}\n onChange={e => {\n if (!customValue) setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n }\n label={label}\n />;\n}\n\nCustomSwitch.defaultProps = {\n value: false,\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomSwitch.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomSwitch);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__xyxno\"};","import { TextField } from '@mui/material';\nimport React from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nconst CustomTime = ({ value, style, onChange, className }) => {\n return <TextField\n variant=\"standard\"\n id=\"time\"\n type=\"time\"\n onChange={(e) => onChange(e.currentTarget.value)}\n value={value}\n className={clsx(cls.root, className)}\n fullWidth\n style={style}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n step: 300, // 5 min\n }}\n />;\n}\n\nCustomTime.defaultProps = {\n value: '',\n className: null,\n table: false\n};\n\nCustomTime.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomTime;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__FwemI\"};","import { FormControl, MenuItem, Select } from '@mui/material';\nimport React from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31 // 12\n];\n\nconst CustomDate = ({ value, onChange, className, title, style }) => {\n let [month, date] = (value || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n\n let days = [];\n for (let i = 0; i < DAYS[month]; i++) {\n days.push(i + 1);\n }\n\n return <div>\n <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Month')}\n onChange={e =>\n onChange(e.target.value.toString().padStart(2, '0') + '.' + date.toString().padStart(2, '0'))}\n value={month}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={0} value={0}>{I18n.t('Any month')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={1} value={1}>{I18n.t('January')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={2} value={2}>{I18n.t('February')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={3} value={3}>{I18n.t('March')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={4} value={4}>{I18n.t('April')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={5} value={5}>{I18n.t('May')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={6} value={6}>{I18n.t('June')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={7} value={7}>{I18n.t('July')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={8} value={8}>{I18n.t('August')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={9} value={9}>{I18n.t('September')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={10} value={10}>{I18n.t('October')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={11} value={11}>{I18n.t('November')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={12} value={12}>{I18n.t('December')}</MenuItem>\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Date')}\n onChange={e =>\n onChange(month.toString().padStart(2, '0') + '.' + e.target.value.toString().padStart(2, '0'))}\n value={date}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={'A'} value={0}>{I18n.t('Any')}</MenuItem>\n {days.map(i => <MenuItem style={{ placeContent: 'space-between' }} key={i} value={i}>{i}</MenuItem>)}\n </Select>\n </FormControl>\n </div>;\n}\n\nCustomDate.defaultProps = {\n value: '',\n className: null,\n};\n\nCustomDate.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomDate;","import I18n from '@iobroker/adapter-react-v5/i18n';\n\nlet lang;\nconst getName = obj => {\n lang = lang || I18n.getLanguage();\n if (typeof obj === 'object') {\n return obj[lang] || obj.en;\n } else {\n return obj;\n }\n};\n\nconst utils = {\n getName\n};\n\nexport default utils;","const STEPS = {\n selectTriggers: 0,\n addScheduleByDoubleClick: 1,\n openTagsMenu: 2,\n selectIntervalTag: 3,\n selectActions: 4,\n addActionPrintText: 5,\n showJavascript: 6,\n switchBackToRules: 7,\n saveTheScript: 8,\n};\n\nconst steps = [\n { // 0\n selector: '.blocks-triggers',\n content: 'Select triggers',\n },\n { // 1\n selector: '.block-TriggerScheduleBlock',\n content: 'Double click to add the block',\n },\n { // 2\n selector: '.tag-card',\n content: 'Open drop down menu',\n },\n { // 3\n selector: '.tag-card-interval',\n content: 'Select interval',\n },\n { // 4\n selector: '.blocks-actions',\n content: 'Select action blocks',\n },\n { // 5\n selector: '.block-ActionPrintText',\n content: 'Double click to add the block',\n },\n { // 6\n selector: '.button-js-code',\n content: 'Check the script',\n },\n { // 7\n selector: '.button-js-code',\n content: 'Switch back to rules',\n },\n { // 8\n selector: '.button-save',\n content: 'Save the script',\n }\n];\n\nexport {STEPS};\n\nexport default steps;","import React, { PureComponent, Fragment } from 'react';\nimport cls from './style.module.scss';\n\nimport { Menu, MenuItem } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\n\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\nimport DialogError from '@iobroker/adapter-react-v5/Dialogs/Error';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport CustomButton from '../CustomButton';\nimport CustomCheckbox from '../CustomCheckbox';\nimport CustomInput from '../CustomInput';\nimport CustomInstance from '../CustomInstance';\nimport CustomModal from '../CustomModal';\nimport CustomSelect from '../CustomSelect';\nimport CustomSlider from '../CustomSlider';\nimport CustomSwitch from '../CustomSwitch';\nimport CustomTime from '../CustomTime';\nimport CustomDate from '../CustomDate';\n\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport utils from '../../helpers/utils';\nimport clsx from 'clsx';\nimport { STEPS } from '../../helpers/Tour';\nimport { getSelectIdIcon } from '@iobroker/adapter-react-v5/Components/Icon';\n\nclass GenericBlock extends PureComponent {\n constructor(props, item) {\n super(props);\n item = item || {};\n let settings = props.settings || {\n tagCard: item.tagCardArray ? typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0] : ''\n }\n\n if (!settings.tagCard && item.tagCardArray) {\n settings.tagCard = typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0];\n }\n\n this.state = {\n inputs: item.inputs || props.inputs || [],\n name: item.name || props.name || '',\n icon: item.icon || props.icon || '',\n adapter: item.adapter || props.adapter || '',\n helpDialog: item.helpDialog || props.helpDialog || '',\n\n tagCardArray: item.tagCardArray || [],\n\n openTagMenu: false,\n openModal: false,\n iconTag: false,\n error: '',\n helpText: '',\n\n oid: {},\n instanceSelectionOptions: [],\n instanceSelectionDef: '',\n\n hideAttributes: [], // e.g. instance\n\n settings,\n debugMessage: null,\n enableSimulation: this.props.enableSimulation,\n };\n\n this.debugHideTimeout = null;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps || !nextProps.settings) {\n console.log(JSON.stringify(nextProps));\n return;\n }\n\n const settings = JSON.parse(JSON.stringify(nextProps.settings));\n if (!settings.tagCard && this.state.tagCardArray && this.state.tagCardArray.length) {\n settings.tagCard = typeof this.state.tagCardArray[0] !== 'string' ? this.state.tagCardArray[0].title : this.state.tagCardArray[0];\n }\n\n let newState = null;\n\n if (nextProps.onDebugMessage && nextProps.onDebugMessage.blockId === this.props._id) {\n newState = {};\n newState.debugMessage = JSON.parse(JSON.stringify(nextProps.onDebugMessage));\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = setTimeout(() =>\n this.setState({ debugMessage: null }),\n nextProps.onDebugMessage.hideTimeout || 5000);\n }\n\n if (JSON.stringify(settings) !== JSON.stringify(this.state.settings)) {\n newState = newState || {};\n newState.settings = settings;\n }\n\n if (this.state.enableSimulation !== nextProps.enableSimulation) {\n newState = newState || {};\n newState.enableSimulation = nextProps.enableSimulation;\n }\n\n newState && this.setState(newState);\n }\n\n componentWillUnmount() {\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = null;\n }\n\n // called every time, the tagCard changes or at start\n onTagChange(tagCard, cb) {\n // analyse inputs and fill the attributes with default values\n let changed = false;\n let settings = JSON.parse(JSON.stringify(this.state.settings));\n this.state.inputs.forEach(input => {\n if (input.attr && input.defaultValue !== undefined) {\n if (settings[input.attr] === undefined) {\n changed = true;\n settings[input.attr] = input.defaultValue;\n }\n }\n });\n if (changed) {\n this.setState({ settings }, () => cb && cb());\n this.props.onChange(settings);\n } else {\n cb && cb();\n }\n }\n\n // called if trigger added or removed\n onUpdate() {\n // do nothing, but blocks can overwrite it\n }\n\n // called every time if some attribute changes\n onValueChanged(value, attr) {\n // do nothing, but blocks can overwrite it\n }\n\n renderText = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, name, doNotTranslate, doNotTranslateBack } = input;\n return <Fragment key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n label={utils.getName(name)}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </Fragment>;\n }\n\n renderSwitch = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSwitch\n className={className}\n label=''\n customValue\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderNameText = ({ attr, signature, doNotTranslate, defaultValue }, value) => <div\n className={clsx(!!signature ? cls.displayItalic : cls.displayFlex, cls.blockMarginTop)}\n key={attr}>\n {doNotTranslate ? defaultValue : I18n.t(defaultValue)}\n </div>;\n\n renderNumber = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, openCheckbox, doNotTranslate, doNotTranslateBack } = input;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n return visibility ? <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={clsx(className, input.className)}\n fullWidth\n autoComplete=\"off\"\n label={input.noHelperText ? '' : 'number'}\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div> : null;\n }\n\n renderColor = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n type=\"color\"\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderCheckbox = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, defaultValue, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={cls.displayFlex}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomCheckbox\n className={className}\n size=\"small\"\n style={{ marginRight: 5 }}\n value={typeof settings[attr] === 'boolean' ? settings[attr] : defaultValue}\n customValue\n onChange={onChange}\n />\n {backText && <div onClick={() => onChange(typeof settings[attr] === 'boolean' ? !settings[attr] : !defaultValue)} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderSlider = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, min, max, step, unit, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={cls.displayFlex} style={{ marginRight: 20 }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSlider\n customValue\n min={min}\n max={max}\n step={step}\n unit={unit}\n className={className}\n autoComplete=\"off\"\n label=\"number\"\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={val => {\n console.log(val);\n onChange(val)\n }}\n />\n {backText && <div style={{ marginLeft: 20 }} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderButton = (input, value, onClick) => {\n const { className } = this.props;\n const { attr, frontText, backText, buttonText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomButton\n label={buttonText}\n fullWidth\n value={value}\n className={className}\n onClick={onClick}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n findIcon = obj => {\n if (!obj) {\n return Promise.resolve(null);\n } else\n if (obj.common?.icon) {\n return Promise.resolve(getSelectIdIcon(obj, '../..'));\n } else if (obj.type === 'state' || obj.type === 'channel') {\n const parts = obj._id.split('.');\n parts.pop();\n const newId = parts.join('.');\n return this.props.socket.getObject(newId)\n .then(obj => this.findIcon(obj))\n .catch(() => null);\n }\n }\n\n renderObjectID = (input, value, onChange) => {\n const { attr, openCheckbox, checkReadOnly } = input;\n const { settings } = this.state;\n const showSelectId = this.state['showSelectId' + attr];\n const { className, socket } = this.props;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n\n if (settings[attr] && !this.state[settings[attr]]) {\n setTimeout(() => {\n socket.getObject(value)\n .then(obj => {\n this.findIcon(obj)\n .then(icon => this.setState({\n [settings[attr]]: obj,\n [settings[attr] + '___icon']: icon,\n error: checkReadOnly && this.lastObjectIdChange && Date.now() - this.lastObjectIdChange < 1000 && obj?.common?.write === false ? I18n.t('Read only ID selected: %s', settings[attr]) : ''\n }))\n });\n }, 0);\n }\n\n // return null\n return visibility ? <div className={cls.blockMarginTop} key={attr}>\n <div className={cls.displayFlex}>\n {input.title ? <div>{I18n.t(input.title)}</div> : null}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n disabled\n variant=\"outlined\"\n size=\"small\"\n value={value}\n customValue\n />\n <CustomButton\n icon={this.state[this.state.settings[input.attr] + '___icon']}\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => {\n const settings = {};\n settings['showSelectId' + attr] = true;\n this.setState(settings);\n }}\n />\n </div>\n {this.state[this.state.settings[input.attr]] && <div className={clsx(cls.nameBlock, cls.displayItalic)}>{Utils.getObjectNameFromObj(this.state[settings[attr]], I18n.getLanguage())}</div>}\n {showSelectId ? <DialogSelectID\n imagePrefix=\"../..\"\n dialogName={'javascript'}\n themeType={Utils.getThemeName()}\n socket={socket}\n statesOnly={true}\n selected={value}\n onClose={() => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings);\n }}\n onOk={(selected, name, common) => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings, () =>\n // read type of object\n socket.getObject(selected)\n .then(obj => {\n this.lastObjectIdChange = Date.now();\n onChange({\n [attr]: selected,\n [attr + 'Role']: obj.common.role,\n [attr + 'Type']: obj.common.type,\n [attr + 'Unit']: obj.common.unit,\n [attr + 'States']: obj.common.states,\n [attr + 'Min']: obj.common.min,\n [attr + 'Max']: obj.common.max,\n [attr + 'Step']: obj.common.step,\n [attr + 'Def']: obj.common.def,\n [attr + 'Write']: obj.common.write,\n [attr + 'Read']: obj.common.read,\n }, null, () =>\n this.props.setOnUpdate && this.props.setOnUpdate(true))\n }))}\n }\n /> : null}\n </div> : null;\n }\n\n renderIconTag = () => {\n return <div\n className={cls.iconTag}\n onClick={e => {\n if (this.state.settings.tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}>\n {this.state.settings.tagCard}\n </div>;\n }\n\n renderTime = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomTime\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderSelect = (input, value, onChange) => {\n const { className } = this.props;\n const { name, options, frontText, backText, attr, multiple, doNotTranslate, doNotTranslate2, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{I18n.t(frontText)}</div>}\n <CustomSelect\n attr={attr}\n doNotTranslate={doNotTranslate}\n doNotTranslate2={doNotTranslate2}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n multiple={multiple}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderInstance = (input, value, onChange) => {\n const { className, socket } = this.props;\n const { name, options, frontText, backText, attr, adapter, doNotTranslate, doNotTranslateBack } = input;\n if (this.state.hideAttributes.includes(attr)) {\n return null;\n }\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInstance\n attr={attr}\n socket={socket}\n adapter={adapter}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n customValue\n onInstanceHide={value => this.setState({ hideAttributes: [...this.state.hideAttributes, attr] }, () => onChange(value))} // hide instance if only exactly one exists\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderDialog = (input, value, onChange) => {\n const { onShowDialog, frontText, backText, attr, icon, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <MaterialDynamicIcon\n iconName={icon}\n className={clsx(cls.iconDialog)}\n onClick={e => onShowDialog && onShowDialog()}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderModalInput = (input, value, onChange) => {\n const { openModal } = this.state;\n const { className } = this.props;\n const { attr, nameBlock, frontText, backText, noTextEdit, doNotTranslate, doNotTranslateBack} = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n disabled={!!noTextEdit}\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={onChange}\n customValue\n />\n <CustomButton\n square\n // fullWidth\n style={{ marginLeft: 5 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openModal: true })}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {openModal ? <CustomModal\n open={true}\n onApply={val =>\n this.setState({ openModal: false }, () =>\n val !== null && val !== undefined && onChange(val))}\n onClose={() => this.setState({ openModal: false })}\n defaultValue={value}\n textInput={true}\n /> : null}\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n };\n\n renderDate = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomDate\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n static getReplacesInText(context) {\n let value = '';\n if (context.trigger?.oidType) {\n value = '.replace(/%s/g, obj.state.val).replace(/%id/g, obj.id).replace(/%name/g, obj.common && obj.common.name).replace(/%old/g, obj.oldState.val)';\n }\n return value;\n }\n\n /////////////////////////////\n renderTags = () => {\n let { tagCardArray, openTagMenu } = this.state;\n let { tagCard } = this.state.settings;\n let result = tagCard !== '=' && tagCard !== '<>' && tagCard !== '>=' && tagCard !== '()' && tagCard !== '.' && tagCard !== '<=' && tagCard !== '<' && tagCard !== '>' ? I18n.t(tagCard) : tagCard;\n if (tagCardArray.length >= 3) {\n result = <div>\n <div aria-controls=\"simple-menu\" aria-haspopup=\"true\"\n onClick={e => {\n this.setState({ openTagMenu: e.currentTarget }, () => {\n this.props.isTourOpen &&\n this.props.tourStep === STEPS.openTagsMenu &&\n setTimeout(() => this.props.setTourStep(STEPS.selectIntervalTag), 300);\n });\n }}>{result}</div>\n <Menu\n id=\"simple-menu\"\n anchorEl={openTagMenu}\n keepMounted\n open={Boolean(openTagMenu)}\n onClose={() => this.setState({ openTagMenu: null })}\n >\n {tagCardArray.map(el => {\n let tag = el;\n if (typeof el !== 'string') {\n tag = el.title;\n }\n return (\n <MenuItem\n key={tag}\n selected={tag === tagCard}\n className={'tag-card-' + tag}\n style={{ placeContent: 'space-between' }}\n onClick={() => {\n const settings = { ...this.state.settings, tagCard: tag };\n this.setState({ openTagMenu: null, settings }, () => {\n this.props.onChange(settings);\n this.onTagChange(tag);\n });\n (this.props.isTourOpen &&\n (this.props.tourStep === STEPS.openTagsMenu ||\n this.props.tourStep === STEPS.selectIntervalTag) &&\n tag === 'interval' &&\n setTimeout(() => this.props.setTourStep(STEPS.selectActions), 500));\n\n }}>{tag.search(/>|<|<>|<=|>=|=/) !== -1 ? tag : I18n.t(tag)}{typeof el !== 'string' && el.title2 && <div style={{ marginLeft: 4 }}>{I18n.t(el.title2)}</div>}\n </MenuItem>\n );\n })}\n </Menu>\n </div>;\n }\n\n return result;\n };\n\n onChangeTag = () => {\n const { tagCardArray, settings, settings: { tagCard } } = this.state;\n let newTagCardArray = [...tagCardArray]\n if (typeof newTagCardArray[0] !== 'string') {\n newTagCardArray = newTagCardArray.map(el => el.title);\n }\n\n if (tagCard && newTagCardArray.length < 3) {\n const newSettings = { ...settings };\n const newTagCard = newTagCardArray[(newTagCardArray.indexOf(tagCard) + 1) % newTagCardArray.length]\n newSettings.tagCard = newTagCard;\n this.setState({ settings: newSettings }, () => {\n this.props.onChange(newSettings);\n this.onTagChange(newTagCard);\n });\n }\n };\n\n componentDidMount = () => {\n this.onTagChange();\n // detect changes\n };\n\n componentDidUpdate = prevProps => {\n if (this.props.acceptedBy !== 'triggers' && this.props.onUpdate) {\n setTimeout(() => this.onUpdate(), 0);\n }\n }\n\n onChangeInput = attribute => {\n return (value, attr, cb) => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n\n if (typeof value === 'object' && (!attr || typeof attr === 'function')) {\n Object.keys(value).forEach(_attr => settings[_attr] = value[_attr]);\n } else {\n settings[attr || attribute] = value;\n }\n settings.id = this.getData().id;\n settings._id = this.props._id;\n\n this.setState({ settings }, () => {\n this.onValueChanged(value, attr || attribute);\n this.props.onChange(settings);\n cb && cb();\n });\n }\n }\n\n renderSpecific() {\n return null; // it can be overloaded\n }\n\n renderDebugInfo() {\n if (this.state.debugMessage) {\n return <div className={cls.debugInfo} key={this.state.debugMessage.ts} style={{ opacity: 1, height: 22, bottom: -22 }}>\n {this.renderDebug ? this.renderDebug(this.state.debugMessage) : I18n.t('executed')}\n </div>;\n } else {\n return null;\n }\n }\n\n render = () => {\n const { inputs, name, icon, iconTag, settings, adapter, settings: { tagCard }, helpDialog } = this.state;\n const { socket, notFound } = this.props;\n\n return <Fragment>\n {iconTag ? this.renderIconTag() :\n <MaterialDynamicIcon\n iconName={icon}\n className={clsx(cls.iconThemCard, tagCard && this.state.tagCardArray.length && cls.iconThemCardSelectable)}\n adapter={adapter}\n socket={socket}\n onClick={e => {\n if (tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}\n />}\n <div className={cls.blockName}>\n <span className={cls.nameCard}>\n {I18n.t(name)}\n {!!notFound ? I18n.t(`%s not found`, settings.id) : ''}\n {helpDialog ? <IconButton className={cls.iconHelp} size=\"small\" onClick={() => this.setState({ helpText: I18n.t(helpDialog) })}><IconHelp /></IconButton> : null}\n </span>\n {inputs.filter(({ nameRender }) => this[nameRender])\n .map(input => {\n const { nameRender, defaultValue, attr, options } = input;\n return this[nameRender](\n input,\n settings[attr] !== undefined ? settings[attr] : defaultValue,\n this.onChangeInput(attr),\n options || []\n );\n })}\n </div>\n {tagCard && <div className={cls.controlMenuTop} style={{ opacity: 1, height: 22, top: -22 }}>\n <div onClick={() => this.onChangeTag()} className={clsx(cls.tagCard, 'tag-card')}>{this.renderTags()}</div>\n </div>}\n {this.renderDebugInfo()}\n {this.state.error ? <DialogError title={I18n.t('Warning')} text={this.state.error} onClose={() => this.setState({ error: '' })} /> : null}\n {this.state.helpText ? <DialogMessage title={I18n.t('Instructions')} text={this.state.helpText} onClose={() => this.setState({ helpText: '' })} /> : null}\n {this.renderSpecific()}\n </Fragment>;\n };\n}\n\nexport default GenericBlock;","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\n// copied from https://github.com/ioBroker/ioBroker.sayit/blob/master/admin/blockly.js#L37\nconst sayitEngines = {\n \"en\": {name: \"Google - English\", engine: \"google\", params: []},\n \"de\": {name: \"Google - Deutsch\", engine: \"google\", params: []},\n \"ru\": {name: \"Google - Русский\", engine: \"google\", params: []},\n \"it\": {name: \"Google - Italiano\", engine: \"google\", params: []},\n \"es\": {name: \"Google - Espaniol\", engine: \"google\", params: []},\n \"fr\": {name: \"Google - Français\", engine: \"google\", params: []},\n \"ru_YA\": {name: \"Yandex - Русский\", engine: \"yandex\", params: ['key', 'voice', 'emotion', 'ill', 'drunk', 'robot'], voice: ['jane', 'zahar'], emotion: ['none', 'good', 'neutral', 'evil', 'mixed']},\n \"ru_YA_CLOUD\": {name: \"Yandex Cloud - Русский\", engine: \"yandexCloud\", params: ['key', 'folderID', 'voice', 'emotion'], voice: ['alyss', 'oksana', 'jane', 'zahar'], emotion: [ 'good', 'neutral', 'evil']},\n\n \"en-US\": {name: \"PicoTTS - Englisch US\", engine: \"PicoTTS\", params: []},\n \"en-GB\": {name: \"PicoTTS - Englisch GB\", engine: \"PicoTTS\", params: []},\n \"de-DE\": {name: \"PicoTTS - Deutsch\", engine: \"PicoTTS\", params: []},\n \"it-IT\": {name: \"PicoTTS - Italiano\", engine: \"PicoTTS\", params: []},\n \"es-ES\": {name: \"PicoTTS - Espaniol\", engine: \"PicoTTS\", params: []},\n \"fr-FR\": {name: \"PicoTTS - Français\", engine: \"PicoTTS\", params: []},\n\n \"ru-RU_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"ru-RU\", ename: \"Tatyana\", ssml: true, name: \"Cloud - Русский - Татьяна\"},\n \"ru-RU_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"ru-RU\", ename: \"Maxim\", ssml: true, name: \"Cloud - Русский - Максим\"},\n \"de-DE_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"de-DE\", ename: \"Marlene\", ssml: true, name: \"Cloud - Deutsch - Marlene\"},\n \"de-DE_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"de-DE\", ename: \"Hans\", ssml: true, name: \"Cloud - Deutsch - Hans\"},\n \"en-US_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Salli\", ssml: true, name: \"Cloud - en-US - Female - Salli\"},\n \"en-US_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Joey\", ssml: true, name: \"Cloud - en-US - Male - Joey\"},\n \"da-DK_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"da-DK\", ename: \"Naja\", ssml: true, name: \"Cloud - da-DK - Female - Naja\"},\n \"da-DK_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"da-DK\", ename: \"Mads\", ssml: true, name: \"Cloud - da-DK - Male - Mads\"},\n \"en-AU_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-AU\", ename: \"Nicole\", ssml: true, name: \"Cloud - en-AU - Female - Nicole\"},\n \"en-AU_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-AU\", ename: \"Russell\", ssml: true, name: \"Cloud - en-AU - Male - Russell\"},\n \"en-GB_CLOUD_Female_Amy\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Amy\", ssml: true, name: \"Cloud - en-GB - Female - Amy\"},\n \"en-GB_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Brian\", ssml: true, name: \"Cloud - en-GB - Male - Brian\"},\n \"en-GB_CLOUD_Female_Emma\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Emma\", ssml: true, name: \"Cloud - en-GB - Female - Emma\"},\n \"en-GB-WLS_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB-WLS\", ename: \"Gwyneth\", ssml: true, name: \"Cloud - en-GB-WLS - Female - Gwyneth\"},\n \"en-GB-WLS_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-GB-WLS\", ename: \"Geraint\", ssml: true, name: \"Cloud - en-GB-WLS - Male - Geraint\"},\n \"cy-GB_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"cy-GB\", ename: \"Gwyneth\", ssml: true, name: \"Cloud - cy-GB - Female - Gwyneth\"},\n \"cy-GB_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"cy-GB\", ename: \"Geraint\", ssml: true, name: \"Cloud - cy-GB - Male - Geraint\"},\n \"en-IN_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-IN\", ename: \"Raveena\", ssml: true, name: \"Cloud - en-IN - Female - Raveena\"},\n \"en-US_CLOUD_Male_Chipmunk\":{gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Chipmunk\", ssml: true, name: \"Cloud - en-US - Male - Chipmunk\"},\n \"en-US_CLOUD_Male_Eric\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Eric\", ssml: true, name: \"Cloud - en-US - Male - Eric\"},\n \"en-US_CLOUD_Female_Ivy\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Ivy\", ssml: true, name: \"Cloud - en-US - Female - Ivy\"},\n \"en-US_CLOUD_Female_Jennifer\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Jennifer\", ssml: true, name: \"Cloud - en-US - Female - Jennifer\"},\n \"en-US_CLOUD_Male_Justin\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Justin\", ssml: true, name: \"Cloud - en-US - Male - Justin\"},\n \"en-US_CLOUD_Female_Kendra\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Kendra\", ssml: true, name: \"Cloud - en-US - Female - Kendra\"},\n \"en-US_CLOUD_Female_Kimberly\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Kimberly\", ssml: true, name: \"Cloud - en-US - Female - Kimberly\"},\n \"es-ES_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"es-ES\", ename: \"Conchita\", ssml: true, name: \"Cloud - es-ES - Female - Conchita\"},\n \"es-ES_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"es-ES\", ename: \"Enrique\", ssml: true, name: \"Cloud - es-ES - Male - Enrique\"},\n \"es-US_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"es-US\", ename: \"Penelope\", ssml: true, name: \"Cloud - es-US - Female - Penelope\"},\n \"es-US_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"es-US\", ename: \"Miguel\", ssml: true, name: \"Cloud - es-US - Male - Miguel\"},\n \"fr-CA_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"fr-CA\", ename: \"Chantal\", ssml: true, name: \"Cloud - fr-CA - Female - Chantal\"},\n \"fr-FR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"fr-FR\", ename: \"Celine\", ssml: true, name: \"Cloud - fr-FR - Female - Celine\"},\n \"fr-FR_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"fr-FR\", ename: \"Mathieu\", ssml: true, name: \"Cloud - fr-FR - Male - Mathieu\"},\n \"is-IS_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"is-IS\", ename: \"Dora\", ssml: true, name: \"Cloud - is-IS - Female - Dora\"},\n \"is-IS_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"is-IS\", ename: \"Karl\", ssml: true, name: \"Cloud - is-IS - Male - Karl\"},\n \"it-IT_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"it-IT\", ename: \"Carla\", ssml: true, name: \"Cloud - it-IT - Female - Carla\"},\n \"it-IT_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"it-IT\", ename: \"Giorgio\", ssml: true, name: \"Cloud - it-IT - Male - Giorgio\"},\n \"nb-NO_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"nb-NO\", ename: \"Liv\", ssml: true, name: \"Cloud - nb-NO - Female - Liv\"},\n \"nl-NL_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"nl-NL\", ename: \"Lotte\", ssml: true, name: \"Cloud - nl-NL - Female - Lotte\"},\n \"nl-NL_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"nl-NL\", ename: \"Ruben\", ssml: true, name: \"Cloud - nl-NL - Male - Ruben\"},\n \"pl-PL_CLOUD_Female_Agnieszka\":{gender: \"Female\", engine: \"cloud\",params: ['cloud'], language: \"pl-PL\", ename: \"Agnieszka\", ssml: true, name: \"Cloud - pl-PL - Female - Agnieszka\"},\n \"pl-PL_CLOUD_Male_Jacek\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Jacek\", ssml: true, name: \"Cloud - pl-PL - Male - Jacek\"},\n \"pl-PL_CLOUD_Female_Ewa\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Ewa\", ssml: true, name: \"Cloud - pl-PL - Female - Ewa\"},\n \"pl-PL_CLOUD_Male_Jan\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Jan\", ssml: true, name: \"Cloud - pl-PL - Male - Jan\"},\n \"pl-PL_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Maja\", ssml: true, name: \"Cloud - pl-PL - Female - Maja\"},\n \"pt-BR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pt-BR\", ename: \"Vitoria\", ssml: true, name: \"Cloud - pt-BR - Female - Vitoria\"},\n \"pt-BR_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pt-BR\", ename: \"Ricardo\", ssml: true, name: \"Cloud - pt-BR - Male - Ricardo\"},\n \"pt-PT_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pt-PT\", ename: \"Cristiano\", ssml: true, name: \"Cloud - pt-PT - Male - Cristiano\"},\n \"pt-PT_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pt-PT\", ename: \"Ines\", ssml: true, name: \"Cloud - pt-PT - Female - Ines\"},\n \"ro-RO_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"ro-RO\", ename: \"Carmen\", ssml: true, name: \"Cloud - ro-RO - Female - Carmen\"},\n \"sv-SE_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"sv-SE\", ename: \"Astrid\", ssml: true, name: \"Cloud - sv-SE - Female - Astrid\"},\n \"tr-TR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"tr-TR\", ename: \"Filiz\", ssml: true, name: \"Cloud - tr-TR - Female - Filiz\"},\n\n \"ru-RU_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ru-RU\", ename: \"Tatyana\", ssml: true, name: \"AWS Polly - Русский - Татьяна\"},\n \"ru-RU_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ru-RU\", ename: \"Maxim\", ssml: true, name: \"AWS Polly - Русский - Максим\"},\n \"de-DE_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Marlene\", ssml: true, name: \"AWS Polly - Deutsch - Marlene\"},\n \"de-DE_AP_Female_Vicky\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Vicky\", ssml: true, name: \"AWS Polly - Deutsch - Vicky\"},\n \"de-DE_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Hans\", ssml: true, name: \"AWS Polly - Deutsch - Hans\"},\n \"en-US_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Salli\", ssml: true, name: \"AWS Polly - en-US - Female - Salli\"},\n \"en-US_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Joey\", ssml: true, name: \"AWS Polly - en-US - Male - Joey\"},\n \"da-DK_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"da-DK\", ename: \"Naja\", ssml: true, name: \"AWS Polly - da-DK - Female - Naja\"},\n \"da-DK_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"da-DK\", ename: \"Mads\", ssml: true, name: \"AWS Polly - da-DK - Male - Mads\"},\n \"en-AU_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-AU\", ename: \"Nicole\", ssml: true, name: \"AWS Polly - en-AU - Female - Nicole\"},\n \"en-AU_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-AU\", ename: \"Russell\", ssml: true, name: \"AWS Polly - en-AU - Male - Russell\"},\n \"en-GB_AP_Female_Amy\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Amy\", ssml: true, name: \"AWS Polly - en-GB - Female - Amy\"},\n \"en-GB_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Brian\", ssml: true, name: \"AWS Polly - en-GB - Male - Brian\"},\n \"en-GB_AP_Female_Emma\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Emma\", ssml: true, name: \"AWS Polly - en-GB - Female - Emma\"},\n \"en-GB-WLS_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB-WLS\", ename: \"Gwyneth\", ssml: true, name: \"AWS Polly - en-GB-WLS - Female - Gwyneth\"},\n \"en-GB-WLS_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB-WLS\", ename: \"Geraint\", ssml: true, name: \"AWS Polly - en-GB-WLS - Male - Geraint\"},\n \"cy-GB_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"cy-GB\", ename: \"Gwyneth\", ssml: true, name: \"AWS Polly - cy-GB - Female - Gwyneth\"},\n \"cy-GB_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"cy-GB\", ename: \"Geraint\", ssml: true, name: \"AWS Polly - cy-GB - Male - Geraint\"},\n \"en-IN_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-IN\", ename: \"Raveena\", ssml: true, name: \"AWS Polly - en-IN - Female - Raveena\"},\n \"en-US_AP_Male_Chipmunk\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Chipmunk\", ssml: true, name: \"AWS Polly - en-US - Male - Chipmunk\"},\n \"en-US_AP_Male_Eric\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Eric\", ssml: true, name: \"AWS Polly - en-US - Male - Eric\"},\n \"en-US_AP_Female_Ivy\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Ivy\", ssml: true, name: \"AWS Polly - en-US - Female - Ivy\"},\n \"en-US_AP_Female_Jennifer\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Jennifer\", ssml: true, name: \"AWS Polly - en-US - Female - Jennifer\"},\n \"en-US_AP_Male_Justin\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Justin\", ssml: true, name: \"AWS Polly - en-US - Male - Justin\"},\n \"en-US_AP_Female_Kendra\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Kendra\", ssml: true, name: \"AWS Polly - en-US - Female - Kendra\"},\n \"en-US_AP_Female_Kimberly\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Kimberly\", ssml: true, name: \"AWS Polly - en-US - Female - Kimberly\"},\n \"es-ES_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-ES\", ename: \"Conchita\", ssml: true, name: \"AWS Polly - es-ES - Female - Conchita\"},\n \"es-ES_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-ES\", ename: \"Enrique\", ssml: true, name: \"AWS Polly - es-ES - Male - Enrique\"},\n \"es-US_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-US\", ename: \"Penelope\", ssml: true, name: \"AWS Polly - es-US - Female - Penelope\"},\n \"es-US_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-US\", ename: \"Miguel\", ssml: true, name: \"AWS Polly - es-US - Male - Miguel\"},\n \"fr-CA_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-CA\", ename: \"Chantal\", ssml: true, name: \"AWS Polly - fr-CA - Female - Chantal\"},\n \"fr-FR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-FR\", ename: \"Celine\", ssml: true, name: \"AWS Polly - fr-FR - Female - Celine\"},\n \"fr-FR_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-FR\", ename: \"Mathieu\", ssml: true, name: \"AWS Polly - fr-FR - Male - Mathieu\"},\n \"is-IS_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"is-IS\", ename: \"Dora\", ssml: true, name: \"AWS Polly - is-IS - Female - Dora\"},\n \"is-IS_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"is-IS\", ename: \"Karl\", ssml: true, name: \"AWS Polly - is-IS - Male - Karl\"},\n \"it-IT_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"it-IT\", ename: \"Carla\", ssml: true, name: \"AWS Polly - it-IT - Female - Carla\"},\n \"it-IT_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"it-IT\", ename: \"Giorgio\", ssml: true, name: \"AWS Polly - it-IT - Male - Giorgio\"},\n \"nb-NO_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nb-NO\", ename: \"Liv\", ssml: true, name: \"AWS Polly - nb-NO - Female - Liv\"},\n \"nl-NL_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nl-NL\", ename: \"Lotte\", ssml: true, name: \"AWS Polly - nl-NL - Female - Lotte\"},\n \"nl-NL_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nl-NL\", ename: \"Ruben\", ssml: true, name: \"AWS Polly - nl-NL - Male - Ruben\"},\n \"pl-PL_AP_Female_Agnieszka\":{gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Agnieszka\", ssml: true, name: \"AWS Polly - pl-PL - Female - Agnieszka\"},\n \"pl-PL_AP_Male_Jacek\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Jacek\", ssml: true, name: \"AWS Polly - pl-PL - Male - Jacek\"},\n \"pl-PL_AP_Female_Ewa\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Ewa\", ssml: true, name: \"AWS Polly - pl-PL - Female - Ewa\"},\n \"pl-PL_AP_Male_Jan\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Jan\", ssml: true, name: \"AWS Polly - pl-PL - Male - Jan\"},\n \"pl-PL_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Maja\", ssml: true, name: \"AWS Polly - pl-PL - Female - Maja\"},\n \"pt-BR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-BR\", ename: \"Vitoria\", ssml: true, name: \"AWS Polly - pt-BR - Female - Vitoria\"},\n \"pt-BR_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-BR\", ename: \"Ricardo\", ssml: true, name: \"AWS Polly - pt-BR - Male - Ricardo\"},\n \"pt-PT_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-PT\", ename: \"Cristiano\", ssml: true, name: \"AWS Polly - pt-PT - Male - Cristiano\"},\n \"pt-PT_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-PT\", ename: \"Ines\", ssml: true, name: \"AWS Polly - pt-PT - Female - Ines\"},\n \"ro-RO_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ro-RO\", ename: \"Carmen\", ssml: true, name: \"AWS Polly - ro-RO - Female - Carmen\"},\n \"sv-SE_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"sv-SE\", ename: \"Astrid\", ssml: true, name: \"AWS Polly - sv-SE - Female - Astrid\"},\n \"tr-TR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"tr-TR\", ename: \"Filiz\", ssml: true, name: \"AWS Polly - tr-TR - Female - Filiz\"}\n};\n\nclass ActionSayText extends GenericBlock {\n constructor(props) {\n super(props, ActionSayText.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Sayit ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${config.language && config.language !== '_' ? config.language + ';' : ''}${config.volume ? config.volume + ';' : ''}${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tawait setStateAsync(\"${config.instance}.tts.text\", subActionVar${config._id});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Say:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n const lang = I18n.getLanguage();\n const languages = Object.keys(sayitEngines).filter(l => l.startsWith(lang));\n const options = languages.map(lang => ({title: sayitEngines[lang].name, value: lang}));\n options.unshift({title: 'Default', value: '_'});\n\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n adapter: 'sayit',\n defaultValue: 'sayit.0',\n frontText: 'Instance:',\n },\n {\n nameRender: 'renderSelect',\n frontText: 'Language:',\n options,\n defaultValue: '_',\n attr: 'language',\n },\n {\n nameRender: 'renderNameText',\n defaultValue: 'Volume',\n attr: 'textVol',\n },\n {\n nameRender: 'renderSlider',\n attr: 'volume',\n defaultValue: 100,\n min: 0,\n max: 100\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Say It',\n id: 'ActionSayText',\n adapter: 'sayit',\n title: 'Say some text via sayit adapter',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSayText.getStaticData();\n }\n}\n\nexport default ActionSayText;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionSendEmail extends GenericBlock {\n constructor(props) {\n super(props, ActionSendEmail.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.recipients) {\n return `// no recipients defined'\n_sendToFrontEnd(${config._id}, {text: 'No recipients defined'});`;\n } else {\n return `// Send Email ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance || 'email.0'}\", {\n\\t\\t to: \"${config.recipients || ''}\",\n\\t\\t subject: \"${(config.subject || 'ioBroker').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t text: subActionVar${config._id}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n defaultValue: 'email.0',\n frontText: 'Instance:',\n adapter: 'email',\n },\n {\n attr: 'recipients',\n nameRender: 'renderText',\n defaultValue: 'user@mail.ru',\n frontText: 'To:',\n },\n {\n attr: 'subject',\n nameRender: 'renderText',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Subject:',\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Body:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Send email',\n id: 'ActionSendEmail',\n adapter: 'email',\n title: 'Sends an email',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSendEmail.getStaticData();\n }\n}\n\nexport default ActionSendEmail;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionTelegram extends GenericBlock {\n constructor(props) {\n super(props, ActionTelegram.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Telegram ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", ${config.user && config.user !== '_' ? `{user: \"${(config.user || '').replace(/\"/g, '\\\\\"')}\", text: subActionVar${config._id}}` : `subActionVar${config._id}`});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'instance') {\n this._setUsers(value);\n }\n }\n\n _setUsers(instance) {\n instance = instance || this.state.settings.instance || 'telegram.0';\n this.cachePromises[instance] = this.cachePromises[instance] || this.props.socket.getState(instance + '.communicate.users');\n if (!this.state.settings._id) {\n return this.setState({\n inputs: [\n {\n nameRender: 'renderSelect',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: [{title: 'telegram.0', value: 'telegram.0'}],\n defaultValue: '',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange());\n }\n\n this.cachePromises[instance]\n .then(users => {\n try {\n users = users?.val ? JSON.parse(users.val) : null;\n users = users && Object.keys(users).map(user => ({title: users[user].userName || users[user].firstName, value: user}));\n users = users || [];\n users.unshift({title: 'all', value: ''});\n } catch (e) {\n users = [{title: 'all', value: ''}];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: users,\n defaultValue: '_',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange());\n });\n }\n\n onTagChange(tagCard) {\n this._setUsers();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Telegram',\n id: 'ActionTelegram',\n adapter: 'telegram',\n title: 'Sends message via telegram',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionTelegram.getStaticData();\n }\n}\n\nexport default ActionTelegram;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushover extends GenericBlock {\n constructor(props) {\n super(props, ActionPushover.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushover ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\\`; \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t sound: \"${config.sound}\",\n\\t\\t priority: ${config.priority}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return 'Sent: ' + debugMessage.data.text;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushover',\n frontText: 'Instance:',\n defaultValue: 'pushover.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n {value: \"pushover\", title: \"pushover\"},\n {value: \"bike\", title: \"bike\"},\n {value: \"bugle\", title: \"bugle\"},\n {value: \"cashregister\", title: \"cashregister\"},\n {value: \"classical\", title: \"classical\"},\n {value: \"cosmic\", title: \"cosmic\"},\n {value: \"falling\", title: \"falling\"},\n {value: \"gamelan\", title: \"gamelan\"},\n {value: \"incoming\", title: \"incoming\"},\n {value: \"intermission\", title: \"intermission\"},\n {value: \"magic\", title: \"magic\"},\n {value: \"mechanical\", title: \"mechanical\"},\n {value: \"pianobar\", title: \"pianobar\"},\n {value: \"siren\", title: \"siren\"},\n {value: \"spacealarm\", title: \"spacealarm\"},\n {value: \"tugboat\", title: \"tugboat\"},\n {value: \"alien\", title: \"alien\"},\n {value: \"climb\", title: \"climb\"},\n {value: \"persistent\", title: \"persistent\"},\n {value: \"echo\", title: \"echo\"},\n {value: \"updown\", title: \"updown\"},\n {value: \"none\", title: \"none\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: -1,\n frontText: 'Priority:',\n options: [\n {value: -1, title: \"quiet\"},\n {value: 0, title: \"normal\"},\n {value: 1, title: \"high-priority\"},\n {value: 2, title: \"acknowledgment\"},\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushover',\n id: 'ActionPushover',\n adapter: 'pushover',\n title: 'Sends message via pushover',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPushover.getStaticData();\n }\n}\n\nexport default ActionPushover;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionWhatsappcmb extends GenericBlock {\n constructor(props) {\n super(props, ActionWhatsappcmb.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// whatsapp ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", {text: subActionVar${config._id}${config.phone ? `, phone: \"${config.phone.replace(/\"/g, '\\\\\"')}\"` : ''}});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'whatsapp-cmb',\n frontText: 'Instance:',\n defaultValue: 'whatsapp-cmb.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'phone',\n defaultValue: '',\n frontText: 'Phone:',\n backText: '(optional)'\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Whatsapp-cmb',\n id: 'ActionWhatsappcmb',\n adapter: 'whatsapp-cmb',\n title: 'Sends message via whatsapp-cmb',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionWhatsappcmb.getStaticData();\n }\n}\n\nexport default ActionWhatsappcmb;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushsafer extends GenericBlock {\n constructor(props) {\n super(props, ActionPushsafer.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushsafer ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}}); \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t ${config.device ? `device: \"${config.device}\",` : ''}\n\\t\\t ${config.sound && config.sound !== '_' ? `sound: \"${config.sound}\",` : ''}\n\\t\\t priority: ${config.priority},\n\\t\\t ${config.vibration && config.vibration !== '_' ? `vibration: ${config.vibration},` : ''}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return 'Sent: ' + debugMessage.data.text;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushsafer',\n frontText: 'Instance:',\n defaultValue: 'pushsafer.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n {value: \"_\", title: \"Device Default\"},\n {value: \"0 \", title: \"Silent\"},\n {value: \"1 \", title: \"Ahem (IM)\"},\n {value: \"2 \", title: \"Applause (Mail)\"},\n {value: \"3 \", title: \"Arrow (Reminder)\"},\n {value: \"4 \", title: \"Baby (SMS)\"},\n {value: \"5 \", title: \"Bell (Alarm)\"},\n {value: \"6 \", title: \"Bicycle (Alarm2)\"},\n {value: \"7 \", title: \"Boing (Alarm3)\"},\n {value: \"8 \", title: \"Buzzer (Alarm4)\"},\n {value: \"9 \", title: \"Camera (Alarm5)\"},\n {value: \"10\", title: \"Car Horn (Alarm6)\"},\n {value: \"11\", title: \"Cash Register (Alarm7)\"},\n {value: \"12\", title: \"Chime (Alarm8)\"},\n {value: \"13\", title: \"Creaky Door (Alarm9)\"},\n {value: \"14\", title: \"Cuckoo Clock (Alarm10)\"},\n {value: \"15\", title: \"Disconnect (Call)\"},\n {value: \"16\", title: \"Dog (Call2)\"},\n {value: \"17\", title: \"Doorbell (Call3)\"},\n {value: \"18\", title: \"Fanfare (Call4)\"},\n {value: \"19\", title: \"Gun Shot (Call5)\"},\n {value: \"20\", title: \"Honk (Call6)\"},\n {value: \"21\", title: \"Jaw Harp (Call7)\"},\n {value: \"22\", title: \"Morse (Call8)\"},\n {value: \"23\", title: \"Electricity (Call9)\"},\n {value: \"24\", title: \"Radio Tuner (Call10)\"},\n {value: \"25\", title: \"Sirens\"},\n {value: \"26\", title: \"Military Trumpets\"},\n {value: \"27\", title: \"Ufo\"},\n {value: \"28\", title: \"Whah Whah Whah\"},\n {value: \"29\", title: \"Man Saying Goodbye\"},\n {value: \"30\", title: \"Man Saying Hello\"},\n {value: \"31\", title: \"Man Saying No\"},\n {value: \"32\", title: \"Man Saying Ok\"},\n {value: \"33\", title: \"Man Saying Ooohhhweee\"},\n {value: \"34\", title: \"Man Saying Warning\"},\n {value: \"35\", title: \"Man Saying Welcome\"},\n {value: \"36\", title: \"Man Saying Yeah\"},\n {value: \"37\", title: \"Man Saying Yes\"},\n {value: \"38\", title: \"Beep short\"},\n {value: \"39\", title: \"Weeeee short\"},\n {value: \"40\", title: \"Cut in and out short\"},\n {value: \"41\", title: \"Finger flicking glas short\"},\n {value: \"42\", title: \"Wa Wa Waaaa short\"},\n {value: \"43\", title: \"Laser short\"},\n {value: \"44\", title: \"Wind Chime short\"},\n {value: \"45\", title: \"Echo short\"},\n {value: \"46\", title: \"Zipper short\"},\n {value: \"47\", title: \"HiHat short\"},\n {value: \"48\", title: \"Beep 2 short\"},\n {value: \"49\", title: \"Beep 3 short\"},\n {value: \"50\", title: \"Beep 4 short\"},\n {value: \"51\", title: \"The Alarm is armed\"},\n {value: \"52\", title: \"The Alarm is disarmed\"},\n {value: \"53\", title: \"The Backup is ready\"},\n {value: \"54\", title: \"The Door is closed\"},\n {value: \"55\", title: \"The Door is opend\"},\n {value: \"56\", title: \"The Window is closed\"},\n {value: \"57\", title: \"The Window is open\"},\n {value: \"58\", title: \"The Light is off\"},\n {value: \"59\", title: \"The Light is on\"},\n {value: \"60\", title: \"The Doorbell rings\"},\n {value: \"61\", title: \"Pager short\"},\n {value: \"62\", title: \"Pager long\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: 0,\n frontText: 'Priority:',\n options: [\n {value: -2, title: \"lowest priority\"},\n {value: -1, title: \"lower priority\"},\n {value: 0, title: \"normal priority\"},\n {value: 1, title: \"high priority\"},\n {value: 2, title: \"highest priority\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'vibration',\n defaultValue: 0,\n frontText: 'Vibration:',\n options: [\n {value: '_', title: \"default\"},\n {value: 1, title: \"1\"},\n {value: 2, title: \"2\"},\n {value: 3, title: \"3\"},\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushsafer',\n id: 'ActionPushsafer',\n adapter: 'pushsafer',\n title: 'Sends message via Pushsafer',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPushsafer.getStaticData();\n }\n}\n\nexport default ActionPushsafer;\n","// eslint-disable-next-line no-unused-vars\n\nconst STANDARD_FUNCTION_STATE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION_STATE_ONCHANGE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\n\nconst STANDARD_FUNCTION_ONCHANGE =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\n\nconst NO_FUNCTION = `\"__%%DEBUG_TRIGGER%%__\";\n__%%CONDITIONS_VARS%%__\nconst _cond = __%%CONDITION%%__;\n\n\"__%%DEBUG_CONDITIONS%%__\";\n\nif (_cond) {\n__%%THEN%%__\n} else {\n__%%ELSE%%__\n}`;\n\nconst DEFAULT_RULE = {\n triggers: [],\n conditions: [[]],\n justCheck: false,\n actions: {\n then: [],\n 'else': []\n }\n};\n\nfunction compileTriggers(json, context, blocks) {\n const triggers = [];\n let jsonTriggers = json.triggers;\n if (!jsonTriggers.length) {\n jsonTriggers = [{id: 'TriggerScriptSave'}];\n }\n\n const vars = [];\n let prelines = [];\n let hist = json.conditions.find(conds => conds.find(cond => cond.tagCard === '()'));\n\n jsonTriggers.forEach((trigger, i) => {\n const found = findBlock(trigger.id, blocks);\n if (found) {\n const _context = {\n trigger,\n condition: {},\n justCheck: hist ? false : (json.justCheck || (!json.conditions.length || !json.conditions[0].length)),\n conditionsDebug: [],\n conditionsVars: [],\n };\n const text = found.compile(trigger, _context);\n const conditions = compileConditions(json.conditions, _context, blocks);\n const then = compileActions(json.actions.then, _context, blocks);\n const _else = compileActions(json.actions.else, _context, blocks);\n\n // find indent\n vars.push('cond' + i);\n\n if (_context.prelines && _context.prelines.length) {\n _context.prelines.forEach(line => prelines.push(line));\n }\n\n if (text.includes(' __%%CONDITIONS_VARS%%__')) {\n _context.conditionsVars = _context.conditionsVars.map((v, i) => i ? ' ' + v : v);\n _context.conditionsDebug = _context.conditionsDebug.map((v, i) => i ? ' ' + v : v);\n }\n\n triggers.push(\n text\n .replace('__%%CONDITIONS_VARS%%__', _context.conditionsVars.join('\\n'))\n .replace('\"__%%DEBUG_CONDITIONS%%__\";', _context.conditionsDebug.join('\\n'))\n .replace('__%%CONDITION%%__', conditions)\n .replace('__%%THEN%%__', then || '// ignore')\n .replace('__%%ELSE%%__', _else || '// ignore')\n .replace(/__%%STATE%%__/g, 'cond' + i)\n );\n }\n });\n\n let text = triggers.join('\\n\\n');\n\n if (!json.justCheck || hist) {\n text = vars.map(v => `let ${v} = false;`).join('\\n') + '\\n\\n' + text;\n }\n if (prelines) {\n text = prelines.join('\\n') + '\\n\\n' + text;\n }\n\n return text;\n}\n\nfunction findBlock(type, blocks) {\n return blocks.find(block => block.getStaticData && block.getStaticData().id === type);\n}\n\nfunction compileActions(actions, context, blocks) {\n let result = [];\n actions && actions.forEach(action => {\n const found = findBlock(action.id, blocks);\n if (found) {\n result.push(found.compile(action, context));\n }\n });\n return `\\t\\t${result.join('\\n\\n\\t\\t')}` || '';\n}\n\nfunction compileConditions(conditions, context, blocks) {\n let result = [];\n let i = 0;\n conditions && conditions.forEach(ors => {\n if (ors.hasOwnProperty('length') && ors.length) {\n const _ors = [];\n _ors && ors.forEach(block => {\n const found = findBlock(block.id, blocks);\n if (found) {\n context.condition.index = i++;\n _ors.push(found.compile(block, context));\n }\n });\n result.push('(' + _ors.join(') &&\\n (') + ')');\n } else {\n const found = findBlock(ors.id, blocks);\n if (found) {\n context.condition.index = i++;\n result.push(found.compile(ors, context));\n }\n }\n });\n\n if (!result.length) {\n return 'true';\n } else\n if (result.length === 1) {\n return result[0] || 'true';\n } else {\n return '(' + result.join(') || (') + ')';\n }\n}\n\nfunction compile(json, blocks) {\n return compileTriggers(json, null, blocks);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction code2json(code) {\n if (!code) {\n return DEFAULT_RULE;\n } else {\n const lines = code.split('\\n');\n try {\n let json = lines.pop().replace(/^\\/\\//, '');\n json = JSON.parse(json);\n if (!json.triggers) {\n json = DEFAULT_RULE;\n }\n return json;\n } catch (e) {\n return DEFAULT_RULE;\n }\n }\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction json2code(json, blocks) {\n let code = '';\n\n const compiled = compile(json, blocks);\n code += compiled;\n\n code += `\\n/*const demo = ${JSON.stringify(json, null, 2)};*/\\n`;\n\n return code + '\\n//' + JSON.stringify(json);\n}\n\nconst Compile = {\n code2json,\n json2code,\n compile,\n STANDARD_FUNCTION,\n STANDARD_FUNCTION_ONCHANGE,\n STANDARD_FUNCTION_STATE,\n STANDARD_FUNCTION_STATE_ONCHANGE,\n NO_FUNCTION,\n};\n\nexport default Compile;","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\nimport Compile from '../../helpers/Compile';\n\nclass TriggerScriptSave extends GenericBlock {\n constructor(props) {\n super(props, TriggerScriptSave.getStaticData());\n }\n\n static compile(config, context) {\n return Compile.NO_FUNCTION.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Triggered');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNameText',\n defaultValue: 'On script save or adapter start',\n attr: 'script'\n },\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Start script',\n id: 'TriggerScriptSave',\n icon: 'PlayArrow',\n title: 'Triggers the on script saving or the javascript instance restart'\n }\n }\n\n getData() {\n return TriggerScriptSave.getStaticData();\n }\n}\n\nexport default TriggerScriptSave;\n","import React from 'react';\nimport SunCalc from 'suncalc2';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport CustomInput from '../CustomInput';\nimport CustomButton from '../CustomButton';\nimport CustomModal from '../CustomModal';\n\nimport ComplexCron from '@iobroker/adapter-react-v5/Components/ComplexCron';\nimport Schedule from '@iobroker/adapter-react-v5/Components/Schedule';\nimport convertCronToText from '@iobroker/adapter-react-v5/Components/SimpleCron/cronText';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DEFAULT_WIZARD = '{\"time\":{\"start\":\"00:00\",\"end\":\"24:00\",\"mode\":\"hours\",\"interval\":1},\"period\":{\"days\":1}}';\n\nclass TriggerScheduleBlock extends GenericBlock {\n constructor(props) {\n super(props, TriggerScheduleBlock.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n let text = '';\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n\n if (config.tagCard === 'interval') {\n text = `setInterval(${func}, ${config.interval || 1} * ${config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000)});`;\n } else if (config.tagCard === 'cron') {\n text = `schedule(\"${config.cron}\", ${func});`;\n } else if (config.tagCard === 'at') {\n const [hours, minutes] = (config.at || '').split(':');\n let dow = '*';\n if (config?.dow?.length && !config.dow.includes('_')) {\n const _dow = [...config.dow].map(item => parseInt(item, 10));\n _dow.sort();\n\n let intervals = [];\n let start = _dow[0];\n let i = 1\n for (; i < _dow.length; i++) {\n if (_dow[i] - _dow[i - 1] > 1) {\n if (start === _dow[i - 1]) {\n intervals.push(start);\n } else if (_dow[i - 1] - start === 1) {\n intervals.push(start + ',' + _dow[i - 1]);\n } else {\n intervals.push(start + '-' + _dow[i - 1]);\n }\n\n start = _dow[i];\n } else if (i === _dow.length - 1) {\n if (start === _dow[i - 1] || _dow[i] - start === 1) {\n intervals.push(start + ',' + _dow[i]);\n } else {\n intervals.push(start + '-' + _dow[i]);\n }\n }\n }\n\n dow = intervals.join(',')\n }\n text = `schedule(\"${minutes || '0'} ${hours || '0'} * * ${dow}\", ${func});`;\n } else if (config.tagCard === 'astro') {\n text = `schedule({astro: \"${config.astro}\", shift: ${config.offset ? config.offsetValue : 0}}, ${func});`;\n } else if (config.tagCard === 'wizard') {\n text = `schedule('${config.wizard}', ${func});`;\n }\n\n return text;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude\n }\n }\n });\n }\n\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${TriggerScheduleBlock._time2String(sunValue[name])}]`,\n order: sunValue ? TriggerScheduleBlock._time2String(sunValue[name]) : '??:??'\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(at ${TriggerScheduleBlock._time2String(astroTime)})`;// translate\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n frontText: 'at',\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes', // translate\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n } else {\n inputs = [\n {\n frontText: 'at', // translate\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset', // translate\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n async _setInterval(interval) {\n interval = parseInt(interval || this.state.settings.interval, 10) || 30;\n let options;\n if (interval === 1) {\n options = [\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' }\n ];\n } else {\n options = [\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' }\n ];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n prefix: {\n en: 'every'\n },\n attr: 'interval',\n frontText: 'every',\n defaultValue: 30,\n className: 'block-input-interval'\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 's',\n options\n }\n ]\n }, () => super.onTagChange());\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Triggered');\n }\n\n onValueChanged(value, attr) {\n if (this.state.settings.tagCard === 'astro') {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n } else if (this.state.settings.tagCard === 'interval') {\n if (attr === 'interval') {\n this._setInterval(value);\n }\n }\n }\n\n renderCron(input, value, onChange) {\n const { className } = this.props;\n let textCron = '';\n const { settings } = this.state;\n const { attr } = input;\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'baseline' }}>\n <div style={{ width: '100%' }}>\n {this.renderText({\n attr: 'text',\n defaultValue: value\n }, !!settings['text'] ? settings['text'] : value, onChange)}\n </div>\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={async () => {\n await onChange(textCron, 'text');\n await onChange(convertCronToText(textCron, I18n.getLanguage()), 'addText');\n this.setState({ openDialog: false });\n }}\n onClose={() => this.setState({ openDialog: false })}>\n <ComplexCron\n cronExpression={!!settings[input.attr] ? '' : settings[attr]}\n onChange={el => {textCron = el}} />\n </CustomModal>\n {this.renderNameText({\n defaultValue: 'every hour at 0 minutes',\n attr: 'addText',\n signature: true\n }, !!settings['addText'] ? settings['addText'] : 'every hour at 0 minutes', onChange)}\n </div>;\n }\n\n renderWizard(input, value, onChange) {\n const { className } = this.props;\n const { attr } = input;\n let wizardText = '';\n let wizard = null;\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'center', marginTop: 7 }}>\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n // disabled\n variant=\"outlined\"\n size=\"small\"\n multiline\n rows={2}\n value={this.state.settings[attr + 'Text']}\n onChange={(el) => onChange(el)}\n customValue\n />\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={() =>\n this.setState({ openDialog: false }, () =>\n onChange({\n [attr + 'Text']: wizardText,\n [attr]: wizard,\n }))}\n onClose={() => this.setState({ openDialog: false })}>\n <Schedule onChange={(val, text) => {\n wizardText = text;\n wizard = typeof val === 'object' ? JSON.parse(JSON.stringify(val)) : JSON.parse(val);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n wizard = JSON.stringify(wizard);\n }} />\n </CustomModal>\n </div>;\n }\n\n onTagChange(tagCard) {\n tagCard = tagCard || this.state.settings.tagCard;\n switch (tagCard) {\n case 'interval':\n this._setInterval();\n break;\n\n case 'cron':\n this.setState({\n inputs: [\n {\n nameRender: 'renderCron',\n attr: 'cron',\n defaultValue: '0 * * * *',\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'wizard':\n const wizard = JSON.parse(DEFAULT_WIZARD);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderWizard',\n attr: 'wizard',\n defaultValue: JSON.stringify(wizard),\n }\n ]\n }, () => super.onTagChange(null, () => {\n const wizardText = Schedule.state2text(this.state.settings.wizard || wizard);\n if (this.state.settings.wizardText !== wizardText) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n settings.wizardText = wizardText;\n this.setState({settings});\n this.props.onChange(settings);\n }\n }));\n break;\n\n case 'at':\n this.setState({\n inputs: [\n {\n nameRender: 'renderTime',\n prefix: 'at',\n attr: 'at',\n defaultValue: '07:30',\n },\n {\n nameRender: 'renderSelect',\n attr: 'dow',\n default: '',\n multiple: true,\n defaultValue: ['_', '1', '2', '3', '4', '5', '6', '0'],\n options: [\n { value: '_', title: 'Every day', only: true },\n { value: '1', title: 'Monday', titleShort: 'Mo' },\n { value: '2', title: 'Tuesday', titleShort: 'Tu' },\n { value: '3', title: 'Wednesday', titleShort: 'We' },\n { value: '4', title: 'Thursday', titleShort: 'Th' },\n { value: '5', title: 'Friday', titleShort: 'Fr' },\n { value: '6', title: 'Saturday', titleShort: 'Sa' },\n { value: '0', title: 'Sunday', titleShort: 'Su' },\n ]\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'astro':\n this._setAstro();\n break;\n\n default:\n break;\n }\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Schedule',\n id: 'TriggerScheduleBlock',\n icon: 'AccessTime',\n tagCardArray: ['cron', 'wizard', 'interval', 'at', 'astro'],\n title: 'Triggers the rule periodically or on some specific time'\n }\n }\n\n getData() {\n return TriggerScheduleBlock.getStaticData();\n }\n}\n\nexport default TriggerScheduleBlock;\n","import React from 'react';\nimport withStyles from '@mui/styles/withStyles';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport Button from '@mui/material/Button';\nimport Switch from '@mui/material/Switch';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Slide from '@mui/material/Slide';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { MdCancel as IconCancel } from 'react-icons/md';\nimport { MdCheck as IconCheck } from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323'\n },\n valueNotAck: {\n color: '#12ac15'\n },\n});\n\nconst Transition = React.forwardRef((props, ref) =>\n <Slide direction=\"up\" ref={ref} {...props} />);\n\nclass TriggerState extends GenericBlock {\n constructor(props) {\n super(props, TriggerState.getStaticData());\n this.inputRef = React.createRef();\n }\n\n static compile(config, context) {\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {val: obj.state.val, ack: obj.state.ack, valOld: obj.oldState && obj.oldState.val, ackOld: obj.oldState && obj.oldState.ack})`);\n return `on({id: \"${config.oid || ''}\", change: \"${config.tagCard === 'on update' ? 'any' : 'ne'}\"}, ${func});`\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n if (debugMessage.data.valOld !== undefined) {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ackOld ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.valOld)}</span> → <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n } else {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n }\n }\n\n onWriteValue() {\n this.setState({openSimulate: false});\n let simulateValue = this.state.simulateValue;\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}_ack`, this.state.simulateAck);\n\n if (this.state.settings.oidType === 'boolean') {\n simulateValue = simulateValue === true || simulateValue === 'true' || simulateValue === '1';\n } else if (this.state.settings.oidType === 'number') {\n simulateValue = parseFloat(simulateValue) || 0;\n }\n\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}`, simulateValue);\n this.props.socket.setState(this.state.settings.oid, { val: simulateValue, ack: !!this.state.simulateAck });\n }\n\n renderWriteState() {\n return <>\n <Button\n disabled={!this.state.settings.oid || !this.state.enableSimulation}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n this.setState({\n openSimulate: true,\n simulateValue: this.state.settings.oidType === 'boolean' ?\n window.localStorage.getItem('javascript.app.' + this.state.settings.oid) === 'true' :\n (window.localStorage.getItem('javascript.app.' + this.state.settings.oid) || ''),\n simulateAck: window.localStorage.getItem(`javascript.app.${this.state.settings.oid}_ack`) === 'true'\n });\n setTimeout(() => this.inputRef.current?.focus(), 200);\n }}>{I18n.t('Simulate')}</Button>\n <Dialog\n open={!!this.state.openSimulate}\n TransitionComponent={Transition}\n keepMounted\n onClose={() => this.setState({openSimulate: false})}\n aria-labelledby=\"simulate-dialog-slide-title\"\n aria-describedby=\"simulate-dialog-slide-description\"\n >\n <DialogTitle id=\"simulate-dialog-slide-title\">{I18n.t('Trigger with value')}</DialogTitle>\n <DialogContent>\n {this.state.settings.oidType === 'boolean' ?\n <FormControlLabel\n control={<Switch\n inputRef={this.inputRef}\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={!!this.state.simulateValue}\n onChange={e => this.setState({simulateValue: e.target.checked})}\n />}\n label={I18n.t('Value')}\n />\n : <TextField\n variant=\"standard\"\n inputRef={this.inputRef}\n label={I18n.t('Value')}\n fullWidth={true}\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={this.state.simulateValue}\n onChange={e => this.setState({simulateValue: e.target.value})}\n />\n }\n <br/>\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.simulateAck}\n onChange={e => this.setState({simulateAck: e.target.checked})}\n color=\"primary\"\n />\n }\n label={I18n.t('Ack')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.onWriteValue()}\n color=\"primary\">\n <IconCheck/>{I18n.t('Write')}\n </Button>\n <Button color=\"grey\"\n variant=\"contained\"\n onClick={() => this.setState({openSimulate: false})}\n >\n <IconCancel/>{I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </>;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: ''\n },\n {\n nameRender: 'renderWriteState',\n }\n ]\n }, () => {\n super.onTagChange();\n });\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'State',\n id: 'TriggerState',\n icon: 'FlashOn',\n tagCardArray: ['on change', 'on update'],\n title: 'Triggers the rule on update or change of some state' // translate\n }\n }\n\n getData() {\n return TriggerState.getStaticData();\n }\n}\nexport default withStyles(styles)(TriggerState);\n","import React from 'react';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\n\nimport GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport HysteresisImage from '../../../assets/hysteresis.png';\n\nconst HYSTERESIS = `function __hysteresis(val, limit, state, hist, comp) {\n let cond1, cond2;\n if (comp === '>') {\n cond1 = val > limit + hist;\n cond2 = val <= limit - hist;\n } else if (comp === '<') {\n cond1 = val < limit - hist;\n cond2 = val >= limit + hist;\n } else if (comp === '>=') {\n cond1 = val >= limit + hist;\n cond2 = val < limit - hist;\n } else if (comp === '<=') {\n cond1 = val <= limit - hist;\n cond2 = val > limit + hist;\n } else if (comp === '=') {\n cond1 = val <= limit + hist && val > limit - hist;\n cond2 = val > limit + hist || val <= limit - hist;\n } else if (comp === '<>') {\n cond1 = val > limit + hist || val <= limit - hist;\n cond2 = val <= limit + hist && val > limit - hist;\n }\n \n if (!state && cond1) {\n return true;\n } else if (state && cond2) {\n return false;\n } else {\n return state;\n }\n}`;\n\nclass ConditionState extends GenericBlock {\n constructor(props) {\n super(props, ConditionState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (value === null || value === undefined) {\n value = false;\n }\n let debugValue = '';\n\n let result;\n if (config.tagCard === '()') {\n context.prelines = context.prelines || [];\n !context.prelines.find(item => item !== HYSTERESIS) && context.prelines.push(HYSTERESIS);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (value === '') {\n value = 0;\n }\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n }\n } else\n if (config.tagCard !== 'includes') {\n const compare = config.tagCard === '=' ? '==' : (config.tagCard === '<>' ? '!=' : config.tagCard);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n }\n } else {\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `obj.state.val.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id}.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n }\n }\n context.conditionsVars.push(`const subCondVar${config._id} = ${debugValue};`);\n context.conditionsVars.push(`const subCond${config._id} = ${result};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}, value: subCondVar${config._id}, compareWith: ${value}});`);\n return 'subCond' + config._id;\n }\n\n renderDebug(debugMessage) {\n const condition = this.state.settings.tagCard;\n if (condition === '()') {\n // TODO\n } else {\n return debugMessage.data.result.toString().toUpperCase() + ' [' + debugMessage.data.value + ' ' + condition + ' ' + debugMessage.data.compareWith + ']';\n }\n\n return I18n.t('Triggered');\n }\n\n onShowHelp = () => this.setState({showHysteresisHelp: true});\n\n _setInputs(useTrigger, tagCard, oidType, oidUnit, oidStates) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n tagCard = tagCard || this.state.settings.tagCard;\n oidType = oidType || this.state.settings.oidType;\n oidUnit = oidUnit || this.state.settings.oidUnit;\n oidStates = oidStates || this.state.settings.oidStates;\n\n if (isAllTriggersOnState && useTrigger && this.props.userRules?.triggers?.length === 1) {\n oidType = this.props.userRules.triggers[0].oidType;\n oidUnit = this.props.userRules.triggers[0].oidUnit;\n oidStates = this.props.userRules.triggers[0].oidStates;\n }\n\n const _tagCardArray = ConditionState.getStaticData().tagCardArray;\n const tag = _tagCardArray.find(item => item.title === tagCard);\n let tagCardArray;\n let options = null;\n\n if (oidType === 'number') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis'\n }\n ];\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n }\n } else if (oidType === 'boolean') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ];\n options = [\n {title: 'false', value: false},\n {title: 'true', value: true},\n ];\n } else {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes'\n }\n ];\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n }\n }\n\n let settings = null;\n if (!tagCardArray.find(item => item.title === tagCard)) {\n tagCard = tagCardArray[0].title;\n settings = settings || {...this.state.settings};\n settings.tagCard = tagCard;\n }\n\n let inputs;\n let renderText = {\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value',\n frontText: tagCard === '()' ? 'Limit' : (tag?.text || 'compare with'),\n doNotTranslateBack: true,\n backText: oidUnit\n };\n\n if (options) {\n renderText = {\n nameRender: 'renderSelect',\n defaultValue: options[0].value,\n options,\n attr: 'value',\n frontText: tag?.text || 'compare with',\n doNotTranslateBack: true,\n backText: oidUnit\n };\n if (!options.find(item => item.value === this.state.settings.value)) {\n settings = settings || {...this.state.settings};\n settings.value = options[0].value;\n }\n if (options.length <= 2) {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ];\n }\n }\n\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n renderText,\n ];\n } else if (isAllTriggersOnState) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n },\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n }\n\n if (tagCard === '()') {\n inputs.splice(1, 0, {\n nameRender: 'renderDialog',\n icon: 'HelpOutline',\n frontText: 'Explanation',\n onShowDialog: this.onShowHelp,\n });\n inputs.splice(2, 0, {\n nameRender: 'renderSelect',\n attr: 'histComp',\n defaultValue: '>',\n frontText: 'Condition',\n doNotTranslate: true,\n options: [\n {title: '>', value: '>'},\n {title: '>=', value: '>='},\n {title: '<', value: '<'},\n {title: '<=', value: '<='},\n {title: '=', value: '='},\n {title: '<>', value: '<>'},\n ]\n });\n inputs.push({\n frontText: 'Δ',\n doNotTranslate: true,\n nameRender: 'renderNumber',\n noHelperText: true,\n attr: 'hist',\n defaultValue: 1,\n doNotTranslateBack: true,\n backText: oidUnit\n });\n }\n\n const state = {\n iconTag: true,\n tagCardArray,\n inputs\n };\n\n this.setState(state,() =>\n super.onTagChange(null, () => {\n if (settings) {\n this.setState({settings});\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n if (typeof value === 'object') {\n this._setInputs(value.useTrigger, value.tagCard, value.oidType, value.states);\n } else {\n if (attr === 'useTrigger') {\n this._setInputs(value);\n } else if (attr === 'oidType') {\n this._setInputs(value, undefined, value);\n } else if (attr === 'oidUnit') {\n this._setInputs(value, undefined, undefined, value);\n } else if (attr === 'oidStates') {\n this._setInputs(value, undefined, undefined, undefined, value);\n }\n }\n }\n\n onUpdate() {\n this._setInputs(this.state.settings.useTrigger);\n }\n\n onTagChange(tagCard) {\n this._setInputs(this.state.settings.useTrigger, tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'State condition',\n id: 'ConditionState',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes'\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis'\n }\n ],\n title: 'Compares the state value with user defined value'\n }\n }\n\n getData() {\n return ConditionState.getStaticData();\n }\n\n renderSpecific() {\n if (this.state.showHysteresisHelp) {\n return <Dialog\n open={true}\n maxWidth=\"md\"\n onClose={() => this.setState({showHysteresisHelp: false})}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <img src={HysteresisImage} alt=\"Hysteresis\"/>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.setState({showHysteresisHelp: false})} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n </Dialog>;\n } else {\n return null;\n }\n }\n}\n\nexport default ConditionState;\n","import GenericBlock from '../GenericBlock';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31 // 12\n];\n\nclass ConditionTime extends GenericBlock {\n constructor(props) {\n super(props, ConditionTime.getStaticData());\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let cond;\n\n if (config.withDate) {\n let [month, date] = (config.date || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n if (date && month) {\n cond = `formatDate(Date.now(), 'MM.DD-hh:mm') ${compare} \"${config.date}-${config.time}\"`;\n } else if (date === 0 && month) {\n cond = `formatDate(Date.now(), 'MM-hh:mm') ${compare} \"${month.toString().padStart(2, '0')}-${config.time}\"`;\n } else if (month === 0 && date) {\n cond = `formatDate(Date.now(), 'DD-hh:mm') ${compare} \"${date.toString().padStart(2, '0')}-${config.time}\"`;\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}});`);\n return 'subCond' + config._id;\n }\n\n _setInputs(tagCard, withDate, ) {\n withDate = withDate === undefined ? this.state.settings.withDate : withDate;\n tagCard = tagCard || this.state.settings.tagCard;\n const tagCardArray = ConditionTime.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === tagCard);\n const inputs = [\n {\n nameRender: 'renderNameText',\n attr: 'interval',\n defaultValue: 'Actual time of day',\n },\n {\n frontText: tag?.text || tagCard,\n nameRender: 'renderTime',\n attr: 'time',\n defaultValue: '12:00',\n },\n {\n frontText: 'with date',\n nameRender: 'renderCheckbox',\n attr: 'withDate',\n defaultValue: false,\n }\n ];\n if (withDate) {\n inputs.push({\n nameRender: 'renderDate',\n attr: 'date',\n defaultValue: '01.01',\n });\n }\n this.setState({\n inputs,\n iconTag:true\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'withDate') {\n this._setInputs(undefined, value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs(tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Time condition',\n id: 'ConditionTime',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ],\n title: 'Compares current time with the user specific time'\n }\n }\n\n getData() {\n return ConditionTime.getStaticData();\n }\n}\n\nexport default ConditionTime;\n","import GenericBlock from '../GenericBlock';\nimport SunCalc from 'suncalc2';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ConditionAstrological extends GenericBlock {\n constructor(props) {\n super(props, ConditionAstrological.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let offset;\n if (config.offset) {\n offset = parseInt(config.offsetValue, 10) || 0;\n }\n const cond = `formatDate(Date.now(), 'hh:mm') ${compare} formatDate(getAstroDate(\"${config.astro}\"${offset ? `, undefined, ${offset}` : ''}), 'hh:mm')`;\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: ${cond}});`);\n return cond;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude\n }\n }\n });\n }\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${ConditionAstrological._time2String(sunValue[name])}]`,\n order: ConditionAstrological._time2String(sunValue[name])\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n const tagCardArray = ConditionAstrological.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === this.state.settings.tagCard);\n\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(${I18n.t(tag.text)} ${ConditionAstrological._time2String(astroTime)})`;\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text'\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes',\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n }\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text'\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n }\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n onTagChange(tagCard) {\n this._setAstro();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Astrological',\n id: 'ConditionAstrological',\n icon: 'Brightness3',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal to'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal to'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ],\n title: 'Compares current time with astrological event'\n }\n }\n\n getData() {\n return ConditionAstrological.getStaticData();\n }\n}\n\nexport default ConditionAstrological;\n","import GenericBlock from '../GenericBlock';\nimport withStyles from '@mui/styles/withStyles';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323'\n },\n valueNotAck: {\n color: '#12ac15'\n },\n});\n\nclass ActionSetState extends GenericBlock {\n constructor(props) {\n super(props, ActionSetState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n return `// set state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} \n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetState.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const {oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep} = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n type = 'select';\n }\n }\n\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = {value: oidMax === undefined ? 0 : oidMax};\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value'\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = {value: oidMax};\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = {value: options[0].value};\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value'\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = {value: false};\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = {value: true};\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = {value: '#FFFFFF'};\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value'\n }];\n break;\n }\n\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n return {inputs, newSettings: settings};\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const {inputs, newSettings} = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set state action',\n id: 'ActionSetState',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSetState.getStaticData();\n }\n}\n\nexport default withStyles(styles)(ActionSetState);\n","import GenericBlock from '../GenericBlock';\n\nclass ActionExec extends GenericBlock {\n constructor(props) {\n super(props, ActionExec.getStaticData());\n }\n\n static compile(config, context) {\n return `// exec \"${config.exec}\"\n\\t\\tconst subActionVar${config._id} = \"${(config.exec || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {exec: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return 'Exec: ' + debugMessage.data.exec;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'exec',\n defaultValue: 'ls /opt/iobroker',\n nameBlock: 'Shell command'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Exec',\n id: 'ActionExec',\n icon: 'Apps',\n title: 'Executes some shell command',\n helpDialog: 'You can use %s in the command to use current trigger value or %id to use the triggered object ID'\n }\n }\n\n getData() {\n return ActionExec.getStaticData();\n }\n}\n\nexport default ActionExec;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionHTTPCall extends GenericBlock {\n constructor(props) {\n super(props, ActionHTTPCall.getStaticData());\n }\n\n static compile(config, context) {\n return `// HTTP request ${config.url}\n\\t\\tconst subActionVar${config._id} = \"${(config.url || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {url: subActionVar${config._id}});\n\\t\\trequest(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return 'URL: ' + debugMessage.data.url;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'url',\n defaultValue: 'http://mydevice.com?...',\n nameBlock: 'URL'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'HTTP Call',\n id: 'ActionHTTPCall',\n icon: 'Language',\n title: 'Make a HTTP get request',\n helpDialog: 'You can use %s in the URL to use current trigger value or %id to use the triggered object ID'\n }\n }\n\n getData() {\n return ActionHTTPCall.getStaticData();\n }\n}\n\nexport default ActionHTTPCall;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionPrintText extends GenericBlock {\n constructor(props) {\n super(props, ActionPrintText.getStaticData());\n }\n\n static compile(config, context) {\n return `// Log ${config.text}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Log: %s', debugMessage.data.text);\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'My device triggered',\n nameBlock: 'Log text'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Log text',\n id: 'ActionPrintText',\n icon: 'Subject',\n title: 'Print some text in log',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPrintText.getStaticData();\n }\n}\n\nexport default ActionPrintText;\n","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\n\nclass ActionPause extends GenericBlock {\n constructor(props) {\n super(props, ActionPause.getStaticData());\n }\n\n static compile(config, context) {\n const ms = config.unit === 'ms' ? 1 : (config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000))\n\n return `// pause for ${ms}ms\n\\t\\t_sendToFrontEnd(${config._id}, {paused: true});\\n\n\\t\\tawait wait(${config.pause} * ${ms});\\n\n\\t\\t_sendToFrontEnd(${config._id}, {paused: false});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Paused: %s', debugMessage.data.paused);\n }\n\n _getOptions(pause) {\n pause = pause === undefined ? this.state.settings.pause : pause;\n if (pause === 1 || pause === '1') {\n return [\n { value: 'ms', title: 'millisecond' },\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' }\n ];\n } else {\n return [\n { value: 'ms', title: 'milliseconds' },\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' }\n ];\n }\n }\n\n _setInputs(pause) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n attr: 'pause',\n defaultValue: 100,\n noHelperText: true,\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 'ms',\n options: this._getOptions(pause)\n },\n ]\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'pause') {\n this._setInputs(value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pause',\n id: 'ActionPause',\n icon: 'Pause',\n title: 'Make a pause between actions'\n }\n }\n\n getData() {\n return ActionPause.getStaticData();\n }\n}\n\nexport default ActionPause;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionFunction extends GenericBlock {\n constructor(props) {\n super(props, ActionFunction.getStaticData());\n }\n\n static compile(config, context) {\n const lines = (config.func || '')\n .split('\\n')\n .map((line, i) => ' ' + line);\n\n lines.unshift(`\\t\\t_sendToFrontEnd(${config._id}, {func: 'executed'});`);\n lines.unshift(`// user function`);\n\n return lines.join('\\n');\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Function: executed');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'func',\n noTextEdit: true,\n defaultValue: 'console.log(\"Test\")',\n nameBlock: 'Function'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'User function',\n id: 'ActionFunction',\n icon: 'Functions',\n title: 'Write your own code',\n helpDialog: 'This is advances option. You can write your own code here and it will be executed on trigger'\n }\n }\n\n getData() {\n return ActionFunction.getStaticData();\n }\n}\n\nexport default ActionFunction;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionSetStateDelayed extends GenericBlock {\n constructor(props) {\n super(props, ActionSetStateDelayed.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n\n return `// set delayed state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} with delay of ${config.delay}ms\n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tsetStateDelayed(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'}, ${parseInt(config.delay, 10)}, ${config.clearRunning ? 'true' : 'false'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetStateDelayed.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const {oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep} = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n type = 'select';\n }\n }\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = {value: oidMax === undefined ? 0 : oidMax};\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value'\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = {value: oidMax};\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = {value: options[0].value};\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value'\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = {value: false};\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = {value: true};\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = {value: '#FFFFFF'};\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value'\n }];\n break;\n }\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n inputs.push({\n backText: 'ms',\n frontText: 'Delay',\n nameRender: 'renderNumber',\n defaultValue: '1000',\n noHelperText: true,\n attr: 'delay'\n });\n inputs.push({\n backText: 'clear running',\n nameRender: 'renderCheckbox',\n defaultValue: true,\n attr: 'clearRunning'\n })\n\n return {inputs, newSettings: settings};\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const {inputs, newSettings} = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set with delay',\n id: 'ActionSetStateDelayed',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state with delay',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSetStateDelayed.getStaticData();\n }\n}\n\nexport default ActionSetStateDelayed;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionOperateStates extends GenericBlock {\n constructor(props) {\n super(props, ActionOperateStates.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let oid1 = `const val2_${config._id} = (await getStateAsync(\"${config.oid1}\")).val;`;\n let oid2 = `const val1_${config._id} = (await getStateAsync(\"${config.oid2}\")).val;`;\n\n return `// ${config.oid1} ${config.operation} ${config.oid2} => ${config.oidResult}\n\\t\\t ${oid1}\n\\t\\t ${oid2}\n\\t\\t_sendToFrontEnd(${config._id}, {val: val1_${config._id} ${config.operation} val2_${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oidResult}\", val1_${config._id} ${config.operation} val2_${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionOperateStates.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n const inputs = [];\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID1',\n attr: 'oid1',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderSelect',\n //frontText: 'with',\n options: [\n {value: '+', title: '+'},\n {value: '-', title: '-'},\n {value: '*', title: '*'},\n {value: '/', title: '/'},\n ],\n doNotTranslate: true,\n defaultValue: '+',\n attr: 'operation'\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID2',\n attr: 'oid2',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderNameText',\n defaultValue: 'store in',\n attr: 'textEqual',\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n attr: 'oidResult',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n this.props.onChange(settings);\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Operate two states',\n id: 'ActionOperateStates',\n icon: 'AddBox',\n tagCardArray: ['control', 'update'],\n title: 'Operations with two states',\n }\n }\n\n getData() {\n return ActionOperateStates.getStaticData();\n }\n}\n\nexport default ActionOperateStates;\n","import TriggerScriptSave from '../Blocks/TriggerScriptSave';\nimport TriggerSchedule from '../Blocks/TriggerSchedule';\nimport TriggerState from '../Blocks/TriggerState';\nimport ConditionState from '../Blocks/ConditionState';\nimport ConditionTime from '../Blocks/ConditionTime';\nimport ConditionAstrological from '../Blocks/ConditionAstrological';\nimport ActionSetState from '../Blocks/ActionSetState';\nimport ActionExec from '../Blocks/ActionExec';\nimport ActionHTTPCall from '../Blocks/ActionHTTPCall';\nimport ActionPrintText from '../Blocks/ActionPrintText';\nimport ActionPause from '../Blocks/ActionPause';\nimport ActionFunction from '../Blocks/ActionFunction';\nimport ActionSetStateDelayed from '../Blocks/ActionSetStateDelayed';\nimport ActionOperateStates from '../Blocks/ActionOperateStates';\n\nconst StandardBlocks = [\n TriggerSchedule,\n TriggerScriptSave,\n TriggerState,\n ConditionState,\n ConditionTime,\n ConditionAstrological,\n ActionSetState,\n ActionExec,\n ActionHTTPCall,\n ActionPrintText,\n ActionPause,\n ActionFunction,\n ActionSetStateDelayed,\n ActionOperateStates,\n];\n\nexport default StandardBlocks;","import React, {\n createContext,\n useEffect,\n useState,\n} from 'react';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ActionSayText from '../Blocks/ActionSayText';\nimport ActionSendEmail from '../Blocks/ActionSendEmail';\nimport ActionTelegram from '../Blocks/ActionTelegram';\nimport ActionPushover from '../Blocks/ActionPushover';\nimport ActionWhatsappcmb from '../Blocks/ActionWhatsappcmb';\nimport ActionPushsafer from '../Blocks/ActionPushsafer';\nimport StandardBlocks from '../StandardBlocks';\n\nconst ADAPTERS = {\n telegram: ActionTelegram,\n email: ActionSendEmail,\n sayit: ActionSayText,\n pushover: ActionPushover,\n 'whatsapp-cmb': ActionWhatsappcmb,\n pushsafer: ActionPushsafer,\n};\n\nexport const ContextWrapperCreate = createContext();\n\nconst getOrLoadRemote = (remote, shareScope, remoteFallbackUrl = undefined) =>\n new Promise((resolve, reject) => {\n // check if remote exists on window\n if (!window[remote]) {\n // search dom to see if remote tag exists, but might still be loading (async)\n const existingRemote = document.querySelector(`[data-webpack=\"${remote}\"]`);\n // when remote is loaded...\n const onload = async () => {\n // check if it was initialized\n if (!window[remote]) {\n return reject(`Cannot load Remote \"${remote}\" to inject`);\n }\n if (!window[remote].__initialized) {\n // if share scope doesn't exist (like in webpack 4) then expect shareScope to be a manual object\n if (typeof __webpack_share_scopes__ === 'undefined') {\n // use default share scope object passed in manually\n await window[remote].init(shareScope.default);\n } else {\n // otherwise, init share scope as usual\n // eslint-disable-next-line\n await window[remote].init(__webpack_share_scopes__[shareScope]);\n }\n // mark remote as initialized\n window[remote].__initialized = true;\n }\n // resolve promise so marking remote as loaded\n resolve();\n };\n if (existingRemote) {\n // if existing remote but not loaded, hook into its onload and wait for it to be ready\n existingRemote.onload = onload;\n existingRemote.onerror = reject;\n // check if remote fallback exists as param passed to function\n // TODO: should scan public config for a matching key if no override exists\n } else if (remoteFallbackUrl) {\n // inject remote if a fallback exists and call the same onload function\n const d = document;\n const script = d.createElement('script');\n script.type = 'text/javascript';\n // mark as data-webpack so runtime can track it internally\n script.setAttribute('data-webpack', `${remote}`);\n script.async = true;\n script.onerror = reject;\n script.onload = onload;\n script.src = remoteFallbackUrl;\n d.getElementsByTagName('head')[0].appendChild(script);\n } else {\n // no remote and no fallback exist, reject\n reject(`Cannot Find Remote ${remote} to inject`);\n }\n } else {\n // remote already instantiated, resolve\n resolve();\n }\n });\n\nconst loadComponent = (remote, sharedScope, module, url) => async () => {\n await getOrLoadRemote(remote, sharedScope, url);\n const container = window[remote];\n const factory = await container.get(module);\n const Module = factory();\n return Module;\n};\n\nexport const ContextWrapper = ({ children, socket }) => {\n const [blocks, setBlocks] = useState(null);\n const [onUpdate, setOnUpdate] = useState(false);\n const [onDebugMessage, setOnDebugMessage] = useState(false);\n const [enableSimulation, setEnableSimulation] = useState(false);\n\n useEffect(() => {\n onUpdate && setOnUpdate(false);\n }, [onUpdate]);\n\n useEffect(() => {\n (async () => {\n const instances = await socket.getAdapterInstances();\n const adapters = Object.keys(ADAPTERS).filter(adapter =>\n instances.find(obj => obj?.common?.name === adapter));\n\n const adapterDynamicBlocksArray = [];\n\n // find all adapters, that have custom rule blocks\n const dynamicRules = instances.filter(obj => obj.common.javascriptRules);\n\n const alreadyCreated = [];\n for (let k in dynamicRules) {\n const obj = dynamicRules[k];\n if (alreadyCreated.includes(obj.common.name)) {\n continue;\n }\n\n let url;\n if (obj.common.javascriptRules.url.startsWith('http:') || obj.common.javascriptRules.url.startsWith('https:')) {\n url = obj.common.javascriptRules.url;\n } else if (obj.common.javascriptRules.url.startsWith('./')) {\n url = `${window.location.protocol}//${window.location.host}${obj.common.javascriptRules.url.replace(/^\\./, '')}`;\n } else {\n url = `${window.location.protocol}//${window.location.host}/adapter/${obj.common.name}/${obj.common.javascriptRules.url}`;\n }\n\n if (obj.common.javascriptRules.i18n === true) {\n // load i18n from files\n const pos = url.lastIndexOf('/');\n let i18nURL;\n if (pos !== -1) {\n i18nURL = url.substring(0, pos);\n } else {\n i18nURL = url;\n }\n const lang = I18n.getLanguage();\n const file = `${i18nURL}/i18n/${lang}.json`;\n\n await fetch(file)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => {\n if (lang !== 'en') {\n // try to load english\n return fetch(`${i18nURL}/i18n/en.json`)\n .then(data => data.json())\n .then(json => I18n.extendTranslations(json, lang))\n .catch(error => console.error(`Cannot load i18n \"${file}\": ${error}`))\n } else {\n console.log(`Cannot load i18n \"${file}\": ${error}`)\n }\n });\n } else if (obj.common.javascriptRules.i18n && typeof obj.common.javascriptRules.i18n === 'object') {\n try {\n I18n.extendTranslations(obj.common.javascriptRules.i18n);\n } catch (error) {\n console.error(`Cannot import i18n: ${error}`);\n }\n }\n\n try {\n const Component = (await loadComponent(obj.common.javascriptRules.name, 'default', `./${obj.common.javascriptRules.name}`, url)()).default;\n\n if (Component) {\n adapterDynamicBlocksArray.push(Component);\n alreadyCreated.push(obj.common.name);\n ADAPTERS[obj.common.name] = null;\n }\n } catch (e) {\n console.error(`Cannot load component: ${e}`);\n }\n }\n\n const adapterBlocksArray = adapters.filter(adapter => ADAPTERS[adapter]).map(adapter => ADAPTERS[adapter]);\n\n setBlocks([...StandardBlocks, ...adapterBlocksArray, ...adapterDynamicBlocksArray]);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <ContextWrapperCreate.Provider value={{\n blocks,\n socket,\n onUpdate,\n setOnUpdate,\n onDebugMessage,\n setOnDebugMessage,\n enableSimulation,\n setEnableSimulation\n }}>\n {children}\n </ContextWrapperCreate.Provider>;\n};","export function findElement(settings, userRules, additionalParameter) {\n const { _id, acceptedBy } = settings;\n let block;\n\n if (!acceptedBy || !userRules[acceptedBy]) {\n console.warn('Cannot find ' + acceptedBy);\n return userRules;\n }\n\n switch (acceptedBy) {\n case 'actions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n case 'conditions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n default:\n block = userRules[acceptedBy].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][userRules[acceptedBy].indexOf(block)] = settings;\n }\n return userRules;\n }\n}","import React, {memo, useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport { findElement } from '../../helpers/findElement';\nimport GenericBlock from '../GenericBlock';\n\n// @iobroker/javascript-block\n\nconst CurrentItem = memo(props => {\n const { setUserRules, userRules, _id, id, blockValue, active, acceptedBy, isTourOpen, setTourStep, tourStep } = props;\n const [anchorEl, setAnchorEl] = useState(null);\n const { blocks, socket, onUpdate, setOnUpdate, onDebugMessage, enableSimulation } = useContext(ContextWrapperCreate);\n\n useEffect(() => {\n console.log('New message !!' + JSON.stringify(onDebugMessage));\n }, [onDebugMessage]);\n\n\n const findElementBlocks = useCallback(id => blocks.find(el => {\n const staticData = el.getStaticData();\n return staticData.id === id;\n }), [blocks]);\n\n const onChange = useCallback(settings => {\n let newUserRules = findElement(settings, userRules, blockValue);\n newUserRules && setUserRules(newUserRules);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules]);\n\n const handlePopoverOpen = event =>\n event.currentTarget !== anchorEl && setAnchorEl(event.currentTarget);\n\n const handlePopoverClose = () =>\n setAnchorEl(null);\n\n const blockInput = useMemo(() => {\n const CustomBlock = findElementBlocks(id) || GenericBlock;\n return <CustomBlock\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n notFound={!findElementBlocks(id)}\n {...props}\n onUpdate={onUpdate}\n setOnUpdate={setOnUpdate}\n enableSimulation={enableSimulation}\n onDebugMessage={onDebugMessage}\n onChange={onChange}\n className={null}\n socket={socket}\n />;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules, onUpdate, onDebugMessage, enableSimulation]);\n\n const [isDelete, setIsDelete] = useState(false);\n\n return <div\n onMouseMove={handlePopoverOpen}\n onMouseEnter={handlePopoverOpen}\n onMouseLeave={handlePopoverClose}\n onMouseDown={el => {\n if (el.ctrlKey) {\n let newItem;\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n if (blockValue !== \"triggers\") {\n newItem = newUserRules[acceptedBy][blockValue].find(el => el._id === _id);\n } else {\n newItem = newUserRules[acceptedBy].find(el => el._id === _id);\n }\n if (blockValue !== \"triggers\") {\n newUserRules[acceptedBy][blockValue].splice(newUserRules[acceptedBy][blockValue].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n } else {\n newUserRules[acceptedBy].splice(newUserRules[acceptedBy].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n }\n setUserRules(newUserRules);\n }\n }}\n id=\"height\"\n style={active ? { width: document.getElementById('width').clientWidth - 70 } : null}\n className={`${cls.cardStyle} ${active ? cls.cardStyleActive : null} ${isDelete ? cls.isDelete : null}`}>\n <div className={cls.drag_mobile} />\n {blockInput}\n {setUserRules && <div className={cls.controlMenu} style={Boolean(anchorEl) ? { opacity: 1 } : { opacity: 0 }}>\n <div onClick={e => {\n let newItemsSwitches = deepCopy(acceptedBy, userRules, blockValue);\n newItemsSwitches = filterElement(acceptedBy, newItemsSwitches, blockValue, _id);\n setIsDelete(true);\n setTimeout(() => {\n if (acceptedBy === 'triggers') {\n setOnUpdate(true);\n }\n setUserRules(newItemsSwitches);\n }, 300);\n }} className={cls.closeBtn} />\n </div>}\n </div>;\n});\n\nCurrentItem.defaultProps = {\n active: false\n};\n\nCurrentItem.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\n\nexport default CurrentItem;","import React from 'react';\nimport { useDragLayer } from 'react-dnd';\nimport CardMenu from '../CardMenu';\nimport CurrentItem from '../CurrentItem';\n\nconst layerStyles = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%'\n};\n\nconst snapToGrid = (x, y) => {\n const snappedX = Math.round(x / 32) * 32\n const snappedY = Math.round(y / 32) * 32\n return [snappedX, snappedY]\n}\n\nconst getItemStyles = (initialOffset, currentOffset, isSnapToGrid) => {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none'\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform\n };\n}\n\nexport const CustomDragLayer = props => {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n targetIds: monitor.getTargetIds()\n }));\n\n const renderItem = () => {\n switch (itemType) {\n case 'box':\n return targetIds.length ? <CurrentItem active {...item} allBlocks={props.allBlocks}/> :\n <CardMenu active {...item} socket={props.socket}/>;\n default:\n return null;\n }\n }\n\n if (!isDragging) {\n return null;\n }\n\n return <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>\n {renderItem()}\n </div>\n </div>;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"border\":\"style_border__Zz9Km\",\"emptyBlockStyle\":\"style_emptyBlockStyle__sE5FO\",\"emptyBlock\":\"style_emptyBlock__dMBHS\",\"marginTop\":\"style_marginTop__uK9O+\",\"selectOnChange\":\"style_selectOnChange__6r-uo\",\"selectOnChangeHelp\":\"style_selectOnChangeHelp__nP0g8\",\"selectOnChangeHelpIcon\":\"style_selectOnChangeHelpIcon__r7G9x\",\"emptyBlockNone\":\"style_emptyBlockNone__DS6GG\",\"mainBlockItemRules\":\"style_mainBlockItemRules__JYCaQ\",\"nameBlockItems\":\"style_nameBlockItems__sNeEH\",\"contentBlockItem\":\"style_contentBlockItem__SQejW\",\"wrapperMargin\":\"style_wrapperMargin__v8PwE\",\"contentHeightOn\":\"style_contentHeightOn__T3ZZ-\",\"heightBlock\":\"style_heightBlock__B96p1\",\"contentHeightOff\":\"style_contentHeightOff__eaSlV\",\"cardAdd\":\"style_cardAdd__SNY3P\",\"blockCardAdd\":\"style_blockCardAdd__xHdXK\",\"addClassOverflow\":\"style_addClassOverflow__bcVva\",\"addClassHeight\":\"style_addClassHeight__GJALi\"};","import * as React from 'react';\n\nexport function useStateLocal(events, nameEvents) {\n const [state, setState] = React.useState(\n localStorage.getItem(nameEvents) ? JSON.parse(localStorage.getItem(nameEvents)) : events\n );\n\n const eventsToInstall = (newHeadCells) => {\n localStorage.setItem(nameEvents, JSON.stringify(newHeadCells));\n setState(newHeadCells);\n };\n return [state, eventsToInstall, localStorage.getItem(nameEvents) ? true : false];\n}\n","import _ from \"lodash\";\n\nconst funcSet = _.throttle(\n (setCards, userRules) => setCards(userRules)\n , 0);\n\nconst moveCard = (\n id,\n atIndex,\n cards,\n setCards,\n userRules,\n acceptedBy,\n additionally,\n hoverClientY,\n hoverMiddleY) => {\n\n const { card, index } = findCard(id, cards);\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = _.clone(cards);\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n const newTriggers = _.clone(userRules);\n switch (acceptedBy) {\n case 'actions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n case 'conditions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n default:\n newTriggers[acceptedBy] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n }\n }\n};\nconst findCard = (id, cards) => {\n const card = cards.find((c) => c._id === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nexport { moveCard, findCard };","// extracted by mini-css-extract-plugin\nexport default {\"drag\":\"style_drag__Gq61w\",\"root\":\"style_root__nSnEB\"};","import React, { useContext, useEffect, useRef } from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { findCard, moveCard } from '../../helpers/cardSort';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport cls from './style.module.scss';\n\nconst DragWrapper = ({ typeBlocks, allProperties, id, isActive, setUserRules, userRules, children, _id, blockValue }) => {\n const { setOnUpdate } = useContext(ContextWrapperCreate);\n const [{ opacity }, drag, preview] = useDrag({\n type: 'box',\n item: () => ({ ...allProperties, id, isActive, _id }),\n end: (item, monitor) => {\n let { acceptedBy } = item;\n let dropResult = monitor.getDropResult();\n let newUserRules;\n if (!dropResult) {\n if (typeof _id === 'number' && !monitor.getTargetIds().length) {\n newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n setUserRules(newUserRules);\n }\n return null;\n }\n if (dropResult.blockValue !== blockValue) {\n let idNumber = typeof _id === 'number' ? _id : Date.now();\n newUserRules = deepCopy(acceptedBy, userRules, dropResult.blockValue);\n const newItem = { id: item.id, acceptedBy: item.acceptedBy }\n switch (acceptedBy) {\n case 'actions':\n if (blockValue) {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n case 'conditions':\n if (typeof blockValue === 'number') {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n default:\n setOnUpdate(true);\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n }\n }\n },\n collect: monitor => ({\n opacity: monitor.isDragging() ? 0.4 : 1,\n isDragging: monitor.isDragging(),\n }),\n });\n const ref = useRef(null)\n const [, drop] = useDrop({\n accept: 'box',\n canDrop: () => false,\n hover({ _id: draggedId, acceptedBy }, monitor) {\n if (!ref.current) {\n return;\n }\n if (typeBlocks !== acceptedBy) {\n return\n }\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n if (!!_id && draggedId !== _id) {\n switch (acceptedBy) {\n case 'actions':\n if (blockValue === 'then' || blockValue === 'else') {\n const { index: overIndexActions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexActions !== draggedId) {\n moveCard(draggedId,\n overIndexActions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n case 'conditions':\n if (typeof blockValue === 'number') {\n const { index: overIndexConditions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexConditions !== draggedId) {\n moveCard(draggedId,\n overIndexConditions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n default:\n const { index: overIndex } = findCard(_id, userRules[acceptedBy]);\n if (overIndex !== draggedId) {\n moveCard(draggedId,\n overIndex,\n userRules[acceptedBy],\n setUserRules,\n userRules,\n acceptedBy,\n null,\n hoverClientY,\n hoverMiddleY\n );\n }\n return;\n }\n }\n }\n });\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n drag(drop(ref));\n const isMobile = window.innerWidth < 600;\n return <div ref={isMobile && _id ? null : ref} className={cls.root} style={{ opacity }}><div className={_id ? cls.drag : null} ref={_id && isMobile ? ref : null} />{children}</div>;\n}\n\nDragWrapper.defaultProps = {\n name: '',\n active: false,\n id: '',\n _id: null\n};\n\nDragWrapper.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default DragWrapper;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DialogHelp = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <div style={{\n fontSize: '1rem',\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: '0.00938em'\n }} >\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus startIcon={<IconOk/>}>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog >;\n\nDialogHelp.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogHelp.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogHelp;","import React from 'react';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\n\nconst DialogCondition = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog>;\n\nDialogCondition.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogCondition.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogCondition;","\nimport React, { Fragment, useEffect, useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { useDrop } from 'react-dnd';\nimport Select from '@mui/material/Select';\nimport MenuItem from '@mui/material/MenuItem';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\nimport { deepCopy } from '../../helpers/deepCopy';\n\nimport CurrentItem from '../CurrentItem';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport DragWrapper from '../DragWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport DialogHelp from './DialogHelp';\nimport DialogCondition from './DialogCondition';\nimport clsx from 'clsx';\n\nconst AdditionallyContentBlockItems = ({ size, itemsSwitchesRender, blockValue, boolean, typeBlock, userRules, setUserRules, animation, setTourStep, tourStep, isTourOpen }) => {\n const [checkItem, setCheckItem] = useState(false);\n const [canDropCheck, setCanDropCheck] = useState(false);\n const [checkId, setCheckId] = useState(false);\n const [hoverBlock, setHoverBlock] = useState('');\n\n const options = useDrop({\n accept: 'box',\n drop: () => ({ blockValue }),\n hover: ({ acceptedBy, _id }, monitor) => {\n setCheckItem(acceptedBy === typeBlock);\n setCheckId(!!_id);\n setHoverBlock(monitor.getHandlerId());\n },\n canDrop: ({ acceptedBy }, monitor) => {\n setCanDropCheck(acceptedBy === typeBlock);\n return acceptedBy === typeBlock;\n },\n collect: monitor => ({\n isOver: monitor.isOver(),\n canDrop: monitor.getItem()?.acceptedBy === typeBlock,\n offset: monitor.getClientOffset(),\n targetId: monitor.targetId\n }),\n });\n\n const [{ canDrop, isOver, offset, targetId }, drop] = options;\n\n useEffect(() => { setHoverBlock('') }, [offset]);\n\n const isActive = canDrop && isOver;\n let backgroundColor = '';\n if (isActive) {\n backgroundColor = checkItem ? '#00fb003d' : '#fb00002e';\n } else if (canDrop) {\n backgroundColor = canDropCheck ? '#00fb003d' : '#fb00002e';\n } else if (offset) {\n backgroundColor = targetId === hoverBlock ? '#fb00002e' : '';\n }\n\n return <div ref={drop} style={{ backgroundColor }} className={`${clsx(cls.contentBlockItem,size && cls.addClassHeight)} ${boolean ? animation ? cls.contentHeightOn : null : cls.contentHeightOff}`}>\n <div className={cls.wrapperMargin}>{itemsSwitchesRender[blockValue]?.map(el => (\n <DragWrapper\n typeBlocks={typeBlock}\n key={el._id}\n {...el}\n blockValue={blockValue}\n allProperties={el}\n userRules={userRules}\n setUserRules={setUserRules}\n >\n <CurrentItem\n {...el}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n settings={el}\n blockValue={blockValue}\n userRules={userRules}\n setUserRules={setUserRules}\n />\n </DragWrapper>))}\n <div\n style={isActive && checkItem && !checkId ? { height: document.getElementById('height') ? document.getElementById('height').clientHeight : 200 } : null}\n className={`${cls.emptyBlockStyle} ${isActive && checkItem && !checkId ? cls.emptyBlock : cls.emptyBlockNone}`}\n />\n </div>\n </div>;\n}\n\nAdditionallyContentBlockItems.defaultProps = {\n children: null,\n boolean: true,\n animation: false\n};\n\nconst ContentBlockItems = ({ size, typeBlock, name, nameAdditionally, additionally, border, userRules, setUserRules, iconName, adapter, socket, setTourStep, tourStep, isTourOpen }) => {\n const [additionallyClickItems, setAdditionallyClickItems, checkLocal] = useStateLocal(typeBlock === 'actions' ? false : [], `additionallyClickItems_${typeBlock}`);\n const [showHelp, setShowHelp] = useState(false);\n const [showConditionDialog, setShowConditionDialog] = useState(false);\n\n useEffect(() => {\n if (typeBlock === 'conditions' && additionallyClickItems.length !== userRules['conditions'].length - 1) {\n let newArray = [];\n userRules['conditions'].forEach((el, idx) => {\n if (idx > 0) {\n newArray.push({\n _id: Date.now(),\n open: true\n });\n }\n });\n setAdditionallyClickItems([...additionallyClickItems, ...newArray]);\n }\n if (typeBlock === 'actions' && !checkLocal && userRules['actions']['else'].length) {\n setAdditionallyClickItems(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [animation, setAnimation] = useState(false);\n\n return <div className={`${clsx(cls.mainBlockItemRules, size && cls.addClassOverflow)} ${border && !size ? cls.border : null}`}>\n <span id='width' className={cls.nameBlockItems}>\n <MaterialDynamicIcon iconName={iconName} className={cls.iconThemCard} adapter={adapter} socket={socket} />{name}\n </span>\n {typeBlock === 'conditions' ?\n <div style={{ width: '100%' }}>\n <Select\n variant=\"standard\"\n className={cls.selectOnChange}\n value={userRules.justCheck || false}\n onChange={e => {\n const _userRules = deepCopy('conditions', userRules);\n _userRules.justCheck = e.target.value;\n setUserRules(_userRules);\n }}\n >\n <MenuItem value={false}>{I18n.t('on condition change')}</MenuItem>\n <MenuItem value={true}>{I18n.t('just check')}</MenuItem>\n </Select>\n <IconButton size=\"small\" title={I18n.t('Explanation')} className={cls.selectOnChangeHelp} onClick={() => setShowHelp(true)}>\n <IconHelp className={cls.selectOnChangeHelpIcon} />\n </IconButton>\n </div>\n : null}\n <AdditionallyContentBlockItems\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n blockValue={typeBlock === 'actions' ? 'then' : typeBlock === 'conditions' ? 0 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n userRules={userRules}\n size={size}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n />\n {additionally && [...Array(typeBlock === 'actions' ? 1 : userRules.conditions.length - 1)].map((e, index) => {\n const booleanAdditionally = (value = index) => Boolean(typeBlock === 'actions' ? additionallyClickItems : additionallyClickItems.find((el, idx) => idx === value && el.open));\n return <Fragment key={`${index}_block_${typeBlock}`}>\n <div\n onClick={() => {\n if (typeBlock === 'actions') {\n setAdditionallyClickItems(!additionallyClickItems);\n return null;\n }\n let newAdditionally = JSON.parse(JSON.stringify(additionallyClickItems));\n if (userRules['conditions'][index + 1].length) {\n newAdditionally[index].open = !newAdditionally[index].open\n setAdditionallyClickItems(newAdditionally);\n return null;\n }\n newAdditionally = newAdditionally.filter((el, idx) => idx !== index);\n setAdditionallyClickItems(newAdditionally);\n setAnimation(typeBlock === 'actions' ? true : index);\n setTimeout(() => {\n setAnimation(false);\n setUserRules({ ...userRules, conditions: [...userRules.conditions.filter((el, idx) => idx !== index + 1)] });\n }, 250);\n\n }}\n key={index} className={cls.blockCardAdd}>\n {booleanAdditionally() ? '-' : '+'}<div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>\n <AdditionallyContentBlockItems\n blockValue={typeBlock === 'actions' ? 'else' : typeBlock === 'conditions' ? index + 1 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n userRules={userRules}\n boolean={booleanAdditionally()}\n animation={Boolean(animation === index)}\n size={size}\n />\n </Fragment>\n })}\n {additionally && typeBlock === 'conditions' && <div\n onClick={() => {\n setAdditionallyClickItems([...additionallyClickItems, {\n _id: Date.now(),\n open: true\n }]);\n setUserRules({ ...userRules, conditions: [...userRules.conditions, []] });\n setAnimation(typeBlock === 'actions' ? true : userRules.conditions.length - 1);\n setTimeout(() => setAnimation(false), 1000);\n }}\n className={cls.blockCardAdd}\n >\n {'+'}\n <div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>}\n <DialogHelp open={showHelp} onClose={() => setShowHelp(false)} />\n <DialogCondition open={showConditionDialog} onClose={() => setShowConditionDialog(false)} />\n </div>;\n}\n\nContentBlockItems.defaultProps = {\n children: null,\n name: '',\n nameAdditionally: '',\n additionally: false,\n border: false,\n typeBlock: ''\n};\n\nContentBlockItems.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n nameAdditionally: PropTypes.string,\n border: PropTypes.bool,\n additionally: PropTypes.bool,\n children: PropTypes.object,\n typeBlock: PropTypes.string,\n blockValue: PropTypes.string,\n userRules: PropTypes.object,\n setUserRules: PropTypes.func,\n};\n\nexport default ContentBlockItems;","// extracted by mini-css-extract-plugin\nexport default {\"menuRules\":\"style_menuRules__NRFrw\",\"switchesRenderWrapper\":\"style_switchesRenderWrapper__MHBpo\",\"menuOff\":\"style_menuOff__GV8BN\",\"menuTitle\":\"style_menuTitle__bnI7K\",\"marginAuto\":\"style_marginAuto__h3I6J\",\"inputWidth\":\"style_inputWidth__Hkd3w\",\"menuWrapper\":\"style_menuWrapper__16zE-\",\"hamburgerWrapper\":\"style_hamburgerWrapper__+AsNg\",\"hamburgerOff\":\"style_hamburgerOff__Tmmok\",\"nothingFound\":\"style_nothingFound__hm0xN\",\"resetSearch\":\"style_resetSearch__oA8LS\",\"controlPanel\":\"style_controlPanel__ojI7Z\",\"controlPanelAppBar\":\"style_controlPanelAppBar__fjB3Y\",\"addClassMenu\":\"style_addClassMenu__3n58b\",\"addClassBackground\":\"style_addClassBackground__j1FHK\",\"addClassPosition\":\"style_addClassPosition__YL+W4\"};","import React from 'react';\nimport CardMenu from '.';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport DragWrapper from '../DragWrapper';\nimport { STEPS } from '../../helpers/Tour';\n\nconst CustomDragItem = props => {\n const { allProperties, allProperties: { acceptedBy, id }, setUserRules, userRules, setTourStep, tourStep, isTourOpen, onTouchMove } = props;\n return <DragWrapper {...props} {...allProperties}>\n <CardMenu\n onTouchMove={onTouchMove}\n onDoubleClick={() => {\n (isTourOpen &&\n tourStep === STEPS.addScheduleByDoubleClick &&\n id === 'TriggerScheduleBlock' &&\n setTourStep(STEPS.openTagsMenu)\n );\n (isTourOpen &&\n tourStep === STEPS.addActionPrintText &&\n id === 'ActionPrintText' &&\n setTourStep(STEPS.showJavascript)\n );\n let _id = Date.now();\n let blockValue;\n switch (acceptedBy) {\n case 'actions':\n blockValue = 'then';\n break;\n\n case 'conditions':\n blockValue = userRules[acceptedBy].length - 1;\n break;\n\n default:\n break;\n }\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n const newItem = { id, _id, acceptedBy };\n if (blockValue !== undefined) {\n newUserRules[acceptedBy][blockValue].push({ ...newItem });\n } else {\n newUserRules[acceptedBy].push({ ...newItem });\n }\n setUserRules(newUserRules);\n }} onDoubl {...props} {...allProperties} />\n </DragWrapper>;\n}\n\nexport default CustomDragItem;","// extracted by mini-css-extract-plugin\nexport default {\"menu_wrapper\":\"hamburgerMenu_menu_wrapper__H+bSr\",\"hamburgerMenu\":\"hamburgerMenu_hamburgerMenu__zKaBW\",\"animate\":\"hamburgerMenu_animate__CjZxq\",\"menu_conatiner_wrapper\":\"hamburgerMenu_menu_conatiner_wrapper__9BkY3\"};","import React from 'react';\nimport cls from './hamburgerMenu.module.scss';\nimport PropTypes from 'prop-types';\n\nconst HamburgerMenu = ({boolean}) => {\n return <div className={`${cls.hamburgerMenu} ${boolean ? cls.animate : ''}`}/>\n}\n\nHamburgerMenu.defaultProps = {\n boolean: false\n};\n\nHamburgerMenu.propTypes = {\n boolean: PropTypes.bool\n};\n\nexport default HamburgerMenu;","import React, { Fragment, useContext, useEffect } from 'react';\nimport cls from './style.module.scss';\nimport { AppBar, ClickAwayListener, Tab, Tabs } from '@mui/material';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport CustomInput from '../CustomInput';\nimport CustomDragItem from '../CardMenu/CustomDragItem';\nimport HamburgerMenu from '../HamburgerMenu';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { STEPS } from '../../helpers/Tour';\n\nconst Menu = ({ addClass, setAllBlocks, allBlocks, userRules, onChangeBlocks, setTourStep, tourStep, isTourOpen }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket } = useContext(ContextWrapperCreate);\n const [hamburgerOnOff, setHamburgerOnOff] = useStateLocal(false, 'hamburgerOnOff');\n const [filter, setFilter] = useStateLocal({\n text: '',\n type: 'triggers',\n index: 0\n }, 'filterControlPanel');\n\n const handleChange = (event, newValue) => {\n isTourOpen && (newValue === 0 && tourStep === STEPS.selectTriggers) && setTourStep(STEPS.addScheduleByDoubleClick);\n isTourOpen && (newValue === 2 && tourStep === STEPS.selectActions) && setTourStep(STEPS.addActionPrintText);\n setFilter({\n ...filter,\n index: newValue,\n type: ['triggers', 'conditions', 'actions'][newValue]\n });\n setBlocksFunc(filter.text, ['triggers', 'conditions', 'actions'][newValue]);\n };\n\n const setBlocksFunc = (text = filter.text, typeFunc = filter.type) => {\n if (!blocks) {\n return;\n }\n let newAllBlocks = [...blocks];\n newAllBlocks = newAllBlocks.filter(el => {\n if (!text) {\n return true;\n }\n const { name } = el.getStaticData();\n return name && I18n.t(name).toLowerCase().includes(text.toLowerCase());\n });\n newAllBlocks = newAllBlocks.filter(el => typeFunc === el.getStaticData().acceptedBy);\n setAllBlocks(newAllBlocks);\n };\n\n const a11yProps = index => ({\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`\n });\n\n useEffect(() => {\n setBlocksFunc();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [blocks]);\n return <ClickAwayListener\n mouseEvent={false}\n touchEvent=\"onTouchStart\"\n onClickAway={() => setHamburgerOnOff(true)}\n >\n <div className={clsx(cls.menuWrapper, addClass[1035] && cls.addClassMenu)}>\n <div className={`${cls.hamburgerWrapper} ${hamburgerOnOff ? cls.hamburgerOff : null}`}\n onClick={() => setHamburgerOnOff(!hamburgerOnOff)}><HamburgerMenu boolean={!hamburgerOnOff} />\n </div>\n <div className={`${clsx(cls.menuRules, addClass[1035] && cls.addClassBackground, addClass[835] && cls.addClassPosition)} ${hamburgerOnOff ? cls.menuOff : null}`}>\n <div className={cls.controlPanel}>\n <AppBar className={cls.controlPanelAppBar} position=\"static\">\n <Tabs\n value={filter.index}\n onChange={handleChange}\n >\n <Tab className=\"blocks-triggers\"\n title={I18n.t('Triggers')}\n icon={<MaterialDynamicIcon iconName='FlashOn' />}\n {...a11yProps(0)} />\n <Tab title={I18n.t('Conditions')} className=\"blocks-conditions\" icon={<MaterialDynamicIcon iconName='Help' />}\n {...a11yProps(1)} />\n <Tab title={I18n.t('Actions')} className=\"blocks-actions\" icon={<MaterialDynamicIcon iconName='PlayForWork' />}\n {...a11yProps(2)} />\n </Tabs>\n </AppBar>\n </div>\n <div className={cls.switchesRenderWrapper}>\n <span>\n {allBlocks.map(el => {\n const { name, id, icon, adapter } = el.getStaticData();\n return <Fragment key={id}>\n <CustomDragItem\n onTouchMove={() => setHamburgerOnOff(true)}\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n allProperties={el.getStaticData()}\n name={name}\n icon={icon}\n adapter={adapter}\n socket={socket}\n userRules={userRules}\n setUserRules={onChangeBlocks}\n isActive={false}\n id={id}\n />\n </Fragment>;\n })}\n {allBlocks.length === 0 && <div className={cls.nothingFound}>\n {I18n.t('Nothing found')}...\n <div className={cls.resetSearch} onClick={() => {\n setFilter({\n ...filter,\n text: ''\n });\n setBlocksFunc('');\n }}>{I18n.t('reset search')}</div>\n </div>}\n </span>\n </div>\n <div className={clsx(cls.menuTitle, cls.marginAuto)} />\n <CustomInput\n className={cls.inputWidth}\n fullWidth\n customValue\n value={filter.text}\n size=\"small\"\n autoComplete=\"off\"\n label={I18n.t('search')}\n variant=\"outlined\"\n onChange={(value) => {\n setFilter({ ...filter, text: value });\n setBlocksFunc(value);\n }}\n />\n </div>\n </div>\n </ClickAwayListener>;\n}\n\nMenu.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string\n};\n\nexport default Menu;\n","// extracted by mini-css-extract-plugin\nexport default {};","import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport cls from './style.module.scss';\n\nimport { CustomDragLayer } from './components/CustomDragLayer';\nimport ContentBlockItems from './components/ContentBlockItems';\nimport { ContextWrapperCreate } from './components/ContextWrapper';\nimport Compile from './helpers/Compile';\nimport PropTypes from 'prop-types';\nimport Menu from './components/Menu';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport './helpers/stylesVariables.scss';\n\nimport DialogExport from '../../Dialogs/Export';\nimport DialogImport from '../../Dialogs/Import';\nimport clsx from 'clsx';\n\nconst RulesEditor = ({ code, onChange, themeName, setTourStep, tourStep, isTourOpen, command, scriptId, changed, running }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket, setOnUpdate, setOnDebugMessage, setEnableSimulation } = useContext(ContextWrapperCreate);\n const [allBlocks, setAllBlocks] = useState([]);\n const [userRules, setUserRules] = useState(Compile.code2json(code));\n const [importExport, setImportExport] = useState('');\n const [modal, setModal] = useState(false);\n //const [jsAlive, setJsAlive] = useState(false);\n //const [jsInstance, setJsInstance] = useState(false);\n\n useEffect(() => {\n let _jsInstance;\n let _jsAlive;\n const handler = (id, obj) => {\n if (id === _jsInstance + '.alive') {\n if (_jsAlive !== obj?.val) {\n _jsAlive = obj?.val;\n //setJsAlive(_jsAlive);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n }\n } else {\n if (_jsInstance !== obj?.common?.engine) {\n _jsInstance && socket.unsubscribeState(`${_jsInstance}.alive`, handler);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n }\n }\n };\n\n const handlerStatus = (id, state) => {\n if (state) {\n try {\n let msg = JSON.parse(state.val);\n // if not from previous session\n if (msg.ruleId === scriptId && Date.now() - msg.ts < 1000) {\n setOnDebugMessage({blockId: msg.blockId, data: msg.data, ts: msg.ts});\n }\n } catch (e) {\n console.error('Cannot parse: ' + state.val);\n }\n }\n };\n\n socket.getObject(scriptId)\n .then(obj => {\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n socket.subscribeObject(scriptId, handler);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n _jsInstance && socket.subscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n });\n\n return function cleanup() {\n _jsInstance && socket.unsubscribeObject(`${_jsInstance}.alive`, handler);\n socket.unsubscribeState(scriptId, handler);\n _jsAlive && _jsInstance && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOff', scriptId);\n _jsInstance && socket.unsubscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setEnableSimulation(!changed && running);\n }, [changed, running, setEnableSimulation]);\n\n useEffect(() => {\n if (!!command) {\n setImportExport(command);\n if (!modal) {\n setModal(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [command]);\n\n useEffect(() => {\n const newUserRules = Compile.code2json(code);\n if (JSON.stringify(newUserRules) !== JSON.stringify(userRules)) {\n setUserRules(newUserRules);\n setOnUpdate(true);\n }\n // eslint-disable-next-line\n }, [code]);\n\n useEffect(() => {\n document.getElementsByTagName('HTML')[0].className = themeName || 'blue';\n }, [themeName]);\n\n const onChangeBlocks = useCallback(json => {\n setUserRules(json);\n onChange(Compile.json2code(json, blocks));\n }, [blocks, onChange]);\n\n const ref = useRef({ clientWidth: 0 });\n const [addClass, setAddClass] = useState({ 835: false, 1035: false });\n useEffect(() => {\n if (ref.current) {\n if (ref.current.clientWidth <= 1035) {\n setAddClass({ 835: false, 1035: true });\n }\n if (ref.current.clientWidth <= 835) {\n setAddClass({ 1035: true, 835: true });\n }\n if (ref.current.clientWidth > 1035) {\n setAddClass({ 835: false, 1035: false });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current.clientWidth])\n\n if (!blocks) {\n return null;\n }\n\n return <div key=\"rulesEditor\" className={cls.wrapperRules} ref={ref}>\n {<CustomDragLayer allBlocks={allBlocks} socket={socket} />}\n {importExport === \"export\" ?\n <DialogExport\n key=\"dialogExport\"\n onClose={() => setModal(false)}\n open={modal}\n text={JSON.stringify(userRules, null, 2)} /> :\n <DialogImport\n open={modal}\n key=\"dialogImport\"\n onClose={text => {\n setModal(false);\n if (text) {\n onChangeBlocks(JSON.parse(text));\n }\n }} />}\n {<div className={clsx(cls.rootWrapper, addClass[835] && cls.addClass)}>\n <Menu\n setAllBlocks={setAllBlocks}\n allBlocks={allBlocks}\n userRules={userRules}\n onChangeBlocks={onChangeBlocks}\n setTourStep={setTourStep}\n tourStep={tourStep}\n addClass={addClass}\n isTourOpen={isTourOpen}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n userRules={userRules}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n name={`${I18n.t('when')}...`}\n typeBlock=\"triggers\"\n iconName=\"FlashOn\"\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('and')}...`}\n typeBlock=\"conditions\"\n iconName=\"Help\"\n nameAdditionally={I18n.t('or')}\n additionally\n border\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('then')}`}\n typeBlock=\"actions\"\n iconName=\"PlayForWork\"\n nameAdditionally={I18n.t('else')}\n additionally\n size={addClass[835]}\n />\n </div>}\n </div>;\n}\n\nRulesEditor.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string,\n scriptId: PropTypes.string,\n setTourStep: PropTypes.func,\n tourStep: PropTypes.number,\n command: PropTypes.string,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n searchText: PropTypes.string,\n resizing: PropTypes.bool,\n\n};\n\nexport default RulesEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport ScriptEditorComponent from '../ScriptEditorVanilaMonaco';\n\nconst styles = theme => ({\n editorDiv: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n position: 'relative'\n },\n editor: {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n line: {\n width: '100%',\n whiteSpace: 'nowrap',\n },\n lineNumber: {\n width: 40,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n textAlign: 'right',\n fontSize: 14,\n marginRight: 1,\n borderRight: '1px solid #555',\n cursor: 'pointer'\n },\n lineBreakpoint: {\n background: '#330000',\n color: 'white',\n },\n lineCode: {\n //whiteSpace: 'nowrap',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n fontSize: 14,\n margin: 0,\n whiteSpace: 'pre',\n },\n lineCurrentCode: {\n background: 'red',\n color: 'white',\n },\n lineCurrent: {\n background: '#880000',\n color: 'white',\n },\n});\n\nclass Editor extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lines: (this.props.script || '').split(/\\r\\n|\\n/)\n };\n }\n\n editorDidMount(editor, monaco) {\n this.monaco = monaco;\n this.editor = editor;\n editor.focus();\n }\n\n render() {\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv2\">\n <ScriptEditorComponent\n key=\"scriptEditor2\"\n name={this.props.scriptName}\n adapterName={this.props.adapterName}\n readOnly={true}\n code={this.props.script || ''}\n isDark={this.props.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.props.runningInstances}\n language={'javascript'}\n\n breakpoints={this.props.breakpoints}\n location={this.props.paused ? this.props.location : null}\n onToggleBreakpoint={i => this.props.onToggleBreakpoint(i)}\n />\n </div>;\n }\n}\n\nEditor.propTypes = {\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n sourceId: PropTypes.string,\n script: PropTypes.string,\n scriptName: PropTypes.string,\n adapterName: PropTypes.string,\n paused: PropTypes.bool,\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport IconButton from '@mui/material/IconButton';\nimport {\n MdContentCopy as IconCopy,\n MdDeleteForever as IconDelete,\n MdVerticalAlignBottom as IconBottom,\n} from 'react-icons/md';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n consoleLine: {\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222'\n },\n console_log: {\n\n },\n console_warn: {\n backgroundColor: theme.palette.mode === 'dark' ? '#885900' : '#ffa500',\n },\n console_error: {\n backgroundColor: theme.palette.mode === 'dark' ? '#7a0000' : '#FF0000',\n },\n console_debug: {\n opacity: 0.6,\n },\n consoleSeverity: {\n verticalAlign: 'top',\n width: 50,\n textTransform: 'uppercase',\n },\n consoleTime: {\n whiteSpace: 'nowrap',\n verticalAlign: 'top',\n width: 170,\n\n },\n consoleText: {\n fontFamily: 'Lucida Console, Courier, monospace',\n paddingTop: 4,\n '&>pre': {\n margin: 0\n }\n },\n\n\n\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden'\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n },\n toolbox: {\n //position: 'absolute',\n //top: 0,\n //left: 0,\n //marginLeft: 2,\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold'\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4\n },\n});\n\nfunction copyToClipboard(str) {\n const el = window.document.createElement('textarea');\n el.value = str;\n window.document.body.appendChild(el);\n el.select();\n window.document.execCommand('copy');\n window.document.body.removeChild(el);\n}\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) i = '0' + i.toString();\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) i = '0' + i.toString();\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) i = '0' + i.toString();\n text += i + '.';\n i = d.getMilliseconds();\n if (i < 10) {\n i = '00' + i.toString();\n } else if (i < 100) {\n i = '0' + i.toString();\n }\n text += i;\n return text;\n}\n\nclass Console extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n };\n this.messagesEnd = React.createRef();\n }\n generateLine(message) {\n return <tr key={'tr_' + message.ts + '_' + message.text.substr(-10)} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.text}</td>\n </tr>;\n }\n renderLogList(lines) {\n if (lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>\n {lines.map((line, i) => this.generateLine(line))}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{float: 'left', clear: 'both'}}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{paddingLeft: 10}}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n onCopy() {\n copyToClipboard((this.props.console).join('\\n'));\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({behavior: 'smooth'});\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n render() {\n const lines = this.props.console;\n return (\n <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({goBottom: !this.state.goBottom})}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onClearAllLogs()}\n size=\"medium\"><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy/></IconButton> : null}\n </div>\n {this.renderLogList(lines)}\n </div>\n );\n }\n}\n\nConsole.propTypes = {\n theme: PropTypes.object,\n onClearAllLogs: PropTypes.func,\n console: PropTypes.array,\n};\n\nexport default withStyles(styles)(Console);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\nimport ReactJson from 'react-json-view';\n\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\n\nimport {MdCheck as CheckIcon} from 'react-icons/md';\nimport {MdAdd as IconAdd} from 'react-icons/md';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n frameRoot: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n frameTextRoot: {\n margin: 0,\n },\n frameTextPrimary: {\n color: theme.palette.mode === 'dark' ? '#CCC' : '#333',\n },\n frameTextSecondary: {\n fontStyle: 'italic',\n fontSize: 12,\n opacity: 0.6,\n paddingLeft: theme.spacing(1),\n },\n\n listRoot: {\n padding: 0,\n },\n\n scopeType: {\n verticalAlign: 'top',\n textTransform: 'uppercase',\n width: 50,\n },\n scopeType_local: {\n color: '#53a944'\n },\n scopeType_closure: {\n color: '#365b80'\n },\n scopeType_user: {\n color: '#a48a15'\n },\n scopeName: {\n color: '#bc5b5b',\n width: 'calc(100% - 82px)',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n scopeButton: {\n width: 32\n },\n scopeValueEditable: {\n cursor: 'pointer'\n },\n selectedFrame: {\n backgroundColor: '#777',\n color: 'white'\n },\n splitter: {\n width: '100%',\n height: 'calc(100% - 36px)',\n overflow: 'hidden',\n fontSize: 12\n },\n\n toolbarScopes: {\n width: 24,\n display: 'inline-block',\n height: '100%',\n background: theme.palette.mode === 'dark' ? '#222' : '#EEE',\n verticalAlign: 'top',\n },\n scopesAfterToolbar: {\n width: 'calc(100% - 24px)',\n display: 'inline-block',\n height: '100%',\n verticalAlign: 'top',\n },\n\n scopeNameName: {\n fontWeight: 'bold',\n display: 'inline-block',\n verticalAlign: 'top',\n },\n scopeNameEqual: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n verticalAlign: 'top',\n },\n scopeNameValue: {\n verticalAlign: 'top',\n display: 'inline-block',\n color: '#3b709f',\n whiteSpace: 'nowrap',\n },\n scopeButtonDel: {\n padding: 0,\n float: 'right',\n },\n\n valueNull: {\n color: '#a44a24'\n },\n valueUndefined: {\n color: '#a44a24'\n },\n valueString: {\n color: '#1e8816'\n },\n valueNumber: {\n color: '#163c88'\n },\n valueBoolean: {\n color: '#a44a24'\n },\n valueObject: {\n color: '#721b70'\n },\n valueNone: {\n color: '#8a8a8a'\n },\n valueFunc: {\n color: '#ac4343'\n }\n});\n\nclass Stack extends React.Component {\n constructor(props) {\n super(props);\n\n this.framesSize = parseFloat(window.localStorage.getItem('App.framesSize')) || 300;\n\n this.state = {\n editValue: null,\n callFrames: this.props.callFrames,\n };\n\n this.editRef = React.createRef();\n }\n\n onExpressionNameUpdate() {\n this.props.onExpressionNameUpdate(this.state.editValue.index, this.scopeValue, () => {\n this.setState({editValue: null});\n this.scopeValue = null;\n });\n }\n\n renderExpression(item, i) {\n const name = this.state.editValue && this.state.editValue.type === 'expression' && this.state.editValue.index === i ?\n <Input\n inputRef={this.editRef}\n fullWidth\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={item.name}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onExpressionNameUpdate();\n } else if (e.keyCode === 27) {\n this.setState({editValue: null});\n }\n }}\n\n onChange={e =>\n this.scopeValue = e.target.value}\n\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onExpressionNameUpdate()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to edit expression')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)}</div>\n ];\n\n return <tr key={`user_${i}${item.name}`}>\n <td className={clsx(this.props.classes.scopeType, this.props.classes['scopeType_user'])}>user</td>\n <td className={this.props.classes.scopeName}\n onDoubleClick={() => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n }}\n >{name}</td>\n <IconButton\n className={this.props.classes.scopeButtonDel}\n size=\"small\"\n disabled={!!this.state.editValue}\n onClick={() => this.props.onExpressionDelete(i)}\n >\n <IconDelete/>\n </IconButton>\n </tr>\n }\n\n renderExpressions() {\n return this.props.expressions.map((item, i) => this.renderExpression(item, i));\n }\n\n renderOneFrameTitle(frame, i) {\n if (this.props.mainScriptId === this.props.currentScriptId && frame.location.scriptId !== this.props.mainScriptId) {\n return null;\n }\n const fileName = frame.url.split('/').pop().replace(/^script\\.js\\./, '');\n return <ListItem\n key={frame.id}\n button\n onClick={() => this.props.onChangeCurrentFrame(i)}\n dense={true}\n selected={this.props.currentFrame === i}\n classes={{root: this.props.classes.frameRoot}}\n >\n <ListItemText\n classes={{root: this.props.classes.frameTextRoot, primary: this.props.classes.frameTextPrimary, secondary: this.props.classes.frameTextSecondary}}\n title={frame.url}\n primary={frame.functionName || 'anonymous'}\n secondary={`${fileName} (${frame.location.lineNumber}:${frame.location.columnNumber})`}\n />\n </ListItem>;\n }\n\n formatValue(value, forEdit) {\n if (!value) {\n if (forEdit) {\n return 'none';\n } else {\n return <span className={this.props.classes.valueNone}>none</span>;\n }\n } else if (value.type === 'function') {\n const text = value.description ? (value.description.length > 100 ? value.description.substring(0, 100) + '...' : value.description) : 'function';\n if (forEdit) {\n return text;\n } else {\n return <span className={this.props.classes.valueFunc} title={value.description}>{text}</span>;\n }\n } else if (value.value === undefined) {\n if (forEdit) {\n return 'undefined';\n } else {\n return <span className={this.props.classes.valueUndefined}>undefined</span>;\n }\n } else if (value.value === null) {\n if (forEdit) {\n return 'null';\n } else {\n return <span className={this.props.classes.valueNull}>null</span>;\n }\n } else if (value.type === 'string') {\n if (forEdit) {\n return value.value;\n } else {\n const text = value.value ? (value.value.length > 100 ? value.value.substring(0, 100) + '...' : value.value) : '';\n return <span className={this.props.classes.valueString} title={text}>\"{text}\"</span>;\n }\n } else if (value.type === 'boolean') {\n if (forEdit) {\n return value.value.toString();\n } else {\n return <span className={this.props.classes.valueBoolean}>{value.value.toString()}</span>;\n }\n } else if (value.type === 'object') {\n if (forEdit) {\n return JSON.stringify(value.value);\n } else {\n return <ReactJson\n enableClipboard={false}\n style={{backgroundColor: 'inherit', marginTop: 3}}\n src={value.value}\n collapsed={true}\n theme={this.props.themeType === 'dark' ? 'brewer' : 'rjv-default'}\n displayDataTypes={false}\n />;\n }\n } else {\n return value.value.toString();\n }\n }\n\n onWriteScopeValue() {\n if (this.scopeValue === 'true') {\n this.scopeValue = true;\n } else if (this.scopeValue === 'false') {\n this.scopeValue = false;\n } else if (this.scopeValue === 'null') {\n this.scopeValue = null;\n } else if (this.scopeValue === 'undefined') {\n this.scopeValue = undefined;\n } else\n if (parseFloat(this.scopeValue).toString() === this.scopeValue) {\n this.scopeValue = parseFloat(this.scopeValue);\n }\n\n this.props.onWriteScopeValue({\n variableName: this.state.editValue.name,\n scopeNumber: 0,\n newValue: {\n value: this.scopeValue,\n valueType: typeof this.scopeValue,\n },\n callFrameId: this.props.callFrames[this.props.currentFrame].callFrameId\n });\n\n this.setState({editValue: null});\n this.scopeValue = null;\n }\n\n componentDidUpdate() {\n //this.editRef.current?.select();\n this.editRef.current?.focus();\n }\n\n renderScope(scopeId, item, type) {\n const editable = !this.props.currentFrame && item.value && (item.value.type === 'undefined' || item.value.type === 'string' || item.value.type === 'number' || item.value.type === 'boolean' || item.value?.value === null || item.value?.value === undefined);\n\n const el = this.state.editValue && this.state.editValue.type === type && this.state.editValue.name === item.name ?\n [\n <div key=\"name\" className={this.props.classes.scopeNameName}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <Input\n inputRef={this.editRef}\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={this.formatValue(item.value, true)}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onWriteScopeValue()\n } else if (e.keyCode === 27) {\n this.setState({editValue: null})\n }\n }}\n onChange={e =>\n this.scopeValue = e.target.value}\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onWriteScopeValue()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n ]\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to write value')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)} ({item.value.type})</div>\n ];\n\n\n return <tr key={`${type}_${scopeId}_${item.name}`}>\n <td className={clsx(this.props.classes.scopeType, this.props.classes['scopeType_' + type])}>{type}</td>\n <td\n className={clsx(this.props.classes.scopeName, !this.props.currentFrame && editable && this.props.classes.scopeValueEditable)}\n onDoubleClick={() => {\n if (editable) {\n this.scopeValue = item.value.value;\n this.setState({\n editValue: {\n scopeId,\n type,\n valueType: item.value.type,\n name: item.name,\n value: item.value.value\n }\n });\n }\n }}\n >{el}</td>\n </tr>;\n }\n\n renderScopes(frame) {\n if (!frame) {\n return null;\n } else {\n // first local\n let result = this.renderExpressions();\n\n let items = this.props.scopes?.local?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'local'));\n items && items.forEach(item => result.push(item));\n\n items = this.props.scopes?.closure?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'closure'));\n items && items.forEach(item => result.push(item));\n\n return <table style={{width: '100%'}}>\n <tbody>\n {result}\n </tbody>\n </table>;\n }\n }\n\n render() {\n return <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryIndex={1}\n secondaryMinSize={200}\n primaryMinSize={200}\n vertical={false}\n secondaryInitialSize={this.framesSize}\n onSecondaryPaneSizeChange={size => this.framesSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.framesSize', this.framesSize.toString())}\n >\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <List classes={{root: this.props.classes.listRoot}}>\n {this.props.callFrames ? this.props.callFrames.map((frame, i) =>\n this.renderOneFrameTitle(frame, i)) : null}\n </List>\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <div className={this.props.classes.toolbarScopes}>\n <IconButton size=\"small\" onClick={() => this.props.onExpressionAdd((i, item) => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n })}><IconAdd/></IconButton>\n </div>\n <div className={this.props.classes.scopesAfterToolbar}>\n {this.props.callFrames && this.props.callFrames.length && this.renderScopes(this.props.callFrames[this.props.currentFrame])}\n </div>\n </div>\n </SplitterLayout>;\n }\n}\n\nStack.propTypes = {\n currentScriptId: PropTypes.string,\n mainScriptId: PropTypes.string,\n scopes: PropTypes.object,\n expressions: PropTypes.array,\n callFrames: PropTypes.array,\n currentFrame: PropTypes.number,\n onChangeCurrentFrame: PropTypes.func,\n onWriteScopeValue: PropTypes.func,\n onExpressionDelete: PropTypes.func,\n onExpressionAdd: PropTypes.func,\n onExpressionNameUpdate: PropTypes.func,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(Stack);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Toolbar from '@mui/material/Toolbar';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Dialog from '@mui/material/Dialog';\nimport Badge from '@mui/material/Badge';\n\nimport { MdClose as IconClose, MdPlayArrow as IconRun } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdArrowForward as IconNext } from 'react-icons/md';\nimport { MdArrowDownward as IconStep } from 'react-icons/md';\nimport { MdArrowUpward as IconOut } from 'react-icons/md';\nimport { MdRefresh as IconRestart } from 'react-icons/md';\nimport { MdWarning as IconException } from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\nimport DialogError from '../../Dialogs/Error';\nimport Editor from './Editor';\nimport Console from './Console';\nimport Stack from './Stack';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n height: `calc(100% - ${theme.toolbar.height + 38/*Theme.toolbar.height */ + 5}px)`,\n overflow: 'hidden',\n position: 'relative'\n },\n toolbar: {\n minHeight: 38,//Theme.toolbar.height,\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)'\n },\n buttonRun: {\n color: 'green'\n },\n buttonPause: {\n color: 'orange'\n },\n buttonRestart: {\n color: 'darkgreen'\n },\n buttonStop: {\n color: 'red'\n },\n buttonNext: {\n color: 'blue'\n },\n buttonStep: {\n color: 'blue'\n },\n buttonOut: {\n color: 'blue'\n },\n buttonException: {\n\n },\n\n tabFile: {\n textTransform: 'inherit',\n color: theme.palette.mode === 'dark' ? '#DDD' : 'inherit'\n },\n tabText: {\n maxWidth: 130,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n closeButton: {\n position: 'absolute',\n top: 8,\n right: 0,\n zIndex: 10,\n padding: 8,\n cursor: 'pointer'\n },\n\n tabsRoot: {\n minHeight: 24,\n background: theme.palette.mode === 'dark' ? '#333' : '#e6e6e6',\n color: theme.palette.mode === 'dark' ? 'white' : 'inherit'\n },\n tabRoot: {\n minHeight: 24,\n },\n\n bpListItem: {\n borderTop: '1px dashed #bfbfbf44',\n },\n monospace: {\n fontFamily: 'Courier New, monospace',\n whiteSpace: 'pre',\n fontSize: 12,\n },\n arrow: {\n color: '#fffa4f',\n },\n splitter: {\n height: 'calc(100% - 52px)',\n '& .layout-pane': {\n overflow: 'hidden',\n height: '100%'\n }\n }\n});\n\nclass Debugger extends React.Component {\n constructor(props) {\n super(props);\n let breakpoints = window.localStorage.getItem('javascript.tools.bp.' + this.props.src);\n try {\n breakpoints = breakpoints ? JSON.parse(breakpoints) : [];\n } catch (e) {\n breakpoints = [];\n }\n\n let expressions = window.localStorage.getItem('javascript.tools.exps.' + this.props.src);\n try {\n expressions = expressions ? JSON.parse(expressions) : [];\n expressions = expressions.map(name => ({name}));\n } catch (e) {\n expressions = [];\n }\n\n this.toolSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.toolSize')) || 150 : 150;\n\n this.state = {\n starting: true,\n selected: null,\n tabs: {},\n script: '',\n breakpoints,\n expressions,\n running: false,\n error: '',\n started: false,\n paused: true,\n location: null,\n toolsTab: window.localStorage.getItem('javascript.tools.tab') || 'console',\n stopOnException: window.localStorage.getItem('javascript.tools.stopOnException') === 'true',\n console: [],\n finished: false,\n currentFrame: 0,\n scopes: {},\n queryBreakpoints: null,\n logErrors: 0,\n logWarnings: 0,\n logs: 0,\n };\n\n this.scripts = {};\n this.mainScriptId = null;\n }\n\n componentDidMount() {\n new Promise(resolve => {\n if (this.props.debugInstance) {\n resolve(this.props.debugInstance.instance);\n } else {\n this.props.socket.getObject(this.props.src)\n .then(obj => resolve(obj?.common?.engine?.replace('system.adapter.', '')));\n }\n })\n .then(instance =>\n this.setState({instance: instance}, () => {\n if (this.state.instance) {\n this.props.socket.setState(this.state.instance + '.debug.from', { val: '{\"cmd\": \"subscribed\"}', ack: true });\n //.then(() => );\n setTimeout(() =>\n this.props.socket.subscribeState(this.state.instance + '.debug.from', this.fromInstance), 200);\n } else {\n this.setState({error: 'Unknown instance'});\n }\n }));\n }\n\n componentWillUnmount() {\n if (this.state.instance) {\n this.props.socket.unsubscribeState(this.state.instance + '.debug.from', this.fromInstance);\n this.props.socket.sendTo(this.state.instance, 'debugStop');\n }\n }\n\n sendToInstance(cmd) {\n this.props.socket.setState(this.state.instance + '.debug.to', { val: JSON.stringify(cmd), ack: false });\n }\n\n reinitBreakpoints(cb) {\n if (this.state.breakpoints.length) {\n let breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n breakpoints = breakpoints.map(item => item.location);\n this.setState({breakpoints: []}, () => {\n this.sendToInstance({breakpoints, cmd: 'sb'});\n if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n }\n\n cb && cb();\n });\n } else if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n cb && cb();\n } else {\n cb && cb();\n }\n }\n\n getLocation(context) {\n if (context.callFrames) {\n const frame = context.callFrames[0];\n return frame.location;\n }\n }\n\n readCurrentScope() {\n const frame = this.state.context.callFrames[this.state.currentFrame];\n if (frame) {\n const scopes = frame.scopeChain.filter(scope => scope.type !== 'global');\n if (scopes.length) {\n this.sendToInstance({cmd: 'scope', scopes});\n } else if (this.state.scopes.global || this.state.scopes.local || this.state.scopes.closure) {\n this.setState({scopes: {}});\n }\n }\n }\n\n readExpressions(i) {\n if (this.state.expressions.length && this.state.context?.callFrames && this.state.context.callFrames[this.state.currentFrame]) {\n if (i !== undefined) {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: [this.state.expressions[i]],\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n } else {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: this.state.expressions,\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n }\n }\n }\n\n fromInstance = (id, state) => {\n try {\n const data = JSON.parse(state.val);\n if (data.cmd === 'subscribed') {\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src});\n } else\n if (data.cmd === 'readyToDebug') {\n this.mainScriptId = data.scriptId;\n this.scripts[data.scriptId] = data.script;\n if (data.script.startsWith('(async () => {debugger;\\n')) {\n this.scripts[data.scriptId] = '(async () => {\\n' + data.script.substring('(async () => {debugger;\\n'.length);\n } else if (data.script.startsWith('debugger;')) {\n this.scripts[data.scriptId] = data.script.substring('debugger;'.length);\n }\n\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n tabs[data.scriptId] = this.props.debugInstance ? data.url: this.props.src.replace('script.js.', '');\n\n const ts = Date.now() + '.' + Math.random() * 10000;\n data.context.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n\n this.setState({\n starting: false,\n finished: false,\n selected: this.mainScriptId,\n script: this.scripts[data.scriptId],\n tabs,\n currentFrame: 0,\n started: true,\n paused: true,\n location: this.getLocation(data.context),\n context: data.context,\n }, () =>\n this.reinitBreakpoints(() => {\n this.readCurrentScope();\n this.readExpressions();\n }));\n } else if (data.cmd === 'paused') {\n const ts = Date.now() + '.' + Math.random() * 10000;\n data.context.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n const location = this.getLocation(data.context);\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n const parts = data.context.callFrames[0].url.split('iobroker.javascript');\n tabs[location.scriptId] = (parts[1] || parts[0]).replace('script.js.', '');\n\n const newState = {\n tabs,\n paused: true,\n location,\n currentFrame: 0,\n context: data.context,\n scope: {id: (data.context && data.context.callFrames && data.context.callFrames[0] && data.context.callFrames[0].id) || 0}\n };\n\n newState.script = this.scripts[location.scriptId] === undefined ? I18n.t('loading...') : this.scripts[location.scriptId];\n newState.selected = location.scriptId;\n\n this.setState(newState, () => {\n this.readCurrentScope();\n this.readExpressions();\n if (!this.scripts[location.scriptId]) {\n this.sendToInstance({cmd: 'source', scriptId: location.scriptId});\n }\n });\n } else if (data.cmd === 'script') {\n this.scripts[data.scriptId] = data.text;\n if (this.state.selected === data.scriptId) {\n this.setState({script: this.scripts[data.scriptId]});\n }\n } else if (data.cmd === 'resumed') {\n this.setState({paused: false});\n } else if (data.cmd === 'log') {\n if (this.state.toolsTab === 'console') {\n this.console = null;\n const console = [...this.state.console];\n console.push({text: data.text, severity: data.severity, ts: data.ts});\n this.setState({console});\n } else {\n if (data.severity === 'error') {\n this.setState({logErrors: this.state.logErrors + 1});\n } else if (data.severity === 'warn') {\n this.setState({logWarnings: this.state.logWarnings + 1});\n } else {\n this.setState({logs: this.state.logs + 1});\n }\n this.console = this.console || [...this.state.console];\n this.console.push({text: data.text, severity: data.severity, ts: data.ts});\n }\n } else if (data.cmd === 'error') {\n this.setState({error: data.error});\n } else if (data.cmd === 'finished' || data.cmd === 'debugStopped') {\n this.setState({\n finished: true,\n starting: false,\n started: true,\n });\n } else if (data.cmd === 'sb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n data.breakpoints.filter(bp => bp).forEach(bp => {\n const found = breakpoints.find(item =>\n item.location.scriptId === bp.location.scriptId && item.location.lineNumber === bp.location.lineNumber);\n if (!found) {\n changed = true;\n breakpoints.push(bp);\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'cb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n\n data.breakpoints.filter(id => id !== undefined && id !== null).forEach(id => {\n const found = breakpoints.find(item => item.id === id);\n if (found) {\n const pos = breakpoints.indexOf(found);\n breakpoints.splice(pos, 1);\n changed = true;\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'scope') {\n //const global = data.scopes.find(scope => scope.type === 'global') || null;\n const local = data.scopes.find(scope => scope.type === 'local') || null;\n const closure = data.scopes.find(scope => scope.type === 'closure') || null;\n\n console.log(JSON.stringify(closure));\n\n this.setState({scopes: {local, closure, id: this.state.scope.id + '_' + this.state.currentFrame}});\n } else if (data.cmd === 'setValue') {\n const scopes = JSON.parse(JSON.stringify(this.state.scopes));\n let item;\n if (data.scopeNumber === 0) {\n item = scopes.local && scopes.local.properties && scopes.local.properties.result && scopes.local.properties.result.find(item => item.name === data.variableName);\n } else {\n item = scopes.closure && scopes.closure.properties && scopes.closure.properties.result && scopes.closure.properties.result && scopes.closure.properties.result.find(item => item.name === data.variableName);\n }\n if (item) {\n item.value.value = data.newValue.value;\n this.setState({scopes});\n }\n } else if (data.cmd === 'expressions') {\n // update values\n let expressions = JSON.parse(JSON.stringify(this.state.expressions));\n let changed = false;\n data.expressions.forEach(item => {\n const expression = expressions.find(it => it.name === item.name);\n if (expression) {\n changed = true;\n expression.value = item.result;\n }\n });\n changed && this.setState({expressions});\n\n console.log('expressions: ' + JSON.stringify(data));\n } else if (data.cmd === 'getPossibleBreakpoints') {\n if (data.breakpoints?.locations?.length === 1) {\n this.sendToInstance({breakpoints: data.breakpoints.locations, cmd: 'sb'});\n } else if (!data.breakpoints?.locations?.length) {\n window.alert('cannot set');\n } else {\n this.setState({queryBreakpoints: data.breakpoints.locations});\n }\n } else {\n console.error(`Unknown command: ${JSON.stringify(data)}`);\n }\n } catch (e) {\n\n }\n }\n\n getTextAtLocation(location) {\n let line = this.state.script.split(/\\r\\n|\\n/)[location.lineNumber];\n let arrow = '';\n if (location.columnNumber >= 10) {\n line = line.substring(location.columnNumber - 10, location.columnNumber + 20);\n arrow = ''.padStart(10, ' ') + '↑';\n } else {\n line = line.substring(0, 30 - location.columnNumber);\n arrow = ''.padStart(location.columnNumber, ' ') + '↑';\n }\n return [\n <div className={this.props.classes.monospace}>{line}</div>,\n <div className={clsx(this.props.classes.monospace, this.props.classes.arrow)}>{arrow}</div>\n ];\n }\n\n renderQueryBreakpoints() {\n if (this.state.queryBreakpoints) {\n return <Dialog onClose={() => this.setState({queryBreakpoints: null})} aria-labelledby=\"bp-dialog-title\" open={true}>\n <DialogTitle id=\"bp-dialog-title\">{I18n.t('Select breakpoint')}</DialogTitle>\n <List>\n {this.state.queryBreakpoints.map((bp, i) => (\n <ListItem\n classes={{root: this.props.classes.bpListItem}}\n dense={true}\n button\n onClick={() => {\n this.sendToInstance({breakpoints: [bp], cmd: 'sb'});\n this.setState({queryBreakpoints: null})\n }}\n key={i}>\n <ListItemText\n classes={{primary: this.props.classes.bpListPrimary, secondary: this.props.classes.bpListSecondary}}\n primary={this.getTextAtLocation(bp)}\n />\n </ListItem>\n ))}\n </List>\n </Dialog>;\n } else {\n return null;\n }\n }\n\n renderError() {\n if (this.state.error) {\n return <DialogError key=\"dialogError\" onClose={() => this.setState({ error: '' })} text={this.state.error} />;\n } else {\n return null;\n }\n }\n\n closeTab(id, e) {\n e && e.stopPropagation();\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n delete tabs[id];\n const newState = {tabs, script: this.scripts[this.mainScriptId], selected: this.mainScriptId};\n if (this.state.location && this.state.location.scriptId !== this.mainScriptId) {\n newState.location = null;\n }\n this.setState(newState);\n }\n\n renderTabs() {\n const disabled = !this.state.tabs || !this.state.started;\n return <Tabs\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: 'calc(100% - 300px)', display: 'inline-block' }}\n value={this.state.selected}\n onChange={(event, value) => {\n if (this.scripts[value]) {\n this.setState({selected: value, script: this.scripts[value]});\n } else {\n this.setState({selected: value, script: 'loading...'}, () =>\n this.sendToInstance({cmd: 'source', scriptId: value}));\n }\n }}\n scrollButtons=\"auto\"\n >\n {Object.keys(this.state.tabs || [])\n .map(id => {\n let label = id;\n let title = this.state.tabs[id] || '';\n if (this.state.tabs[id]) {\n label = this.state.tabs[id].split('/').pop();\n }\n label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText)}>{label}</div>,\n id !== this.mainScriptId && <span key=\"icon\" className={this.props.classes.closeButton}>\n <IconClose key=\"close\" onClick={e => this.closeTab(id, e)} fontSize=\"small\" /></span>];\n\n return <Tab disabled={disabled} classes={{root: this.props.classes.tabFile}} label={label} title={title} key={id} value={id}/>;\n })}\n </Tabs>;\n }\n\n onResume() {\n this.sendToInstance({cmd: 'cont'});\n }\n\n onPause() {\n this.sendToInstance({cmd: 'pause'});\n }\n\n onNext() {\n this.sendToInstance({cmd: 'next'});\n }\n\n onStepIn() {\n this.sendToInstance({cmd: 'step'});\n }\n\n onStepOut() {\n this.sendToInstance({cmd: 'out'});\n }\n\n onRestart() {\n this.setState({started: false, starting: true}, () =>\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src}));\n }\n\n onToggleException() {\n const stopOnException = !this.state.stopOnException;\n window.localStorage.setItem('javascript.tools.stopOnException', stopOnException ? 'true' : 'false');\n this.setState({stopOnException}, () =>\n this.sendToInstance({cmd: 'stopOnException', state: stopOnException}));\n }\n\n renderToolbar() {\n const disabled = !this.state.started;\n return (\n <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n <IconButton\n className={this.props.classes.buttonRestart}\n disabled={disabled}\n onClick={() => this.onRestart()}\n title={I18n.t('Restart')}\n size=\"medium\"><IconRestart/></IconButton>\n {\n !this.state.finished && this.state.paused ?\n <IconButton\n className={this.props.classes.buttonRun}\n disabled={disabled}\n onClick={() => this.onResume()}\n title={I18n.t('Resume execution')}\n size=\"medium\"><IconRun/></IconButton>\n :\n !this.state.finished && <IconButton\n disabled={disabled}\n className={this.props.classes.buttonPause}\n onClick={() => this.onPause()}\n title={I18n.t('Pause execution')}\n size=\"medium\"><IconPause/></IconButton>\n }\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonNext}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onNext()}\n title={I18n.t('Go to next line')}\n size=\"medium\"><IconNext/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonStep}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepIn()}\n title={I18n.t('Step into function')}\n size=\"medium\"><IconStep/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonOut}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepOut()}\n title={I18n.t('Step out from function')}\n size=\"medium\"><IconOut/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonException}\n color={this.state.stopOnException ? 'primary' : 'default'}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onToggleException()}\n title={I18n.t('Stop on exception')}\n size=\"medium\"><IconException/></IconButton>}\n {this.renderTabs()}\n </Toolbar>\n );\n }\n\n getPossibleBreakpoints(bp) {\n const end = {...bp, columnNumber: 1000};\n this.sendToInstance({cmd: 'getPossibleBreakpoints', start: bp, end});\n }\n\n toggleBreakpoint(lineNumber) {\n let bp = this.state.breakpoints.find(item => item.location.scriptId === this.state.selected && item.location.lineNumber === lineNumber);\n if (bp) {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n this.setState({breakpoints}, () =>\n this.sendToInstance({breakpoints: [bp.id], cmd: 'cb'}));\n } else {\n bp = {scriptId: this.state.selected, lineNumber, columnNumber: 0};\n this.getPossibleBreakpoints(bp);\n }\n }\n\n renderCode() {\n if (this.state.script && this.state.started) {\n const breakpoints = this.state.breakpoints.filter(bp => bp.location.scriptId === this.state.selected);\n\n return <Editor\n runningInstances={this.props.runningInstances}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n scriptName={this.state.tabs[this.state.selected]}\n sourceId={this.state.selected}\n script={this.state.script}\n paused={this.state.paused}\n breakpoints={breakpoints}\n location={this.state.location}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n onToggleBreakpoint={i => this.toggleBreakpoint(i)}\n />\n }\n }\n\n renderFrames() {\n if (!this.state.paused) {\n return null;\n }\n\n return <Stack\n currentScriptId={this.state.selected}\n scopes={this.state.scopes}\n expressions={this.state.expressions}\n themeType={this.props.themeType}\n callFrames={this.state.context?.callFrames}\n currentFrame={this.state.currentFrame}\n onChangeCurrentFrame={i => {\n this.setState({currentFrame: i, scopes: {}}, () => {\n this.readCurrentScope();\n this.readExpressions();\n })\n }}\n onWriteScopeValue={obj => {\n this.sendToInstance({\n cmd: 'setValue',\n variableName: obj.variableName,\n scopeNumber: obj.scopeNumber,\n newValue: obj.newValue,\n callFrameId: obj.callFrameId\n });\n }}\n onExpressionDelete={i => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.splice(i, 1);\n this.setState({expressions});\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n onExpressionAdd={cb => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.push({name: '', value: {value: ''}});\n this.setState({expressions}, () => cb && cb(expressions.length - 1, this.state.expressions[expressions.length - 1]));\n }}\n onExpressionNameUpdate={(i, name, cb) => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n if (!name) {\n expressions.splice(i, 1);\n } else if (expressions.find(item => item.name === name)) {\n return cb && cb(false);\n } else {\n expressions[i].name = name;\n }\n\n this.setState({expressions}, () => {\n name && this.readExpressions(i);\n cb && cb();\n });\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n />;\n }\n\n renderConsole() {\n return <Console\n theme={this.props.theme}\n console={this.state.console}\n onClearAllLogs={() => this.setState({console: [], logErrors: 0, logWarning: 0, logs: 0})}\n />;\n }\n\n renderTools() {\n const disabled = !this.state.tabs || !this.state.started;\n\n let _console;\n if (this.state.logErrors) {\n _console = <Badge badgeContent={this.state.logErrors} color=\"error\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logWarnings) {\n _console = <Badge badgeContent={this.state.logWarnings} color=\"secondary\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logs) {\n _console = <Badge badgeContent={this.state.logs} color=\"default\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else {\n _console = I18n.t('Console');\n }\n\n return <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n <Tabs\n classes={{root: this.props.classes.tabsRoot}}\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: '100%' }}\n value={this.state.toolsTab}\n onChange={(event, value) => {\n const newState = {toolsTab: value};\n\n // load logs from buffer\n if (this.console && value === 'console') {\n newState.console = this.console;\n this.console = null;\n newState.logs = 0;\n newState.logWarnings = 0;\n newState.logErrors = 0;\n }\n\n window.localStorage.setItem('javascript.tools.tab', value);\n\n this.setState(newState);\n }}\n scrollButtons=\"auto\"\n >\n <Tab classes={{root: this.props.classes.tabRoot}} disabled={disabled} label={I18n.t('Stack')} value=\"stack\"/>\n <Tab\n classes={{root: this.props.classes.tabRoot}}\n disabled={disabled}\n label={_console}\n value=\"console\"\n />\n </Tabs>\n <div style={{width: '100%', height: 'calc(100% - 36px)', overflow: 'hidden'}}>\n {this.state.toolsTab === 'stack' && !disabled ? this.renderFrames() : null}\n {this.state.toolsTab === 'console' && !disabled ? this.renderConsole() : null}\n </div>\n </div>;\n }\n\n render() {\n return <div key=\"debugger\" style={this.props.style} className={clsx(this.props.classes.root, this.props.className)}>\n {this.state.starting ? <LinearProgress/> : null}\n {this.renderToolbar()}\n <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryMinSize={100}\n vertical={true}\n secondaryInitialSize={this.toolSize}\n onSecondaryPaneSizeChange={size => this.toolSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.toolSize', this.toolSize.toString())}\n //style={{width: '100%', height: 'calc(100% - 73px)', overflow: 'hidden'}}\n >\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderCode()}\n {this.renderQueryBreakpoints()}\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderTools()}\n </div>\n </SplitterLayout>\n {this.renderError()}\n </div>;\n }\n}\n\nDebugger.propTypes = {\n runningInstances: PropTypes.object,\n adapterName: PropTypes.string,\n src: PropTypes.string,\n socket: PropTypes.object.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n themeType: PropTypes.string,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n debugInstance: PropTypes.object,\n};\n\nexport default withStyles(styles)(Debugger);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Tour from 'reactour';\n\nimport Toolbar from '@mui/material/Toolbar';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Badge from '@mui/material/Badge';\nimport Snackbar from '@mui/material/Snackbar';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { red, green } from '@mui/material/colors';\n\nimport { MdSave as IconSave } from 'react-icons/md';\nimport { MdCancel as IconCancel } from 'react-icons/md';\nimport { MdClose as IconClose } from 'react-icons/md';\nimport { MdRefresh as IconRestart } from 'react-icons/md';\nimport { MdInput as IconDoEdit } from 'react-icons/md';\nimport { FaClock as IconCron } from 'react-icons/fa';\nimport { FaClipboardList as IconSelectId } from 'react-icons/fa';\nimport { FaFileExport as IconExport } from 'react-icons/fa';\nimport { FaFileImport as IconImport } from 'react-icons/fa';\nimport { FaFlagCheckered as IconCheck } from 'react-icons/fa';\nimport { MdGpsFixed as IconLocate } from 'react-icons/md';\nimport { MdClearAll as IconCloseAll } from 'react-icons/md';\nimport { MdBuild as IconDebugMenu } from 'react-icons/md';\nimport { MdBugReport as IconDebug } from 'react-icons/md';\nimport { MdPlaylistAddCheck as IconVerbose } from 'react-icons/md';\nimport { MdBugReport as IconDebugMode } from 'react-icons/md';\nimport { MdPlayArrow as IconPlay } from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgBlockly2Js from './assets/blockly2js.png';\nimport ImgRules2Js from './assets/rules2js.png';\nimport ImgRules from './assets/rules.png';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogCron from '@iobroker/adapter-react-v5/Dialogs/Cron';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\n\nimport ScriptEditorComponent from './Components/ScriptEditorVanilaMonaco';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport DialogScriptEditor from './Dialogs/ScriptEditor';\nimport RulesEditor from './Components/RulesEditor';\nimport Debugger from './Components/Debugger';\nimport steps, { STEPS } from './Components/RulesEditor/helpers/Tour';\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n 'Rules': ImgRules,\n def: ImgJS,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_DEBUG = '#02a102';\nconst COLOR_VERBOSE = '#70aae9';\nconst COLOR_RUN = green[400];\nconst COLOR_PAUSE = red[400];\n\nconst styles = theme => ({\n\n toolbar: {\n minHeight: 38,//Theme.toolbar.height,\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)'\n },\n toolbarButtons: {\n padding: 4,\n marginLeft: 4\n },\n toolbarButtonsDisabled: {\n filter: 'grayscale(100%)',\n opacity: 0.5,\n },\n editorDiv: {\n height: `calc(100% - ${theme.toolbar.height + 38/*Theme.toolbar.height */ + 5}px)`,\n width: '100%',\n overflow: 'hidden',\n position: 'relative'\n },\n textButton: {\n marginRight: 10,\n minHeight: 24,\n padding: '6px 16px'\n },\n saveButton: {\n background: '#ff9900'\n },\n textIcon: {\n marginLeft: theme.spacing(1),\n },\n tabIcon: {\n width: 24,\n height: 24,\n verticalAlign: 'middle',\n marginBottom: 2,\n marginRight: 2,\n borderRadius: 3\n },\n hintIcon: {\n //fontSize: 32,\n padding: '0 8px 0 8px'\n },\n hintText: {\n //fontSize: 18\n },\n hintButton: {\n marginTop: 8,\n marginLeft: 20\n },\n tabMenuButton: {\n position: 'absolute',\n top: 0,\n right: 0,\n },\n tabChanged: {\n color: theme.palette.secondary.main\n },\n tabText: {\n maxWidth: 130,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n tabChangedIcon: {\n color: '#FF0000',\n fontSize: 16\n },\n closeButton: {\n position: 'absolute',\n top: 0,\n right: -5,\n zIndex: 10,\n padding: 8,\n cursor: 'pointer'\n },\n closeButtonIcon: {\n background: theme.palette.mode === 'dark' ? '#000' : '#FFF',\n borderRadius: '50%',\n opacity: 0.7,\n },\n notRunning: {\n color: '#ffbc00',\n marginRight: theme.spacing(1),\n marginLeft: theme.spacing(1),\n },\n tabButton: {\n minHeight: 48,\n },\n tabButtonWrapper: {\n display: 'inline-block',\n },\n menuIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginRight: 5\n },\n});\n\nclass Editor extends React.Component {\n constructor(props) {\n super(props);\n\n const selected = window.localStorage.getItem('Editor.selected') || '';\n let editing = window.localStorage.getItem('Editor.editing') || '[]';\n try {\n editing = JSON.parse(editing);\n } catch (e) {\n editing = [];\n }\n if (selected && editing.indexOf(selected) === -1) {\n editing.push(selected);\n }\n\n this.tabsRef = React.createRef();\n\n this.state = {\n selected: selected,\n editing: editing, // array of opened scripts\n changed: {}, // for every script\n blockly: null,\n rules: null,\n debugEnabled: false,\n verboseEnabled: false,\n showCompiledCode: false,\n showSelectId: false,\n showCron: false,\n showScript: false,\n insert: '',\n searchText: '',\n themeType: this.props.themeType,\n visible: props.visible,\n cmdToBlockly: '',\n cmdToRules: '',\n menuOpened: !!this.props.menuOpened,\n menuTabsOpened: false,\n menuTabsAnchorEl: null,\n runningInstances: this.props.runningInstances || {},\n showDebugMenu: false,\n toast: '',\n instancesLoaded: false,\n isTourOpen: window.localStorage.getItem('tour') !== 'true',\n tourStep: STEPS.selectTriggers,\n showAdapterDebug: false,\n };\n\n this.setChangedInAdmin();\n\n /* ----------------------- */\n // required by selectIdDialog in Blockly\n this.selectId = {\n initValue: null,\n callback: null\n };\n this.cron = {\n initValue: null,\n callback: null\n };\n this.scriptDialog = {\n initValue: null,\n callback: null,\n args: null,\n isReturn: false\n };\n\n window.systemLang = I18n.getLanguage();\n window.main = {\n objects: {},\n getObject: (id, cb) => this.props.socket.getObject(id).then(obj => cb && cb(null, obj)).catch(err => cb && cb(err)),\n instances: [],\n selectIdDialog: (initValue, type, cb) => {\n if (typeof type === 'function') {\n cb = type;\n type = null;\n }\n this.selectId.callback = cb;\n this.selectId.initValue = initValue;\n this.selectId.type = type;\n this.setState({ showSelectId: true });\n },\n cronDialog: (initValue, cb) => {\n this.cron.callback = cb;\n this.cron.initValue = initValue;\n this.setState({ showCron: true });\n },\n showScriptDialog: (value, args, isReturn, cb) => {\n this.scriptDialog.callback = cb;\n this.scriptDialog.initValue = value;\n this.scriptDialog.args = args;\n this.scriptDialog.isReturn = isReturn || false;\n this.setState({ showScript: true });\n }\n };\n\n this.objects = props.objects;\n /* ----------------------- */\n\n this.scripts = {};\n\n if (!this.state.selected && this.state.editing.length) {\n this.state.selected = this.state.editing[0];\n }\n\n this.getAllAdapterInstances()\n .then(() => {\n // to enable logging\n if (this.props.onSelectedChange && this.state.selected) {\n setTimeout(() => this.props.onSelectedChange(this.state.selected, this.state.editing), 100);\n }\n });\n }\n\n getAllAdapterInstances() {\n return this.props.socket.getAdapterInstances(true)\n .then(instanceObjects => {\n const objects = {};\n const instances = instanceObjects.map(obj => {\n objects[obj._id] = obj;\n return obj._id;\n });\n window.main.objects = objects;\n window.main.instances = instances;\n this.setState({ instancesLoaded: true });\n });\n }\n\n onInstanceChanged = (id, obj) => {\n if (!id) {\n return;\n }\n\n if (!obj && window.main.instances.includes[id]) {\n delete window.main.objects[id];\n const pos = window.main.instances.indexOf(id);\n window.main.instances.splice(pos, 1);\n } else\n if (obj && obj.type === 'instance') {\n // update instances\n if (!window.main.instances.includes(id)) {\n window.main.instances.push(id);\n window.main.instances.sort();\n }\n window.main.objects[id] = obj;\n }\n };\n\n setChangedInAdmin() {\n const isChanged = Object.keys(this.state.changed).find(id => this.state.changed[id]);\n\n if (typeof window.parent !== 'undefined' && window.parent) {\n window.parent.configNotSaved = !!isChanged;\n }\n }\n\n componentDidMount() {\n window.addEventListener('beforeunload', this.onBrowserClose, false);\n this.props.socket.subscribeObject('system.adapter.*', this.onInstanceChanged);\n }\n\n componentWillUnmount() {\n window.removeEventListener('beforeunload', this.onBrowserClose);\n this.props.socket.unsubscribeObject('system.adapter.*', this.onInstanceChanged);\n }\n\n onBrowserClose = e => {\n const isChanged = Object.keys(this.scripts).find(id =>\n JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common));\n\n if (!!isChanged) {\n console.log('Script ' + JSON.stringify(this.scripts[isChanged]));\n const message = I18n.t('Configuration not saved.');\n e = e || window.event;\n // For IE and Firefox\n if (e) {\n e.returnValue = message;\n }\n\n // For Safari\n return message;\n }\n };\n\n removeNonExistingScripts(nextProps, newState) {\n nextProps = nextProps || this.props;\n newState = newState || {};\n\n let _changed = false;\n if (this.state.editing) {\n const isAnyNonExists = this.state.editing.find(id => !nextProps.objects[id]);\n\n if (isAnyNonExists) {\n // remove non-existing scripts\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n for (let i = editing.length - 1; i >= 0; i--) {\n if (!this.objects[editing[i]]) {\n _changed = true;\n editing.splice(i, 1);\n }\n }\n if (_changed) {\n newState.editing = editing;\n }\n if (this.state.selected && !this.objects[this.state.selected]) {\n _changed = true;\n newState.selected = editing[0] || '';\n if (this.scripts[newState.selected]) {\n if (this.state.blockly !== (this.scripts[newState.selected].engineType === 'Blockly')) {\n newState.blockly = this.scripts[newState.selected].engineType === 'Blockly';\n _changed = true;\n }\n if (this.state.rules !== (this.scripts[newState.selected].engineType === 'Rules')) {\n newState.rules = this.scripts[newState.selected].engineType === 'Rules';\n _changed = true;\n }\n if (this.state.verboseEnabled !== this.scripts[newState.selected].verbose) {\n newState.verboseEnabled = this.scripts[newState.selected].verbose;\n _changed = true;\n }\n if (this.state.debugEnabled !== this.scripts[newState.selected].debug) {\n newState.debugEnabled = this.scripts[newState.selected].debug;\n _changed = true;\n }\n }\n }\n }\n }\n return _changed;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const newState = {};\n let _changed = false;\n\n if (JSON.stringify(nextProps.runningInstances) !== JSON.stringify(this.state.runningInstances)) {\n _changed = true;\n newState.runningInstances = nextProps.runningInstances;\n }\n\n if (this.state.menuOpened !== nextProps.menuOpened) {\n newState.menuOpened = nextProps.menuOpened;\n _changed = true;\n }\n\n if (this.state.themeType !== nextProps.themeType) {\n newState.themeType = nextProps.themeType;\n _changed = true;\n }\n\n // check if all opened files still exists\n if (this.removeNonExistingScripts(nextProps, newState)) {\n _changed = true;\n }\n\n // update search text\n if (this.state.searchText !== nextProps.searchText) {\n newState.searchText = nextProps.searchText;\n _changed = true;\n }\n\n // if objects read\n if (this.objects !== nextProps.objects) {\n this.objects = nextProps.objects;\n window.main.objects = nextProps.objects;\n\n // update all scripts\n Object.keys(this.scripts).forEach(id => {\n const source = this.scripts[id].source;\n this.scripts[id] = JSON.parse(JSON.stringify(this.objects[id].common));\n this.scripts[id].source = source;\n });\n\n // if script is blockly\n if (this.state.selected && this.objects[this.state.selected]) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.objects[this.state.selected].common));\n if (this.state.blockly !== (this.scripts[this.state.selected].engineType === 'Blockly')) {\n newState.blockly = this.scripts[this.state.selected].engineType === 'Blockly';\n _changed = true;\n }\n if (this.state.rules !== (this.scripts[this.state.selected].engineType === 'Rules')) {\n newState.rules = this.scripts[this.state.selected].engineType === 'Rules';\n _changed = true;\n }\n if (this.state.verboseEnabled !== this.scripts[this.state.selected].verbose) {\n newState.verboseEnabled = this.scripts[this.state.selected].verbose;\n _changed = true;\n }\n if (this.state.debugEnabled !== this.scripts[this.state.selected].debug) {\n newState.debugEnabled = this.scripts[this.state.selected].debug;\n _changed = true;\n }\n }\n\n // remove non-existing scripts\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n for (let i = editing.length - 1; i >= 0; i--) {\n if (!this.objects[editing[i]]) {\n _changed = true;\n editing.splice(i, 1);\n if (this.state.changed[editing[i]] !== undefined) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n delete newState.changed[editing[i]];\n }\n }\n }\n if (this.state.selected && !this.objects[this.state.selected]) {\n newState.selected = editing[0] || '';\n }\n if (_changed) {\n newState.editing = editing;\n }\n } else {\n // update all scripts\n for (const id in this.scripts) {\n if (!this.scripts.hasOwnProperty(id)) continue;\n if (this.objects[id] && this.objects[id].common) {\n const oldSource = this.scripts[id].source;\n const commonLocal = JSON.parse(JSON.stringify(this.scripts[id]));\n commonLocal.source = this.objects[id].common.source;\n // if anything except source was changed\n if (JSON.stringify(commonLocal) !== JSON.stringify(this.objects[id].common)) {\n this.scripts[id] = JSON.parse(JSON.stringify(this.objects[id].common));\n this.scripts[id].source = oldSource;\n }\n\n if (oldSource !== this.objects[id].common.source) {\n // take new script if it not yet changed\n if (!this.state.changed[id]) {\n // just use new value\n this.scripts[id].source = this.objects[id].common.source;\n } else {\n if (this.objects[id].from && this.objects[id].from.startsWith('system.adapter.javascript.')) {\n this.objects[id].from = 'system.adapter.admin.0';\n // show that script was changed from outside\n this.setState({ toast: I18n.t('Script %s was modified on disk.', id.split('.').pop()) });\n }\n }\n } else {\n if (this.state.changed[id]) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[id] = false;\n _changed = true;\n }\n }\n } else {\n delete this.scripts[id];\n if (this.state.selected === id) {\n if (this.state.editing.indexOf(id) !== -1) {\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n const pos = editing.indexOf(id);\n if (pos !== -1) {\n editing.splice(pos, 1);\n newState.editing = editing;\n _changed = true;\n }\n }\n newState.selected = this.state.editing[0] || '';\n _changed = true;\n }\n }\n }\n }\n\n if (this.state.selected !== nextProps.selected && nextProps.selected) {\n if (nextProps.selected) {\n this.scripts[nextProps.selected] = this.scripts[nextProps.selected] || JSON.parse(JSON.stringify(this.props.objects[nextProps.selected].common));\n }\n\n const nextCommon = this.props.objects[nextProps.selected] && this.props.objects[nextProps.selected].common;\n\n const changed = nextCommon && JSON.stringify(this.scripts[nextProps.selected]) !== JSON.stringify(nextCommon);\n\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n if (nextProps.selected && editing.indexOf(nextProps.selected) === -1) {\n editing.push(nextProps.selected);\n this.props.onSelectedChange(nextProps.selected, editing);\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n }\n\n _changed = true;\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[nextProps.selected] = changed;\n newState.editing = editing;\n newState.selected = nextProps.selected;\n newState.blockly = this.scripts[nextProps.selected].engineType === 'Blockly';\n newState.rules = this.scripts[nextProps.selected].engineType === 'Rules';\n newState.verboseEnabled = this.scripts[nextProps.selected].verbose;\n newState.debugEnabled = this.scripts[nextProps.selected].debug;\n newState.showCompiledCode = false;\n } else {\n\n }\n\n if (this.state.visible !== nextProps.visible) {\n _changed = true;\n newState.visible = nextProps.visible;\n }\n\n _changed && this.setState(newState, () => this.setChangedInAdmin());\n }\n\n onRestart() {\n this.props.onRestart && this.props.onRestart(this.state.selected);\n }\n\n onStartStop() {\n const common = JSON.parse(JSON.stringify(this.scripts[this.state.selected]));\n common.enabled = !common.enabled;\n this.props.onChange && this.props.onChange(this.state.selected, common);\n }\n\n onSave() {\n if (this.state.isTourOpen && this.state.tourStep === STEPS.saveTheScript) {\n this.setState({ isTourOpen: false });\n window.localStorage.setItem('tour', 'true');\n }\n\n if (this.state.changed[this.state.selected]) {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = false;\n this.setState({ changed }, () => {\n this.setChangedInAdmin();\n this.props.onChange && this.props.onChange(this.state.selected, this.scripts[this.state.selected]);\n });\n }\n }\n\n onSaveAll() {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n Object.keys(changed)\n .forEach(id => {\n if (changed[id]) {\n changed[id] = false;\n this.props.onChange && this.props.onChange(id, this.scripts[id]);\n }\n });\n\n this.setState({ changed }, () =>\n this.setChangedInAdmin());\n }\n\n onCancel() {\n this.scripts[this.state.selected] = JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = false;\n\n this.setState({ changed }, () => this.setChangedInAdmin());\n }\n\n onRegisterSelect(func) {\n this.getSelect = func;\n }\n\n onConvertBlockly2JS() {\n this.showConfirmDialog(I18n.t('It will not be possible to revert this operation.'), result => {\n if (result) {\n this.scripts[this.state.selected].engineType = 'Javascript/js';\n let source = this.scripts[this.state.selected].source;\n const lines = source.split('\\n');\n lines.pop();\n this.scripts[this.state.selected].source = lines.join('\\n');\n const nowSelected = this.state.selected;\n\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = true;\n\n this.setState({ changed, blockly: false, selected: '' }, () => {\n this.setChangedInAdmin();\n // force update of the editor\n setTimeout(() => this.setState({ selected: nowSelected }), 100);\n });\n }\n });\n }\n\n onChange(options) {\n options = options || {};\n if (options.script !== undefined) {\n this.scripts[this.state.selected].source = options.script;\n }\n if (options.debug !== undefined) {\n this.scripts[this.state.selected].debug = options.debug;\n }\n if (options.verbose !== undefined) {\n this.scripts[this.state.selected].verbose = options.verbose;\n }\n const _changed = JSON.stringify(this.scripts[this.state.selected]) !== JSON.stringify(this.props.objects[this.state.selected].common);\n if (_changed !== (this.state.changed[this.state.selected] || false)) {\n const changed = JSON.parse(JSON.stringify(this.state.changed));\n changed[this.state.selected] = _changed;\n this.objects[this.state.selected].from = 'system.adapter.admin.0';\n this.setState({ changed }, () => this.setChangedInAdmin());\n\n }\n }\n\n onTabChange(event, selected) {\n if (this.props.debugMode) {\n return;\n }\n window.localStorage && window.localStorage.setItem('Editor.selected', selected);\n const common = this.scripts[selected] || (this.props.objects[selected] && this.props.objects[selected].common);\n this.setState({\n selected,\n rules: common.engineType === 'Rules',\n blockly: common.engineType === 'Blockly',\n showCompiledCode: false,\n verboseEnabled: common.verbose,\n debugEnabled: common.debug\n });\n this.props.onSelectedChange && this.props.onSelectedChange(selected, this.state.editing);\n }\n\n isScriptChanged(id) {\n return this.scripts[id] && this.props.objects[id] && JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common);\n }\n\n onTabClose(id, e) {\n e && e.stopPropagation();\n\n const pos = this.state.editing.indexOf(id);\n if (this.state.editing.includes(id)) {\n if (this.isScriptChanged(id)) {\n this.showConfirmDialog(I18n.t('Discard changes for %s', this.props.objects[id].common.name), ok => {\n if (ok) {\n delete this.scripts[id];\n this.onTabClose(id);\n }\n });\n } else {\n const editing = JSON.parse(JSON.stringify(this.state.editing));\n editing.splice(pos, 1);\n const newState = { editing };\n if (id === this.state.selected) {\n if (editing.length) {\n if (pos === 0 || editing.length === 1) {\n newState.selected = editing[0];\n } else {\n newState.selected = editing[pos - 1];\n }\n } else {\n newState.selected = '';\n }\n } else if (this.state.selected && !editing.length) {\n newState.selected = '';\n }\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n if (newState.selected !== undefined) {\n newState.changed = newState.changed || JSON.parse(JSON.stringify(this.state.changed));\n newState.changed[newState.selected] = this.isScriptChanged(newState.selected);\n const common = newState.selected && (this.scripts[newState.selected] || (this.props.objects[newState.selected] && this.props.objects[newState.selected].common));\n newState.blockly = common ? common.engineType === 'Blockly' : false;\n newState.rules = common ? common.engineType === 'Rules' : false;\n newState.verboseEnabled = common ? common.verbose : false;\n newState.debugEnabled = common ? common.debug : false;\n newState.showCompiledCode = false;\n }\n\n this.setState(newState, () => {\n this.setChangedInAdmin();\n\n if (newState.selected !== undefined) {\n this.props.onSelectedChange && this.props.onSelectedChange(newState.selected, this.state.editing);\n window.localStorage && window.localStorage.setItem('Editor.selected', newState.selected);\n } else {\n this.props.onSelectedChange && this.props.onSelectedChange(this.state.selected, this.state.editing);\n }\n });\n }\n }\n }\n\n showConfirmDialog(question, cb) {\n this.confirmCallback = cb;\n this.setState({ confirm: question });\n }\n\n sendCommandToBlockly(cmd) {\n this.setState({ cmdToBlockly: cmd }, () =>\n setTimeout(() =>\n this.setState({ cmdToBlockly: '' }), 200));\n }\n\n sendCommandToRules(cmd) {\n this.setState({ cmdToRules: cmd }, () =>\n setTimeout(() =>\n this.setState({ cmdToRules: '' }), 200));\n }\n\n static getText(text) {\n if (typeof text === 'object') {\n return text[I18n.getLanguage()] || text.en;\n }\n return text;\n }\n\n getScriptFullName(id) {\n const parts = id.split('.');\n parts.shift(); // remove \"script.\"\n parts.shift(); // remove \"js.\"\n const result = [];\n let _id = 'script.js';\n for (let i = 0; i < parts.length; i++) {\n _id += '.' + parts[i];\n if (this.props.objects[_id] && this.props.objects[_id].common) {\n result.push(Editor.getText(this.props.objects[_id].common.name));\n } else {\n result.push(parts[i]);\n }\n }\n return `/ ${result.join(' / ')}`;\n }\n\n getTabs() {\n if (this.state.editing.length) {\n return [<Tabs\n component={'div'}\n key=\"tabs1\"\n value={this.props.debugInstance ? this.props.debugInstance.adapter : this.state.selected}\n onChange={(event, value) => this.onTabChange(event, value)}\n indicatorColor=\"primary\"\n style={{ position: 'relative', marginLeft: 10, width: this.state.editing.length > 1 ? 'calc(100% - 50px)' : '100%', display: 'inline-block' }}\n textColor=\"primary\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {this.state.editing.map(id => {\n if (!this.props.objects[id]) {\n const label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{id.split('.').pop()}</div>,\n <span key=\"icon\" className={this.props.classes.closeButton}>\n <IconClose className={this.props.classes.closeButtonIcon} onClick={e => this.onTabClose(id, e)} fontSize=\"small\" />\n </span>];\n return <Tab\n wrapped\n component={'div'}\n href={'#' + id}\n key={id}\n label={label}\n value={id}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n />;\n } else {\n let text = Editor.getText(this.props.objects[id].common.name) || '';\n let title = this.getScriptFullName(id);\n if (text.length > 18) {\n text = text.substring(0, 15) + '...';\n }\n const changed = this.props.objects[id].common && this.scripts[id] && this.props.objects[id].common.source !== this.scripts[id].source;\n const label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{text}</div>,\n changed ? <span key=\"changedSign\" className={this.props.classes.tabChangedIcon}>▣</span> : null,\n (!this.props.debugInstance && (!this.props.debugMode || this.state.selected !== id)) &&\n <span key=\"close\" className={this.props.classes.closeButton}>\n <IconClose className={this.props.classes.closeButtonIcon} onClick={e => this.onTabClose(id, e)} fontSize=\"small\" />\n </span>,\n ];\n\n return <Tab\n disabled={this.props.debugInstance || (this.state.selected !== id && this.props.debugMode)}\n wrapped\n component={'div'}\n iconPosition=\"start\"\n icon={<img key=\"icon\" alt=\"\" src={images[this.props.objects[id].common.engineType] || images.def} className={this.props.classes.tabIcon} />}\n href={'#' + id}\n key={id}\n label={label}\n className={this.props.classes.tabButton}\n value={id}\n title={title}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n />;\n }\n })}\n {this.props.debugInstance ? <Tab\n disabled={false}\n wrapped\n component={'div'}\n href={'#' + this.props.debugInstance.adapter}\n key={this.props.debugInstance.adapter}\n label={this.props.debugInstance.adapter}\n className={this.props.classes.tabButton}\n value={this.props.debugInstance.adapter}\n title={this.props.debugInstance.adapter}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n /> : ''}\n </Tabs>,\n this.state.editing.length > 1 ? <IconButton\n key=\"menuButton\"\n href=\"#\"\n aria-label=\"Close all but current\"\n className={this.props.classes.tabMenuButton}\n title={I18n.t('Close all but current')}\n aria-haspopup=\"false\"\n onClick={_event => {\n const editing = [this.state.selected];\n // Do not close not saved tabs\n Object.keys(this.scripts).forEach(id =>\n id !== this.state.selected &&\n JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common) &&\n editing.push(id)\n );\n\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n this.setState({ menuTabsOpened: false, menuTabsAnchorEl: null, editing: editing });\n }}\n size=\"medium\">\n <IconCloseAll />\n </IconButton> : null\n ];\n } else {\n return <div key=\"tabs2\" className={this.props.classes.toolbar}>\n <Button color=\"grey\" key=\"select1\" disabled={true} className={this.props.classes.hintButton} href=\"\">\n <span key=\"select2\">{I18n.t('Click on this icon')}</span>\n <IconDoEdit key=\"select3\" className={this.props.classes.hintIcon} />\n <span key=\"select4\">{I18n.t('for edit or create script')}</span>\n </Button>\n </div>;\n }\n }\n\n getDebugMenu() {\n if (!this.state.showDebugMenu) {\n return null;\n }\n\n return <Menu\n key=\"menuDebug\"\n id=\"menu-debug\"\n anchorEl={this.state.menuDebugAnchorEl}\n open={this.state.showDebugMenu}\n onClose={() => this.setState({ showDebugMenu: false, menuDebugAnchorEl: null })}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n },\n }}\n >\n <MenuItem key=\"debugEnabled\"\n title={I18n.t('debug_help')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ showDebugMenu: false, menuDebugAnchorEl: null, debugEnabled: !this.state.debugEnabled }, () => this.onChange({ debug: this.state.debugEnabled }));\n }}>\n <Checkbox checked={this.state.debugEnabled} />\n <IconDebug className={this.props.classes.menuIcon} style={{ color: COLOR_DEBUG }} />\n {I18n.t('debug_label')}\n </MenuItem>\n <MenuItem key=\"verboseEnabled\"\n title={I18n.t('verbose_help')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ showDebugMenu: false, menuDebugAnchorEl: null, verboseEnabled: !this.state.verboseEnabled }, () => this.onChange({ verbose: this.state.verboseEnabled }));\n }}>\n <Checkbox checked={this.state.verboseEnabled} />\n <IconVerbose className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />\n {I18n.t('verbose_label')}\n </MenuItem>\n </Menu>;\n }\n\n getDebugBadge() {\n return [\n this.state.debugEnabled && this.state.verboseEnabled && <IconDebug key=\"DebugVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />,\n this.state.debugEnabled && !this.state.verboseEnabled && <IconDebug key=\"DebugNoVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_DEBUG }} />,\n !this.state.debugEnabled && this.state.verboseEnabled && <IconVerbose key=\"noDebugVerbose\" className={this.props.classes.menuIcon} style={{ color: COLOR_VERBOSE }} />,\n ]\n }\n\n getAskAboutDebug() {\n if (this.state.askAboutDebug) {\n return <DialogConfirm\n onClose={() => {\n this.setState({ askAboutDebug: false }, () =>\n this.props.onDebugModeChange(true));\n }}\n ok={I18n.t('Yes')}\n cancel={I18n.t('Cancel')}\n text={I18n.t('The script will be stopped and must be activated manually after debugging. Continue?')}\n />;\n } else {\n return null;\n }\n }\n\n getToolbar() {\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n const isScriptRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].enabled;\n\n if (this.state.selected) {\n const changedAll = Object.keys(this.state.changed).filter(id => this.state.changed[id]).length;\n const changed = this.state.changed[this.state.selected];\n return (\n <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n {!this.props.debugInstance && this.state.menuOpened && this.props.onLocate && <IconButton\n className={this.props.classes.toolbarButtons}\n key=\"locate\"\n title={I18n.t('Locate file')}\n onClick={() => this.props.onLocate(this.state.selected)}\n size=\"medium\"\n >\n <IconLocate />\n </IconButton>}\n {!this.props.debugInstance && !changed && isInstanceRunning && <IconButton\n key=\"restart\"\n disabled={this.props.debugMode}\n variant=\"contained\"\n className={this.props.classes.toolbarButtons}\n onClick={() => this.onRestart()}\n title={I18n.t('Restart')}\n size=\"medium\"\n >\n <IconRestart />\n </IconButton>}\n {!this.props.debugInstance && !changed && <IconButton\n key=\"start-stop\"\n disabled={this.props.debugMode}\n variant=\"contained\"\n className={this.props.classes.toolbarButtons}\n onClick={() => this.onStartStop()}\n title={isScriptRunning ? I18n.t('Pause script') : I18n.t('Run script')}\n size=\"medium\"\n style={{ color: isScriptRunning ? COLOR_RUN : COLOR_PAUSE }}\n >\n {isScriptRunning ? <IconPause /> : <IconPlay />}\n </IconButton>}\n {!this.props.debugInstance && !changed && !isScriptRunning && <span className={this.props.classes.notRunning}>{I18n.t('Script is not running')}</span>}\n {!changed && isScriptRunning && !isInstanceRunning && <span className={this.props.classes.notRunning}>{I18n.t('Instance is disabled')}</span>}\n {changed && <Button color=\"grey\" key=\"save\" variant=\"contained\" className={clsx(this.props.classes.textButton, this.props.classes.saveButton, 'button-save')} onClick={() => this.onSave()}>{I18n.t('Save')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {(changedAll > 1 || (changedAll === 1 && !changed)) && <Button color=\"grey\" key=\"saveall\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onSaveAll()}>{I18n.t('Save all')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {changed && <Button color=\"grey\" key=\"cancel\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onCancel()}>{I18n.t('Cancel')}<IconCancel className={this.props.classes.textIcon} /></Button>}\n <div style={{ flex: 2 }} />\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"export\"\n aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('export')}\n size=\"medium\"\n >\n <IconExport />\n </IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"import\"\n aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('import')}\n size=\"medium\"\n >\n <IconImport />\n </IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"check\"\n aria-label=\"Check code\"\n title={I18n.t('Check blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('check')}\n size=\"medium\"\n >\n <IconCheck />\n </IconButton>}\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton\n key=\"select-cron\"\n aria-label=\"create CRON\"\n title={I18n.t('Create or edit CRON or time wizard')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.setState({ showCron: true })}\n size=\"medium\"\n >\n <IconCron />\n </IconButton>}\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton\n key=\"select-id\"\n aria-label=\"select ID\"\n title={I18n.t('Insert object ID')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.setState({ showSelectId: true })}\n size=\"medium\"\n >\n <IconSelectId />\n </IconButton>}\n\n {this.state.blockly && !this.state.rules && this.state.showCompiledCode && <Button color=\"grey\" key=\"convert2js\" aria-label=\"convert to javascript\"\n title={I18n.t('Convert blockly to javascript for ever.')}\n onClick={() => this.onConvertBlockly2JS()}\n >Blockly=>JS</Button>}\n {this.state.rules && !this.state.showCompiledCode &&\n <IconButton\n key=\"export\"\n aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('export')}\n size=\"medium\"\n >\n <IconExport />\n </IconButton>}\n {this.state.rules && !this.state.showCompiledCode &&\n <IconButton\n key=\"import\"\n aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('import')}\n size=\"medium\"\n >\n <IconImport />\n </IconButton>}\n\n {this.props.expertMode && !changed && (this.props.debugMode || (!this.state.blockly && !this.state.rules) || ((this.state.blockly || this.state.rules) && this.state.showCompiledCode)) && <IconButton\n className={this.props.classes.toolbarButtons}\n color={this.props.debugMode ? 'primary' : 'default'}\n disabled={!this.props.debugMode && !isInstanceRunning}\n onClick={() => {\n if (!this.props.debugMode && isScriptRunning) {\n this.setState({ askAboutDebug: true })\n } else {\n this.props.onDebugModeChange(!this.props.debugMode);\n }\n }}\n size=\"medium\"\n >\n <IconDebugMode style={{ fontSize: 32 }} />\n </IconButton>}\n\n {(this.state.blockly || this.state.rules) && <Button\n key=\"blockly-code\"\n aria-label=\"blockly\"\n title={I18n.t('Show javascript code')}\n className={clsx(this.props.classes.toolbarButtons, 'button-js-code', this.props.debugMode && this.props.classes.toolbarButtonsDisabled)}\n color={this.state.showCompiledCode ? 'secondary' : 'inherit'}\n disabled={this.props.debugMode}\n style={{ padding: '0 5px' }}\n onClick={() => {\n if (this.props.debugMode) {\n return;\n }\n this.setState({ showCompiledCode: !this.state.showCompiledCode });\n this.state.isTourOpen && this.state.tourStep === STEPS.showJavascript && this.setState({ tourStep: STEPS.switchBackToRules });\n this.state.isTourOpen && this.state.tourStep === STEPS.switchBackToRules && this.setState({ tourStep: STEPS.saveTheScript });\n }}>\n <img alt={this.state.blockly ? \"blockly2js\" : \"rules2js\"} src={this.state.blockly ? ImgBlockly2Js : ImgRules2Js} /></Button>}\n <IconButton\n key=\"debug\"\n disabled={this.props.debugMode}\n aria-label=\"Debug menu\"\n title={I18n.t('Debug options')}\n className={this.props.classes.toolbarButtons}\n onClick={e => this.setState({ showDebugMenu: true, menuDebugAnchorEl: e.currentTarget })}\n size=\"medium\"\n >\n <Badge className={this.props.classes.badgeMargin} badgeContent={this.getDebugBadge()}>\n <IconDebugMenu />\n </Badge>\n </IconButton>\n </Toolbar>\n );\n } else {\n return null;\n }\n }\n\n getScriptEditor() {\n if (!this.props.debugMode &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly !== null &&\n (!this.state.blockly || this.state.showCompiledCode) &&\n (!this.state.rules || this.state.showCompiledCode)\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv\">\n <ScriptEditorComponent\n key=\"scriptEditor1\"\n name={this.state.selected}\n adapterName={this.props.adapterName}\n insert={this.state.insert}\n onInserted={() => this.setState({ insert: '' })}\n onForceSave={() => this.onSave()}\n searchText={this.state.searchText}\n onRegisterSelect={func => this.onRegisterSelect(func)}\n readOnly={this.state.showCompiledCode}\n changed={this.state.changed[this.state.selected]}\n code={this.scripts[this.state.selected].source || ''}\n isDark={this.state.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n onChange={newValue => this.onChange({ script: newValue })}\n language={this.scripts[this.state.selected].engineType === 'TypeScript/ts' ? 'typescript' : 'javascript'}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getBlocklyEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"blocklyEditorDiv\">\n <BlocklyEditor\n command={this.state.cmdToBlockly}\n key=\"BlocklyEditor\"\n themeType={this.state.themeType}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getRulesEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n const isScriptRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].enabled;\n\n return <div className={clsx(this.props.classes.editorDiv)} key=\"flowEditorDiv\">\n <RulesEditor\n scriptId={this.state.selected}\n setTourStep={this.setTourStep}\n tourStep={this.state.tourStep}\n isTourOpen={this.state.isTourOpen}\n changed={this.state.changed[this.state.selected]}\n running={isInstanceRunning && isScriptRunning}\n command={this.state.cmdToRules}\n key=\"flowEditor\"\n themeType={this.state.themeType}\n themeName={this.props.themeName}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getConfirmDialog() {\n if (this.state.confirm) {\n return <DialogConfirm\n key=\"dialogConfirm1\"\n text={this.state.confirm}\n onClose={result => {\n if (this.confirmCallback) {\n const cb = this.confirmCallback;\n this.confirmCallback = null;\n cb(result);\n }\n this.setState({ confirm: '' });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getSelectIdDialog() {\n if (this.state.showSelectId) {\n let selectedId = this.selectId.callback ? this.selectId.initValue || '' : this.getSelect ? this.getSelect() : '';\n // it could be:\n // - 'id.xx'/* aksjdhsdf*/\n // - \"id.xx\"/* aksjdhsdf*/\n // - \"id.xx\"//\n let pos = selectedId.indexOf('/*');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n pos = selectedId.indexOf('//');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n let m = selectedId.match(/\"([^\"]+)\"/);\n if (m) {\n selectedId = m[1];\n }\n m = selectedId.match(/'([^']+)'/);\n if (m) {\n selectedId = m[1];\n }\n\n return <DialogSelectID\n key=\"dialogSelectID1\"\n imagePrefix=\"../..\"\n themeName={this.props.themeName}\n themeType={this.state.themeType}\n socket={this.props.socket}\n selected={selectedId}\n expertMode={this.selectId.type === 'script' ? true : undefined}\n // statesOnly={!this.selectId.type || this.selectId.type === 'state'}\n types={[this.selectId.type || 'state']}\n onClose={() => {\n this.setState({ showSelectId: false });\n if (this.selectId.callback) {\n this.selectId.callback = null;\n }\n }}\n onOk={(selected, name) => {\n this.selectId.initValue = null;\n if (this.selectId.callback) {\n this.selectId.callback(selected);\n this.selectId.callback = null;\n } else {\n this.setState({ insert: `'${selected}'/*${name}*/` })\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getCronDialog() {\n if (this.state.showCron) {\n return <DialogCron\n key=\"dialogCron1\"\n cron={this.cron.callback ? this.cron.initValue || '' : this.getSelect ? this.getSelect() : '* * * * *'}\n onClose={() => this.setState({ showCron: false })}\n onOk={cron => {\n this.cron.initValue = null;\n if (this.cron.callback) {\n this.cron.callback(cron);\n this.cron.callback = null;\n } else {\n this.setState({ insert: `'${cron}'` });\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getEditorDialog() {\n if (this.state.showScript) {\n return <DialogScriptEditor\n key=\"scriptEditorDialog\"\n adapterName={this.props.adapterName}\n source={this.scriptDialog.initValue}\n args={this.scriptDialog.args ? this.scriptDialog.args.join(', ') : ''}\n isReturn={this.scriptDialog.isReturn}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n themeType={this.state.themeType}\n onClose={result => {\n this.scriptDialog.initValue = null;\n if (this.scriptDialog.callback) {\n result !== false && this.scriptDialog.callback(result || '');\n this.scriptDialog.callback = null;\n }\n this.setState({ showScript: false });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getToast() {\n return <Snackbar\n key=\"toast\"\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={!!this.state.toast}\n autoHideDuration={6000}\n onClose={() => this.setState({ toast: '' })}\n ContentProps={{ 'aria-describedby': 'message-id' }}\n message={<span id=\"message-id\">{this.state.toast}</span>}\n action={[\n <IconButton\n key=\"close\"\n aria-label=\"close\"\n color=\"inherit\"\n className={this.props.classes.closeToast}\n onClick={() => this.setState({ toast: '' })}\n size=\"medium\"\n >\n <IconClose />\n </IconButton>,\n ]}\n />;\n }\n\n setTourStep = tourStep => this.setState({ tourStep });\n\n getTour() {\n if (this.state.instancesLoaded &&\n this.state.selected &&\n this.props.isAnyRulesExists === 1 &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n this.state.visible) {\n return <Tour\n key=\"tour\"\n steps={steps}\n isOpen={this.state.isTourOpen}\n onRequestClose={() => {\n this.setState({ isTourOpen: false });\n window.localStorage.setItem('tour', 'true');\n this.props.socket.setState('javascript.0.variables.rulesTour', { val: true, ack: true });\n }}\n //getCurrentStep={tourStep => this.setTourStep(tourStep)}\n goToStep={this.state.tourStep}\n />;\n }\n }\n\n getDebug() {\n if (this.props.debugMode) {\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n if (isInstanceRunning) {\n return <Debugger\n key=\"debugger\"\n runningInstances={this.state.runningInstances}\n adapterName={this.props.adapterName}\n socket={this.props.socket}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n src={this.props.debugInstance ? this.props.debugInstance.adapter : this.state.selected}\n debugInstance={this.props.debugInstance}\n />;\n } else {\n setTimeout(() => this.props.onDebugModeChange(false));\n return null;\n }\n } else {\n return null;\n }\n }\n\n render() {\n if (this.state.selected && this.props.objects[this.state.selected] && this.state.blockly === null && this.state.rules === null) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n setTimeout(() => {\n const newState = {\n blockly: this.scripts[this.state.selected].engineType === 'Blockly',\n rules: this.scripts[this.state.selected].engineType === 'Rules',\n showCompiledCode: false,\n debugEnabled: this.scripts[this.state.selected].debug,\n verboseEnabled: this.scripts[this.state.selected].verbose,\n };\n\n // check if all opened files still exists\n this.removeNonExistingScripts(null, newState);\n this.setState(newState);\n }, 100);\n }\n\n return [\n this.getTabs(),\n this.getToolbar(),\n this.getScriptEditor(),\n this.getAskAboutDebug(),\n this.getBlocklyEditor(),\n this.getRulesEditor(),\n this.getDebug(),\n this.getConfirmDialog(),\n this.getSelectIdDialog(),\n this.getCronDialog(),\n this.getEditorDialog(),\n this.getDebugMenu(),\n this.getToast(),\n this.getTour(),\n ];\n }\n}\n\nEditor.propTypes = {\n objects: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n adapterName: PropTypes.string.isRequired,\n selected: PropTypes.string.isRequired,\n onSelectedChange: PropTypes.func.isRequired,\n onRestart: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n visible: PropTypes.bool,\n menuOpened: PropTypes.bool,\n onLocate: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n searchText: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onDebugModeChange: PropTypes.func,\n debugMode: PropTypes.bool,\n debugInstance: PropTypes.object,\n expertMode: PropTypes.bool,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Dropzone from 'react-dropzone';\nimport DialogError from './Error';\nimport {MdFileUpload as IconUpload} from 'react-icons/md';\nimport {MdCancel as IconNo} from 'react-icons/md';\nimport {MdPlusOne as IconPlus} from 'react-icons/md';\n\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n dropzone: {\n marginTop: 20,\n width: '100%',\n borderWidth: 5,\n borderStyle: 'dashed',\n borderColor: '#d0cccc',\n textAlign: 'center',\n boxSizing: 'border-box',\n paddingTop: 45,\n borderRadius: 10,\n height: 'calc(100% - 10px)'\n },\n dropzoneDiv: {\n width: '100%',\n height: '100%'\n },\n dropzoneRejected: {\n borderColor: '#970000',\n },\n dropzoneAccepted: {\n borderColor: '#17cd02',\n },\n icon: {\n height: '30%',\n width: '30%',\n color: '#eeeeee',\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n zIndex: 0,\n },\n iconError: {\n color: '#ffc3c6',\n },\n iconOk: {\n color: '#aaeebc',\n },\n text: {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n color: '#868686',\n position: 'absolute',\n zIndex: 1,\n }\n});\n\nclass DialogImportFile extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n error: '',\n imageStatus: ''\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose();\n }\n\n onChange(e) {\n this.setState({text: e.target.value});\n }\n\n static readFileDataUrl(file, cb) {\n const reader = new FileReader();\n reader.onload = () => {\n cb(null, {data: reader.result, name: file.name});\n };\n reader.onabort = () => {\n console.error('file reading was aborted');\n cb(I18n.t('file reading was aborted'));\n };\n reader.onerror = (e) => {\n console.error('file reading has failed');\n cb(I18n.t('file reading has failed: %s', e));\n };\n\n reader.readAsDataURL(file)\n }\n\n handleDropFile(files) {\n if (files && files.hasOwnProperty('target')) {\n files = files.target.files;\n }\n\n if (!files && !files.length) {\n return;\n }\n\n const file = files[files.length - 1];\n\n if (!file) {\n return;\n }\n DialogImportFile.readFileDataUrl(file, (err, result) => {\n if (err) {\n this.setState({error: err})\n } else {\n this.props.onClose(result && result.data);\n }\n });\n }\n\n render() {\n const classes = this.props.classes;\n const className = classes.dropzone + ' ' + (this.state.imageStatus === 'accepted' ? classes.dropzoneAccepted : (this.state.imageStatus === 'rejected' ? classes.dropzoneRejected : ''));\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{paper: classes.dialog}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import scripts')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <Dropzone key='image-drop'\n\n maxSize={50000000}\n acceptClassName={classes.dropzoneAccepted}\n rejectClassName={classes.dropzoneRejected}\n onDrop={files => this.handleDropFile(files)}\n multiple={false}\n accept='application/zip,application/x-zip-compressed'\n className={className}>\n {\n ({ getRootProps, getInputProps, isDragActive, isDragReject}) => {\n if (isDragReject) {\n if (this.state.imageStatus !== 'rejected') {\n this.setState({imageStatus: 'rejected'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Some files will be rejected')}</span>\n <IconNo key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconError}/>\n </div>);\n } else if (isDragActive) {\n if (this.state.imageStatus !== 'accepted') {\n this.setState({imageStatus: 'accepted'});\n }\n\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('All files will be accepted')}</span>\n <IconPlus key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconOk}/>\n </div>);\n } else {\n if (this.state.imageStatus !== 'wait') {\n this.setState({imageStatus: 'wait'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Drop some files here or click...')}</span>\n <IconUpload key=\"icon\" className={this.props.classes.icon}/>\n </div>);\n }\n }\n }\n </Dropzone>\n {this.state.error ? (<DialogError text={this.state.error} onClose={() => this.setState({error: ''})}/>) : null}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImportFile.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nexport default withStyles(styles)(DialogImportFile);\n","import React from 'react';\n// import ReactDOM from 'react-dom';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport 'react-splitter-layout/lib/index.css';\n\nimport GenericApp from '@iobroker/adapter-react-v5/GenericApp';\nimport Loader from '@iobroker/adapter-react-v5/Components/Loader'\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nimport { MdMenu as IconMenuClosed } from 'react-icons/md';\nimport { MdArrowBack as IconMenuOpened } from 'react-icons/md';\nimport { MdVisibility as IconShowLog } from 'react-icons/md';\n\nimport SideMenu from './SideMenu';\nimport Log from './Log';\nimport Editor from './Editor';\nimport DialogError from './Dialogs/Error';\nimport DialogImportFile from './Dialogs/ImportFile';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport { ContextWrapper } from './Components/RulesEditor/components/ContextWrapper';\n\nconst styles = theme => ({\n root: {\n flexGrow: 1,\n display: 'flex',\n width: '100%',\n height: '100%'\n },\n menuDiv: {\n overflow: 'hidden',\n },\n splitterDivs: {\n '&>div': {\n overflow: 'hidden',\n width: '100%',\n height: '100%',\n },\n '& .layout-splitter': {\n background: theme.palette.mode === 'dark' ? '#595858' : '#ccc;'\n }\n },\n mainDiv: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n /*appBarWithMenu: {\n width: `calc(100% - ${Theme.menu.width}px)`,\n marginLeft: Theme.menu.width,\n },\n appBarWithoutMenu: {\n width: `100%`,\n marginLeft: 0,\n },*/\n content: {\n width: '100%',\n height: '100%',\n backgroundColor: theme.palette.background && theme.palette.background.default,\n position: 'relative'\n },\n splitterDivWithMenu: {\n width: `calc(100% - 300px)`,\n height: '100%'\n },\n menuDivWithoutMenu: {\n '&>div:first-child': {\n display: 'none'\n },\n '&>.layout-splitter': {\n display: 'none'\n },\n },\n progress: {\n margin: 100\n },\n menuOpenCloseButton: {\n position: 'absolute',\n left: 0,\n borderRadius: '0 5px 5px 0',\n top: 6,\n paddingTop: 8,\n cursor: 'pointer',\n zIndex: 1,\n height: 25,\n width: 20,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 3,\n '&:hover': {\n color: 'white'\n }\n },\n showLogButton: {\n position: 'absolute',\n right: 3,\n borderRadius: '5px 5px 0 0',\n bottom: 0,\n paddingTop: 3,\n cursor: 'pointer',\n zIndex: 10,\n height: 20,\n width: 25,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 8,\n '&:hover': {\n color: 'white'\n }\n }\n});\n\nclass App extends GenericApp {\n constructor(props) {\n super(props, {\n translations: {\n en: require('./i18n/en'),\n de: require('./i18n/de'),\n es: require('./i18n/es'),\n fr: require('./i18n/fr'),\n it: require('./i18n/it'),\n nl: require('./i18n/nl'),\n pl: require('./i18n/pl'),\n pt: require('./i18n/pt'),\n ru: require('./i18n/ru'),\n uk: require('./i18n/uk'),\n 'zh-cn': require('./i18n/zh-cn'),\n },\n bottomButtons: false,\n socket: {\n autoSubscribeLog: true,\n },\n sentryDSN: window.sentryDSN,\n });\n\n // this.logIndex = 0;\n this.logSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.logSize')) || 150 : 150;\n this.menuSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.menuSize')) || 500 : 500;\n this.hosts = [];\n this.importFile = null;\n this.scripts = {};\n\n window.alert = message => {\n console.error(message);\n this.showError(message.toString());\n };\n }\n\n onScriptsChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n if (id.startsWith('script.js.')) {\n if (obj) {\n if (JSON.stringify(this.scripts[id]) !== JSON.stringify(obj)) {\n this.scripts[id] = obj;\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n } else if (this.scripts[id]) {\n delete this.scripts[id];\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onInstanceChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.match(/^system\\.adapter\\.[-_\\w\\d]+\\$/)) {\n // update instances\n if (id.startsWith(`system.adapter.${this.adapterName}.`)) {\n if (obj && obj.type === 'instance') {\n if (!this.state.instances.includes(id)) {\n newState.instances = [...this.state.instances];\n newState.instances.push(id);\n newState.instances.sort();\n changed = true;\n // request alive\n this.socket.subscribeState(obj._id + '.alive', this.onInstanceAliveChange);\n }\n } else if (!obj && this.state.instances.includes(id)) {\n this.socket.unsubscribeState(id + '.alive', this.onInstanceAliveChange);\n newState.instances = [...this.state.instances];\n const pos = newState.instances.indexOf(id);\n newState.instances.splice(pos, 1);\n changed = true;\n }\n }\n\n if (obj && obj[id].common && obj[id].common.blockly) {\n this.confirmCallback = result => result && window.location.reload();\n newState.confirm = I18n.t('Some blocks were updated. Reload admin?');\n changed = true;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onHostChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.startsWith('system.host.')) {\n if (obj && obj.type === 'host') {\n if (!this.hosts.includes(id)) {\n this.hosts.push(id);\n this.hosts.sort();\n }\n } else if (!obj && this.hosts.includes(id)) {\n const pos = this.hosts.indexOf(id);\n this.hosts.splice(pos, 1);\n }\n }\n\n changed && this.setState(newState);\n };\n\n onConnectionReady() {\n window.systemLang = this.socket.systemLang;\n this.setState({\n ready: false,\n updateScripts: 0,\n scriptsHash: 0,\n instances: [],\n updating: false,\n resizing: false,\n selected: null,\n logMessage: {},\n editing: [],\n menuOpened: window.localStorage.getItem('App.menuOpened') !== 'false',\n menuSelectId: '',\n expertMode: window.localStorage.getItem('App.expertMode') === 'true',\n logHorzLayout: window.localStorage.getItem('App.logHorzLayout') === 'true',\n runningInstances: {},\n confirm: '',\n importFile: false,\n message: '',\n searchText: '',\n hideLog: window.localStorage.getItem('App.hideLog') === 'true',\n debugMode: false,\n debugInstance: null,\n });\n\n const newState = {};\n\n // load instances & scripts\n // Read all instances\n this.subscribeOnInstances()\n .then(result => {\n newState.instances = result.instances;\n newState.runningInstances = result.runningInstances;\n\n return this.readAdaptersWithBlockly();\n })\n .then(() => this.socket.getHosts())\n .then(hosts => {\n this.hosts = hosts.map(obj => obj._id);\n // load all scripts\n return this.readAllScripts();\n })\n .then(scripts => {\n if (window.localStorage && window.localStorage.getItem('App.expertMode') !== 'true' && window.localStorage.getItem('App.expertMode') !== 'false') {\n // detect if some global scripts exists\n if (Object.keys(scripts).find(id => id.startsWith('script.js.global.') && scripts.type === 'script')) {\n newState.expertMode = true;\n }\n }\n this.scripts = scripts;\n\n let scriptsHash = this.state.scriptsHash;\n if (this.compareScripts(scripts)) {\n scriptsHash++;\n }\n newState.scriptsHash = scriptsHash;\n newState.ready = true;\n this.socket.subscribeObject('script.*', this.onScriptsChanged);\n this.socket.subscribeObject('system.adapter.*', this.onInstanceChanged);\n this.socket.subscribeObject('system.host.*', this.onHostChanged);\n\n this.setState(newState);\n });\n }\n\n subscribeOnInstances() {\n return this.socket.getAdapterInstances(this.adapterName)\n .then(instancesArray => {\n const instances = instancesArray.map(obj => parseInt(obj._id.split('.').pop())).sort();\n const runningInstances = {};\n instances.forEach(id => runningInstances[`system.adapter.${this.adapterName}.${id}`] = false);\n\n const promises = [];\n\n // subscribe on instances\n instances.forEach(instance => {\n const instanceId = `system.adapter.${this.adapterName}.${instance}`;\n const id = `${instanceId}.alive`;\n promises.push(this.socket.getState(id)\n .then(state => {\n runningInstances[instanceId] = state ? state.val : false;\n this.socket.subscribeState(id, this.onInstanceAliveChange);\n }));\n });\n\n return Promise.all(promises)\n .then(() => ({ instances, runningInstances }));\n })\n }\n\n readAllScripts() {\n return this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'channel')\n .then(folders =>\n this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'script')\n .then(scripts => {\n Object.keys(scripts).forEach(id => folders[id] = scripts[id]);\n return folders;\n }));\n }\n\n readAdaptersWithBlockly() {\n return this.socket.getObjectView('system.adapter.', 'system.adapter.\\u9999', 'adapter')\n .then(adapters =>\n new Promise(resolve =>\n BlocklyEditor.loadCustomBlockly(adapters, () => resolve())));\n }\n\n onInstanceAliveChange = (id, state) => {\n if (id) {\n id = id && id.substring(0, id.length - 6); // - .alive\n\n if (this.state.runningInstances[id] !== (state ? state.val : false)) {\n const runningInstances = JSON.parse(JSON.stringify(this.state.runningInstances));\n runningInstances[id] = state ? state.val : false;\n this.setState({ runningInstances });\n }\n }\n };\n\n onToggleExpertMode(expertMode) {\n this.onExpertModeChange(expertMode);\n }\n\n compareScripts(newScripts) {\n const oldIds = Object.keys(this.scripts);\n const newIds = Object.keys(newScripts);\n if (oldIds.length !== newIds.length) {\n this.scripts = this.newScripts;\n return true;\n }\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n this.scripts = this.newScripts;\n return true;\n }\n for (let i = 0; i < oldIds.length; i++) {\n let oldScript = this.scripts[oldIds[i]].common;\n let newScript = newScripts[oldIds[i]].common;\n if (oldScript.name !== newScript.name) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engine !== newScript.engine) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engineType !== newScript.engineType) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.enabled !== newScript.enabled) {\n this.scripts = this.newScripts;\n return true;\n }\n }\n }\n\n onRename(oldId, newId, newName, newInstance) {\n if (newId.trim().endsWith('.')) {\n newId = newId.replace(/\\.\\s*$/, '_');\n }\n console.log(`Rename ${oldId} => ${newId}`);\n let promise;\n this.setState({ updating: true });\n\n // Rename script.js.common.Skript_1 => script.js.common.New folder.Skript_1\n\n if (this.scripts[oldId] && this.scripts[oldId].type === 'script') {\n const common = JSON.parse(JSON.stringify(this.scripts[oldId].common));\n common.name = newName || common.name;\n if (newInstance !== undefined) {\n common.engine = 'system.adapter.javascript.' + newInstance;\n }\n // Check if the script is not a children of other script\n const parts = newId.split('.');\n parts.pop();\n const parentID = parts.join('.');\n\n if (this.scripts[parentID] && this.scripts[parentID].type === 'script') {\n parts.pop();\n newId = parts.join('.') + '.' + newId.split('.').pop();\n }\n\n promise = this.updateScript(oldId, newId, common);\n } else {\n promise = this.renameGroup(oldId, newId, newName);\n }\n\n promise\n .then(() => this.setState({ updating: false }))\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n\n renameGroup(id, newId, newName, _list) {\n if (!_list) {\n _list = [];\n\n // collect all elements to rename\n // find all elements\n _list = Object.keys(this.scripts).filter(_id => _id.startsWith(id + '.'));\n\n return this.socket.getObject(id)\n .then(obj => {\n obj = obj || { common: {} };\n obj.common.name = newName || obj.common.name || id.split('.').pop();\n obj._id = newId;\n\n this.socket.delObject(id)\n .catch(() => { })\n .then(() => this.socket.setObject(newId, obj))\n .then(() => this.renameGroup(id, newId, newName, _list))\n .catch(e => {\n console.log(e);\n });\n })\n .catch(e => {\n console.log(e);\n const obj = {\n _id: newId,\n type: 'channel',\n common: {\n name: newName || id.split('.').pop(),\n expert: true\n },\n native: {}\n };\n // may be it is virtual folder\n return this.socket.setObject(newId, obj)\n .then(() => this.renameGroup(id, newId, newName, _list));\n });\n } else if (_list.length) {\n let nId = _list.pop();\n\n return this.socket.getObject(nId)\n .then(obj =>\n this.socket.delObject(nId)\n .catch(() => { })\n .then(() => {\n nId = newId + nId.substring(id.length);\n obj._id = nId;\n obj.common = obj.common || {};\n obj.common.expert = true;\n return this.socket.setObject(nId, obj);\n })\n .then(() => this.renameGroup(id, newId, newName, _list))\n );\n } else {\n return Promise.resolve();\n }\n }\n\n onUpdateScript(id, common) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n this.updateScript(id, id, common)\n .then(() => { })\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n onSelect(selected) {\n if (this.scripts[selected] && this.scripts[selected].common && this.scripts[selected].type === 'script') {\n this.setState({ selected, menuSelectId: selected }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300);\n }\n }\n\n onExpertModeChange(expertMode) {\n if (this.state.expertMode !== expertMode) {\n window.localStorage && window.localStorage.setItem('App.expertMode', expertMode ? 'true' : 'false');\n this.setState({ expertMode });\n }\n }\n\n showError(err) {\n this.setState({ errorText: err ? err.toString() : '' });\n }\n\n showMessage(message) {\n this.setState({ message: message ? message.toString() : '' });\n }\n\n onDelete(id) {\n this.socket.delObject(id)\n .then(() => { })\n .catch(err =>\n this.showError(err));\n }\n\n onEdit(id) {\n if (this.state.selected !== id) {\n this.setState({ selected: id });\n }\n }\n\n onAddNew(id, name, isFolder, instance, type, source) {\n const reg = new RegExp(`^${id}\\\\.`);\n\n if (Object.keys(this.scripts).find(_id => id === _id || reg.test(id))) {\n return this.showError(I18n.t('Yet exists!'));\n }\n\n if (isFolder) {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true\n },\n type: 'channel'\n })\n .then(() =>\n setTimeout(() => this.setState({ menuSelectId: id }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300), 1000))\n .catch(err => this.showError(err));\n } else {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true,\n engineType: type,\n engine: 'system.adapter.javascript.' + (instance || 0),\n source: source || '',\n debug: false,\n verbose: false\n },\n type: 'script'\n })\n .then(() => setTimeout(() => this.onSelect(id), 1000))\n .catch(err => this.showError(err));\n }\n }\n\n updateScript(oldId, newId, newCommon) {\n return this.socket.getObject(oldId)\n .then(_obj => {\n const obj = { common: {} };\n\n if (newCommon.engine !== undefined) obj.common.engine = newCommon.engine;\n if (newCommon.enabled !== undefined) obj.common.enabled = newCommon.enabled;\n if (newCommon.source !== undefined) obj.common.source = newCommon.source;\n if (newCommon.debug !== undefined) obj.common.debug = newCommon.debug;\n if (newCommon.verbose !== undefined) obj.common.verbose = newCommon.verbose;\n\n obj.from = 'system.adapter.admin.0'; // we must distinguish between GUI(admin.0) and disk(javascript.0)\n\n if (oldId === newId && _obj && _obj.common && newCommon.name === _obj.common.name) {\n if (!newCommon.engineType || newCommon.engineType !== _obj.common.engineType) {\n if (newCommon.engineType !== undefined) {\n obj.common.engineType = newCommon.engineType || 'Javascript/js';\n }\n }\n obj.type = 'script';\n return this.socket.extendObject(oldId, obj);\n } else {\n // let prefix;\n\n // let parts = _obj.common.engineType.split('/');\n\n // prefix = 'script.' + (parts[1] || parts[0]) + '.';\n\n if (_obj && _obj.common) {\n _obj.common.engineType = newCommon.engineType || _obj.common.engineType || 'Javascript/js';\n return this.socket.delObject(oldId)\n .then(() => {\n if (obj.common.engine !== undefined) _obj.common.engine = obj.common.engine;\n if (obj.common.enabled !== undefined) _obj.common.enabled = obj.common.enabled;\n if (obj.common.source !== undefined) _obj.common.source = obj.common.source;\n if (obj.common.name !== undefined) _obj.common.name = obj.common.name;\n if (obj.common.debug !== undefined) _obj.common.debug = obj.common.debug;\n if (obj.common.verbose !== undefined) _obj.common.verbose = obj.common.verbose;\n\n delete _obj._rev;\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n this.socket.setObject(newId, _obj);\n });\n } else {\n _obj = obj;\n }\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n return this.socket.setObject(newId, _obj);\n }\n });\n }\n\n onEnableDisable(id, enabled) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n const common = this.scripts[id].common;\n common.enabled = enabled;\n common.expert = true;\n this.updateScript(id, id, common)\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n getLiveHost(cb, _list) {\n if (!_list) {\n _list = this.hosts ? [...this.hosts] : [];\n }\n\n if (_list.length) {\n const id = _list.shift();\n this.socket.getState(id + '.alive')\n .then(state => {\n if (state && state.val) {\n cb(id);\n } else {\n setTimeout(() => this.getLiveHost(cb, _list));\n }\n });\n } else {\n cb();\n }\n }\n\n onExport() {\n this.getLiveHost(host => {\n if (!host) {\n return this.showError(I18n.t('No active host found'));\n }\n\n const d = new Date();\n let date = d.getFullYear();\n let m = d.getMonth() + 1;\n if (m < 10) {\n m = '0' + m;\n }\n date += '-' + m;\n m = d.getDate();\n if (m < 10) {\n m = '0' + m;\n }\n date += '-' + m + '-';\n\n this.socket.getRawSocket().emit('sendToHost', host, 'readObjectsAsZip', {\n adapter: 'javascript',\n id: 'script.js',\n link: date + 'scripts.zip' // request link to file and not the data itself\n }, data => {\n if (typeof data === 'string') {\n // it is a link to created file\n const a = document.createElement('a');\n // the data is \"system.host.HOST.zip.2020-01-26-scripts.zip\"\n const parts = data.split('.zip.');\n a.href = '/zip/' + parts[0] + '/' + parts[1];\n document.body.appendChild(a);\n a.click();\n a.remove();\n } else {\n data.error && this.showError(data.error);\n if (data.data) {\n const a = document.createElement('a');\n a.href = 'data: application/zip;base64,' + data.data;\n a.download = date + 'scripts.zip';\n document.body.appendChild(a);\n a.click();\n a.remove();\n }\n }\n });\n });\n }\n\n onImport(data) {\n this.importFile = data;\n if (data) {\n this.confirmCallback = this.onImportConfirmed.bind(this);\n this.setState({ importFile: false, confirm: I18n.t('Existing scripts will be overwritten.') });\n } else {\n this.setState({ importFile: false });\n }\n }\n\n onImportConfirmed(ok) {\n let data = this.importFile;\n this.importFile = null;\n if (ok && data) {\n data = data.split(',')[1];\n this.getLiveHost(host => {\n if (!host) {\n this.showError(I18n.t('No active host found'));\n return;\n }\n this.socket.getRawSocket().emit('sendToHost', host, 'writeObjectsAsZip', {\n data: data,\n adapter: 'javascript',\n id: 'script.js'\n }, data => {\n if (data === 'permissionError') {\n this.showError(I18n.t(data));\n } else if (!data || data.error) {\n this.showError(data ? I18n.t(data.error) : I18n.t('Unknown error'));\n } else {\n this.showMessage(I18n.t('Done'));\n }\n });\n });\n }\n }\n\n toggleLogLayout() {\n window.localStorage && window.localStorage.setItem('App.logHorzLayout', this.state.logHorzLayout ? 'false' : 'true');\n this.setState({ logHorzLayout: !this.state.logHorzLayout });\n }\n\n renderEditor() {\n const isAnyRulesExists = Object.keys(this.scripts).reduce((sum, id) =>\n sum + (this.scripts[id].common.engineType === 'Rules' ? 1 : 0), 0);\n\n return <Editor\n key=\"editor\"\n debugMode={this.state.debugMode}\n onDebugModeChange={value => {\n if (!value) {\n this.setState({debugMode: false, debugInstance: null});\n } else {\n this.setState({debugMode: true});\n }\n }}\n visible={!this.state.resizing}\n socket={this.socket}\n adapterName={this.adapterName}\n onLocate={menuSelectId => this.setState({ menuSelectId })}\n runningInstances={this.state.runningInstances}\n menuOpened={this.state.menuOpened}\n searchText={this.state.searchText}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n onChange={(id, common) => this.onUpdateScript(id, common)}\n isAnyRulesExists={isAnyRulesExists}\n debugInstance={this.state.debugInstance}\n onSelectedChange={(id, editing) => {\n const newState = {};\n let changed = false;\n if (id !== this.state.selected) {\n changed = true;\n newState.selected = id;\n }\n if (JSON.stringify(editing) !== JSON.stringify(this.state.editing)) {\n changed = true;\n newState.editing = JSON.parse(JSON.stringify(editing));\n }\n changed && this.setState(newState);\n }}\n onRestart={id => this.socket.extendObject(id, { common: { enabled: true } })}\n selected={this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].type === 'script' ? this.state.selected : ''}\n objects={this.scripts}\n instances={this.state.instances}\n />;\n }\n\n showLogButton() {\n return <div\n key=\"showLog\"\n title={I18n.t('Show logs')}\n className={this.props.classes.showLogButton}\n onClick={() => {\n window.localStorage.setItem('App.hideLog', 'false');\n this.setState({ hideLog: false, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n >\n <IconShowLog />\n </div>;\n }\n\n renderErrorDialog() {\n return this.state.errorText ?\n <DialogError\n key=\"dialogError\"\n onClose={() => this.setState({ errorText: '' })}\n text={this.state.errorText}\n /> :\n null;\n }\n\n renderMain() {\n const { classes } = this.props;\n return [\n this.state.message ? <DialogMessage key=\"dialogMessage\" onClose={() => this.setState({ message: '' })} text={this.state.message} /> : null,\n this.renderErrorDialog(),\n this.state.importFile ? <DialogImportFile key=\"dialogImportFile\" onClose={data => this.onImport(data)} /> : null,\n this.state.confirm ? <DialogConfirm\n key=\"dialogConfirm\"\n onClose={result => {\n this.state.confirm && this.setState({ confirm: '' });\n this.confirmCallback && this.confirmCallback(result);\n this.confirmCallback = null;\n }}\n text={this.state.confirm} /> : null,\n <div className={classes.content + ' iobVerticalSplitter'} key=\"main\">\n <div key=\"closeMenu\" className={classes.menuOpenCloseButton} onClick={() => {\n window.localStorage.setItem('App.menuOpened', this.state.menuOpened ? 'false' : 'true');\n this.setState({ menuOpened: !this.state.menuOpened, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}>\n {this.state.menuOpened ? <IconMenuOpened /> : <IconMenuClosed />}\n </div>\n <SplitterLayout\n key=\"splitterLayout\"\n vertical={!this.state.logHorzLayout}\n primaryMinSize={100}\n secondaryInitialSize={this.state.hideLog ? 0 : this.logSize}\n //customClassName={classes.menuDiv + ' ' + classes.splitterDivWithoutMenu}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.state.hideLog ? 0 : this.logSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.logSize', this.logSize.toString());\n }}\n >\n <>\n {this.renderEditor()}\n {!this.state.debugMode && this.state.hideLog && this.showLogButton()}\n </>\n {!this.state.debugMode && !this.state.hideLog && <Log\n key=\"log\"\n verticalLayout={!this.state.logHorzLayout}\n onLayoutChange={() => this.toggleLogLayout()}\n editing={this.state.editing}\n socket={this.socket}\n selected={this.state.selected}\n onHideLog={() => {\n window.localStorage.setItem('App.hideLog', 'true');\n this.setState({ hideLog: true, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n />}\n </SplitterLayout>\n </div>,\n ];\n }\n\n render() {\n const { classes } = this.props;\n\n if (!this.state.ready) {\n // return (<CircularProgress className={classes.progress} size={50} />);\n return <Loader theme={this.state.themeType} />;\n }\n\n return <div className={classes.root}>\n <ContextWrapper socket={this.socket}>\n <SplitterLayout\n key=\"menuSplitter\"\n vertical={false}\n primaryMinSize={300}\n primaryIndex={1}\n secondaryMinSize={300}\n secondaryInitialSize={this.menuSize}\n customClassName={classes.splitterDivs + ' ' + (!this.state.menuOpened ? classes.menuDivWithoutMenu : '')}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.menuSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.menuSize', this.menuSize.toString());\n }}\n >\n <div className={classes.mainDiv} key=\"menu\">\n <SideMenu\n debugMode={this.state.debugMode}\n onDebugInstance={data => {\n\n this.setState({debugInstance: data, debugMode: !!data});\n }}\n key=\"sidemenu\"\n scripts={this.scripts}\n scriptsHash={this.state.scriptsHash}\n instances={this.state.instances}\n update={this.state.updateScripts}\n onRename={this.onRename.bind(this)}\n onSelect={this.onSelect.bind(this)}\n socket={this.socket}\n selectId={this.state.menuSelectId}\n onEdit={this.onEdit.bind(this)}\n expertMode={this.state.expertMode}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n onThemeChange={themeName => {\n Utils.setThemeName(themeName);\n const themeType = Utils.getThemeType(themeName);\n this.setState({ themeName, themeType }, () => this.props.onThemeChange(themeName));\n }}\n runningInstances={this.state.runningInstances}\n onExpertModeChange={this.onExpertModeChange.bind(this)}\n onDelete={this.onDelete.bind(this)}\n onAddNew={this.onAddNew.bind(this)}\n onEnableDisable={this.onEnableDisable.bind(this)}\n onExport={this.onExport.bind(this)}\n width={this.menuSize}\n onImport={() => this.setState({ importFile: true })}\n onSearch={searchText => this.setState({ searchText })}\n />\n </div>\n {this.renderMain()}\n </SplitterLayout>\n </ContextWrapper>\n </div>;\n }\n}\n\nexport default withStyles(styles)(App);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { StylesProvider, createGenerateClassName } from '@mui/styles';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport pgk from '../package.json';\nimport theme from '@iobroker/adapter-react-v5/Theme';\n// import Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport { Utils } from '@iobroker/adapter-react-v5';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\nimport GenericBlock from './Components/RulesEditor/components/GenericBlock/index.jsx'\n\nwindow.GenericBlock = GenericBlock;\n\nwindow.adapterName = 'javascript';\nwindow.sentryDSN = 'https://504499a725eb4898930d3b9e9da95740@sentry.iobroker.net/56';\n\nlet themeName = Utils.getThemeName();\n\nconsole.log(`iobroker.${window.adapterName}@${pgk.version} using theme \"${themeName}\"`);\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'iob',\n});\n\nfunction build() {\n const isMobile = window.innerWidth < 600;\n const container = document.getElementById('root');\n const root = createRoot(container);\n return root.render(<StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme(themeName)}>\n <DndProvider backend={isMobile ? TouchBackend : HTML5Backend}>\n <App onThemeChange={_theme => {\n themeName = _theme;\n build();\n }} />\n </DndProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>);\n}\n\nbuild();\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n\n/*\n improved VSCode editor. This has to be down here, or we get conflicts\n between loader.js and require calls in jQuery and other loaded modules\n*/\n// loader must be after socket.io, elsewise there is no window.io\nconst loadDynamicScript = window.loadDynamicScript;\nloadDynamicScript && loadDynamicScript(window.location.port === '3000' ? window.location.protocol + '//' + window.location.hostname + ':8081/lib/js/socket.io.js' : './../../lib/js/socket.io.js', function () {\n loadDynamicScript('vs/loader.js', function () {\n loadDynamicScript('vs/configure.js', function () {\n typeof window.socketLoadedHandler === 'function' && window.socketLoadedHandler();\n });\n });\n});"],"sourceRoot":""}
|