iobroker.javascript 6.2.0 → 7.0.1

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.
Files changed (34) hide show
  1. package/README.md +9 -8
  2. package/admin/asset-manifest.json +11 -11
  3. package/admin/google-blockly/own/blocks_convert.js +4 -4
  4. package/admin/google-blockly/own/blocks_system.js +55 -13
  5. package/admin/google-blockly/own/blocks_time.js +1 -1
  6. package/admin/google-blockly/own/blocks_trigger.js +2 -2
  7. package/admin/google-blockly/own/blocks_words.js +9 -0
  8. package/admin/static/js/376.215ba3ed.chunk.js +9 -0
  9. package/admin/static/js/376.215ba3ed.chunk.js.map +1 -0
  10. package/admin/static/js/402.cf6fe7b7.chunk.js +198 -0
  11. package/admin/static/js/402.cf6fe7b7.chunk.js.map +1 -0
  12. package/admin/static/js/62.2ce04dcc.chunk.js +187 -0
  13. package/admin/static/js/62.2ce04dcc.chunk.js.map +1 -0
  14. package/admin/static/js/{848.77a7611f.chunk.js → 848.3c1a4d2e.chunk.js} +46 -46
  15. package/admin/static/js/848.3c1a4d2e.chunk.js.map +1 -0
  16. package/admin/static/js/main.66fd56eb.js +6 -0
  17. package/admin/static/js/main.66fd56eb.js.map +1 -0
  18. package/admin/tab.html +1 -1
  19. package/docs/de/usage.md +1 -1
  20. package/docs/en/blockly.md +3 -3
  21. package/docs/en/javascript.md +28 -3
  22. package/io-package.json +64 -13
  23. package/lib/sandbox.js +225 -83
  24. package/main.js +75 -15
  25. package/package.json +1 -1
  26. package/admin/static/js/402.2b754320.chunk.js +0 -198
  27. package/admin/static/js/402.2b754320.chunk.js.map +0 -1
  28. package/admin/static/js/55.2fbb4209.chunk.js +0 -9
  29. package/admin/static/js/55.2fbb4209.chunk.js.map +0 -1
  30. package/admin/static/js/62.97617f7b.chunk.js +0 -185
  31. package/admin/static/js/62.97617f7b.chunk.js.map +0 -1
  32. package/admin/static/js/848.77a7611f.chunk.js.map +0 -1
  33. package/admin/static/js/main.444faaef.js +0 -6
  34. package/admin/static/js/main.444faaef.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/62.2ce04dcc.chunk.js","mappings":"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","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"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {};","import React from 'react';\nimport PropTypes from 'prop-types';\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';\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\n open={!0}\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\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 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';\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={!0}\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';\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={!0}\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';\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\n open={!0}\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\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';\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={!0}\n maxWidth=\"sm\"\n fullWidth\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';\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={!0}\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 withStyles from '@mui/styles/withStyles';\n\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 { red, green, yellow } from '@mui/material/colors';\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, Utils } from '@iobroker/adapter-react-v5';\n\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\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={Utils.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(errorText) {\n this.setState({ errorText });\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={Utils.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={Utils.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={Utils.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={Utils.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 = Utils.clsx(this.props.classes.folderIcon, reorder ? this.props.classes.folderIconReorder : this.props.classes.folderIconNoReorder);\n } else {\n iconClass = Utils.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={Utils.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 classes={{ root: this.props.classes.listItemIcon }}>{\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\n disablePadding\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\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={Utils.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={Utils.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={Utils.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={Utils.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={Utils.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 // 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';\nimport withStyles from '@mui/styles/withStyles';\n\nimport IconButton from '@mui/material/IconButton';\n\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, Utils } from '@iobroker/adapter-react-v5';\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) {\n i = `0${i.toString()}`;\n }\n text = `${i}:`;\n\n i = d.getMinutes();\n if (i < 10) {\n i = `0${i.toString()}`;\n }\n text += `${i}:`;\n i = d.getSeconds();\n if (i < 10) {\n i = `0${i.toString()}`;\n }\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 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\n logHandler = message => {\n let allLines = this.state.lines;\n const scripts = this.state.editing.filter(id => message.message.includes(id));\n let selected;\n if (!scripts.length) {\n return;\n } else if (scripts.length === 1) {\n selected = scripts[0];\n } else {\n // try to get the script with the longest common substring\n scripts.sort();\n selected = scripts[scripts.length - 1];\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 Utils.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 <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\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';\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';\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 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, Utils } from '@iobroker/adapter-react-v5';\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});\n\nclass DialogExport extends React.Component {\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 Utils.copyToClipboard(this.props.text);\n const anchorEl = event.currentTarget;\n\n setTimeout(() => {\n this.setState({ popper: I18n.t('Copied'), anchorEl });\n setTimeout(() => this.setState({ popper: '', anchorEl: null }), 1000);\n }, 50);\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\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 style={{ position: 'absolute', left: -9999 }} tabIndex={-1} aria-hidden 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';\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\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';\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';\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';\n\nimport IconSave from '@mui/icons-material/Save';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\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 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\n open={!0}\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';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\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={Utils.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';\nimport PropTypes from 'prop-types';\n\nimport { Utils, Icon as CustomIcon } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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={Utils.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 PropTypes from 'prop-types';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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={Utils.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 React, { useState } from 'react';\nimport { TextField } from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport InputAdornment from '@mui/material/InputAdornment';\n\nimport { Utils, Icon as CustomIcon } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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={Utils.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';\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 React, { useState } from 'react';\nimport { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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={Utils.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 PropTypes from 'prop-types';\n\nimport { Slider } from '@mui/material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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={Utils.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';\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 React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { TextField } from '@mui/material';\n\nimport { Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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={Utils.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 React from 'react';\nimport { FormControl, MenuItem, Select } from '@mui/material';\nimport PropTypes from 'prop-types';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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={Utils.clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={Utils.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={Utils.clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={Utils.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';\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 { getSelectIdIcon } from '@iobroker/adapter-react-v5/Components/Icon';\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\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 { STEPS } from '../../helpers/Tour';\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={Utils.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={Utils.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={Utils.clsx(!!signature ? cls.displayItalic : cls.displayFlex, cls.blockMarginTop)}\n key={attr}>\n {value ? (doNotTranslate ? value : I18n.t(value)) : (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={Utils.clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={Utils.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={Utils.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={Utils.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 ?\n 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={Utils.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\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={Utils.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={Utils.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={Utils.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={Utils.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={Utils.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\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\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 } else if (context.conditionsStates.length) {\n value = `.replace(/%s/g, ${context.conditionsStates[0].name}).replace(/%id/g, \"${context.conditionsStates[0].id}\")`;\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={Utils.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={Utils.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';\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';\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';\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';\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 conditionsStates: [],\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/*\\nconst demo = ${JSON.stringify(json, null, 2)\n .replace(/\\*\\//g, '* /')};\\n*/\\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';\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: attr,\n defaultValue: value\n }, !!settings[attr] ? settings[attr] : 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, attr);\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[attr] ? settings[attr] : ''}\n onChange={el => textCron = el}\n language={I18n.getLanguage()}\n />\n </CustomModal>\n {this.renderNameText({\n defaultValue: I18n.t('every hour at 0 minutes'),\n attr: 'addText',\n signature: true,\n doNotTranslate: true,\n }, !!settings['addText'] ? settings['addText'] : I18n.t('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\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';\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\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 { I18n } from '@iobroker/adapter-react-v5';\n\nimport GenericBlock from '../GenericBlock';\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.conditionsStates.push({ name: `subCondVar${config._id}`, id: config.oid });\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 => ({ 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 => ({ 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={!0}\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';\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';\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 => ({ 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 }, () =>\n 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';\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';\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';\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 => ({ 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}, () =>\n 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';\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';\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 for \"${obj.common.javascriptRules.name}\": ${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 \"${obj.common.javascriptRules.name}\": ${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';\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';\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';\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;","import React, { Fragment, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrop } from 'react-dnd';\n\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';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\nimport { deepCopy } from '../../helpers/deepCopy';\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';\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={`${Utils.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={`${Utils.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 PropTypes from 'prop-types';\n\nimport { AppBar, ClickAwayListener, Tab, Tabs } from '@mui/material';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\nimport cls from './style.module.scss';\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 { 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={Utils.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={`${Utils.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={Utils.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 PropTypes from 'prop-types';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\n\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 Menu from './components/Menu';\nimport './helpers/stylesVariables.scss';\n\nimport DialogExport from '../../Dialogs/Export';\nimport DialogImport from '../../Dialogs/Import';\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={Utils.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\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';\n\nimport IconButton from '@mui/material/IconButton';\n\nimport {\n MdContentCopy as IconCopy,\n MdDeleteForever as IconDelete,\n MdVerticalAlignBottom as IconBottom,\n} from 'react-icons/md';\n\nimport { I18n, Utils } from '@iobroker/adapter-react-v5';\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 consoleText: {\n fontFamily: 'Lucida Console, Courier, monospace',\n paddingTop: 4,\n '&>pre': {\n margin: 0,\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 getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) {\n i = '0' + i.toString();\n }\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) {\n i = '0' + i.toString();\n }\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) {\n i = '0' + i.toString();\n }\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 Utils.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 withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\nimport ReactJson from 'react-json-view';\n\nimport ListItemButton from '@mui/material/ListItemButton';\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, Utils } from '@iobroker/adapter-react-v5';\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={Utils.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 <ListItemButton\n key={frame.id}\n onClick={() => this.props.onChangeCurrentFrame(i)}\n dense\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 </ListItemButton>;\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\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={Utils.clsx(this.props.classes.scopeType, this.props.classes['scopeType_' + type])}>{type}</td>\n <td\n className={Utils.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 withStyles from '@mui/styles/withStyles';\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 ListItemButton from '@mui/material/ListItemButton';\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, Utils } from '@iobroker/adapter-react-v5';\n\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.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?.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 key=\"line\" className={this.props.classes.monospace}>{line}</div>,\n <div key=\"arrow\" className={Utils.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={!0}>\n <DialogTitle id=\"bp-dialog-title\">{I18n.t('Select breakpoint')}</DialogTitle>\n <List>\n {this.state.queryBreakpoints.map((bp, i) => (\n <ListItemButton\n classes={{root: this.props.classes.bpListItem}}\n dense\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 </ListItemButton>\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={Utils.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={Utils.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\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 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 {\n I18n, Utils, Cron as DialogCron, Confirm as DialogConfirm, SelectID as DialogSelectID,\n} from '@iobroker/adapter-react-v5';\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={Utils.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={Utils.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 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={Utils.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={Utils.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={Utils.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';\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\n open={!0}\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 DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport { I18n, Utils, AdminConnection, Loader } from '@iobroker/adapter-react-v5';\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 /*\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 */\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 Connection: AdminConnection,\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 => console.log(e));\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 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});"],"names":["DialogRename","props","name","id","parts","nextProps","Dialog","event","reason","DialogTitle","DialogContent","TextField","ev","FormControl","InputLabel","Select","instance","MenuItem","DialogActions","Button","styles","theme","DialogDelete","withStyles","DialogAddNew","type","html","lang","Card","CardActionArea","CardMedia","CardContent","CardActions","DialogNew","parent","names","n","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","errorText","children","color","resolve","childrenFiltered","depthPx","title","reorder","style","isExpanded","iconStyle","iconClass","childrenCount","ListItemSecondaryAction","source","target","newId","items","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","paddingMs","ms","gText","Log","message","allLines","scripts","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","anchorEl","Popper","TransitionProps","Fade","Paper","DialogImport","languageBlocklyLoaded","languageOwnLoaded","toolboxText","toolboxXml","scriptsLoaded","searchXml","root","_result","val","node","BlocklyEditor","url","callback","location","scriptTag","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","v","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","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","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","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","ListItemButton","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","isLocalhost","register","swUrl","checkValidServiceWorker","registerValidSW","registration","installingWorker","response","unregister","generateClassName","build","container","StyledEngineProvider","ThemeProvider","DndProvider","_theme","loadDynamicScript"],"sourceRoot":""}