iobroker.javascript 5.8.9 → 5.8.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/admin/asset-manifest.json +5 -5
- package/admin/static/js/{62.77f34392.chunk.js → 62.bc979bde.chunk.js} +13 -13
- package/admin/static/js/62.bc979bde.chunk.js.map +1 -0
- package/admin/static/js/{main.41faba6f.js → main.4a523162.js} +2 -2
- package/admin/static/js/{main.41faba6f.js.map → main.4a523162.js.map} +1 -1
- package/admin/tab.html +1 -1
- package/io-package.json +13 -13
- package/package.json +1 -1
- package/admin/static/js/62.77f34392.chunk.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://js/./src/index.css?449b","Dialogs/Rename.jsx","Dialogs/Delete.jsx","Dialogs/AddNewScript.jsx","Dialogs/New.jsx","Dialogs/Error.jsx","Dialogs/AdapterDebug.jsx","SideMenu.jsx","Log.jsx","Components/ScriptEditorVanilaMonaco.jsx","Dialogs/Export.jsx","Dialogs/Import.jsx","Components/BlocklyEditor.jsx","Dialogs/ScriptEditor.jsx","webpack://js/./src/Components/RulesEditor/style.module.scss?0da4","webpack://js/./src/Components/RulesEditor/components/CardMenu/style.module.scss?2b24","Components/RulesEditor/helpers/MaterialDynamicIcon.jsx","Components/RulesEditor/components/CardMenu/index.jsx","webpack://js/./src/Components/RulesEditor/components/CurrentItem/style.module.scss?c87c","Components/RulesEditor/helpers/deepCopy.jsx","Components/RulesEditor/helpers/filterElement.jsx","webpack://js/./src/Components/RulesEditor/components/GenericBlock/style.module.scss?b0aa","webpack://js/./src/Components/RulesEditor/components/CustomButton/style.module.scss?fd2f","Components/RulesEditor/components/CustomButton/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomCheckbox/style.module.scss?da33","Components/RulesEditor/components/CustomCheckbox/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomInput/style.module.scss?9fc8","Components/RulesEditor/components/CustomInput/index.jsx","Components/RulesEditor/components/CustomInstance/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomModal/style.module.scss?395b","Components/RulesEditor/components/CustomModal/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSelect/style.module.scss?925a","Components/RulesEditor/components/CustomSelect/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSlider/style.module.scss?1345","Components/RulesEditor/components/CustomSlider/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomSwitch/style.module.scss?f9f3","Components/RulesEditor/components/CustomSwitch/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomTime/style.module.scss?75e5","Components/RulesEditor/components/CustomTime/index.jsx","webpack://js/./src/Components/RulesEditor/components/CustomDate/style.module.scss?9309","Components/RulesEditor/components/CustomDate/index.jsx","Components/RulesEditor/helpers/utils.jsx","Components/RulesEditor/helpers/Tour.jsx","Components/RulesEditor/components/GenericBlock/index.jsx","Components/RulesEditor/components/Blocks/ActionSayText.jsx","Components/RulesEditor/components/Blocks/ActionSendEmail.jsx","Components/RulesEditor/components/Blocks/ActionTelegram.jsx","Components/RulesEditor/components/Blocks/ActionPushover.jsx","Components/RulesEditor/components/Blocks/ActionWhatsappcmb.jsx","Components/RulesEditor/components/Blocks/ActionPushsafer.jsx","Components/RulesEditor/helpers/Compile.jsx","Components/RulesEditor/components/Blocks/TriggerScriptSave.jsx","Components/RulesEditor/components/Blocks/TriggerSchedule.jsx","Components/RulesEditor/components/Blocks/TriggerState.jsx","Components/RulesEditor/components/Blocks/ConditionState.jsx","Components/RulesEditor/components/Blocks/ConditionTime.jsx","Components/RulesEditor/components/Blocks/ConditionAstrological.jsx","Components/RulesEditor/components/Blocks/ActionSetState.jsx","Components/RulesEditor/components/Blocks/ActionExec.jsx","Components/RulesEditor/components/Blocks/ActionHTTPCall.jsx","Components/RulesEditor/components/Blocks/ActionPrintText.jsx","Components/RulesEditor/components/Blocks/ActionPause.jsx","Components/RulesEditor/components/Blocks/ActionFunction.jsx","Components/RulesEditor/components/Blocks/ActionSetStateDelayed.jsx","Components/RulesEditor/components/Blocks/ActionOperateStates.jsx","Components/RulesEditor/components/StandardBlocks/index.jsx","Components/RulesEditor/components/ContextWrapper/index.jsx","Components/RulesEditor/helpers/findElement.jsx","Components/RulesEditor/components/CurrentItem/index.jsx","Components/RulesEditor/components/CustomDragLayer/index.jsx","webpack://js/./src/Components/RulesEditor/components/ContentBlockItems/style.module.scss?e805","Components/RulesEditor/hooks/useStateLocal.jsx","Components/RulesEditor/helpers/cardSort.jsx","webpack://js/./src/Components/RulesEditor/components/DragWrapper/style.module.scss?4797","Components/RulesEditor/components/DragWrapper/index.jsx","Components/RulesEditor/components/ContentBlockItems/DialogHelp.jsx","Components/RulesEditor/components/ContentBlockItems/DialogCondition.jsx","Components/RulesEditor/components/ContentBlockItems/index.jsx","webpack://js/./src/Components/RulesEditor/components/Menu/style.module.scss?20d7","Components/RulesEditor/components/CardMenu/CustomDragItem.jsx","webpack://js/./src/Components/RulesEditor/components/HamburgerMenu/hamburgerMenu.module.scss?8911","Components/RulesEditor/components/HamburgerMenu/index.jsx","Components/RulesEditor/components/Menu/index.jsx","webpack://js/./src/Components/RulesEditor/helpers/stylesVariables.scss?3d86","Components/RulesEditor/index.jsx","Components/Debugger/Editor.jsx","Components/Debugger/Console.jsx","Components/Debugger/Stack.jsx","Components/Debugger/index.jsx","Editor.jsx","Dialogs/ImportFile.jsx","App.jsx","serviceWorker.jsx","bootstrap.jsx"],"names":[],"mappings":"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","file":"static/js/62.77f34392.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n});\n\nclass DialogRename extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n instance: props.instance || 0\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n this.prefix = this.getPrefix(props.id);\n this.oldId = props.id;\n }\n\n getPrefix(id) {\n const parts = (id || '').split('.');\n parts.pop();\n return parts.join('.');\n }\n\n getId(name) {\n name = (name || '').replace(/[\\\\/\\][*,;'\"`<>?\\s]/g, '_');\n return this.prefix + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.prefix = this.getPrefix(nextProps.id);\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onRename(this.oldId, this.state.id, this.state.name, this.state.instance);\n this.props.onClose();\n };\n\n handleChange = name => {\n this.setState({name, id: this.getId(name)});\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth={true}\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Rename')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n label={I18n.t('Name')}\n value={this.state.name}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.state.id}\n disabled={true}\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance'}}\n >\n {this.props.instances.map(instance => <MenuItem key={instance} value={instance}>{instance || '0'}</MenuItem>)}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogRename.propTypes = {\n onClose: PropTypes.func,\n onRename: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n folder: PropTypes.bool,\n};\n\nexport default withStyles(styles)(DialogRename);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\n\nconst styles = theme => ({\n\n});\n\nclass DialogDelete extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name,\n id: props.id,\n };\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n if (nextProps.id !== this.props.id) {\n this.setState({id: nextProps.id});\n }\n }\n\n handleCancel = () => {\n this.props.onClose(null);\n };\n\n handleOk = () => {\n this.props.onDelete(this.state.id);\n this.props.onClose(this.props.value);\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Are you sure?')}</DialogTitle>\n <DialogContent>\n <IconDelete/>\n <span style={{fontSize: 14, fontWeight: 'bold'}}>{I18n.t('Delete %s', this.state.name)}</span>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogDelete.propTypes = {\n onClose: PropTypes.func,\n onDelete: PropTypes.func,\n name: PropTypes.string,\n id: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogDelete);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Card from '@mui/material/Card';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport CardMedia from '@mui/material/CardMedia';\n\nimport ImgJS from '../assets/tileJS.png';\nimport ImgTS from '../assets/tileTS.png';\nimport ImgBlockly from '../assets/tileBlockly.png';\nimport ImgRules from '../assets/tileRules.png';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n card: {\n maxWidth: 345,\n display: 'inline-block',\n margin: '0 10px 0 10px'\n },\n media: {\n height: 100,\n },\n text: {\n maxWidth: 200,\n },\n complexity: {\n fontWeight: 'bold',\n fontStyle: 'italic',\n marginBottom: theme.spacing(1),\n }\n});\n\nclass DialogAddNew extends React.Component {\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = type => {\n this.props.onClose(type);\n };\n\n openHtml(html) {\n const lang = I18n.getLanguage();\n if (!html.includes('javascript.md') && (lang === 'de' || lang === 'ru')) {\n html = html.replace(/\\/en\\//, '/' + lang + '/');\n }\n const win = window.open(html, '_blank');\n win.focus();\n }\n\n getJSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea\n onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgJS}\n title=\"Javascript\"\n />\n <CardContent>\n <h2>Javascript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for programmers')}</div>\n <div className={this.props.classes.text}>{I18n.t('JS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Javascript/js')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getTSCard() {\n return <Card className={this.props.classes.card}>\n <CardActionArea\n onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgTS}\n title=\"Typescript\"\n />\n <CardContent>\n <h2>Typescript</h2>\n <div className={this.props.classes.complexity}>{I18n.t('for professionals')}</div>\n <div className={this.props.classes.text}>{I18n.t('TS description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('TypeScript/ts')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>;\n }\n\n getBlocklyCard() {\n return (<Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Blockly')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgBlockly}\n title=\"Blockly\"\n />\n <CardContent>\n <h2>Blockly</h2>\n <div className={this.props.classes.complexity}>{I18n.t('normal')}</div>\n <div className={this.props.classes.text}>{I18n.t('Blockly description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Blockly')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/blockly.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>);\n }\n\n getRulesCard() {\n return (<Card className={this.props.classes.card}>\n <CardActionArea onClick={() => this.props.onClose && this.props.onClose('Rules')}>\n <CardMedia\n className={this.props.classes.media}\n image={ImgRules}\n title=\"Rules\"\n />\n <CardContent>\n <h2>Rules</h2>\n <div className={this.props.classes.complexity}>{I18n.t('easy')}</div>\n <div className={this.props.classes.text}>{I18n.t('Rules description')}</div>\n </CardContent>\n </CardActionArea>\n <CardActions>\n <Button size=\"small\" color=\"primary\" onClick={() => this.props.onClose && this.props.onClose('Rules')}>{I18n.t('Add')}</Button>\n <Button size=\"small\" color=\"primary\" onClick={() => this.openHtml('https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md')}>{I18n.t('Learn More')}</Button>\n </CardActions>\n </Card>);\n }\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n fullWidth={true}\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{I18n.t('Add new script')}</DialogTitle>\n <DialogContent style={{textAlign: 'center'}}>\n {this.getRulesCard()}\n {this.getBlocklyCard()}\n {this.getJSCard()}\n {this.getTSCard()}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAddNew.propTypes = {\n onClose: PropTypes.func\n};\n\nexport default withStyles(styles)(DialogAddNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport TextField from '@mui/material/TextField';\nimport FormControl from '@mui/material/FormControl';\nimport Select from '@mui/material/Select';\nimport InputLabel from '@mui/material/InputLabel';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n\n});\n\nclass DialogNew extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: props.name || 'Script',\n instance: props.instance || 0,\n parent: props.parent,\n error: ''\n };\n this.isShowInstance = !props.folder && props.instances && (props.instance || props.instances[0] || props.instances.length > 1);\n }\n\n getId(name) {\n name = name || this.state.name || '';\n name = name.replace(/[\\\\/\\][.*,;'\"`<>?\\s]/g, '_').trim().replace(/\\.$/, '_');\n return (this.state ? this.state.parent : this.props.parent) + '.' + name;\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.name !== this.props.name) {\n this.setState({name: nextProps.name});\n }\n }\n\n handleCancel = () => {\n this.props.onClose();\n };\n\n handleOk = () => {\n this.props.onAdd(this.getId(this.state.name), this.state.name, this.state.instance, this.props.type);\n this.props.onClose();\n };\n\n handleChange = name => {\n const id = this.getId(name);\n if (!name) {\n this.setState({name, id, error: I18n.t('Empty name is not allowed')});\n } else\n if (this.props.existingItems && this.props.existingItems.indexOf(id) !== -1) {\n this.setState({name, id, error: I18n.t('Duplicate name')});\n } else {\n this.setState({name, id, error: ''});\n }\n };\n\n render() {\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"md\"\n fullWidth={true}\n open={true}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Create new')}</DialogTitle>\n <DialogContent>\n <form noValidate autoComplete=\"off\">\n <TextField\n variant=\"standard\"\n style={{width: '100%'}}\n id=\"standard-name\"\n autoFocus\n error={!!this.state.error}\n label={I18n.t('Name')}\n value={this.state.name}\n helperText={this.state.error}\n onKeyPress={(ev) => {\n if (ev.key === 'Enter') {\n // Do code here\n ev.preventDefault();\n setTimeout(() => this.handleOk(), 200);\n }\n }}\n onChange={e => this.handleChange(e.target.value)}\n margin=\"normal\"\n />\n <FormControl variant=\"standard\" style={{minWidth: 100}}>\n <InputLabel htmlFor=\"parent\">{I18n.t('Folder')}</InputLabel>\n <Select\n variant=\"standard\"\n style={{width: '100%'}}\n value={this.state.parent}\n onChange={e => this.setState({parent: e.target.value})}\n inputProps={{name: 'parent', id: 'parent',}}\n >\n {this.props.parents.map(parent => {\n const parts = parent.id.split('.');\n parts.splice(0, 2); // remove script.js\n const names = [];\n let id = 'script.js';\n parts.forEach((n, i) => {\n id += '.' + n;\n const el = this.props.parents.find(item => item.id === id);\n if (el) {\n names.push(el.name);\n } else {\n names.push(n);\n }\n });\n if (!names.length) {\n names.push(parent.name);\n }\n return (<MenuItem key={parent.id} value={parent.id}>{names.join(' / ')}</MenuItem>)\n })}\n </Select>\n </FormControl>\n <TextField\n variant=\"standard\"\n id=\"standard-name-id\"\n style={{width: '100%'}}\n label={I18n.t('ID')}\n value={this.getId()}\n disabled={true}\n margin=\"normal\"\n />\n {\n this.isShowInstance && (\n <FormControl variant=\"standard\">\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.instance}\n onChange={e => this.setState({instance: parseInt(e.target.value, 10)})}\n inputProps={{name: 'instance', id: 'instance',}}\n >\n {this.props.instances.map(instance => (<MenuItem key={'instance' + instance} value={instance}>{instance || '0'}</MenuItem>))}\n </Select>\n </FormControl>)\n }\n </form>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!!this.state.error} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={this.handleCancel} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogNew.propTypes = {\n onClose: PropTypes.func,\n onAdd: PropTypes.func,\n name: PropTypes.string,\n title: PropTypes.string,\n parent: PropTypes.string,\n instance: PropTypes.number,\n instances: PropTypes.array,\n parents: PropTypes.array,\n existingItems: PropTypes.array,\n folder: PropTypes.bool,\n type: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogNew);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n titleBackground: {\n background: theme.palette.error.main,\n },\n titleColor: {\n color: theme.palette.error.contrastText,\n '&>h2': {\n color: theme.palette.error.contrastText,\n }\n },\n});\n\nclass DialogError extends React.Component {\n constructor(props) {\n super(props);\n console.log('Error created')\n }\n handleOk = () => {\n this.props.onClose && this.props.onClose();\n };\n\n render() {\n return <Dialog\n open={true}\n maxWidth=\"sm\"\n fullWidth={true}\n onClose={() => this.handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogTitle className={this.props.classes.titleBackground}\n classes={{root: this.props.classes.titleColor}}\n id=\"alert-dialog-title\">{this.props.title || I18n.t('Error')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n {this.props.text || I18n.t('Unknown error!')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" autoFocus startIcon={<IconOk/>}>{I18n.t('Ok')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogError.propTypes = {\n onClose: PropTypes.func,\n title: PropTypes.string,\n text: PropTypes.string,\n icon: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogError);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\n\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Grid from '@mui/material/Grid';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\nimport IconClose from '@mui/icons-material/Close';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n icon: {\n width: 24,\n height: 24,\n },\n filter: {\n width: '100%',\n },\n filterWithButton: {\n width: '100%',\n },\n title: {\n fontWeight: 'bold',\n marginTop: theme.spacing(2),\n }\n});\n\n\nclass DialogAdapterDebug extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n instances: [],\n filter: window.localStorage.getItem('javascript.debug.filter') || '',\n showAskForStop: false,\n jsInstance: window.localStorage.getItem('javascript.debug.instance') || '',\n jsInstanceHost: '',\n adapterToDebug: window.localStorage.getItem('javascript.debug.adapter') || '',\n };\n }\n\n componentDidMount() {\n this.props.socket.getAdapterInstances()\n .then(instances => {\n instances = instances.filter(i => i && !i.common?.onlyWWW).map(item => {\n const name = item._id.replace(/^system\\.adapter\\./, '');\n const [adapter] = name.split('.');\n return {\n id: name,\n enabled: item.common?.enabled,\n host: item.common?.host,\n icon: item.common?.icon ? `../../adapter/${adapter}/${item.common.icon}` : '',\n };\n });\n instances.sort((a, b) => a.id > b.id ? 1 : (a.id < b.id ? -1 : 0));\n let jsInstance = this.state.jsInstance || '';\n let jsInstanceObj = this.state.jsInstance && instances.find(item => item.id === this.state.jsInstance);\n let jsInstanceHost;\n\n // check if selected instance is in the list\n if (!this.state.jsInstance || !jsInstanceObj) {\n jsInstance = instances.find(item => item.id.startsWith('javascript.')); // take the first one\n jsInstanceHost = jsInstance ? jsInstance.host : '';\n jsInstance = jsInstance ? jsInstance.id : '';\n } else {\n jsInstanceHost = jsInstanceObj ? jsInstanceObj.host : '';\n }\n\n let adapterToDebug = this.state.adapterToDebug || '';\n if (adapterToDebug && !instances.find(item => item.id === adapterToDebug)) {\n adapterToDebug = '';\n }\n\n this.setState({instances, jsInstance, adapterToDebug, jsInstanceHost});\n });\n }\n\n handleOk = () => {\n // TODO\n if (this.state.instances.find(item => item.id === this.state.adapterToDebug).enabled) {\n return this.props.socket.getObject('system.adapter.' + this.state.adapterToDebug)\n .then(obj => {\n obj.common.enabled = false;\n this.props.socket.setObject(obj._id, obj)\n .then(() =>\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug));\n })\n } else {\n this.props.onDebug(this.state.jsInstance, this.state.adapterToDebug);\n }\n };\n\n\n renderJavascriptList() {\n const js = this.state.instances.filter(item => item.id.startsWith('javascript.'));\n if (js.length < 2) {\n return null;\n } else {\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Host')}</div>\n <List component=\"nav\">\n {js.map(item => <ListItem\n button\n selected={this.state.jsInstance === item.id}\n onClick={this.setState({jsInstance: item.id, jsInstanceHost: item.host})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n renderInstances() {\n if (!this.state.jsInstance) {\n return <Grid item/>;\n } else {\n const instances = this.state.instances.filter(item =>\n item.id !== this.state.jsInstance && item.host === this.state.jsInstanceHost && (!this.state.filter || item.id.includes(this.state.filter.toLowerCase()) ));\n return <Grid item>\n <div className={this.props.classes.title}>{I18n.t('Instances')}</div>\n <List component=\"nav\">\n {instances.map(item => <ListItem\n button\n selected={this.state.adapterToDebug === item.id}\n onDoubleClick={() => this.setState({adapterToDebug: item.id}, () => this.handleOk())}\n onClick={() => this.setState({adapterToDebug: item.id})}\n >\n <ListItemIcon><img src={item.icon} alt={item.id} className={this.props.classes.icon}/></ListItemIcon>\n <ListItemText primary={item.id} />\n </ListItem>)}\n </List>\n </Grid>;\n }\n }\n\n render() {\n return <Dialog\n maxWidth=\"md\"\n fullWidth={false}\n open={true}\n onClose={(event, reason) => false}\n aria-labelledby=\"confirmation-dialog-title\"\n >\n <DialogTitle id=\"confirmation-dialog-title\">{this.props.title || I18n.t('Debug instance')}</DialogTitle>\n <DialogContent>\n <Grid container direction=\"column\">\n <Grid item>\n <Input\n classes={{root: this.props.classes.filterWithButton}}\n value={this.state.filter}\n placeholder={I18n.t('Filter')}\n onChange={e => {\n this.setState({filter: e.target.value});\n window.localStorage.setItem('javascript.debug.filter', e.target.value);\n }}\n endAdornment={\n <InputAdornment position=\"end\">\n {this.state.filter ? <IconButton\n size=\"small\"\n aria-label=\"toggle password visibility\"\n onClick={() => this.setState({filter: ''})}\n >\n <IconClose />\n </IconButton> : ''}\n </InputAdornment>\n }\n />\n </Grid>\n <Grid item>\n <Grid container>\n {this.renderJavascriptList()}\n {this.renderInstances()}\n </Grid>\n </Grid>\n </Grid>\n\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={this.handleOk} disabled={!this.state.jsInstance || !this.state.adapterToDebug} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Start')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.props.onClose()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogAdapterDebug.propTypes = {\n socket: PropTypes.object.isRequired,\n onClose: PropTypes.func.isRequired,\n onDebug: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(DialogAdapterDebug);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '@mui/styles/withStyles';\nimport Drawer from '@mui/material/Drawer';\nimport Divider from '@mui/material/Divider';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';\nimport ListItemText from '@mui/material/ListItemText';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Input from '@mui/material/Input';\nimport { useDrag, useDrop, DndProvider as DragDropContext } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\n\nimport {MdMoreVert as IconMore} from 'react-icons/md';\nimport {FaFolder as IconFolder} from 'react-icons/fa';\nimport {FaFolderOpen as IconFolderOpened} from 'react-icons/fa';\nimport {MdContentCopy as IconCopy} from 'react-icons/md';\nimport {MdDelete as IconDelete} from 'react-icons/md';\nimport {MdInput as IconDoEdit} from 'react-icons/md';\nimport {MdClose as IconClear} from 'react-icons/md';\nimport {MdFormatClear as IconClose} from 'react-icons/md';\nimport {MdPlayArrow as IconPlay} from 'react-icons/md';\nimport {MdAdd as IconAdd} from 'react-icons/md';\nimport {MdCreateNewFolder as IconAddFolder} from 'react-icons/md';\nimport {MdPause as IconPause} from 'react-icons/md';\nimport {MdSwapVert as IconReorder} from 'react-icons/md';\nimport {MdEdit as IconEdit} from 'react-icons/md';\nimport {MdSearch as IconFind} from 'react-icons/md';\nimport {MdPersonPin as IconExpert} from 'react-icons/md';\nimport {FaFileExport as IconExport} from 'react-icons/fa';\nimport {FaFileImport as IconImport} from 'react-icons/fa';\nimport {MdPalette as IconDark} from 'react-icons/md';\nimport {MdUnfoldMore as IconExpandAll} from 'react-icons/md';\nimport {MdUnfoldLess as IconCollapseAll} from 'react-icons/md';\nimport {MdBugReport as IconDebug} from 'react-icons/md';\n\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgRules from './assets/rules.png';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogRename from './Dialogs/Rename';\nimport DialogDelete from './Dialogs/Delete';\nimport DialogAddNewScript from './Dialogs/AddNewScript';\nimport DialogNew from './Dialogs/New';\nimport DialogError from './Dialogs/Error';\nimport DialogAdapterDebug from \"./Dialogs/AdapterDebug\";\n\nimport { red, green, yellow } from '@mui/material/colors';\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_RUN = green[400];\nconst COLOR_PROBLEM = yellow[400];\nconst COLOR_PAUSE = red[400];\nconst ROOT_ID = 'script.js';\nconst COMMON_ID = ROOT_ID + '.common';\nconst GLOBAL_ID = ROOT_ID + '.global';\nconst NARROW_WIDTH = 350;\nconst LEVEL_PADDING = 16;\n\nconst SELECTED_STYLE = {\n background: '#164477',\n color: 'white'\n};\n\nconst styles = theme => ({\n drawerPaper: {\n position: 'relative',\n width: '100%', //Theme.menu.width,\n height: '100%',\n overflow: 'hidden'\n },\n toolbar: {\n height: theme.toolbar.height\n },\n toolbarButtons: {\n color: theme.palette.mode === 'dark'? 'white !important' : 'black !important'\n },\n iconButtonsDisabled: {\n filter: 'grayscale(100%)',\n opacity: 0.5,\n },\n toolbarSearch: {\n width: 'calc(100% - 105px)',\n lineHeight: '34px',\n marginLeft: 5\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 2\n },\n iconDropdownMenu: {\n paddingRight: 5\n },\n iconOnTheRight: {\n position: 'absolute',\n right: 10,\n top: 'calc(50% - 8px)'\n },\n menu: {\n width: '100%',\n height: '100%'\n },\n innerMenu: {\n width: '100%',\n height: 'calc(100% - 76px)',\n overflowX: 'hidden',\n overflowY: 'auto'\n },\n listItemIcon: {\n minWidth: 32,\n },\n filterIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginRight: 5\n },\n scriptIcon: {\n width: 18,\n height: 18,\n borderRadius: 2,\n marginTop: 4,\n marginBottom: 4,\n marginLeft: 8,\n marginRight: 4,\n },\n folder: {\n //background: theme.palette.mode === 'dark' ? '#6a6a6a' : '#e2e2e2',\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none'\n },\n folderReorder: {\n opacity: 0.3,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity'\n },\n folderIcon: {\n width: 20,\n height: 20,\n },\n folderIconReorder: {\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n folderIconNoReorder: {\n cursor: 'pointer',\n paddingTop: 4,\n paddingBottom: 4,\n paddingLeft: 8,\n paddingRight: 4,\n },\n script: {\n cursor: 'pointer',\n padding: 0,\n userSelect: 'none'\n },\n scriptReorder: {\n opacity: 1,\n transitionDuration: '0.5s',\n transitionProperty: 'opacity'\n },\n reorder: {\n //padding: '9px 16px 9px 9px',\n },\n expandButton: {\n width: 37,\n height: 37\n },\n selected: SELECTED_STYLE,\n instances: {\n color: 'gray',\n fontSize: 'smaller'\n },\n childrenCount: {\n float: 'right',\n marginRight: 5,\n fontSize: 10,\n opacity: 0.4,\n },\n footer: {\n height: 24,\n },\n footerButtons: {\n '&:hover': {\n backgroundColor: '#dbdbdb'\n },\n color: theme.palette.mode === 'dark' ? '#ffffff' : '#111111',\n cursor: 'pointer',\n marginTop: 1,\n marginRight: 2,\n height: 22,\n width: 22,\n },\n footerButtonsRight: {\n float: 'right'\n },\n\n mainList: {\n '& .js-folder-dragover>div>li>.folder-reorder': {\n background: '#40adff'\n },\n '& .js-folder-dragging .folder-reorder': {\n opacity: 1,\n },\n '& .js-folder-dragging .script-reorder': {\n opacity: 0.3,\n }\n }\n});\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n def: ImgJS,\n 'Rules':ImgRules,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst getObjectName = (id, obj, lang) => {\n lang = lang || I18n.getLanguage();\n if (obj && obj.common && obj.common.name) {\n if (typeof obj.common.name === 'object') {\n return (obj.common.name[lang] || obj.common.name.en || id.replace(/^script\\.js./, '')).toString();\n } else {\n return obj.common.name.toString();\n }\n } else {\n return id.replace(/^script\\.js./, '');\n }\n};\n\nconst prepareList = data => {\n const result = [{\n id: ROOT_ID,\n depth: 0,\n index: 0,\n parent: null,\n title: 'root',\n type: 'folder'\n }];\n const ids = Object.keys(data);\n\n /*ids.sort((a, b) => {\n if ((a === 'script.js.common' || a === 'script.js.global') && (b === 'script.js.common' || b === 'script.js.global')) {\n return a > b ? 1 : -1;\n } else if (a === 'script.js.common' || a === 'script.js.global' || b === 'script.js.common' || b === 'script.js.global') {\n return 1;\n } else {\n return a > b ? 1 : -1;\n }\n });*/\n\n for (let i = 0; i < ids.length; i++) {\n const obj = data[ids[i]];\n const parts = ids[i].split('.');\n parts.pop();\n result.push({\n id: ids[i],\n title: getObjectName(ids[i], obj),\n enabled: obj && obj.common && obj.common.enabled,\n depth: parts.length - 1,\n type: obj.type === 'script' ? obj.common.engineType : 'folder',\n parent: parts.length > 1 ? parts.join('.') : null,\n instance: obj.common.engine ? parseInt(obj.common.engine.split('.').pop(), 10) || 0 : null\n });\n }\n\n // Place all folder-less scripts at start\n /*result.sort((a, b) => {\n // without folders => always at start\n if (!a.parent && a.type !== 'folder' && !b.parent && b.type !== 'folder') {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (!a.parent && a.type !== 'folder') {\n return -1;\n } else if (!b.parent && b.type !== 'folder') {\n return 1;\n } else {\n // common and global are always at the end\n if ((a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) &&\n (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global'))) {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n } else if (a.id.startsWith('script.js.common') || a.id.startsWith('script.js.global')) {\n return 1;\n } else if (b.id.startsWith('script.js.common') || b.id.startsWith('script.js.global')) {\n return -1;\n } else {\n if (a.id === b.id) {\n return 0;\n } else {\n return a.id > b.id ? 1 : -1;\n }\n }\n }\n });*/\n\n let modified;\n do {\n modified = false;\n // check if all parents exists\n // eslint-disable-next-line\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (!parent) {\n const parts = item.parent.split('.');\n parts.pop();\n result.push({\n id: item.parent,\n title: item.parent.split('.').pop(),\n depth: parts.length - 1,\n type: 'folder',\n parent: parts.length > 1 ? parts.join('.') : null\n });\n modified = true;\n }\n }\n });\n } while (modified);\n\n // Folders first\n result.sort((a, b) => {\n const idA = a.id.toLowerCase();\n const idB = b.id.toLowerCase();\n if (a.type === 'folder' && b.type !== 'folder') {\n return -1;\n } else if (b.type === 'folder' && a.type !== 'folder') {\n return 1;\n }\n\n if (idA > idB) {\n return 1;\n } else if (idA < idB) {\n return -1;\n } else {\n return 0;\n }\n });\n\n // Fill all index\n result.forEach((item, i) => item.index = i);\n\n // Fill all parentIndex\n result.forEach(item => {\n if (item.parent) {\n const parent = result.find(it => it.id === item.parent);\n if (parent) {\n item.parentIndex = parent.index;\n }\n }\n });\n\n return result;\n};\n\nexport const Droppable = (props) => {\n const { onDrop} = props;\n\n const [{ isOver, isOverAny}, drop] = useDrop({\n accept: ['script'],\n drop: e => isOver ? onDrop(e) : undefined,\n collect: monitor => ({\n isOver: monitor.isOver({ shallow: true }),\n isOverAny: monitor.isOver(),\n }),\n });\n\n return <div ref={drop} className={clsx(isOver && 'js-folder-dragover', isOverAny && 'js-folder-dragging')}>\n {props.children}\n </div>;\n};\n\nexport const Draggable = props => {\n const { name } = props;\n const [{ opacity }, drag] = useDrag({\n type: 'script',\n item: () => ({name}),\n collect: monitor => ({opacity: monitor.isDragging() ? 0.3 : 1,}),\n });\n // About transform: https://github.com/react-dnd/react-dnd/issues/832#issuecomment-442071628\n return <div ref={drag} style={{ opacity, transform: 'translate3d(0, 0, 0)' }}>\n {props.children}\n </div>;\n};\n\nclass SideDrawer extends React.Component {\n constructor(props) {\n super(props);\n\n let expanded = window.localStorage ? window.localStorage.getItem('SideMenu.expanded') : '[]';\n try {\n expanded = JSON.parse(expanded) || [];\n } catch (e) {\n expanded = [];\n }\n\n this.inputRef = new React.createRef();\n\n this.state = {\n listItems: prepareList(props.scripts || {}),\n expanded: expanded,\n problems: [],\n reorder: false,\n themeName: this.props.themeName,\n selected: window.localStorage ? window.localStorage.getItem('SideMenu.selected') || null : null,\n creatingScript: false,\n creatingFolder: false,\n copingScript: '',\n renaming: null,\n deleting: null,\n choosingType: null,\n errorText: '',\n instances: props.instances || [],\n menuOpened: false,\n menuAnchorEl: null,\n searchMode: false,\n expertMode: this.props.expertMode,\n searchText: '',\n width: this.props.width || 300,\n typeFilter: window.localStorage ? window.localStorage.getItem('SideMenu.typeFilter') || '' : '', // blockly, js, ts\n statusFilter: window.localStorage ? window.localStorage.getItem('SideMenu.statusFilter') || '' : '',\n runningInstances: this.props.runningInstances || {},\n scriptsHash: props.scriptsHash,\n showAdapterDebug: false,\n };\n\n const newExp = this.ensureSelectedIsVisible();\n if (newExp) {\n this.state.expanded = newExp;\n }\n\n // debounce search process\n this.filterTimer = null;\n\n this.state.isAllZeroInstances = this.getIsAllZeroInstances();\n\n this.problems = null; //cache\n this.problemsTimer = null;\n this.onProblemUpdatedBound = this.onProblemUpdated.bind(this);\n }\n\n readProblems(cb, tasks) {\n if (!tasks) {\n tasks = Object.keys(this.props.scripts);\n }\n if (!tasks || !tasks.length) {\n cb && cb();\n } else {\n const id = tasks.shift();\n if (this.props.scripts[id] &&\n this.props.scripts[id].type === 'script' &&\n this.props.scripts[id].common &&\n this.props.scripts[id].common.enabled &&\n !id.match(/^script\\.js\\.global\\./) // GLOBAL_ID\n ) {\n const instance = this.props.scripts[id].common.engine.split('.').pop();\n const that = this; // sometimes lambda does not work\n const _id = 'javascript.' + instance + '.scriptProblem.' + id.substring(ROOT_ID.length + 1);\n\n this.props.socket.getState(_id, (err, state) => {\n that.onProblemUpdated(_id, state);\n setTimeout(() => that.readProblems(cb, tasks), 0);\n });\n } else {\n setTimeout(() => this.readProblems(cb, tasks), 0);\n }\n }\n }\n\n componentDidMount() {\n this.readProblems(() => {\n this.props.instances.forEach(instance => {\n this.props.socket.subscribeState('javascript.' + instance + '.scriptProblem.*', this.onProblemUpdatedBound);\n });\n });\n }\n\n componentWillUnmount() {\n this.props.instances.forEach(instance => {\n this.props.socket.unsubscribeState('javascript.' + instance + '.scriptProblem.*', this.onProblemUpdatedBound);\n });\n }\n\n onProblemUpdated(id, state) {\n if (!state || !id) return;\n id = ROOT_ID + '.' + id.replace(/^javascript\\.\\d+\\.scriptProblem\\./, '');\n\n if (!this.problems) {\n this.problems = JSON.parse(JSON.stringify(this.state.problems));\n }\n let changed = false;\n\n if (state.val) {\n if (this.problems.indexOf(id) === -1) {\n this.problems.push(id);\n changed = true;\n }\n } else {\n const pos = this.problems.indexOf(id);\n if (pos !== -1) {\n this.problems.splice(pos, 1);\n changed = true;\n }\n }\n\n if (changed && !this.problemsTimer) {\n this.problemsTimer = setTimeout(() => {\n this.problemsTimer = null;\n this.setState({problems: this.problems});\n this.problems = null;\n }, 300);\n }\n }\n\n static filterListStatic(isSearchEnabled, listItems, searchMode, searchText, objects) {\n listItems = JSON.parse(JSON.stringify(listItems));\n let changed = false;\n let newState = {listItems};\n if (isSearchEnabled !== false && searchMode && searchText) {\n const text = searchText.toLowerCase();\n listItems.forEach(item => {\n const id = item.title.toLowerCase();\n item.filteredPartly = false;\n let found = id.indexOf(text) !== -1;\n if (!found && (objects && objects[item.id] && objects[item.id].common && objects[item.id].common.source)) {\n if (objects[item.id].common.engineType === 'Blockly') {\n const pos = objects[item.id].common.source.lastIndexOf('//');\n found = objects[item.id].common.source.substring(0, pos).toLowerCase().indexOf(text) !== -1;\n } else {\n found = objects[item.id].common.source.toLowerCase().indexOf(text) !== -1;\n }\n }\n if (found) {\n if (item.filtered) {\n item.filtered = false;\n changed = true;\n }\n } else if (!item.filtered) {\n item.filtered = true;\n changed = true;\n }\n });\n\n if (changed) {\n // check that all parents of every non-filtered item are visible\n for (let i = listItems.length - 1; i >= 0; i--) {\n const item = listItems[i];\n if (!item.filtered || item.filteredPartly) {\n let it = item;\n do {\n if (it.parent && listItems[it.parentIndex]) {\n changed = true;\n listItems[it.parentIndex].filteredPartly = true;\n }\n it = it.parent && listItems[it.parentIndex] ? listItems[it.parentIndex] : null;\n } while(it);\n }\n }\n }\n } else {\n listItems.forEach(item => {\n if (item.filtered || item.filteredPartly) {\n item.filtered = false;\n item.filteredPartly = false;\n changed = true;\n }\n });\n if (isSearchEnabled === false) {\n newState.searchText = '';\n newState.searchMode = false;\n changed = true;\n }\n }\n\n return changed ? newState : null;\n }\n\n filterList(isSearchEnabled, cb) {\n const newState = SideDrawer.filterListStatic(\n isSearchEnabled,\n this.state.listItems,\n this.state.searchMode,\n this.state.searchText,\n this.props.scripts\n );\n\n if (newState) {\n this.setState(newState, () => cb && cb());\n } else if (cb) {\n cb();\n }\n }\n\n static ensureSelectedIsVisibleStatic(selected, expanded, listItems) {\n expanded = JSON.parse(JSON.stringify(expanded));\n let changed = false;\n\n // ensure that the item is visible\n let el = typeof selected === 'object' ? selected : listItems.find(it => it.id === selected);\n do {\n // eslint-disable-next-line\n el = el && el.parent && listItems.find(it => it.id === el.parent);\n if (el) {\n if (expanded.indexOf(el.id) === -1) {\n expanded.push(el.id);\n changed = true;\n }\n }\n } while(el);\n return changed && expanded;\n }\n\n ensureSelectedIsVisible(selected, expanded) {\n SideDrawer.ensureSelectedIsVisibleStatic(selected || this.state.selected, expanded || this.state.expanded, this.state.listItems);\n }\n\n static getDerivedStateFromProps(props, state) {\n const newState = {};\n let changed = false;\n if (state.expertMode !== props.expertMode) {\n changed = true;\n newState.expertMode = props.expertMode;\n }\n if (state.scriptsHash !== props.scriptsHash && props.scripts) {\n const listItems = prepareList(props.scripts || {});\n\n newState.listItems = listItems;\n\n if (state.searchText) {\n const nState = SideDrawer.filterListStatic(true, listItems, state.searchMode, state.searchText, props.scripts);\n nState && Object.assign(newState, nState);\n }\n\n const isAllZeroInstances = SideDrawer.getIsAllZeroInstancesStatic(listItems, props.instances || []);\n\n const newExp = SideDrawer.ensureSelectedIsVisibleStatic(state.selected, state.expanded, state.listItems);\n\n newState.isAllZeroInstances = isAllZeroInstances;\n if (newExp) {\n newState.expanded = newExp;\n }\n changed = true;\n }\n\n if (state.width !== props.width) {\n changed = true;\n newState.width = props.width;\n }\n if (state.themeName !== props.themeName) {\n changed = true;\n newState.themeName = props.themeName;\n }\n\n if (props.selectId && state.selected !== props.selectId) {\n const item = state.listItems.find(item => item.id === props.selectId);\n\n if (!state.reorder && item) {\n const expanded = SideDrawer.ensureSelectedIsVisibleStatic(item, state.expanded, state.listItems);\n newState.selected = item.id;\n if (expanded) {\n newState.expanded = expanded;\n }\n changed = true;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n if (changed) {\n return newState;\n } else {\n return null;\n }\n }\n\n static getIsAllZeroInstancesStatic(listItems, instances) {\n let isAllZeroInstances = !instances[0] && instances.length <= 1;\n\n if (isAllZeroInstances) {\n listItems.forEach(item => {\n if (item.type !== 'folder' && item.instance !== 0) {\n isAllZeroInstances = false;\n }\n });\n }\n return isAllZeroInstances;\n }\n\n getIsAllZeroInstances(listItems, instances) {\n listItems = listItems || this.state.listItems;\n instances = instances || this.state.instances;\n return SideDrawer.getIsAllZeroInstancesStatic(listItems || this.state.listItems, instances || this.state.instances);\n }\n\n saveExpanded(expanded) {\n window.localStorage.setItem('SideMenu.expanded', JSON.stringify(expanded || this.state.expanded));\n }\n\n showError(err) {\n this.setState({errorText: err});\n }\n\n onToggle(id, e) {\n e && e.stopPropagation();\n if (id === ROOT_ID) {\n return;\n }\n const expanded = [...this.state.expanded];\n const newState = {expanded};\n const pos = expanded.indexOf(id);\n if (pos !== -1) {\n expanded.splice(pos, 1);\n if (this.state.selected && this.state.selected.startsWith(id + '.')) {\n newState.selected = id;\n window.localStorage && window.localStorage.setItem('SideMenu.selected', id);\n }\n } else {\n expanded.push(id);\n expanded.sort();\n }\n this.setState({expanded});\n this.saveExpanded(expanded);\n }\n\n renderItemButtonsOnEnd(item, children) {\n if (this.state.reorder) {\n return null;\n }\n if (item.type !== 'folder') {\n let color = item.enabled ? COLOR_RUN : COLOR_PAUSE;\n if (item.enabled && this.state.problems.indexOf(item.id) !== -1) {\n color = COLOR_PROBLEM;\n }\n\n return [\n <IconButton\n className={clsx(this.props.classes.iconButtons, this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n onClick={e => {\n e.stopPropagation();\n this.props.onEnableDisable && this.props.onEnableDisable(item.id, !item.enabled)\n }}\n title={item.enabled ? I18n.t('Pause script') : I18n.t('Run script')}\n disabled={this.props.debugMode}\n key=\"startStop\"\n style={{color}}\n size=\"medium\">\n {item.enabled ? <IconPause/> : <IconPlay/>}\n </IconButton>,\n this.state.width > NARROW_WIDTH ? <IconButton\n key=\"delete\"\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n title={I18n.t('Delete script')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"><IconDelete/></IconButton> : null,\n <IconButton\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n key=\"openInEdit\"\n title={I18n.t('Edit script or just double click')}\n onClick={e => this.onEdit(item, e)}\n size=\"medium\">\n <IconDoEdit/>\n </IconButton>,\n ];\n } else if (this.state.width > NARROW_WIDTH) {\n if (item.id !== ROOT_ID && item.id !== COMMON_ID && item.id !== GLOBAL_ID && (!children || !children.length)) {\n return (\n <IconButton\n className={clsx(this.props.debugMode && this.props.classes.iconButtonsDisabled)}\n key=\"delete\"\n title={I18n.t('Delete folder')}\n disabled={item.id === GLOBAL_ID || item.id === COMMON_ID || this.props.debugMode}\n onClick={e => this.onDelete(item, e)}\n size=\"medium\"><IconDelete/></IconButton>\n );\n } else {\n return null;\n }\n }\n }\n\n onDelete(item, e) {\n e && e.stopPropagation();\n return new Promise(resolve => {\n if (typeof item !== 'object') {\n this.setState({deleting: item});\n } else {\n this.setState({deleting: item.id});\n }\n });\n }\n\n onEdit(item, e) {\n this.onClick(item, e);\n this.props.onEdit && this.props.onEdit(item.id);\n }\n\n getTextStyle(item) {\n if (!this.state.reorder && item.type !== 'folder') {\n return {\n //width: 130,\n width: `calc(100% - ${this.state.width > NARROW_WIDTH ? 185 : 137}px)`,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n flex: 'none',\n padding: '0 16px 0 0'\n };\n } else {\n return {\n whiteSpace: 'nowrap',\n padding: '0 16px 0 0'\n };\n }\n }\n\n onClick(item, e) {\n e && e.stopPropagation();\n if (!this.state.reorder && item) {\n const expanded = this.ensureSelectedIsVisible(item);\n const newState = {selected: item.id};\n if (expanded) {\n newState.expanded = expanded;\n }\n this.setState(newState);\n window.localStorage && window.localStorage.setItem('SideMenu.selected', item.id);\n }\n }\n\n onDblClick(item, e) {\n e && e.stopPropagation();\n if (this.state.reorder) {\n return;\n }\n if (item.type === 'folder') {\n this.onToggle(item.id);\n } else {\n this.onEdit(item);\n }\n }\n\n isFilteredOut(item) {\n if (item.filtered && !item.filteredPartly) return true;\n\n if (this.state.typeFilter && item.type !== 'folder' && item.type !== this.state.typeFilter) {\n return true;\n }\n\n if (this.state.statusFilter &&\n item.type !== 'folder' &&\n (\n (this.state.statusFilter === 'running' && !item.enabled) ||\n (this.state.statusFilter === 'paused' && item.enabled) ||\n (this.state.statusFilter === 'problems' && (!item.enabled || this.state.problems.indexOf(item.id) === -1)))\n ) {\n return true;\n }\n\n return (item.id === GLOBAL_ID && !this.state.expertMode);\n }\n\n renderListItem(item, children, childrenFiltered) {\n if (item.id === ROOT_ID && !this.state.reorder) {\n return null;\n }\n\n const depthPx = (this.state.reorder ? item.depth : item.depth - 1) * LEVEL_PADDING;\n\n let title = item.title;\n\n if (this.state.searchText) {\n const pos = title.toLowerCase().indexOf(this.state.searchText.toLowerCase());\n if (pos !== -1) {\n title = [\n (<span key=\"first\">{title.substring(0, pos)}</span>),\n (<span key=\"second\" style={{color: 'orange'}}>{title.substring(pos, pos + this.state.searchText.length)}</span>),\n (<span key=\"third\">{title.substring(pos + this.state.searchText.length)}</span>),\n ];\n }\n }\n\n if (!this.state.isAllZeroInstances && item.type !== 'folder') {\n title = [\n <span key=\"instance\" title={I18n.t('Instance')} className={this.props.classes.instances}>[{item.instance}] </span>,\n <span key=\"title\">{title}</span>\n ];\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const style = Object.assign({\n marginLeft: depthPx,\n cursor: item.type === 'folder' && reorder ? 'default' : 'inherit',\n width: `calc(100% - ${depthPx}px)`\n }, item.id === this.state.selected && !reorder ? SELECTED_STYLE : {});\n\n if (!reorder) {\n style.opacity = item.filteredPartly ? 0.5 : 1;\n }\n\n if (item.id === GLOBAL_ID && item.id !== this.state.selected) {\n style.color = '#00a200';\n }\n\n let isExpanded = item.id === ROOT_ID;\n if (!isExpanded && children) {\n isExpanded = this.state.expanded.includes(item.id);\n }\n\n let iconStyle = {};\n if (item.id === GLOBAL_ID) {\n iconStyle.color = '#356956';\n } else if (item.id === COMMON_ID) {\n iconStyle.color = '#4899e1';\n }\n let iconClass;\n if (item.type === 'folder') {\n iconClass = clsx(this.props.classes.folderIcon, reorder ? this.props.classes.folderIconReorder : this.props.classes.folderIconNoReorder);\n } else {\n iconClass = clsx(this.props.classes.scriptIcon, reorder ? this.props.classes.scriptIconReorder : this.props.classes.scriptIconNoReorder);\n }\n\n let childrenCount = null;\n if ((childrenFiltered && childrenFiltered.length) || (children && children.length)) {\n childrenCount = <span className={this.props.classes.childrenCount}>{childrenFiltered && childrenFiltered.length !== children.length ? `${childrenFiltered.length}(${children.length})` : children.length}</span>;\n }\n\n return <ListItem\n key={item.id}\n style={style}\n className={clsx(\n item.type === 'folder' ? this.props.classes.folder : this.props.classes.script,\n reorder && item.type === 'folder' && 'folder-reorder',\n reorder && item.type !== 'folder' && 'script-reorder',\n reorder && this.props.classes.reorder,\n reorder && item.type !== 'folder' && this.props.classes.scriptReorder,\n reorder && item.type === 'folder' && this.props.classes.folderReorder,\n )}\n onClick={e => this.onClick(item, e)}\n onDoubleClick={e => this.onDblClick(item, e)}\n >\n <ListItemIcon\n classes={{root: this.props.classes.listItemIcon}}\n >{\n item.type === 'folder' ? (\n reorder || isExpanded ?\n <IconFolderOpened className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)}/> :\n <IconFolder className={iconClass} style={iconStyle} onClick={e => !reorder && this.onToggle(item.id, e)}/>\n )\n :\n <img className={iconClass} alt={item.type} src={images[item.type] || images.def}/>\n }</ListItemIcon>\n <ListItemText\n classes={{primary: item.id === this.state.selected && !reorder ? this.props.classes.selected : undefined}}\n style={this.getTextStyle(item)} primary={(<span>{title}{childrenCount}</span>)}/>\n <ListItemSecondaryAction>{this.renderItemButtonsOnEnd(item, children)}</ListItemSecondaryAction>\n </ListItem>;\n }\n\n onDragFinish(source, target) {\n let newId = target + '.' + source.split('.').pop();\n if (newId !== source) {\n // If target yet exists => add Copy to\n if (this.state.listItems.find(item => item.id === newId)) {\n newId += '_' + I18n.t('copy');\n }\n\n this.props.onRename && this.props.onRename(source, newId);\n }\n return undefined;\n }\n\n renderOneItem(items, item, dragging) {\n let childrenFiltered = (this.state.statusFilter || this.state.typeFilter) && items.filter(i => i.parent === item.id ? !this.isFilteredOut(i) : false);\n let children = items.filter(i => i.parent === item.id);\n\n if (this.isFilteredOut(item)) {\n return;\n }\n\n if (item.type === 'folder' && (this.state.statusFilter || this.state.typeFilter) && !childrenFiltered.length) {\n return;\n }\n const reorder = this.state.reorder && !this.props.debugMode;\n\n const element = this.renderListItem(item, children, childrenFiltered);\n const result = [];\n let reactChildren;\n if (children && (reorder || this.state.expanded.includes(item.id) || item.id === ROOT_ID)) {\n reactChildren = children.map(it => this.renderOneItem(items, it));\n }\n\n if (reorder) {\n if (item.type === 'folder') {\n result.push(<Droppable key={'droppable_' + item.id} onDrop={e => this.onDragFinish(e.name, item.id)}>\n <Draggable key={'draggable_' + item.id} name={item.id}>{element}</Draggable>\n {reactChildren || null}\n </Droppable>);\n } else {\n result.push(<Draggable key={'draggable_' + item.id} name={item.id}>\n {element}\n {reactChildren || null}\n </Draggable>);\n }\n } else {\n result.push(element);\n reactChildren && reactChildren.forEach(e => result.push(e));\n }\n\n return result;\n }\n\n renderAllItems(items) {\n const result = items\n .filter(item => !item.parent)\n .map(item =>\n this.renderOneItem(items, item));\n\n return <List\n dense={true}\n disablePadding={true}\n className={this.props.classes.mainList}\n >\n {result}\n </List>;\n }\n\n onAddNew(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({choosingType: true});\n }\n\n onCopy(e, id) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === id);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({copingScript: id});\n }\n\n onAddNewFolder(e) {\n e && e.stopPropagation();\n let item = this.state.listItems.find(i => i.id === this.state.selected);\n let parent = ROOT_ID;\n while (item && item.type !== 'folder') {\n item = this.state.listItems[item.parentIndex];\n }\n if (item) {\n parent = item.id;\n }\n\n this.parent = parent;\n this.setState({creatingFolder: true});\n }\n\n onRename(e) {\n e && e.stopPropagation();\n this.setState({renaming: this.state.selected});\n }\n\n getUniqueName(copyId) {\n let i = 1;\n let word = I18n.t('Script') + ' ';\n if (copyId) {\n let name = getObjectName(copyId, this.props.scripts[copyId]);\n const m = name.match(/\\d+$/);\n if (m) {\n word = name.replace(/\\d+$/, '');\n i = parseInt(m[0], 10) + 1;\n } else {\n word = name;\n }\n }\n\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === this.parent + '.' + word.replace(/\\.\\s/g, '_') + i)) {\n i++;\n }\n /*ignore jslint end*/\n return word + i;\n }\n\n getUniqueFolderName() {\n let i = 1;\n // eslint-disable-next-line\n while (this.state.listItems.find(it => it.id === this.parent + '.' + I18n.t('Folder') + '_' + i)) {\n i++;\n }\n return I18n.t('Folder') + ' ' + i;\n }\n\n onCloseMenu(cb) {\n this.setState({menuOpened: false, menuAnchorEl: null, menuAnchorFilterEl: null}, cb);\n }\n\n getFilterBadge() {\n return [\n this.state.statusFilter === true && (<IconPlay className={this.props.classes.filterIcon} style={{color: COLOR_RUN}}/>),\n this.state.statusFilter === false && (<IconPause className={this.props.classes.filterIcon} style={{color: COLOR_PAUSE}}/>),\n this.state.typeFilter === 'Blockly' && ('Bl'),\n this.state.typeFilter === 'Javascript/js' && ('JS'),\n this.state.typeFilter === 'TypeScript/ts' && ('TS'),\n ]\n }\n\n getMainMenu(children, selectedItem) {\n return <Menu\n key=\"menu\"\n id=\"long-menu\"\n anchorEl={this.state.menuAnchorEl}\n open={this.state.menuOpened}\n onClose={() => this.setState({menuOpened: false, menuAnchorEl: null})}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n //width: 200,\n },\n }}\n >\n {this.state.width <= NARROW_WIDTH ? <MenuItem\n key=\"delete\"\n disabled={this.props.debugMode || !this.state.selected || this.state.selected === GLOBAL_ID || this.state.selected === COMMON_ID || (children && children.length)}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n if (this.state.listItems.find(item => item.parent === this.state.selected)) {\n this.showError(I18n.t('Cannot delete non empty item!'));\n return;\n }\n\n this.setState({menuOpened: false, menuAnchorEl: null}, () =>\n this.onDelete(this.state.selected).then(() => {}));\n }}><IconDelete className={this.props.classes.iconDropdownMenu} style={{color: 'red'}}/>{I18n.t('Delete')}\n </MenuItem> : null}\n <MenuItem\n key=\"expertMode\"\n disabled={this.props.debugMode}\n selected={this.state.expertMode}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.props.onExpertModeChange && this.props.onExpertModeChange(!this.state.expertMode));\n }}>\n <IconExpert className={this.props.classes.iconDropdownMenu} style={{color: this.state.expertMode ? 'orange' : 'inherit'}}/>{I18n.t('Expert mode')}\n </MenuItem>\n {this.props.onExport && <MenuItem\n key=\"exportAll\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onExport());\n }}>\n <IconExport className={this.props.classes.iconDropdownMenu} />{I18n.t('Export all scripts')}\n </MenuItem>}\n {this.props.onImport && <MenuItem\n disabled={this.props.debugMode}\n key=\"import\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() => this.props.onImport());\n }}>\n <IconImport className={this.props.classes.iconDropdownMenu} />{I18n.t('Import scripts')}\n </MenuItem>}\n {this.props.onThemeChange && <MenuItem\n key=\"dark\"\n onClick={event =>\n this.onCloseMenu(() => {\n\n // TODO: use Utils.toggleTheme(themeName)\n // newThemeName = Utils.toggleTheme(themeName);\n const newThemeName = this.state.themeName === 'dark' ? 'blue' :\n this.state.themeName === 'blue' ? 'colored' : this.state.themeName === 'colored' ? 'light' :\n this.state.themeName === 'light' ? 'dark' : 'colored';\n this.props.onThemeChange(newThemeName);\n })}>\n <IconDark className={this.props.classes.iconDropdownMenu} />{I18n.t('Change theme (actual \"%s\")', this.state.themeName)}\n </MenuItem>}\n {this.props.onAddNew && <MenuItem key=\"copy\"\n disabled={!this.state.selected || !selectedItem || selectedItem.type === 'folder'}\n onClick={event => {\n const selected = this.state.selected;\n this.onCloseMenu(() => this.onCopy(event, selected))\n }}>\n <IconCopy className={this.props.classes.iconDropdownMenu} />{I18n.t('Copy script')}\n </MenuItem>}\n {this.state.expertMode && <MenuItem\n disabled={this.props.debugMode}\n key=\"debugInstance\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.onCloseMenu(() =>\n this.setState({showAdapterDebug: true}));\n }}>\n <IconDebug className={this.props.classes.iconDropdownMenu}/>{I18n.t('Debug instance')}\n </MenuItem>}\n </Menu>;\n }\n\n // render menu and toolbar\n getToolbarButtons() {\n const result = [];\n const classes = this.props.classes;\n const reorder = this.state.reorder && !this.props.debugMode;\n if (this.state.searchMode && !this.props.debugMode) {\n result.push(<><Input\n key=\"searchInput\"\n value={this.state.searchText}\n className={classes.toolbarSearch}\n ref={this.inputRef}\n autoFocus={true}\n placeholder={I18n.t('Search...')}\n onChange={e => {\n this.setState({searchText: e.target.value});\n this.filterTimer && clearTimeout(this.filterTimer);\n this.filterTimer = setTimeout(() => {\n this.filterTimer = null;\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n }, 400);\n }}\n /></>);\n\n result.push(<IconButton\n key=\"disableSearch\"\n className={classes.toolbarButtons}\n style={{float: 'right'}}\n title={I18n.t('End search mode')}\n onClick={e => {\n e.stopPropagation();\n this.filterList(false, () => this.props.onSearch && this.props.onSearch(this.state.searchText));\n }}\n size=\"medium\"><IconClose /></IconButton>);\n\n this.state.searchText && result.push(<IconButton\n key=\"cleanSearch\"\n mini=\"true\"\n title={I18n.t('Clear search input')}\n className={classes.toolbarButtons}\n style={{marginTop: 7, float: 'right'}}\n onClick={e => {\n e.stopPropagation();\n this.setState({searchText: ''}, () => {\n this.filterList(true);\n this.props.onSearch && this.props.onSearch(this.state.searchText);\n });\n }}\n size=\"medium\"><IconClear fontSize=\"small\"/></IconButton>);\n } else {\n if (!reorder) {\n // Open Menu\n result.push(<IconButton\n key=\"menuButton\"\n aria-label=\"More\"\n aria-owns={this.state.menuOpened ? 'long-menu' : undefined}\n title={I18n.t('Menu')}\n aria-haspopup=\"true\"\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({menuOpened: true, menuAnchorEl: event.currentTarget});\n }}\n size=\"medium\">\n {/*<Badge className={classes.margin} badgeContent={this.getFilterBadge()}>*/}\n <IconMore />\n {/*</Badge>*/}\n </IconButton>);\n\n const selectedItem = this.state.listItems.find(it => it.id === this.state.selected);\n let children;\n if (selectedItem && this.state.width <= NARROW_WIDTH && selectedItem.type === 'folder') {\n children = this.state.listItems.filter(i => i.parent === this.state.selected);\n }\n\n // Menu\n result.push(this.getMainMenu(children, selectedItem));\n\n // New Script\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-script\"\n title={I18n.t('Create new script')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit'}}\n onClick={e => this.onAddNew(e)}\n size=\"medium\"><IconAdd/></IconButton>);\n\n // New Folder\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"new-folder\"\n title={I18n.t('Create new folder')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit'}}\n onClick={() => this.onAddNewFolder()}\n size=\"medium\"><IconAddFolder/></IconButton>);\n }\n\n // Search\n result.push(<IconButton\n key=\"search\"\n disabled={reorder || this.props.debugMode}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n title={I18n.t('Search in scripts')}\n style={{float: 'right', opacity: this.props.debugMode ? 0.5 : (reorder ? 0 : 1)}}\n onClick={e => {\n e.stopPropagation();\n this.setState({searchMode: true});\n }}\n size=\"medium\"><IconFind/></IconButton>);\n\n // Reorder button\n result.push(<IconButton\n disabled={this.props.debugMode}\n key=\"reorder\"\n title={I18n.t('Reorder scripts in folders')}\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n style={{color: reorder ? 'red' : 'inherit', float: 'right'}}\n onClick={e => {\n e.stopPropagation();\n this.setState({reorder: !this.state.reorder});\n }}\n size=\"medium\"><IconReorder/></IconButton>);\n\n if (!reorder && this.state.selected && this.state.selected !== GLOBAL_ID && this.state.selected !== COMMON_ID) {\n // Rename\n result.push(<IconButton\n className={clsx(classes.toolbarButtons, this.props.debugMode && classes.iconButtonsDisabled)}\n disabled={this.props.debugMode}\n title={I18n.t('Rename')}\n key=\"rename\"\n onClick={e => this.onRename(e)}\n size=\"medium\"><IconEdit/></IconButton>);\n\n\n // const selectedItem = this.state.listItems.find(i => i.id === this.state.selected);\n // if (selectedItem && selectedItem.type !== 'folder') {\n // // Restart\n // result.push((<IconButton className={classes.toolbarButtons}\n // key=\"restart\"\n // onClick={e => {\n // e.stopPropagation();\n // this.props.onEnableDisable && this.props.onEnableDisable();\n // }}\n // ><IconRestart/></IconButton>));\n // }\n }\n\n }\n return result;\n }\n\n getFolders() {\n const folders = [{id: ROOT_ID, name: I18n.t('Root folder')}];\n this.state.listItems.forEach(item =>\n item.type === 'folder' && folders.push({id: item.id, name: item.title})\n );\n return folders;\n }\n\n onCollapseAll() {\n this.setState({expanded: []});\n this.saveExpanded([]);\n }\n\n onExpandAll() {\n const expanded = [];\n this.state.listItems.forEach(item =>\n this.state.listItems.find(it => it.parent === item.id) && expanded.push(item.id));\n this.setState({expanded});\n this.saveExpanded(expanded);\n }\n\n getBottomButtons() {\n if (this.state.reorder || this.props.debugMode) {\n return null;\n }\n return [\n <IconPause\n key=\"filterByRunning\"\n className={this.props.classes.footerButtons}\n style={{color: COLOR_RUN, opacity: this.state.statusFilter === 'running' ? 1 : 0.3, background: this.state.statusFilter === 'running' ? 'gray' : 'inherit'}}\n title={I18n.t('Show only running scripts')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n const statusFilter = this.state.statusFilter === 'running' ? '' : 'running';\n window.localStorage && window.localStorage.setItem('SideMenu.statusFilter', statusFilter);\n this.setState({statusFilter});\n }}\n />,\n\n <IconPlay\n key=\"filterByPaused\"\n title={I18n.t('Show only paused scripts')}\n className={this.props.classes.footerButtons}\n style={{color: COLOR_PAUSE, opacity: this.state.statusFilter === 'paused' ? 1 : 0.3, background: this.state.statusFilter === 'paused' ? 'gray' : 'inherit'}}\n onClick={event => {\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={event => {\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={event => {\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={event => {\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={event => {\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 === 'TypeScript/ts' ? 'gray' : 'inherit'}}\n src={images['Rules'] || images.def}\n onClick={event => {\n const typeFilter = this.state.typeFilter === 'Rules' ? '' : 'Rules';\n window.localStorage && window.localStorage.setItem('SideMenu.typeFilter', typeFilter);\n this.setState({typeFilter});\n }}\n />,\n <IconExpandAll key=\"expandAll\" className={this.props.classes.footerButtons + ' ' + this.props.classes.footerButtonsRight} title={I18n.t('Expand all')} onClick={() => this.onExpandAll()}/>,\n this.state.expanded.length ? <IconCollapseAll key=\"collapseAll\" className={this.props.classes.footerButtons + ' ' + this.props.classes.footerButtonsRight} title={I18n.t('Collapse all')} onClick={() => this.onCollapseAll()}/> : null,\n ];\n }\n\n getAdapterDebugDialog() {\n if (this.state.showAdapterDebug) {\n return <DialogAdapterDebug\n socket={this.props.socket}\n onClose={() => this.setState({showAdapterDebug: false})}\n onDebug={(instance, adapter) => this.setState({showAdapterDebug: false}, () => this.props.onDebugInstance({instance, adapter}))}\n />;\n }\n }\n\n render() {\n const {classes} = this.props;\n\n const renamingItem = this.state.renaming && this.state.listItems.find(i => i.id === this.state.renaming);\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n\n return [\n <Drawer\n key=\"drawer\"\n variant=\"permanent\"\n className={classes.menu}\n classes={{paper: classes.drawerPaper}}\n anchor='left'\n onClick={() => this.onClick({id: ''})}\n >\n <div className={classes.toolbar}>\n {this.getToolbarButtons()}\n </div>\n\n <Divider/>\n\n <DragDropContext backend={HTML5Backend}>\n <div className={classes.innerMenu}>\n {this.renderAllItems(this.state.listItems)}\n </div>\n </DragDropContext>\n\n <Divider/>\n\n <div className={classes.footer}>{this.getBottomButtons()}</div>\n </Drawer>,\n\n renamingItem ? <DialogRename\n key=\"dialog-rename\"\n name={renamingItem.title}\n title={I18n.t('Rename')}\n id={this.state.renaming}\n folder={renamingItem.type === 'folder'}\n instance={renamingItem.instance}\n instances={this.props.instances}\n onClose={() => this.setState({renaming: false})}\n onRename={(oldId, newName, newId, newInstance) => this.props.onRename && this.props.onRename(oldId, newName, newId, newInstance)}\n /> : null,\n\n this.state.deleting ? <DialogDelete\n key=\"dialog-delete\"\n name={this.state.listItems.find(i => i.id === this.state.deleting).title}\n id={this.state.deleting}\n onClose={() => this.setState({deleting: false})}\n onDelete={id => this.props.onDelete && this.props.onDelete(id)}\n /> : null,\n\n this.state.choosingType ? <DialogAddNewScript\n key=\"dialog-script-type\"\n onClose={type => {\n this.setState({choosingType: false});\n type && this.setState({creatingScript: type})\n }}\n /> : null,\n\n this.state.creatingScript ? <DialogNew\n key=\"dialog-new-script\"\n onClose={() => this.setState({creatingScript: false})}\n title={I18n.t('Create new script')}\n name={ this.getUniqueName() }\n parents={ this.getFolders() }\n folder={ false }\n existingItems={this.state.listItems.map(item => item.id)}\n instance={this.props.instances[0] || 0}\n instances={this.props.instances}\n type={this.state.creatingScript}\n parent={this.parent}\n onAdd={(id, name, instance, type) =>\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type)}\n /> : null,\n\n this.state.copingScript ? <DialogNew\n key=\"dialog-copy-script\"\n onClose={() => this.setState({copingScript: ''})}\n title={I18n.t('Copy script')}\n name={ this.getUniqueName(this.state.copingScript) }\n parents={this.getFolders()}\n folder={false}\n instance={parseInt((copingItem && copingItem.common && copingItem.common.engine && copingItem.common.engine.split('.').pop()) || 0, 10)}\n instances={this.props.instances}\n type={(copingItem && copingItem.common && copingItem.common.engineType) || 'Javascript/js'}\n parent={this.parent}\n onAdd={(id, name, instance, type) => {\n const copingItem = this.state.copingScript && this.props.scripts[this.state.copingScript];\n if (copingItem && copingItem.common) {\n // disable script by coping\n copingItem.common.enabled = false;\n }\n this.props.onAddNew && this.props.onAddNew(id, name, false, instance, type, copingItem && copingItem.common && copingItem.common.source);\n }}\n /> : null,\n\n this.state.creatingFolder ? <DialogNew\n key=\"dialog-new-folder\"\n onClose={() => this.setState({creatingFolder: false})}\n title={I18n.t('Create new folder')}\n parents={this.getFolders()}\n name={this.getUniqueFolderName()}\n parent={this.parent}\n onAdd={(id, name) =>\n this.props.onAddNew && this.props.onAddNew(id, name, true)}\n /> : null,\n\n this.state.errorText ? <DialogError onClose={() => this.setState({errorText: ''})} text={this.state.errorText}/> : null,\n\n this.getAdapterDebugDialog(),\n ];\n }\n}\n\nSideDrawer.propTypes = {\n classes: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n scripts: PropTypes.object.isRequired,\n scriptsHash: PropTypes.number,\n onEdit: PropTypes.func,\n selectId: PropTypes.string,\n expertMode: PropTypes.bool,\n onExpertModeChange: PropTypes.func,\n onEnableDisable: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onSelect: PropTypes.func,\n onAddNew: PropTypes.func,\n onRename: PropTypes.func,\n onDelete: PropTypes.func,\n onImport: PropTypes.func,\n onExport: PropTypes.func,\n onSearch: PropTypes.func,\n onThemeChange: PropTypes.func,\n onDebugInstance: PropTypes.func,\n width: PropTypes.number,\n debugMode: PropTypes.bool,\n};\n\nexport default withStyles(styles)(SideDrawer);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport IconButton from '@mui/material/IconButton';\nimport {MdDeleteForever as IconDelete} from 'react-icons/md';\nimport {MdVerticalAlignBottom as IconBottom} from 'react-icons/md';\nimport {MdContentCopy as IconCopy} from 'react-icons/md';\nimport {MdVisibilityOff as IconHide} from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\n\n// replace later with MdHorizontalSplit and MdVerticalSplit\nconst IconVerticalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAACFJREFUeAFjAIJRwP////8PYIKWHCigNQdKj/pn1D+jAABTG16wVQqVpQAAAABJRU5ErkJggg==';\nconst IconHorizontalSplit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgAQMAAADYVuV7AAAABlBMVEUAAAAzMzPI8eYgAAAAAXRSTlMAQObYZgAAABtJREFUeAFjAIJRwP8fCj7QkENn/4z6Z5QzCgBjbWaoyx1PqQAAAABJRU5ErkJggg==';\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) i = '0' + i.toString();\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) i = '0' + i.toString();\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) i = '0' + i.toString();\n text += i + '.';\n i = d.getMilliseconds();\n if (i < 10) {\n i = '00' + i.toString();\n } else if (i < 100) {\n i = '0' + i.toString();\n }\n text += i;\n return text;\n}\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden'\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n\n },\n toolbox: {\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold'\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4\n },\n layoutIcon: {\n width: 24,\n height: 24,\n background: theme.palette.mode === 'dark' ? '#9d9d9d' : undefined,\n borderRadius: theme.palette.mode === 'dark' ? 30 : undefined,\n },\n});\n\nfunction copyToClipboard(str) {\n const el = window.document.createElement('textarea');\n el.value = str;\n window.document.body.appendChild(el);\n el.select();\n window.document.execCommand('copy');\n window.document.body.removeChild(el);\n}\n\nfunction paddingMs(ms) {\n if (ms < 10) {\n return '00' + ms;\n }\n if (ms < 100) {\n return '0' + ms;\n }\n return ms;\n}\n\nlet gText = {};\n\nclass Log extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n selected: null,\n editing: this.props.editing || []\n };\n this.lastIndex = null;\n this.messagesEnd = React.createRef();\n }\n\n generateLine(message) {\n return <tr key={'tr_' + message.ts + '_' + message.message.substr(-10)} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.message}</td>\n </tr>;\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({behavior: 'smooth'});\n }\n logHandler = message => {\n let allLines = this.state.lines;\n const selected = this.state.editing.find(id => message.message.indexOf(id) !== -1);\n if (!selected) {\n return;\n }\n\n let lines = allLines[selected] || [];\n let text = gText[selected] || [];\n\n lines.push(this.generateLine(message));\n let severity = message.severity;\n if (severity === 'info' || severity === 'warn') {\n severity += ' ';\n }\n const date = new Date(message.ts);\n text.push(`${date.toLocaleString()}.${paddingMs(date.getMilliseconds())}\\t[${severity}]: ${message.message}`);\n if (lines.length > 300) {\n lines.splice(0, lines.length - 300);\n text.splice(0, lines.length - 300);\n }\n gText[selected] = text;\n allLines[selected] = lines;\n\n this.setState({lines: allLines});\n }\n\n componentDidMount() {\n this.props.socket.registerLogHandler(this.logHandler);\n }\n\n componentWillUnmount() {\n this.props.socket.unregisterLogHandler(this.logHandler);\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n static getDerivedStateFromProps(props, state) {\n let changed = false;\n let newState = {};\n\n if (props.selected !== state.selected) {\n let selected = props.selected;\n let allLines = state.lines;\n allLines[selected] = allLines[selected] || [];\n gText[selected] = gText[selected] || [];\n newState.selected = selected;\n changed = true;\n }\n\n if (JSON.stringify(props.editing) !== JSON.stringify(state.editing)) {\n const editing = JSON.parse(JSON.stringify(props.editing));\n changed = true;\n let allLines = state.lines;\n\n for (const id in gText) {\n if (gText.hasOwnProperty(id)) {\n if (!editing.includes(id)) {\n delete gText[id];\n delete allLines[id];\n }\n }\n }\n\n newState.editing = editing;\n }\n return changed ? newState : null;\n }\n\n onCopy() {\n copyToClipboard((gText[this.state.selected] || []).join('\\n'));\n }\n\n clearLog() {\n let allLines = this.state.lines;\n if (allLines[this.state.selected]) {\n allLines[this.state.selected] = [];\n }\n if (gText[this.state.selected]) {\n gText[this.state.selected] = [];\n }\n this.setState({lines: allLines});\n }\n\n renderLogList(lines) {\n if (this.state.selected && lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>{lines}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{float: 'left', clear: 'both'}}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{paddingLeft: 10}}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n render() {\n const lines = this.state.selected && this.state.lines[this.state.selected];\n return (\n <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({goBottom: !this.state.goBottom})}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.clearLog()}\n size=\"medium\"><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy/></IconButton> : null}\n {this.props.onLayoutChange ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onLayoutChange()}\n title={I18n.t('Change layout')}\n size=\"medium\"><img className={this.props.classes.layoutIcon} alt=\"split\" src={this.props.verticalLayout ? IconVerticalSplit : IconHorizontalSplit} /></IconButton> : null}\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onHideLog()}\n title={I18n.t('Hide logs')}\n size=\"medium\"><IconHide /></IconButton>\n </div>\n {this.renderLogList(lines)}\n </div>\n );\n }\n}\n\nLog.propTypes = {\n selected: PropTypes.string,\n socket: PropTypes.object,\n onLayoutChange: PropTypes.func,\n verticalLayout: PropTypes.bool\n};\n\nexport default withStyles(styles)(Log);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Fab from '@mui/material/Fab';\n\nimport {MdGTranslate as IconNoCheck} from 'react-icons/md';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nfunction isIdOfGlobalScript(id) {\n return /^script\\.js\\.global\\./.test(id);\n}\nlet index = 0;\nclass ScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n name: 'current',\n isDark: props.isDark || false,\n language: props.language || 'javascript',\n readOnly: props.readOnly || false,\n alive: true,\n check: false,\n searchText: this.props.searchText || '',\n typingsLoaded: false,\n };\n this.runningInstancesStr = JSON.stringify(this.props.runningInstances);\n this.monacoDiv = null; //ref\n this.editor = null;\n this.monaco = window.monaco;\n this.insert = '';\n this.originalCode = props.code || '';\n this.typings = {}; // TypeScript declarations\n this.lastSearch = '';\n }\n\n waitForMonaco(cb) {\n if (!this.monaco || !this.props.runningInstances) {\n this.monaco = window.monaco;\n this.monacoCounter = this.monacoCounter || 0;\n this.monacoCounter++;\n if (!this.monaco && this.monacoCounter < 20) {\n console.log('wait for monaco loaded');\n return setTimeout(() => this.waitForMonaco(cb), 200);\n } else if (this.monacoCounter >= 20) {\n console.error('Cannot load monaco!');\n }\n } else {\n cb && cb();\n }\n }\n\n loadTypings(runningInstances) {\n if (!this.editor) {\n return;\n }\n runningInstances = runningInstances || this.props.runningInstances;\n let scriptAdapterInstance = runningInstances && Object.keys(runningInstances).find(id => runningInstances[id]);\n if (scriptAdapterInstance) {\n this.props.socket.sendTo(scriptAdapterInstance.replace('system.adapter.', ''), 'loadTypings', null)\n .then(result => {\n this.setState({alive: true, check: true, typingsLoaded: true});\n this.setTypeCheck(true);\n if (result.typings) {\n this.typings = result.typings;\n this.setEditorTypings(this.state.name);\n } else {\n console.error(`failed to load typings: ${result.error}`);\n }\n });\n }\n }\n\n componentDidMount() {\n if (!this.monaco || !this.props.runningInstances) {\n this.monaco = window.monaco;\n if (!this.monaco) {\n console.log('wait for monaco loaded');\n return this.waitForMonaco(() => this.componentDidMount());\n }\n }\n if (!this.editor) {\n this.props.onRegisterSelect && this.props.onRegisterSelect(() => this.editor.getModel().getValueInRange(this.editor.getSelection()));\n // For some reason we have to get the original compiler options\n // and assign new properties one by one\n const compilerOptions = this.monaco.languages.typescript.typescriptDefaults['getCompilerOptions']();\n compilerOptions.target = this.monaco.languages.typescript.ScriptTarget.ES2015;\n compilerOptions.allowJs = true;\n compilerOptions.checkJs = this.props.checkJs !== false;\n compilerOptions.noLib = true;\n compilerOptions.lib = [];\n compilerOptions.useUnknownInCatchVariables = false;\n compilerOptions.moduleResolution = this.monaco.languages.typescript.ModuleResolutionKind.NodeJs;\n this.monaco.languages.typescript.typescriptDefaults.setCompilerOptions(compilerOptions);\n\n this.setTypeCheck(false);\n\n // Create the editor instances\n this.editor = this.monaco.editor.create(this.monacoDiv, {\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n automaticLayout: true,\n glyphMargin: !!this.props.breakpoints,\n });\n\n this.editor.onDidChangeModelContent(e =>\n this.onChange(this.editor.getValue()));\n\n // Load typings for the JS editor\n /** @type {string} */\n this.loadTypings();\n\n this.editor.addCommand(this.monaco.KeyMod.CtrlCmd | this.monaco.KeyCode.KEY_S, () =>\n this.onForceSave());\n\n setTimeout(() => {\n this.highlightText(this.state.searchText);\n this.location = this.props.location;\n this.breakpoints = this.props.breakpoints;\n this.showDecorators();\n });\n }\n const options = {\n selectOnLineNumbers: true,\n scrollBeyondLastLine: false,\n automaticLayout: true,\n readOnly: this.state.readOnly,\n language: this.state.language,\n isDark: this.state.isDark,\n };\n\n this.setEditorOptions(options);\n this.editor.focus();\n this.editor.setValue(this.originalCode);\n if (this.props.onToggleBreakpoint) {\n this.editor.onMouseDown(e => {\n if (e.target.detail && e.target.detail.glyphMarginLeft !== undefined) {\n this.props.onToggleBreakpoint(e.target.position.lineNumber - 1);\n }\n });\n } else {\n this.editor.onMouseDown(null);\n }\n }\n\n /**\n * Sets some options of the code editor\n * @param {object} options The editor options to change\n * @param {Partial<{readOnly: boolean, lineWrap: boolean, language: EditorLanguage, typeCheck: boolean}>} options\n */\n setEditorOptions(options) {\n if (options) {\n if (options.language) {\n this.setEditorLanguage(options.language);\n }\n if (options.readOnly !== undefined) {\n this.editor.updateOptions({readOnly: options.readOnly});\n }\n if (options.lineWrap !== undefined) {\n this.editor.updateOptions({wordWrap: options.lineWrap ? 'on' : 'off'});\n }\n if (options.typeCheck !== undefined) {\n this.setTypeCheck(options.typeCheck);\n }\n if (options.isDark !== undefined) {\n this.monaco.editor.setTheme(options.isDark ? 'vs-dark' : 'vs');\n }\n }\n }\n\n componentWillUnmount() {\n if (this.editor) {\n this.props.onRegisterSelect && this.props.onRegisterSelect(null);\n this.editor.dispose();\n this.editor = null;\n }\n }\n\n /** @typedef {\"javascript\" | \"typescript\" | \"coffee\"} 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.indexOf('.') > -1\n ? uri.substr(0, uri.lastIndexOf('.'))\n : 'index';\n\n const extension =\n language === 'javascript' ? 'js'\n : (language === 'typescript' ? 'ts'\n : (language === 'coffee' ? 'coffee'\n : 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') continue;\n if (path.startsWith('script.js.global') && path !== partialDeclarationsPath) continue;\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, selection.startColumn,\n selection.endLineNumber, 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) {\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 this.location = nextProps.location;\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n } else if (JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)) {\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n } else if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location)) {\n this.location = nextProps.location;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n }\n\n if (this.state.language !== (nextProps.language || 'javascript')) {\n this.setState({language: nextProps.language || 'javascript'});\n options.language = nextProps.language || 'javascript';\n } else if (this.state.readOnly !== (nextProps.readOnly || false)) {\n this.setState({readOnly: nextProps.readOnly || false});\n options.readOnly = nextProps.readOnly;\n } else if (this.state.isDark !== (nextProps.isDark || false)) {\n this.setState({isDark: nextProps.isDark || false});\n options.isDark = nextProps.isDark;\n }\n\n this.setEditorOptions(options);\n\n if (this.insert !== nextProps.insert) {\n this.insert = nextProps.insert;\n if (this.insert) {\n console.log('Insert text' + this.insert);\n setTimeout(insert => {\n this.insertTextIntoEditor(insert);\n setTimeout(() => this.props.onInserted && this.props.onInserted(), 100);\n }, 100, this.insert);\n }\n }\n }\n\n onChange(newValue, e) {\n if (!this.props.readOnly) {\n this.props.onChange && this.props.onChange(this.editor.getValue());\n }\n }\n\n render() {\n if (!this.monaco || !this.props.runningInstances) {\n setTimeout(() => {\n this.monaco = window.monaco;\n this.forceUpdate()\n }, 200);\n return null;\n }\n\n return <div ref={el => this.monacoDiv = el} style={{width: '100%', height: '100%', overflow: 'hidden', position: 'relative'}}>\n {!this.state.check && <Fab\n size=\"small\"\n title={I18n.t('Check is not active, because javascript adapter is disabled')}\n style={{bottom: 10, right: 10, opacity: 0.5, position: 'absolute', zIndex: 1, background: 'red', color: 'white'}}\n color=\"secondary\"><IconNoCheck/></Fab>}\n </div>;\n }\n}\n\nScriptEditor.propTypes = {\n adapterName: PropTypes.string.isRequired,\n socket: PropTypes.object,\n runningInstances: PropTypes.object,\n name: PropTypes.string,\n onChange: PropTypes.func,\n onForceSave: PropTypes.func,\n onInserted: PropTypes.func,\n isDark: PropTypes.bool,\n readOnly: PropTypes.bool,\n code: PropTypes.string,\n language: PropTypes.string,\n onRegisterSelect: PropTypes.func,\n searchText: PropTypes.string,\n checkJs: PropTypes.bool,\n changed: PropTypes.bool,\n\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default ScriptEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Popper from '@mui/material/Popper';\nimport Fade from '@mui/material/Fade';\nimport Paper from '@mui/material/Paper';\n\nimport IconCopy from '@mui/icons-material/FileCopy';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: '100%',\n height: '100%',\n overflow: 'auto'\n },\n textAreaLight: {\n background: 'lightgray'\n },\n dialog: {\n height: '95%'\n },\n typography: {\n padding: theme.spacing(2),\n },\n overflowY: {\n overflowY: 'hidden'\n }\n});\nclass DialogExport extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n anchorEl: null,\n popper: ''\n };\n }\n handleCancel = () => {\n this.props.onClose();\n };\n\n onCopy(event) {\n const el = window.document.getElementById('copy_input');\n if (el) {\n el.select();\n window.document.execCommand('copy');\n const target = event.currentTarget;\n\n setTimeout(() => {\n window.document.execCommand('copy');\n this.setState({ popper: I18n.t('Copied'), anchorEl: target });\n setTimeout(() => this.setState({ popper: '', anchorEl: null }), 1000);\n }, 50);\n\n }\n /*el.value = this.props.text;\n window.document.body.appendChild(el);\n el.select();*/\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n key=\"export-dialog\"\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth={true}\n open={this.props.open}\n aria-labelledby=\"export-dialog-title\"\n >\n <DialogTitle id=\"export-dialog-title\">{I18n.t('Export selected blocks')}</DialogTitle>\n <DialogContent\n classes={{ root: classes.overflowY }}>\n <pre\n id=\"export-text\"\n className={classes.textArea + ' ' + (this.props.themeType === 'dark' ? '' : classes.textAreaLight)}\n >{this.props.text}</pre>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={event => this.onCopy(event)} color=\"secondary\" startIcon={<IconCopy/>}>{I18n.t('Copy to clipboard')}</Button>\n <Button variant=\"contained\" onClick={() => this.handleCancel()} color=\"primary\" startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n\n <Popper\n id=\"popper\"\n style={{ zIndex: 10000 }}\n open={!!this.state.popper}\n placement=\"top\"\n anchorEl={this.state.anchorEl} transition>\n {({ TransitionProps }) => (\n <Fade {...TransitionProps} timeout={350}>\n <Paper>\n <p className={classes.typography}>{this.state.popper}</p>\n </Paper>\n </Fade>\n )}\n </Popper>\n <textarea id=\"copy_input\" readOnly={true} style={{ position: 'absolute', left: -9999 }} tabIndex={-1} aria-hidden={true} value={this.props.text} />\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogExport.defaultProps = {\n open: true\n}\n\nDialogExport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogExport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconOk from '@mui/icons-material/Check';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n height: '100%',\n resize: 'none'\n },\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n});\n\nclass DialogImport extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n text: '',\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel() {\n this.props.onClose();\n }\n\n handleOk() {\n this.props.onClose(this.state.text);\n }\n\n onChange(e) {\n this.setState({ text: e.target.value });\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{ paper: classes.dialog }}\n fullWidth={true}\n open={this.props.open}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import blocks')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <textarea\n autoFocus\n id=\"import-text-area\"\n className={classes.textArea}\n onChange={e => this.onChange(e)}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" disabled={!this.state.text} onClick={event => this.handleOk()} color=\"primary\" startIcon={<IconOk/>}>{I18n.t('Import')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImport.defaultProps = {\n open: true\n}\n\nDialogImport.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n text: PropTypes.string,\n};\n\nexport default withStyles(styles)(DialogImport);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogError from '../Dialogs/Error';\nimport DialogExport from '../Dialogs/Export';\nimport DialogImport from '../Dialogs/Import';\n\nlet languageBlocklyLoaded = false;\nlet languageOwnLoaded = false;\nlet toolboxText = null;\nlet toolboxXml;\nlet scriptsLoaded = [];\n\n// BF (2020-10-31) I have no Idea, why it does not work as static in BlocklyEditor, but outside of BlocklyEditor it works\nfunction searchXml(root, text, _id, _result) {\n _result = _result || [];\n if (root.tagName === 'BLOCK' || root.tagName === 'block') {\n _id = root.id;\n }\n if (root.tagName === 'FIELD' || root.tagName === 'field') {\n for (let a = 0; a < root.attributes.length; a++) {\n const val = (root.attributes[a].value || '').toLowerCase();\n if (root.attributes[a].nodeName === 'name' && (val === 'oid' || val === 'text')) {\n if ((root.innerHTML || root.innerText || '').toLowerCase().includes(text)) {\n _result.push(_id);\n }\n }\n }\n }\n root.childNodes.forEach(node =>\n searchXml(node, text, _id, _result));\n\n return _result;\n}\n\n\nclass BlocklyEditor extends React.Component {\n constructor(props) {\n super(props);\n\n this.blockly = null; //ref\n this.blocklyWorkspace = null;\n this.toolbox = null;\n this.Blockly = window.Blockly;\n\n this.state = {\n languageOwnLoaded,\n languageBlocklyLoaded,\n changed: false,\n message: '',\n error: '',\n themeType: this.props.themeType,\n exportText: '',\n importText: false,\n searchText: this.props.searchText || '',\n };\n this.originalCode = props.code || '';\n\n this.someSelected = null;\n this.changeTimer = null;\n\n this.onResizeBind = this.onResize.bind(this);\n\n this.lastCommand = '';\n this.lastSearch = this.props.searchText || '';\n this.blinkBlock = null;\n this.loadLanguages();\n }\n\n static loadJS(url, callback, location) {\n const scriptTag = document.createElement('script');\n try {\n scriptTag.src = url;\n\n scriptTag.onload = callback;\n scriptTag.onreadystatechange = callback;\n scriptTag.onerror = callback;\n\n (location || window.document.body).appendChild(scriptTag);\n } catch (e) {\n console.error('Cannot load ' + url + ': ' + e);\n callback && callback();\n }\n };\n\n static loadScripts(scripts, callback) {\n if (!scripts || !scripts.length) {\n return callback && callback();\n }\n const adapter = scripts.pop();\n if (scriptsLoaded.indexOf(adapter) === -1) {\n scriptsLoaded.push(adapter);\n BlocklyEditor.loadJS('../../adapter/' + adapter + '/blockly.js', (/*data, textStatus, jqxhr*/) =>\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0));\n } else {\n setTimeout(() => BlocklyEditor.loadScripts(scripts, callback), 0);\n }\n }\n\n static loadCustomBlockly(adapters, callback) {\n // get all adapters, that can have blockly\n const toLoad = [];\n for (const id in adapters) {\n if (!adapters.hasOwnProperty(id) ||\n !adapters[id] ||\n !id.match(/^system\\.adapter\\./) ||\n adapters[id].type !== 'adapter'\n ) {\n continue;\n }\n\n if (adapters[id].common && adapters[id].common.blockly) {\n console.log('Detected custom blockly: ' + adapters[id].common.name);\n toLoad.push(adapters[id].common.name);\n }\n }\n\n BlocklyEditor.loadScripts(toLoad, callback);\n }\n\n static loadXMLDoc(text) {\n let parseXml;\n if (window.DOMParser) {\n parseXml = function(xmlStr) {\n return ( new window.DOMParser() ).parseFromString(xmlStr, \"text/xml\");\n };\n } else if (typeof window.ActiveXObject != \"undefined\" && new window.ActiveXObject(\"Microsoft.XMLDOM\")) {\n parseXml = function(xmlStr) {\n var xmlDoc = new window.ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = \"false\";\n xmlDoc.loadXML(xmlStr);\n return xmlDoc;\n };\n } else {\n parseXml = function() { return null; }\n }\n return parseXml(text);\n }\n\n searchBlocks(text) {\n if (this.blocklyWorkspace) {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const ids = searchXml(dom, text.toLowerCase());\n const allBlocks = this.blocklyWorkspace.getAllBlocks();\n const result = [];\n allBlocks.filter(b => ids.includes(b.id)).forEach(b => result.push(b));\n return result;\n }\n }\n\n searchId() {\n const blocks = this.lastSearch && this.searchBlocks(this.lastSearch);\n if (blocks && blocks.length) {\n this.someSelected = blocks;\n this.someSelected.forEach(b => b.addSelect());\n this.someSelectedTime = Date.now();\n } else if (this.someSelected) {\n // remove selection\n this.someSelected.forEach(b => b.removeSelect());\n this.someSelected = null;\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.command && this.lastCommand !== nextProps.command) {\n this.lastCommand = nextProps.command;\n setTimeout(() => this.lastCommand = '', 300);\n if (this.lastCommand === 'check') {\n this.blocklyCheckBlocks((err, badBlock) => {\n if (!err) {\n this.setState({message: I18n.t('Ok')});\n } else {\n badBlock && this.blocklyBlinkBlock(badBlock);\n this.setState({error: {text: I18n.t(err), title: I18n.t('Error was found')}});\n this.blinkBlock = badBlock;\n }\n });\n } else if (this.lastCommand === 'export') {\n this.exportBlocks();\n } else if (this.lastCommand === 'import') {\n this.importBlocks();\n }\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.searchId();\n }\n\n if (this.state.themeType !== nextProps.themeType) {\n this.setState({themeType: nextProps.themeType}, () => this.updateBackground());\n }\n\n if (this.originalCode !== nextProps.code) {\n this.originalCode = nextProps.code || '';\n this.loadCode();\n this.searchId();\n }\n }\n\n loadLanguages() {\n // load blockly language\n if (!languageBlocklyLoaded) {\n const fileLang = window.document.createElement('script');\n fileLang.setAttribute('type', 'text/javascript');\n fileLang.setAttribute('src', 'google-blockly/msg/js/' + I18n.getLanguage() + '.js');\n\n // most browsers\n fileLang.onload = () => {\n languageBlocklyLoaded = true;\n this.setState({languageBlocklyLoaded});\n };\n // IE 6 & 7\n fileLang.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageBlocklyLoaded = true;\n this.setState({languageBlocklyLoaded});\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileLang);\n }\n if (!languageOwnLoaded) {\n const fileCustom = window.document.createElement('script');\n fileCustom.setAttribute('type', 'text/javascript');\n fileCustom.setAttribute('src', 'google-blockly/own/msg/' + I18n.getLanguage() + '.js');\n // most browsers\n fileCustom.onload = () => {\n languageOwnLoaded = true;\n this.setState({languageOwnLoaded});\n };\n // IE 6 & 7\n fileCustom.onreadystatechange = () => {\n if (this.readyState === 'complete') {\n languageOwnLoaded = true;\n this.setState({languageOwnLoaded});\n }\n };\n window.document.getElementsByTagName('head')[0].appendChild(fileCustom);\n }\n }\n\n onResize() {\n this.Blockly.svgResize(this.blocklyWorkspace);\n }\n\n jsCode2Blockly(text) {\n text = text || '';\n const lines = text.split(/[\\r\\n]+|\\r|\\n/g);\n let xml = '';\n for (let l = lines.length - 1; l >= 0; l--) {\n if (lines[l].substring(0, 2) === '//') {\n xml = lines[l].substring(2);\n break;\n }\n }\n if (xml.substring(0, 4) === '<xml') {\n return xml;\n } else {\n let code;\n try {\n code = window.decodeURIComponent(window.atob(xml));\n } catch (e) {\n code = null;\n console.error('cannot decode: ' + xml);\n console.error(e);\n }\n return code;\n }\n }\n\n blocklyBlinkBlock(block) {\n for (let i = 300; i < 3000; i = i + 300) {\n setTimeout(() => block.select(), i);\n setTimeout(() => block.unselect(), i + 150);\n }\n }\n\n blocklyRemoveOrphanedShadows() {\n if (this.blocklyWorkspace) {\n let blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.isShadow()) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.targetConnection) {\n // remove it\n block.dispose();\n break;\n }\n }\n }\n }\n }\n }\n\n blocklyCheckBlocks(cb) {\n let warningText;\n if (!this.blocklyWorkspace || this.blocklyWorkspace.getAllBlocks().length === 0) {\n cb && cb('no blocks found');\n return;\n }\n let badBlock = this.blocklyGetUnconnectedBlock();\n if (badBlock) {\n warningText = 'not properly connected';\n } else {\n badBlock = this.blocklyGetBlockWithWarning();\n if (badBlock) {\n warningText = 'warning on this block';\n }\n }\n\n if (badBlock) {\n if (cb) {\n cb(warningText, badBlock);\n } else {\n this.blocklyBlinkBlock(badBlock);\n }\n return false;\n }\n\n cb();\n\n return true;\n }\n\n // get unconnected block\n blocklyGetUnconnectedBlock () {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n const connections = block.getConnections_(true);\n let conn;\n for (let j = 0; (conn = connections[j]); j++) {\n if (!conn.sourceBlock_ || ((conn.type === this.Blockly.INPUT_VALUE || conn.type === this.Blockly.OUTPUT_VALUE) && !conn.targetConnection && !conn._optional)) {\n return block;\n }\n }\n }\n return null;\n }\n\n // get block with warning\n blocklyGetBlockWithWarning() {\n const blocks = this.blocklyWorkspace.getAllBlocks();\n let block;\n for (let i = 0; (block = blocks[i]); i++) {\n if (block.warning) {\n return block;\n }\n }\n return null;\n }\n\n blocklyCode2JSCode(oneWay) {\n let code = this.Blockly.JavaScript.workspaceToCode(this.blocklyWorkspace);\n if (!oneWay) {\n code += '\\n';\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n const text = this.Blockly.Xml.domToText(dom);\n code += '//' + btoa(encodeURIComponent(text));\n }\n\n return code;\n }\n\n exportBlocks() {\n let exportText;\n if (this.Blockly.selected) {\n const xmlBlock = this.Blockly.Xml.blockToDom(this.Blockly.selected);\n if (this.Blockly.dragMode_ !== this.Blockly.DRAG_FREE) {\n this.Blockly.Xml.deleteNext(xmlBlock);\n }\n // Encode start position in XML.\n const xy = this.Blockly.selected.getRelativeToSurfaceXY();\n xmlBlock.setAttribute('x', this.Blockly.selected.RTL ? -xy.x : xy.x);\n xmlBlock.setAttribute('y', xy.y);\n\n exportText = this.Blockly.Xml.domToPrettyText(xmlBlock);\n } else {\n const dom = this.Blockly.Xml.workspaceToDom(this.blocklyWorkspace);\n exportText = this.Blockly.Xml.domToPrettyText(dom);\n }\n this.setState({exportText});\n }\n\n importBlocks() {\n this.setState({importText: true});\n }\n\n onImportBlocks(xml) {\n xml = (xml || '').trim();\n if (xml) {\n try {\n if (!xml.startsWith('<xml')) {\n xml = '<xml xmlns=\"http://www.w3.org/1999/xhtml\">' + xml + '</xml>';\n }\n let variables = xml.replace(/[\\n\\r]/g, '').match(/<variables>(.*)<\\/variables>/);\n if (variables) {\n let vars = this.Blockly.utils.xml.textToDomDocument('<variables>' + variables[1] + '</variables>');\n if (vars) {\n let nodes = vars.childNodes && vars.childNodes[0] && vars.childNodes[0].childNodes;\n if (nodes) {\n for (let i = 0; i < nodes.length; i++) {\n nodes[i].id && this.blocklyWorkspace.createVariable(nodes[i].id);\n }\n }\n }\n }\n xml = xml.replace(/[\\n\\r]/g, '').replace(/<variables>.*<\\/variables>/g, '');\n window.scripts.loading = true;\n let xmlBlocks = this.Blockly.Xml.textToDom(xml);\n if (xmlBlocks.nodeName === 'xml') {\n for (let b = 0; b < xmlBlocks.children.length; b++) {\n this.blocklyWorkspace.paste(xmlBlocks.children[b]);\n }\n } else {\n this.blocklyWorkspace.paste(xmlBlocks);\n }\n\n window.scripts.loading = false;\n\n\n this.onBlocklyChanged();\n } catch (e) {\n this.setState({error: {text: e, title: I18n.t('Import error')}});\n }\n }\n }\n\n loadCode() {\n if (!this.blocklyWorkspace) {\n return;\n }\n\n this.ignoreChanges = true;\n this.blocklyWorkspace.clear();\n\n try {\n const xml = this.jsCode2Blockly(this.originalCode) || '<xml xmlns=\"http://www.w3.org/1999/xhtml\"></xml>';\n window.scripts.loading = true;\n const dom = this.Blockly.Xml.textToDom(xml);\n this.Blockly.Xml.domToWorkspace(dom, this.blocklyWorkspace);\n window.scripts.loading = false;\n } catch (e) {\n console.error(e);\n setTimeout(() => this.setState({error: I18n.t('Cannot extract Blockly code!')}));\n }\n setTimeout(() => this.ignoreChanges = false, 100);\n }\n\n onBlocklyChanged() {\n this.blocklyRemoveOrphanedShadows();\n this.setState({changed: true});\n this.onChange();\n }\n\n 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 || 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 getToolbox() {\n // Interpolate translated messages into toolbox.\n let toolboxText = window.document.getElementById('toolbox').outerHTML;\n toolboxText = toolboxText.replace(/{(\\w+)}/g, (m, p1) => window.MSG[p1]);\n\n if (this.Blockly.CustomBlocks) {\n let blocks = '';\n const lang = I18n.getLanguage();\n for (let cb = 0; cb < this.Blockly.CustomBlocks.length; cb++) {\n const name = this.Blockly.CustomBlocks[cb];\n // add blocks\n blocks += '<category name=\"' + this.Blockly.Words[name][lang] + '\" colour=\"' + this.Blockly[name].HUE + '\">';\n for (const _b in this.Blockly[name].blocks) {\n if (this.Blockly[name].blocks.hasOwnProperty(_b)) {\n blocks += this.Blockly[name].blocks[_b];\n }\n }\n blocks += '</category>';\n }\n toolboxText = toolboxText.replace('<category><block>%%CUSTOM_BLOCKS%%</block></category>', blocks);\n }\n\n return toolboxText;\n }\n\n renderMessageDialog() {\n return this.state.message ?\n <DialogMessage\n key=\"dialogMessage\"\n text={typeof this.state.message === 'object' ? this.state.message.text : this.state.message}\n title={typeof this.state.message === 'object' ? this.state.message.title : ''}\n onClose={() => this.setState({message: ''})}\n /> :\n null;\n }\n\n renderErrorDialog() {\n return this.state.error ?\n <DialogError\n key=\"dialogError\"\n text={typeof this.state.error === 'object' ? this.state.error.text.toString() : this.state.error}\n title={typeof this.state.error === 'object' ? this.state.error.title : ''}\n onClose={() => {\n if (this.blinkBlock) {\n this.blocklyBlinkBlock(this.blinkBlock);\n this.blinkBlock = null;\n }\n this.setState({error: ''});\n }}/> :\n null;\n }\n\n renderExportDialog() {\n return this.state.exportText ? <DialogExport key=\"dialogExport\" theme={this.state.themeType} onClose={() => this.setState({exportText: ''})} text={this.state.exportText}/> : null;\n }\n\n renderImportDialog() {\n return this.state.importText ? <DialogImport key=\"dialogImport\" onClose={text => {\n this.setState({importText: false});\n this.onImportBlocks(text);\n }}/> : null;\n }\n\n render() {\n if (this.state.languageBlocklyLoaded && this.state.languageOwnLoaded) {\n this.didUpdate = setTimeout(() => {\n this.didUpdate = null;\n this.componentDidUpdate();\n }, 100);\n\n return [\n <div key=\"blocklyDOM\" ref={el => this.blockly = el} style={{\n //marginLeft: 180,\n width: '100%',//'calc(100% - 180px)',\n height: '100%',\n //overflow: 'hidden',\n position: 'relative'}}/>,\n\n this.renderMessageDialog(),\n this.renderErrorDialog(),\n this.renderExportDialog(),\n this.renderImportDialog(),\n ];\n } else {\n return null;\n }\n }\n}\n\nBlocklyEditor.propTypes = {\n command: PropTypes.string,\n onChange: PropTypes.func,\n searchText: PropTypes.string,\n themeType: PropTypes.string\n};\n\nexport default BlocklyEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\n\nimport IconSave from '@mui/icons-material/Save';\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n textArea: {\n width: 'calc(100% - 10px)',\n resize: 'none'\n },\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n args: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n height: 30,\n width: '100%',\n fontSize: 16\n },\n argsTitle: {\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n fontWeight: 'bold'\n }\n});\n\nclass DialogScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n changed: false,\n source: this.props.source,\n };\n if (!this.state.source && this.props.isReturn) {\n this.state.source = '\\nreturn false';\n }\n\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('source-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose(false);\n }\n\n handleOk () {\n if (this.props.isReturn && !this.state.source.includes('return ')) {\n\n } else {\n this.props.onClose(this.state.source);\n }\n }\n\n onChange(value) {\n this.setState({changed: true, source: value});\n }\n\n render() {\n const classes = this.props.classes;\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{paper: classes.dialog}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"source-dialog-title\"\n >\n <DialogTitle id=\"source-dialog-title\">{I18n.t('Function editor')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n {this.props.args && (<div key=\"arguments\" className={classes.args}>\n <span className={classes.argsTitle}>{I18n.t('function (')}</span>\n {this.props.args}\n <span className={classes.argsTitle}>)</span>\n </div>)}\n <ScriptEditorComponent\n adapterName={this.props.adapterName}\n runningInstances={this.props.runningInstances}\n className={classes.textArea}\n style={{height: this.props.args ? 'calc(100% - 30px)' : '100%'}}\n key=\"scriptEditor\"\n name={'blockly'}\n socket={this.props.socket}\n readOnly={false}\n checkJs={false}\n changed={this.state.changed}\n code={this.state.source}\n isDark={this.props.themeType === 'dark'}\n onChange={newValue => this.onChange(newValue)}\n language={'javascript'}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" onClick={() => this.handleOk()} color=\"primary\" startIcon={<IconSave/>}>{I18n.t('Save')}</Button>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Cancel')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogScriptEditor.propTypes = {\n classes: PropTypes.object.isRequired,\n adapterName: PropTypes.string.isRequired,\n runningInstances: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n source: PropTypes.string,\n args: PropTypes.string,\n isReturn: PropTypes.bool,\n themeType: PropTypes.string,\n socket: PropTypes.object\n};\n\nexport default withStyles(styles)(DialogScriptEditor);\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapperRules\":\"style_wrapperRules__Js-Pp\",\"rootWrapper\":\"style_rootWrapper__0Dpqp\",\"addClass\":\"style_addClass__ry424\"};","// extracted by mini-css-extract-plugin\nexport default {\"switchesItem\":\"style_switchesItem__RBQz7\",\"switchesItemActive\":\"style_switchesItemActive__FU8S9\",\"iconTheme\":\"style_iconTheme__inJLE\"};","import { useState, useEffect } from 'react';\nimport * as Icons from '@mui/icons-material/';\n\nconst ICON_CACHE = {};\n\nconst MaterialDynamicIcon = ({ iconName, className, adapter, socket, onClick }) => {\n let [url, setUrl] = useState('');\n\n useEffect(() => {\n if (adapter && socket) {\n ICON_CACHE[adapter] = ICON_CACHE[adapter] || socket.getObject(`system.adapter.${adapter}`);\n ICON_CACHE[adapter].then(obj =>\n obj?.common?.icon && setUrl(`../../adapter/${adapter}/${obj.common.icon}`));\n }\n }, [adapter, socket]);\n\n if (adapter) {\n return <img onClick={e => onClick && onClick(e)} src={url || ''} className={className} alt=\"\" />;\n } else {\n const Element = Icons[iconName || 'Help'];\n return <Element\n className={className}\n onClick={e => onClick && onClick(e)}\n />;\n }\n}\n\nMaterialDynamicIcon.defaultProps = {\n className: null,\n iconName: 'Help'\n};\n\nexport default MaterialDynamicIcon;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport cls from './style.module.scss';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst CardMenu = ({ name, id, active, icon, adapter, socket, onDoubleClick, title, onTouchMove }) => <div\n onDoubleClick={onDoubleClick}\n onTouchMove={onTouchMove}\n key={id}\n title={I18n.t(title)}\n className={clsx(cls.switchesItem, active && cls.switchesItemActive, 'block-' + id)}\n>\n <MaterialDynamicIcon iconName={icon} className={cls.iconTheme} adapter={adapter} socket={socket} />\n <span>\n {name ? I18n.t(name) : ''}\n </span>\n</div>;\n\nCardMenu.defaultProps = {\n name: '',\n active: false,\n id: '',\n onDoubleClick: () => { }\n};\n\nCardMenu.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n active: PropTypes.bool\n};\n\nexport default CardMenu;","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__5c+lG\",\"cardStyleActive\":\"style_cardStyleActive__n6Nq8\",\"controlMenu\":\"style_controlMenu__J0sIm\",\"closeBtn\":\"style_closeBtn__TzVMw\",\"isDelete\":\"style_isDelete__0Sa6U\",\"drag_mobile\":\"style_drag_mobile__RVp7B\"};","export function deepCopy(name, userRules, additionalParameter) {\n let newItemsSwitches;\n switch (name) {\n case 'actions':\n newItemsSwitches = {\n ...userRules,\n [name]: {\n ...userRules[name],\n [additionalParameter]: [...userRules[name][additionalParameter]]\n }\n };\n return newItemsSwitches;\n\n default:\n newItemsSwitches = {\n ...userRules,\n [name]: [...userRules[name]]\n };\n return newItemsSwitches;\n }\n}","export function filterElement(name, userRules, additionalParameter, _id) {\n switch (name) {\n case 'actions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n case 'conditions':\n userRules[name][additionalParameter] = userRules[name][additionalParameter].filter(el => el._id !== _id);\n return userRules;\n default:\n userRules[name] = userRules[name].filter(el => el._id !== _id);\n return userRules;\n }\n}","// extracted by mini-css-extract-plugin\nexport default {\"cardStyle\":\"style_cardStyle__A9pAJ\",\"nameCard\":\"style_nameCard__m2nJe\",\"cardStyleActive\":\"style_cardStyleActive__sMSgj\",\"iconThemCard\":\"style_iconThemCard__wx6Kq\",\"iconThemCardSelectable\":\"style_iconThemCardSelectable__H9okn\",\"iconHelp\":\"style_iconHelp__iIi1g\",\"inputCard\":\"style_inputCard__qf8Q+\",\"blockName\":\"style_blockName__CqwBy\",\"controlMenu\":\"style_controlMenu__8kQnd\",\"closeBtn\":\"style_closeBtn__LcbOd\",\"controlMenuTop\":\"style_controlMenuTop__AkzEp\",\"debugInfo\":\"style_debugInfo__wPdyv\",\"fadeIn\":\"style_fadeIn__zKsCh\",\"tagCard\":\"style_tagCard__CEY-X\",\"displayFlex\":\"style_displayFlex__5sr+i\",\"blockMarginTop\":\"style_blockMarginTop__Qn7Lh\",\"nameBlock\":\"style_nameBlock__MZ53S\",\"frontText\":\"style_frontText__3cVcg\",\"backText\":\"style_backText__sF8Y-\",\"iconTag\":\"style_iconTag__2cpM6\",\"displayItalic\":\"style_displayItalic__9KtQw\"};","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__h6PjP\",\"square\":\"style_square__ahzCN\",\"icon\":\"style_icon__jwNl0\"};","import { Button } from '@mui/material';\nimport React from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport cls from './style.module.scss';\nimport CustomIcon from '@iobroker/adapter-react-v5/Components/Icon';\n\nconst CustomButton = ({ fullWidth, size, onClick, style, className, value, square, icon }) => {\n return <Button\n variant=\"outlined\"\n color=\"primary\"\n onClick={onClick}\n fullWidth={fullWidth}\n style={style}\n className={clsx(cls.root, className, square ? cls.square : '')}\n margin=\"normal\"\n size={size}\n >{icon ? <CustomIcon className={cls.icon} src={icon} /> : value}</Button>;\n}\n\nCustomButton.defaultProps = {\n value: '',\n className: null,\n variant: 'standard',\n size: 'medium',\n fullWidth: false,\n square: false\n};\n\nCustomButton.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n};\n\nexport default CustomButton;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__8DT4l\"};","import { Checkbox } from '@mui/material';\nimport React, { memo, useState } from 'react';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nconst CustomCheckbox = ({ size, value, style, title, onChange, className, customValue, disabled }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n\n return <>\n <Checkbox\n disabled={disabled}\n checked={Boolean(customValue ? value : switchChecked)}\n // style={Object.assign(type ? color[type] : null, style)}\n className={clsx(cls.root, className)}\n onChange={e => {\n customValue && setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n {title || null}\n </>;\n}\n\nCustomCheckbox.defaultProps = {\n value: false,\n disabled: false,\n type: null,\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomCheckbox.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomCheckbox);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__WINKv\"};","import { TextField } from '@mui/material';\nimport React, { useState } from 'react';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport CustomIcon from '@iobroker/adapter-react-v5/Components/Icon';\n\nconst CustomInput = ({ autoFocus, fullWidth, disabled, multiline, rows, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, icon }) => {\n const [inputText, setInputText] = useState('');\n return <TextField\n error={!!error}\n autoFocus={autoFocus}\n fullWidth={fullWidth}\n label={label}\n disabled={disabled}\n variant={variant}\n multiline={multiline}\n rows={rows}\n value={customValue ? value : inputText}\n type={type}\n helperText={error}\n style={style}\n className={clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n InputProps={{\n endAdornment: icon ?\n <InputAdornment position=\"end\"><CustomIcon className={cls.icon} src={icon} /></InputAdornment>\n : null\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomInput.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n autoFocus: false,\n rows: 1\n};\n\nCustomInput.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomInput;","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport withStyles from '@mui/styles/withStyles';\nimport React, { useEffect, useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\n\nconst SelectMod = withStyles({\n root: {\n margin: '10px 0',\n '& .MuiFormControl-marginNormal': {\n marginTop: 0,\n marginBottom: 0,\n },\n '& > *': {\n color: '#2d0440 !important'\n },\n '& .MuiSelect-icon': {\n color: '#81688c'\n },\n '& label.Mui-focused': {\n color: '#81688c',\n },\n '& .MuiInput-underline:after': {\n borderBottomColor: '#510573',\n },\n '& .MuiInput-underline:before': {\n borderBottomColor: '#81688c',\n },\n '& .MuiInput-underline:hover:before': {\n borderBottomColor: '#81688c',\n },\n },\n})(FormControl);\n\nconst CustomInstance = ({ multiple, value, customValue, socket, title, attr, adapter, style, onChange, className, onInstanceHide }) => {\n const [inputText, setInputText] = useState(value || 'test1');\n const [options, setOptions] = useState([]);\n\n useEffect(() => {\n socket && socket.getAdapterInstances(adapter)\n .then(instances => {\n const _options = instances.map(obj => ({value: obj._id.replace('system.adapter.', ''), title: obj._id.replace('system.adapter.', '')}));\n if (_options.length === 1) {\n onInstanceHide(_options[0].value);\n } else {\n _options.unshift({value: adapter, title: I18n.t('All')});\n }\n setOptions(_options);\n });\n }, [socket, adapter, onInstanceHide]);\n\n return <SelectMod\n className={className}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={(customValue ? value : inputText) || '_'}\n fullWidth\n multiple={multiple}\n renderValue={(selected) => multiple && selected.join ? selected.join(', ') : selected}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n onChange(e.target.value);\n }}\n input={attr ? <Input name={attr} id={attr + '-helper'} /> : <Input name={attr} />}\n >\n {options.map(item =>\n <MenuItem style={{placeContent:'space-between'}} key={'key-' + item.value} value={item.value || '_'}>{I18n.t(item.title)}{item.title2 && <div>{item.title2}</div>}</MenuItem>)}\n </Select>\n <FormHelperText>{I18n.t(title)}</FormHelperText>\n </SelectMod>;\n}\n\nCustomInstance.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false\n};\n\nCustomInstance.propTypes = {\n title: PropTypes.string,\n socket: PropTypes.object,\n attr: PropTypes.string,\n adapter: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport default CustomInstance;","// extracted by mini-css-extract-plugin\nexport default {\"modalContentWrapper\":\"style_modalContentWrapper__ewzzR\",\"modalButtonBlock\":\"style_modalButtonBlock__otBeq\",\"modalButtonBlockTwo\":\"style_modalButtonBlockTwo__bh8rw\",\"modalWrapper\":\"style_modalWrapper__VUeGq\",\"modalDialog\":\"style_modalDialog__MI8Ka\",\"close\":\"style_close__Z8qAY\"};","import React, {useState} from 'react';\nimport Button from '@mui/material/Button';\nimport { Dialog, DialogActions, DialogContent } from '@mui/material';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport i18n from '@iobroker/adapter-react-v5/i18n';\nimport CustomInput from \"../CustomInput\";\n\nconst CustomModal = ({ open, onClose, children, titleButtonApply, titleButtonClose, onApply, className, textInput, defaultValue}) => {\n let [value, setValue] = useState(defaultValue);\n\n return <Dialog\n open={open}\n maxWidth=\"md\"\n disableEscapeKeyDown={false}\n onClose={onClose}\n classes={{paper: cls.modalDialog, /*paper: classes.background*/}}\n className={cls.modalWrapper}\n >\n <DialogContent>\n {textInput && <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"medium\"\n rows={10}\n multiline\n value={value}\n onChange={setValue}\n customValue\n />}\n {!textInput && children}\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onApply(textInput ? value : null)} variant=\"contained\" color=\"primary\">\n {i18n.t(titleButtonApply)}\n </Button>\n <Button color=\"grey\" onClick={onClose} variant=\"contained\">\n {i18n.t(titleButtonClose)}\n </Button>\n </DialogActions>\n </Dialog>;\n}\n\nCustomModal.defaultProps = {\n open: false,\n onApply: () => { },\n onClose: () => { },\n titleButtonClose: 'Cancel',\n titleButtonApply: 'Ok'\n};\n\nCustomModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n children: PropTypes.any,\n titleButtonClose: PropTypes.string,\n titleButtonApply: PropTypes.string,\n onApply: PropTypes.func\n};\n\nexport default CustomModal;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__AZ3ER\"};","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@mui/material';\nimport React, { useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport clsx from 'clsx';\nimport CustomCheckbox from '../CustomCheckbox';\n\nconst CustomSelect = ({ multiple, value, customValue, title, attr, options, style, onChange, className, doNotTranslate, doNotTranslate2 }) => {\n const [inputText, setInputText] = useState(value === undefined ? options[0].value : value);\n\n const v = customValue ? value : inputText;\n const text = v === '' || v === null || v === undefined ? '_' : v;\n\n return <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n fullWidth\n style={style}\n >\n <Select\n variant=\"standard\"\n value={text}\n fullWidth\n multiple={multiple}\n renderValue={selected => {\n if (multiple && selected.join) {\n // sort\n selected.sort();\n let pos = selected.indexOf('0');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.push('0');\n }\n pos = selected.indexOf('_');\n if (pos !== -1) {\n selected.splice(pos, 1);\n selected.unshift('_');\n }\n\n const onlyItem = options.find(el => el.only);\n if (selected.includes(onlyItem.value)) {\n return onlyItem.titleShort ? (doNotTranslate ? onlyItem.titleShort : I18n.t(onlyItem.titleShort)) : (doNotTranslate ? onlyItem.title : I18n.t(onlyItem.title))\n }\n\n const titles = selected\n .map(sel => options.find(item => item.value === sel || (sel === '_' && item.value === '')) || sel)\n .map(item => typeof item === 'object' ? (item.titleShort ? (doNotTranslate ? item.titleShort : I18n.t(item.titleShort)) : (doNotTranslate ? item.title : I18n.t(item.title))) : (doNotTranslate ? item : I18n.t(item)));\n\n return titles.join(', ');\n } else {\n const item = options ? options.find(item => item.value === selected || (selected === '_' && item.value === '')) : null;\n return item?.title ? (doNotTranslate ? item?.title : I18n.t(item?.title)) : selected;\n }\n }}\n onChange={e => {\n !customValue && setInputText(e.target.value);\n if (multiple) {\n const onlyItem = options.find(el => el.only);\n if (onlyItem) {\n const valueOnly = onlyItem.value;\n if (e.target.value.length === options.length - 1 && e.target.value.includes(valueOnly)) {\n return onChange(e.target.value.filter(el => el !== valueOnly), attr);\n }\n if (e.target.value.includes(valueOnly)) {\n return onChange(options.map(el => el.value), attr);\n }\n }\n }\n onChange(e.target.value, attr);\n }}\n input={attr ? <Input name={attr} id={attr + '-helper'} /> : <Input name={attr} />}\n >\n {!multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={'key-' + item.value} value={item.value === '' || item.value === null || item.value === undefined ? '_' : item.value}>{doNotTranslate ? item.title : I18n.t(item.title)}{item.title2 && <div>{doNotTranslate2 ? item.title2 : I18n.t(item.title2)}</div>}</MenuItem>)}\n {multiple && options && options.map(item => <MenuItem style={{ placeContent: 'space-between' }} key={'key-' + item.value} value={item.value || '_'}>{doNotTranslate ? item.title : I18n.t(item.title)} <CustomCheckbox customValue value={value.includes(item.value)} /></MenuItem>)}\n </Select>\n {title ? <FormHelperText>{I18n.t(title)}</FormHelperText> : null}\n </FormControl>;\n}\n\nCustomSelect.defaultProps = {\n value: '',\n className: null,\n table: false,\n customValue: false,\n multiple: false\n};\n\nCustomSelect.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n options: PropTypes.array.isRequired,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomSelect;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__BGOBc\",\"mark\":\"style_mark__MLqoT\"};","import React, { useState } from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { Slider } from '@mui/material';\n\nconst CustomSlider = ({ fullWidth, autoComplete, label, error, size, variant, value, type, style, onChange, className, customValue, min, max, step, unit }) => {\n const [inputText, setInputText] = useState(0);\n min = min !== undefined ? min : 0;\n max = max !== undefined ? max : 0;\n step = step !== undefined ? step : (max - min) / 100;\n\n const marks = [\n {\n value: min,\n label: min + (unit || ''),\n },\n {\n value: max,\n label: max + (unit || ''),\n },\n ];\n\n return <Slider\n defaultValue={customValue ? value : inputText}\n // getAriaValueText={customValue ? value : inputText}\n aria-labelledby=\"discrete-slider\"\n valueLabelDisplay=\"auto\"\n classes={{mark: cls.mark}}\n marks={marks}\n step={step}\n min={min}\n max={max}\n error={error || ''}\n //fullWidth={fullWidth}\n label={label}\n variant={variant}\n value={customValue ? value : inputText}\n type={type}\n //helperText={error || ''}\n style={style}\n className={clsx(cls.root, className)}\n autoComplete={autoComplete}\n onChange={(e, newValue) => {\n !customValue && setInputText(newValue);\n onChange(newValue);\n }}\n margin=\"normal\"\n size={size}\n />;\n}\n\nCustomSlider.defaultProps = {\n value: '',\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false\n};\n\nCustomSlider.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default CustomSlider;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__anA9+\"};","import { FormControlLabel, Switch } from '@mui/material';\nimport React, { memo, useState } from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\n\nconst CustomSwitch = ({ label, size, value, style, onChange, className, customValue }) => {\n const [switchChecked, setSwitchChecked] = useState(false);\n return <FormControlLabel\n className={cls.root}\n control={<Switch\n checked={customValue ? value : switchChecked}\n style={style}\n className={className}\n onChange={e => {\n if (!customValue) setSwitchChecked(e.target.checked);\n onChange(e.target.checked);\n }}\n size={size}\n />\n }\n label={label}\n />;\n}\n\nCustomSwitch.defaultProps = {\n value: false,\n type: 'text',\n error: '',\n className: null,\n table: false,\n native: {},\n variant: 'standard',\n size: 'medium',\n component: null,\n styleComponentBlock: null,\n onChange: () => { },\n fullWidth: false,\n autoComplete: '',\n customValue: false,\n label: 'all'\n};\n\nCustomSwitch.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n type: PropTypes.string,\n style: PropTypes.object,\n native: PropTypes.object,\n onChange: PropTypes.func,\n component: PropTypes.object,\n styleComponentBlock: PropTypes.object\n};\n\nexport default memo(CustomSwitch);","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__xyxno\"};","import { TextField } from '@mui/material';\nimport React from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nconst CustomTime = ({ value, style, onChange, className }) => {\n return <TextField\n variant=\"standard\"\n id=\"time\"\n type=\"time\"\n onChange={(e) => onChange(e.currentTarget.value)}\n value={value}\n className={clsx(cls.root, className)}\n fullWidth\n style={style}\n InputLabelProps={{\n shrink: true,\n }}\n inputProps={{\n step: 300, // 5 min\n }}\n />;\n}\n\nCustomTime.defaultProps = {\n value: '',\n className: null,\n table: false\n};\n\nCustomTime.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomTime;","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"style_root__FwemI\"};","import { FormControl, MenuItem, Select } from '@mui/material';\nimport React from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31 // 12\n];\n\nconst CustomDate = ({ value, onChange, className, title, style }) => {\n let [month, date] = (value || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n\n let days = [];\n for (let i = 0; i < DAYS[month]; i++) {\n days.push(i + 1);\n }\n\n return <div>\n <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Month')}\n onChange={e =>\n onChange(e.target.value.toString().padStart(2, '0') + '.' + date.toString().padStart(2, '0'))}\n value={month}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={0} value={0}>{I18n.t('Any month')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={1} value={1}>{I18n.t('January')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={2} value={2}>{I18n.t('February')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={3} value={3}>{I18n.t('March')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={4} value={4}>{I18n.t('April')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={5} value={5}>{I18n.t('May')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={6} value={6}>{I18n.t('June')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={7} value={7}>{I18n.t('July')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={8} value={8}>{I18n.t('August')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={9} value={9}>{I18n.t('September')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={10} value={10}>{I18n.t('October')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={11} value={11}>{I18n.t('November')}</MenuItem>\n <MenuItem style={{ placeContent: 'space-between' }} key={12} value={12}>{I18n.t('December')}</MenuItem>\n </Select>\n </FormControl>\n <FormControl\n variant=\"standard\"\n className={clsx(cls.root, className)}\n style={style}\n >\n <Select\n variant=\"standard\"\n className={clsx(cls.root, className)}\n margin=\"dense\"\n label={I18n.t('Date')}\n onChange={e =>\n onChange(month.toString().padStart(2, '0') + '.' + e.target.value.toString().padStart(2, '0'))}\n value={date}\n >\n <MenuItem style={{ placeContent: 'space-between' }} key={'A'} value={0}>{I18n.t('Any')}</MenuItem>\n {days.map(i => <MenuItem style={{ placeContent: 'space-between' }} key={i} value={i}>{i}</MenuItem>)}\n </Select>\n </FormControl>\n </div>;\n}\n\nCustomDate.defaultProps = {\n value: '',\n className: null,\n};\n\nCustomDate.propTypes = {\n title: PropTypes.string,\n attr: PropTypes.string,\n style: PropTypes.object,\n onChange: PropTypes.func\n};\n\nexport default CustomDate;","import I18n from '@iobroker/adapter-react-v5/i18n';\n\nlet lang;\nconst getName = obj => {\n lang = lang || I18n.getLanguage();\n if (typeof obj === 'object') {\n return obj[lang] || obj.en;\n } else {\n return obj;\n }\n};\n\nconst utils = {\n getName\n};\n\nexport default utils;","const STEPS = {\n selectTriggers: 0,\n addScheduleByDoubleClick: 1,\n openTagsMenu: 2,\n selectIntervalTag: 3,\n selectActions: 4,\n addActionPrintText: 5,\n showJavascript: 6,\n switchBackToRules: 7,\n saveTheScript: 8,\n};\n\nconst steps = [\n { // 0\n selector: '.blocks-triggers',\n content: 'Select triggers',\n },\n { // 1\n selector: '.block-TriggerScheduleBlock',\n content: 'Double click to add the block',\n },\n { // 2\n selector: '.tag-card',\n content: 'Open drop down menu',\n },\n { // 3\n selector: '.tag-card-interval',\n content: 'Select interval',\n },\n { // 4\n selector: '.blocks-actions',\n content: 'Select action blocks',\n },\n { // 5\n selector: '.block-ActionPrintText',\n content: 'Double click to add the block',\n },\n { // 6\n selector: '.button-js-code',\n content: 'Check the script',\n },\n { // 7\n selector: '.button-js-code',\n content: 'Switch back to rules',\n },\n { // 8\n selector: '.button-save',\n content: 'Save the script',\n }\n];\n\nexport {STEPS};\n\nexport default steps;","import React, { PureComponent, Fragment } from 'react';\nimport cls from './style.module.scss';\n\nimport { Menu, MenuItem } from '@mui/material';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\n\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\nimport DialogError from '@iobroker/adapter-react-v5/Dialogs/Error';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport CustomButton from '../CustomButton';\nimport CustomCheckbox from '../CustomCheckbox';\nimport CustomInput from '../CustomInput';\nimport CustomInstance from '../CustomInstance';\nimport CustomModal from '../CustomModal';\nimport CustomSelect from '../CustomSelect';\nimport CustomSlider from '../CustomSlider';\nimport CustomSwitch from '../CustomSwitch';\nimport CustomTime from '../CustomTime';\nimport CustomDate from '../CustomDate';\n\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport utils from '../../helpers/utils';\nimport clsx from 'clsx';\nimport { STEPS } from '../../helpers/Tour';\nimport { getSelectIdIcon } from '@iobroker/adapter-react-v5/Components/Icon';\n\nclass GenericBlock extends PureComponent {\n constructor(props, item) {\n super(props);\n item = item || {};\n let settings = props.settings || {\n tagCard: item.tagCardArray ? typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0] : ''\n }\n\n if (!settings.tagCard && item.tagCardArray) {\n settings.tagCard = typeof item.tagCardArray[0] !== 'string' ? item.tagCardArray[0].title : item.tagCardArray[0];\n }\n\n this.state = {\n inputs: item.inputs || props.inputs || [],\n name: item.name || props.name || '',\n icon: item.icon || props.icon || '',\n adapter: item.adapter || props.adapter || '',\n helpDialog: item.helpDialog || props.helpDialog || '',\n\n tagCardArray: item.tagCardArray || [],\n\n openTagMenu: false,\n openModal: false,\n iconTag: false,\n error: '',\n helpText: '',\n\n oid: {},\n instanceSelectionOptions: [],\n instanceSelectionDef: '',\n\n hideAttributes: [], // e.g. instance\n\n settings,\n debugMessage: null,\n enableSimulation: this.props.enableSimulation,\n };\n\n this.debugHideTimeout = null;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps || !nextProps.settings) {\n console.log(JSON.stringify(nextProps));\n return;\n }\n\n const settings = JSON.parse(JSON.stringify(nextProps.settings));\n if (!settings.tagCard && this.state.tagCardArray && this.state.tagCardArray.length) {\n settings.tagCard = typeof this.state.tagCardArray[0] !== 'string' ? this.state.tagCardArray[0].title : this.state.tagCardArray[0];\n }\n\n let newState = null;\n\n if (nextProps.onDebugMessage && nextProps.onDebugMessage.blockId === this.props._id) {\n newState = {};\n newState.debugMessage = JSON.parse(JSON.stringify(nextProps.onDebugMessage));\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = setTimeout(() =>\n this.setState({ debugMessage: null }),\n nextProps.onDebugMessage.hideTimeout || 5000);\n }\n\n if (JSON.stringify(settings) !== JSON.stringify(this.state.settings)) {\n newState = newState || {};\n newState.settings = settings;\n }\n\n if (this.state.enableSimulation !== nextProps.enableSimulation) {\n newState = newState || {};\n newState.enableSimulation = nextProps.enableSimulation;\n }\n\n newState && this.setState(newState);\n }\n\n componentWillUnmount() {\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = null;\n }\n\n // called every time, the tagCard changes or at start\n onTagChange(tagCard, cb) {\n // analyse inputs and fill the attributes with default values\n let changed = false;\n let settings = JSON.parse(JSON.stringify(this.state.settings));\n this.state.inputs.forEach(input => {\n if (input.attr && input.defaultValue !== undefined) {\n if (settings[input.attr] === undefined) {\n changed = true;\n settings[input.attr] = input.defaultValue;\n }\n }\n });\n if (changed) {\n this.setState({ settings }, () => cb && cb());\n this.props.onChange(settings);\n } else {\n cb && cb();\n }\n }\n\n // called if trigger added or removed\n onUpdate() {\n // do nothing, but blocks can overwrite it\n }\n\n // called every time if some attribute changes\n onValueChanged(value, attr) {\n // do nothing, but blocks can overwrite it\n }\n\n renderText = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, name, doNotTranslate, doNotTranslateBack } = input;\n return <Fragment key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n label={utils.getName(name)}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </Fragment>;\n }\n\n renderSwitch = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSwitch\n className={className}\n label=''\n customValue\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderNameText = ({ attr, signature, doNotTranslate, defaultValue }, value) => <div\n className={clsx(!!signature ? cls.displayItalic : cls.displayFlex, cls.blockMarginTop)}\n key={attr}>\n {doNotTranslate ? defaultValue : I18n.t(defaultValue)}\n </div>;\n\n renderNumber = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, openCheckbox, doNotTranslate, doNotTranslateBack } = input;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n return visibility ? <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={clsx(className, input.className)}\n fullWidth\n autoComplete=\"off\"\n label={input.noHelperText ? '' : 'number'}\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div> : null;\n }\n\n renderColor = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n type=\"color\"\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderCheckbox = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, defaultValue, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={cls.displayFlex}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomCheckbox\n className={className}\n size=\"small\"\n style={{ marginRight: 5 }}\n value={typeof settings[attr] === 'boolean' ? settings[attr] : defaultValue}\n customValue\n onChange={onChange}\n />\n {backText && <div onClick={() => onChange(typeof settings[attr] === 'boolean' ? !settings[attr] : !defaultValue)} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderSlider = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, min, max, step, unit, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={cls.displayFlex} style={{ marginRight: 20 }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSlider\n customValue\n min={min}\n max={max}\n step={step}\n unit={unit}\n className={className}\n autoComplete=\"off\"\n label=\"number\"\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={val => {\n console.log(val);\n onChange(val)\n }}\n />\n {backText && <div style={{ marginLeft: 20 }} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderButton = (input, value, onClick) => {\n const { className } = this.props;\n const { attr, frontText, backText, buttonText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomButton\n label={buttonText}\n fullWidth\n value={value}\n className={className}\n onClick={onClick}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n findIcon = obj => {\n if (!obj) {\n return Promise.resolve(null);\n } else\n if (obj.common?.icon) {\n return Promise.resolve(getSelectIdIcon(obj, '../..'));\n } else if (obj.type === 'state' || obj.type === 'channel') {\n const parts = obj._id.split('.');\n parts.pop();\n const newId = parts.join('.');\n return this.props.socket.getObject(newId)\n .then(obj => this.findIcon(obj))\n .catch(() => null);\n }\n }\n\n renderObjectID = (input, value, onChange) => {\n const { attr, openCheckbox, checkReadOnly } = input;\n const { settings } = this.state;\n const showSelectId = this.state['showSelectId' + attr];\n const { className, socket } = this.props;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n\n if (settings[attr] && !this.state[settings[attr]]) {\n setTimeout(() => {\n socket.getObject(value)\n .then(obj => {\n this.findIcon(obj)\n .then(icon => this.setState({\n [settings[attr]]: obj,\n [settings[attr] + '___icon']: icon,\n error: checkReadOnly && this.lastObjectIdChange && Date.now() - this.lastObjectIdChange < 1000 && obj?.common?.write === false ? I18n.t('Read only ID selected: %s', settings[attr]) : ''\n }))\n });\n }, 0);\n }\n\n // return null\n return visibility ? <div className={cls.blockMarginTop} key={attr}>\n <div className={cls.displayFlex}>\n {input.title ? <div>{I18n.t(input.title)}</div> : null}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n disabled\n variant=\"outlined\"\n size=\"small\"\n value={value}\n customValue\n />\n <CustomButton\n icon={this.state[this.state.settings[input.attr] + '___icon']}\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => {\n const settings = {};\n settings['showSelectId' + attr] = true;\n this.setState(settings);\n }}\n />\n </div>\n {this.state[this.state.settings[input.attr]] && <div className={clsx(cls.nameBlock, cls.displayItalic)}>{Utils.getObjectNameFromObj(this.state[settings[attr]], I18n.getLanguage())}</div>}\n {showSelectId ? <DialogSelectID\n imagePrefix=\"../..\"\n dialogName={'javascript'}\n themeType={Utils.getThemeName()}\n socket={socket}\n statesOnly={true}\n selected={value}\n onClose={() => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings);\n }}\n onOk={(selected, name, common) => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings, () =>\n // read type of object\n socket.getObject(selected)\n .then(obj => {\n this.lastObjectIdChange = Date.now();\n onChange({\n [attr]: selected,\n [attr + 'Role']: obj.common.role,\n [attr + 'Type']: obj.common.type,\n [attr + 'Unit']: obj.common.unit,\n [attr + 'States']: obj.common.states,\n [attr + 'Min']: obj.common.min,\n [attr + 'Max']: obj.common.max,\n [attr + 'Step']: obj.common.step,\n [attr + 'Def']: obj.common.def,\n [attr + 'Write']: obj.common.write,\n [attr + 'Read']: obj.common.read,\n }, null, () =>\n this.props.setOnUpdate && this.props.setOnUpdate(true))\n }))}\n }\n /> : null}\n </div> : null;\n }\n\n renderIconTag = () => {\n return <div\n className={cls.iconTag}\n onClick={e => {\n if (this.state.settings.tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}>\n {this.state.settings.tagCard}\n </div>;\n }\n\n renderTime = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomTime\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderSelect = (input, value, onChange) => {\n const { className } = this.props;\n const { name, options, frontText, backText, attr, multiple, doNotTranslate, doNotTranslate2, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{I18n.t(frontText)}</div>}\n <CustomSelect\n attr={attr}\n doNotTranslate={doNotTranslate}\n doNotTranslate2={doNotTranslate2}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n multiple={multiple}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderInstance = (input, value, onChange) => {\n const { className, socket } = this.props;\n const { name, options, frontText, backText, attr, adapter, doNotTranslate, doNotTranslateBack } = input;\n if (this.state.hideAttributes.includes(attr)) {\n return null;\n }\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInstance\n attr={attr}\n socket={socket}\n adapter={adapter}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n customValue\n onInstanceHide={value => this.setState({ hideAttributes: [...this.state.hideAttributes, attr] }, () => onChange(value))} // hide instance if only exactly one exists\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderDialog = (input, value, onChange) => {\n const { onShowDialog, frontText, backText, attr, icon, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <MaterialDynamicIcon\n iconName={icon}\n className={clsx(cls.iconDialog)}\n onClick={e => onShowDialog && onShowDialog()}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderModalInput = (input, value, onChange) => {\n const { openModal } = this.state;\n const { className } = this.props;\n const { attr, nameBlock, frontText, backText, noTextEdit, doNotTranslate, doNotTranslateBack} = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n disabled={!!noTextEdit}\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={onChange}\n customValue\n />\n <CustomButton\n square\n // fullWidth\n style={{ marginLeft: 5 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openModal: true })}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {openModal ? <CustomModal\n open={true}\n onApply={val =>\n this.setState({ openModal: false }, () =>\n val !== null && val !== undefined && onChange(val))}\n onClose={() => this.setState({ openModal: false })}\n defaultValue={value}\n textInput={true}\n /> : null}\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n };\n\n renderDate = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomDate\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n static getReplacesInText(context) {\n let value = '';\n if (context.trigger?.oidType) {\n value = '.replace(/%s/g, obj.state.val).replace(/%id/g, obj.id).replace(/%name/g, obj.common && obj.common.name).replace(/%old/g, obj.oldState.val)';\n }\n return value;\n }\n\n /////////////////////////////\n renderTags = () => {\n let { tagCardArray, openTagMenu } = this.state;\n let { tagCard } = this.state.settings;\n let result = tagCard !== '=' && tagCard !== '<>' && tagCard !== '>=' && tagCard !== '()' && tagCard !== '.' && tagCard !== '<=' && tagCard !== '<' && tagCard !== '>' ? I18n.t(tagCard) : tagCard;\n if (tagCardArray.length >= 3) {\n result = <div>\n <div aria-controls=\"simple-menu\" aria-haspopup=\"true\"\n onClick={e => {\n this.setState({ openTagMenu: e.currentTarget }, () => {\n this.props.isTourOpen &&\n this.props.tourStep === STEPS.openTagsMenu &&\n setTimeout(() => this.props.setTourStep(STEPS.selectIntervalTag), 300);\n });\n }}>{result}</div>\n <Menu\n id=\"simple-menu\"\n anchorEl={openTagMenu}\n keepMounted\n open={Boolean(openTagMenu)}\n onClose={() => this.setState({ openTagMenu: null })}\n >\n {tagCardArray.map(el => {\n let tag = el;\n if (typeof el !== 'string') {\n tag = el.title;\n }\n return (\n <MenuItem\n key={tag}\n selected={tag === tagCard}\n className={'tag-card-' + tag}\n style={{ placeContent: 'space-between' }}\n onClick={() => {\n const settings = { ...this.state.settings, tagCard: tag };\n this.setState({ openTagMenu: null, settings }, () => {\n this.props.onChange(settings);\n this.onTagChange(tag);\n });\n (this.props.isTourOpen &&\n (this.props.tourStep === STEPS.openTagsMenu ||\n this.props.tourStep === STEPS.selectIntervalTag) &&\n tag === 'interval' &&\n setTimeout(() => this.props.setTourStep(STEPS.selectActions), 500));\n\n }}>{tag.search(/>|<|<>|<=|>=|=/) !== -1 ? tag : I18n.t(tag)}{typeof el !== 'string' && el.title2 && <div style={{ marginLeft: 4 }}>{I18n.t(el.title2)}</div>}\n </MenuItem>\n );\n })}\n </Menu>\n </div>;\n }\n\n return result;\n };\n\n onChangeTag = () => {\n const { tagCardArray, settings, settings: { tagCard } } = this.state;\n let newTagCardArray = [...tagCardArray]\n if (typeof newTagCardArray[0] !== 'string') {\n newTagCardArray = newTagCardArray.map(el => el.title);\n }\n\n if (tagCard && newTagCardArray.length < 3) {\n const newSettings = { ...settings };\n const newTagCard = newTagCardArray[(newTagCardArray.indexOf(tagCard) + 1) % newTagCardArray.length]\n newSettings.tagCard = newTagCard;\n this.setState({ settings: newSettings }, () => {\n this.props.onChange(newSettings);\n this.onTagChange(newTagCard);\n });\n }\n };\n\n componentDidMount = () => {\n this.onTagChange();\n // detect changes\n };\n\n componentDidUpdate = prevProps => {\n if (this.props.acceptedBy !== 'triggers' && this.props.onUpdate) {\n setTimeout(() => this.onUpdate(), 0);\n }\n }\n\n onChangeInput = attribute => {\n return (value, attr, cb) => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n\n if (typeof value === 'object' && (!attr || typeof attr === 'function')) {\n Object.keys(value).forEach(_attr => settings[_attr] = value[_attr]);\n } else {\n settings[attr || attribute] = value;\n }\n settings.id = this.getData().id;\n settings._id = this.props._id;\n\n this.setState({ settings }, () => {\n this.onValueChanged(value, attr || attribute);\n this.props.onChange(settings);\n cb && cb();\n });\n }\n }\n\n renderSpecific() {\n return null; // it can be overloaded\n }\n\n renderDebugInfo() {\n if (this.state.debugMessage) {\n return <div className={cls.debugInfo} key={this.state.debugMessage.ts} style={{ opacity: 1, height: 22, bottom: -22 }}>\n {this.renderDebug ? this.renderDebug(this.state.debugMessage) : I18n.t('executed')}\n </div>;\n } else {\n return null;\n }\n }\n\n render = () => {\n const { inputs, name, icon, iconTag, settings, adapter, settings: { tagCard }, helpDialog } = this.state;\n const { socket, notFound } = this.props;\n\n return <Fragment>\n {iconTag ? this.renderIconTag() :\n <MaterialDynamicIcon\n iconName={icon}\n className={clsx(cls.iconThemCard, tagCard && this.state.tagCardArray.length && cls.iconThemCardSelectable)}\n adapter={adapter}\n socket={socket}\n onClick={e => {\n if (tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}\n />}\n <div className={cls.blockName}>\n <span className={cls.nameCard}>\n {I18n.t(name)}\n {!!notFound ? I18n.t(`%s not found`, settings.id) : ''}\n {helpDialog ? <IconButton className={cls.iconHelp} size=\"small\" onClick={() => this.setState({ helpText: I18n.t(helpDialog) })}><IconHelp /></IconButton> : null}\n </span>\n {inputs.filter(({ nameRender }) => this[nameRender])\n .map(input => {\n const { nameRender, defaultValue, attr, options } = input;\n return this[nameRender](\n input,\n settings[attr] !== undefined ? settings[attr] : defaultValue,\n this.onChangeInput(attr),\n options || []\n );\n })}\n </div>\n {tagCard && <div className={cls.controlMenuTop} style={{ opacity: 1, height: 22, top: -22 }}>\n <div onClick={() => this.onChangeTag()} className={clsx(cls.tagCard, 'tag-card')}>{this.renderTags()}</div>\n </div>}\n {this.renderDebugInfo()}\n {this.state.error ? <DialogError title={I18n.t('Warning')} text={this.state.error} onClose={() => this.setState({ error: '' })} /> : null}\n {this.state.helpText ? <DialogMessage title={I18n.t('Instructions')} text={this.state.helpText} onClose={() => this.setState({ helpText: '' })} /> : null}\n {this.renderSpecific()}\n </Fragment>;\n };\n}\n\nexport default GenericBlock;","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\n// copied from https://github.com/ioBroker/ioBroker.sayit/blob/master/admin/blockly.js#L37\nconst sayitEngines = {\n \"en\": {name: \"Google - English\", engine: \"google\", params: []},\n \"de\": {name: \"Google - Deutsch\", engine: \"google\", params: []},\n \"ru\": {name: \"Google - Русский\", engine: \"google\", params: []},\n \"it\": {name: \"Google - Italiano\", engine: \"google\", params: []},\n \"es\": {name: \"Google - Espaniol\", engine: \"google\", params: []},\n \"fr\": {name: \"Google - Français\", engine: \"google\", params: []},\n \"ru_YA\": {name: \"Yandex - Русский\", engine: \"yandex\", params: ['key', 'voice', 'emotion', 'ill', 'drunk', 'robot'], voice: ['jane', 'zahar'], emotion: ['none', 'good', 'neutral', 'evil', 'mixed']},\n \"ru_YA_CLOUD\": {name: \"Yandex Cloud - Русский\", engine: \"yandexCloud\", params: ['key', 'folderID', 'voice', 'emotion'], voice: ['alyss', 'oksana', 'jane', 'zahar'], emotion: [ 'good', 'neutral', 'evil']},\n\n \"en-US\": {name: \"PicoTTS - Englisch US\", engine: \"PicoTTS\", params: []},\n \"en-GB\": {name: \"PicoTTS - Englisch GB\", engine: \"PicoTTS\", params: []},\n \"de-DE\": {name: \"PicoTTS - Deutsch\", engine: \"PicoTTS\", params: []},\n \"it-IT\": {name: \"PicoTTS - Italiano\", engine: \"PicoTTS\", params: []},\n \"es-ES\": {name: \"PicoTTS - Espaniol\", engine: \"PicoTTS\", params: []},\n \"fr-FR\": {name: \"PicoTTS - Français\", engine: \"PicoTTS\", params: []},\n\n \"ru-RU_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"ru-RU\", ename: \"Tatyana\", ssml: true, name: \"Cloud - Русский - Татьяна\"},\n \"ru-RU_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"ru-RU\", ename: \"Maxim\", ssml: true, name: \"Cloud - Русский - Максим\"},\n \"de-DE_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"de-DE\", ename: \"Marlene\", ssml: true, name: \"Cloud - Deutsch - Marlene\"},\n \"de-DE_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"de-DE\", ename: \"Hans\", ssml: true, name: \"Cloud - Deutsch - Hans\"},\n \"en-US_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Salli\", ssml: true, name: \"Cloud - en-US - Female - Salli\"},\n \"en-US_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Joey\", ssml: true, name: \"Cloud - en-US - Male - Joey\"},\n \"da-DK_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"da-DK\", ename: \"Naja\", ssml: true, name: \"Cloud - da-DK - Female - Naja\"},\n \"da-DK_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"da-DK\", ename: \"Mads\", ssml: true, name: \"Cloud - da-DK - Male - Mads\"},\n \"en-AU_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-AU\", ename: \"Nicole\", ssml: true, name: \"Cloud - en-AU - Female - Nicole\"},\n \"en-AU_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-AU\", ename: \"Russell\", ssml: true, name: \"Cloud - en-AU - Male - Russell\"},\n \"en-GB_CLOUD_Female_Amy\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Amy\", ssml: true, name: \"Cloud - en-GB - Female - Amy\"},\n \"en-GB_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Brian\", ssml: true, name: \"Cloud - en-GB - Male - Brian\"},\n \"en-GB_CLOUD_Female_Emma\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB\", ename: \"Emma\", ssml: true, name: \"Cloud - en-GB - Female - Emma\"},\n \"en-GB-WLS_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-GB-WLS\", ename: \"Gwyneth\", ssml: true, name: \"Cloud - en-GB-WLS - Female - Gwyneth\"},\n \"en-GB-WLS_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-GB-WLS\", ename: \"Geraint\", ssml: true, name: \"Cloud - en-GB-WLS - Male - Geraint\"},\n \"cy-GB_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"cy-GB\", ename: \"Gwyneth\", ssml: true, name: \"Cloud - cy-GB - Female - Gwyneth\"},\n \"cy-GB_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"cy-GB\", ename: \"Geraint\", ssml: true, name: \"Cloud - cy-GB - Male - Geraint\"},\n \"en-IN_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-IN\", ename: \"Raveena\", ssml: true, name: \"Cloud - en-IN - Female - Raveena\"},\n \"en-US_CLOUD_Male_Chipmunk\":{gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Chipmunk\", ssml: true, name: \"Cloud - en-US - Male - Chipmunk\"},\n \"en-US_CLOUD_Male_Eric\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Eric\", ssml: true, name: \"Cloud - en-US - Male - Eric\"},\n \"en-US_CLOUD_Female_Ivy\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Ivy\", ssml: true, name: \"Cloud - en-US - Female - Ivy\"},\n \"en-US_CLOUD_Female_Jennifer\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Jennifer\", ssml: true, name: \"Cloud - en-US - Female - Jennifer\"},\n \"en-US_CLOUD_Male_Justin\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Justin\", ssml: true, name: \"Cloud - en-US - Male - Justin\"},\n \"en-US_CLOUD_Female_Kendra\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Kendra\", ssml: true, name: \"Cloud - en-US - Female - Kendra\"},\n \"en-US_CLOUD_Female_Kimberly\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"en-US\", ename: \"Kimberly\", ssml: true, name: \"Cloud - en-US - Female - Kimberly\"},\n \"es-ES_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"es-ES\", ename: \"Conchita\", ssml: true, name: \"Cloud - es-ES - Female - Conchita\"},\n \"es-ES_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"es-ES\", ename: \"Enrique\", ssml: true, name: \"Cloud - es-ES - Male - Enrique\"},\n \"es-US_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"es-US\", ename: \"Penelope\", ssml: true, name: \"Cloud - es-US - Female - Penelope\"},\n \"es-US_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"es-US\", ename: \"Miguel\", ssml: true, name: \"Cloud - es-US - Male - Miguel\"},\n \"fr-CA_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"fr-CA\", ename: \"Chantal\", ssml: true, name: \"Cloud - fr-CA - Female - Chantal\"},\n \"fr-FR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"fr-FR\", ename: \"Celine\", ssml: true, name: \"Cloud - fr-FR - Female - Celine\"},\n \"fr-FR_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"fr-FR\", ename: \"Mathieu\", ssml: true, name: \"Cloud - fr-FR - Male - Mathieu\"},\n \"is-IS_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"is-IS\", ename: \"Dora\", ssml: true, name: \"Cloud - is-IS - Female - Dora\"},\n \"is-IS_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"is-IS\", ename: \"Karl\", ssml: true, name: \"Cloud - is-IS - Male - Karl\"},\n \"it-IT_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"it-IT\", ename: \"Carla\", ssml: true, name: \"Cloud - it-IT - Female - Carla\"},\n \"it-IT_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"it-IT\", ename: \"Giorgio\", ssml: true, name: \"Cloud - it-IT - Male - Giorgio\"},\n \"nb-NO_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"nb-NO\", ename: \"Liv\", ssml: true, name: \"Cloud - nb-NO - Female - Liv\"},\n \"nl-NL_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"nl-NL\", ename: \"Lotte\", ssml: true, name: \"Cloud - nl-NL - Female - Lotte\"},\n \"nl-NL_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"nl-NL\", ename: \"Ruben\", ssml: true, name: \"Cloud - nl-NL - Male - Ruben\"},\n \"pl-PL_CLOUD_Female_Agnieszka\":{gender: \"Female\", engine: \"cloud\",params: ['cloud'], language: \"pl-PL\", ename: \"Agnieszka\", ssml: true, name: \"Cloud - pl-PL - Female - Agnieszka\"},\n \"pl-PL_CLOUD_Male_Jacek\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Jacek\", ssml: true, name: \"Cloud - pl-PL - Male - Jacek\"},\n \"pl-PL_CLOUD_Female_Ewa\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Ewa\", ssml: true, name: \"Cloud - pl-PL - Female - Ewa\"},\n \"pl-PL_CLOUD_Male_Jan\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Jan\", ssml: true, name: \"Cloud - pl-PL - Male - Jan\"},\n \"pl-PL_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pl-PL\", ename: \"Maja\", ssml: true, name: \"Cloud - pl-PL - Female - Maja\"},\n \"pt-BR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pt-BR\", ename: \"Vitoria\", ssml: true, name: \"Cloud - pt-BR - Female - Vitoria\"},\n \"pt-BR_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pt-BR\", ename: \"Ricardo\", ssml: true, name: \"Cloud - pt-BR - Male - Ricardo\"},\n \"pt-PT_CLOUD_Male\": {gender: \"Male\", engine: \"cloud\", params: ['cloud'], language: \"pt-PT\", ename: \"Cristiano\", ssml: true, name: \"Cloud - pt-PT - Male - Cristiano\"},\n \"pt-PT_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"pt-PT\", ename: \"Ines\", ssml: true, name: \"Cloud - pt-PT - Female - Ines\"},\n \"ro-RO_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"ro-RO\", ename: \"Carmen\", ssml: true, name: \"Cloud - ro-RO - Female - Carmen\"},\n \"sv-SE_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"sv-SE\", ename: \"Astrid\", ssml: true, name: \"Cloud - sv-SE - Female - Astrid\"},\n \"tr-TR_CLOUD_Female\": {gender: \"Female\", engine: \"cloud\", params: ['cloud'], language: \"tr-TR\", ename: \"Filiz\", ssml: true, name: \"Cloud - tr-TR - Female - Filiz\"},\n\n \"ru-RU_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ru-RU\", ename: \"Tatyana\", ssml: true, name: \"AWS Polly - Русский - Татьяна\"},\n \"ru-RU_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ru-RU\", ename: \"Maxim\", ssml: true, name: \"AWS Polly - Русский - Максим\"},\n \"de-DE_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Marlene\", ssml: true, name: \"AWS Polly - Deutsch - Marlene\"},\n \"de-DE_AP_Female_Vicky\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Vicky\", ssml: true, name: \"AWS Polly - Deutsch - Vicky\"},\n \"de-DE_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"de-DE\", ename: \"Hans\", ssml: true, name: \"AWS Polly - Deutsch - Hans\"},\n \"en-US_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Salli\", ssml: true, name: \"AWS Polly - en-US - Female - Salli\"},\n \"en-US_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Joey\", ssml: true, name: \"AWS Polly - en-US - Male - Joey\"},\n \"da-DK_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"da-DK\", ename: \"Naja\", ssml: true, name: \"AWS Polly - da-DK - Female - Naja\"},\n \"da-DK_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"da-DK\", ename: \"Mads\", ssml: true, name: \"AWS Polly - da-DK - Male - Mads\"},\n \"en-AU_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-AU\", ename: \"Nicole\", ssml: true, name: \"AWS Polly - en-AU - Female - Nicole\"},\n \"en-AU_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-AU\", ename: \"Russell\", ssml: true, name: \"AWS Polly - en-AU - Male - Russell\"},\n \"en-GB_AP_Female_Amy\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Amy\", ssml: true, name: \"AWS Polly - en-GB - Female - Amy\"},\n \"en-GB_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Brian\", ssml: true, name: \"AWS Polly - en-GB - Male - Brian\"},\n \"en-GB_AP_Female_Emma\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB\", ename: \"Emma\", ssml: true, name: \"AWS Polly - en-GB - Female - Emma\"},\n \"en-GB-WLS_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB-WLS\", ename: \"Gwyneth\", ssml: true, name: \"AWS Polly - en-GB-WLS - Female - Gwyneth\"},\n \"en-GB-WLS_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-GB-WLS\", ename: \"Geraint\", ssml: true, name: \"AWS Polly - en-GB-WLS - Male - Geraint\"},\n \"cy-GB_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"cy-GB\", ename: \"Gwyneth\", ssml: true, name: \"AWS Polly - cy-GB - Female - Gwyneth\"},\n \"cy-GB_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"cy-GB\", ename: \"Geraint\", ssml: true, name: \"AWS Polly - cy-GB - Male - Geraint\"},\n \"en-IN_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-IN\", ename: \"Raveena\", ssml: true, name: \"AWS Polly - en-IN - Female - Raveena\"},\n \"en-US_AP_Male_Chipmunk\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Chipmunk\", ssml: true, name: \"AWS Polly - en-US - Male - Chipmunk\"},\n \"en-US_AP_Male_Eric\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Eric\", ssml: true, name: \"AWS Polly - en-US - Male - Eric\"},\n \"en-US_AP_Female_Ivy\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Ivy\", ssml: true, name: \"AWS Polly - en-US - Female - Ivy\"},\n \"en-US_AP_Female_Jennifer\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Jennifer\", ssml: true, name: \"AWS Polly - en-US - Female - Jennifer\"},\n \"en-US_AP_Male_Justin\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Justin\", ssml: true, name: \"AWS Polly - en-US - Male - Justin\"},\n \"en-US_AP_Female_Kendra\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Kendra\", ssml: true, name: \"AWS Polly - en-US - Female - Kendra\"},\n \"en-US_AP_Female_Kimberly\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"en-US\", ename: \"Kimberly\", ssml: true, name: \"AWS Polly - en-US - Female - Kimberly\"},\n \"es-ES_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-ES\", ename: \"Conchita\", ssml: true, name: \"AWS Polly - es-ES - Female - Conchita\"},\n \"es-ES_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-ES\", ename: \"Enrique\", ssml: true, name: \"AWS Polly - es-ES - Male - Enrique\"},\n \"es-US_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-US\", ename: \"Penelope\", ssml: true, name: \"AWS Polly - es-US - Female - Penelope\"},\n \"es-US_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"es-US\", ename: \"Miguel\", ssml: true, name: \"AWS Polly - es-US - Male - Miguel\"},\n \"fr-CA_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-CA\", ename: \"Chantal\", ssml: true, name: \"AWS Polly - fr-CA - Female - Chantal\"},\n \"fr-FR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-FR\", ename: \"Celine\", ssml: true, name: \"AWS Polly - fr-FR - Female - Celine\"},\n \"fr-FR_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"fr-FR\", ename: \"Mathieu\", ssml: true, name: \"AWS Polly - fr-FR - Male - Mathieu\"},\n \"is-IS_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"is-IS\", ename: \"Dora\", ssml: true, name: \"AWS Polly - is-IS - Female - Dora\"},\n \"is-IS_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"is-IS\", ename: \"Karl\", ssml: true, name: \"AWS Polly - is-IS - Male - Karl\"},\n \"it-IT_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"it-IT\", ename: \"Carla\", ssml: true, name: \"AWS Polly - it-IT - Female - Carla\"},\n \"it-IT_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"it-IT\", ename: \"Giorgio\", ssml: true, name: \"AWS Polly - it-IT - Male - Giorgio\"},\n \"nb-NO_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nb-NO\", ename: \"Liv\", ssml: true, name: \"AWS Polly - nb-NO - Female - Liv\"},\n \"nl-NL_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nl-NL\", ename: \"Lotte\", ssml: true, name: \"AWS Polly - nl-NL - Female - Lotte\"},\n \"nl-NL_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"nl-NL\", ename: \"Ruben\", ssml: true, name: \"AWS Polly - nl-NL - Male - Ruben\"},\n \"pl-PL_AP_Female_Agnieszka\":{gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Agnieszka\", ssml: true, name: \"AWS Polly - pl-PL - Female - Agnieszka\"},\n \"pl-PL_AP_Male_Jacek\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Jacek\", ssml: true, name: \"AWS Polly - pl-PL - Male - Jacek\"},\n \"pl-PL_AP_Female_Ewa\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Ewa\", ssml: true, name: \"AWS Polly - pl-PL - Female - Ewa\"},\n \"pl-PL_AP_Male_Jan\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Jan\", ssml: true, name: \"AWS Polly - pl-PL - Male - Jan\"},\n \"pl-PL_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pl-PL\", ename: \"Maja\", ssml: true, name: \"AWS Polly - pl-PL - Female - Maja\"},\n \"pt-BR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-BR\", ename: \"Vitoria\", ssml: true, name: \"AWS Polly - pt-BR - Female - Vitoria\"},\n \"pt-BR_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-BR\", ename: \"Ricardo\", ssml: true, name: \"AWS Polly - pt-BR - Male - Ricardo\"},\n \"pt-PT_AP_Male\": {gender: \"Male\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-PT\", ename: \"Cristiano\", ssml: true, name: \"AWS Polly - pt-PT - Male - Cristiano\"},\n \"pt-PT_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"pt-PT\", ename: \"Ines\", ssml: true, name: \"AWS Polly - pt-PT - Female - Ines\"},\n \"ro-RO_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"ro-RO\", ename: \"Carmen\", ssml: true, name: \"AWS Polly - ro-RO - Female - Carmen\"},\n \"sv-SE_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"sv-SE\", ename: \"Astrid\", ssml: true, name: \"AWS Polly - sv-SE - Female - Astrid\"},\n \"tr-TR_AP_Female\": {gender: \"Female\", engine: \"polly\", params: ['accessKey', 'secretKey', 'region'], language: \"tr-TR\", ename: \"Filiz\", ssml: true, name: \"AWS Polly - tr-TR - Female - Filiz\"}\n};\n\nclass ActionSayText extends GenericBlock {\n constructor(props) {\n super(props, ActionSayText.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Sayit ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${config.language && config.language !== '_' ? config.language + ';' : ''}${config.volume ? config.volume + ';' : ''}${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tawait setStateAsync(\"${config.instance}.tts.text\", subActionVar${config._id});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Say:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n const lang = I18n.getLanguage();\n const languages = Object.keys(sayitEngines).filter(l => l.startsWith(lang));\n const options = languages.map(lang => ({title: sayitEngines[lang].name, value: lang}));\n options.unshift({title: 'Default', value: '_'});\n\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n adapter: 'sayit',\n defaultValue: 'sayit.0',\n frontText: 'Instance:',\n },\n {\n nameRender: 'renderSelect',\n frontText: 'Language:',\n options,\n defaultValue: '_',\n attr: 'language',\n },\n {\n nameRender: 'renderNameText',\n defaultValue: 'Volume',\n attr: 'textVol',\n },\n {\n nameRender: 'renderSlider',\n attr: 'volume',\n defaultValue: 100,\n min: 0,\n max: 100\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Say It',\n id: 'ActionSayText',\n adapter: 'sayit',\n title: 'Say some text via sayit adapter',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSayText.getStaticData();\n }\n}\n\nexport default ActionSayText;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionSendEmail extends GenericBlock {\n constructor(props) {\n super(props, ActionSendEmail.getStaticData());\n }\n\n static compile(config, context) {\n if (!config.recipients) {\n return `// no recipients defined'\n_sendToFrontEnd(${config._id}, {text: 'No recipients defined'});`;\n } else {\n return `// Send Email ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance || 'email.0'}\", {\n\\t\\t to: \"${config.recipients || ''}\",\n\\t\\t subject: \"${(config.subject || 'ioBroker').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t text: subActionVar${config._id}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n attr: 'instance',\n nameRender: 'renderInstance',\n defaultValue: 'email.0',\n frontText: 'Instance:',\n adapter: 'email',\n },\n {\n attr: 'recipients',\n nameRender: 'renderText',\n defaultValue: 'user@mail.ru',\n frontText: 'To:',\n },\n {\n attr: 'subject',\n nameRender: 'renderText',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Subject:',\n },\n {\n attr: 'text',\n nameRender: 'renderModalInput',\n defaultValue: 'Email from iobroker',\n nameBlock: '',\n frontText: 'Body:',\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Send email',\n id: 'ActionSendEmail',\n adapter: 'email',\n title: 'Sends an email',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSendEmail.getStaticData();\n }\n}\n\nexport default ActionSendEmail;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionTelegram extends GenericBlock {\n constructor(props) {\n super(props, ActionTelegram.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Telegram ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", ${config.user && config.user !== '_' ? `{user: \"${(config.user || '').replace(/\"/g, '\\\\\"')}\", text: subActionVar${config._id}}` : `subActionVar${config._id}`});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'instance') {\n this._setUsers(value);\n }\n }\n\n _setUsers(instance) {\n instance = instance || this.state.settings.instance || 'telegram.0';\n this.cachePromises[instance] = this.cachePromises[instance] || this.props.socket.getState(instance + '.communicate.users');\n if (!this.state.settings._id) {\n return this.setState({\n inputs: [\n {\n nameRender: 'renderSelect',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: [{title: 'telegram.0', value: 'telegram.0'}],\n defaultValue: '',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange());\n }\n\n this.cachePromises[instance]\n .then(users => {\n try {\n users = users?.val ? JSON.parse(users.val) : null;\n users = users && Object.keys(users).map(user => ({title: users[user].userName || users[user].firstName, value: user}));\n users = users || [];\n users.unshift({title: 'all', value: ''});\n } catch (e) {\n users = [{title: 'all', value: ''}];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'telegram',\n frontText: 'Instance:',\n defaultValue: 'telegram.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderSelect',\n attr: 'user',\n options: users,\n defaultValue: '_',\n frontText: 'User:',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hallo',\n nameBlock: '',\n frontText: 'Text:',\n }\n ]\n }, () => super.onTagChange());\n });\n }\n\n onTagChange(tagCard) {\n this._setUsers();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Telegram',\n id: 'ActionTelegram',\n adapter: 'telegram',\n title: 'Sends message via telegram',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionTelegram.getStaticData();\n }\n}\n\nexport default ActionTelegram;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushover extends GenericBlock {\n constructor(props) {\n super(props, ActionPushover.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushover ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\\`; \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t sound: \"${config.sound}\",\n\\t\\t priority: ${config.priority}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return 'Sent: ' + debugMessage.data.text;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushover',\n frontText: 'Instance:',\n defaultValue: 'pushover.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n {value: \"pushover\", title: \"pushover\"},\n {value: \"bike\", title: \"bike\"},\n {value: \"bugle\", title: \"bugle\"},\n {value: \"cashregister\", title: \"cashregister\"},\n {value: \"classical\", title: \"classical\"},\n {value: \"cosmic\", title: \"cosmic\"},\n {value: \"falling\", title: \"falling\"},\n {value: \"gamelan\", title: \"gamelan\"},\n {value: \"incoming\", title: \"incoming\"},\n {value: \"intermission\", title: \"intermission\"},\n {value: \"magic\", title: \"magic\"},\n {value: \"mechanical\", title: \"mechanical\"},\n {value: \"pianobar\", title: \"pianobar\"},\n {value: \"siren\", title: \"siren\"},\n {value: \"spacealarm\", title: \"spacealarm\"},\n {value: \"tugboat\", title: \"tugboat\"},\n {value: \"alien\", title: \"alien\"},\n {value: \"climb\", title: \"climb\"},\n {value: \"persistent\", title: \"persistent\"},\n {value: \"echo\", title: \"echo\"},\n {value: \"updown\", title: \"updown\"},\n {value: \"none\", title: \"none\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: -1,\n frontText: 'Priority:',\n options: [\n {value: -1, title: \"quiet\"},\n {value: 0, title: \"normal\"},\n {value: 1, title: \"high-priority\"},\n {value: 2, title: \"acknowledgment\"},\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushover',\n id: 'ActionPushover',\n adapter: 'pushover',\n title: 'Sends message via pushover',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPushover.getStaticData();\n }\n}\n\nexport default ActionPushover;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionWhatsappcmb extends GenericBlock {\n constructor(props) {\n super(props, ActionWhatsappcmb.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// whatsapp ${text || ''}\n\\t\\tconst subActionVar${config._id} = \"${(text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tsendTo(\"${config.instance}\", \"send\", {text: subActionVar${config._id}${config.phone ? `, phone: \"${config.phone.replace(/\"/g, '\\\\\"')}\"` : ''}});`;\n }\n }\n\n renderDebug(debugMessage) {\n return `${I18n.t('Sent:')} ${debugMessage.data.text}`;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'whatsapp-cmb',\n frontText: 'Instance:',\n defaultValue: 'whatsapp-cmb.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'phone',\n defaultValue: '',\n frontText: 'Phone:',\n backText: '(optional)'\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Whatsapp-cmb',\n id: 'ActionWhatsappcmb',\n adapter: 'whatsapp-cmb',\n title: 'Sends message via whatsapp-cmb',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionWhatsappcmb.getStaticData();\n }\n}\n\nexport default ActionWhatsappcmb;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionPushsafer extends GenericBlock {\n constructor(props) {\n super(props, ActionPushsafer.getStaticData());\n this.cachePromises = {};\n }\n\n static compile(config, context) {\n let text = (config.text || '').replace(/\"/g, '\\\\\"');\n if (!text) {\n return `// no text defined\n_sendToFrontEnd(${config._id}, {text: 'No text defined'});`;\n } else {\n return `// Pushsafer ${config.text || ''}\n\\t\\tconst subActionVar${config._id} = \"${text}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}}); \n\\t\\tsendTo(\"${config.instance}\", \"send\", {\n\\t\\t message: subActionVar${config._id},\n\\t\\t title: \"${(config.title || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)},\n\\t\\t ${config.device ? `device: \"${config.device}\",` : ''}\n\\t\\t ${config.sound && config.sound !== '_' ? `sound: \"${config.sound}\",` : ''}\n\\t\\t priority: ${config.priority},\n\\t\\t ${config.vibration && config.vibration !== '_' ? `vibration: ${config.vibration},` : ''}\n\\t\\t});`;\n }\n }\n\n renderDebug(debugMessage) {\n return 'Sent: ' + debugMessage.data.text;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderInstance',\n adapter: 'pushsafer',\n frontText: 'Instance:',\n defaultValue: 'pushsafer.0',\n attr: 'instance',\n },\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'Hello',\n nameBlock: '',\n frontText: 'Text:',\n },\n {\n nameRender: 'renderText',\n attr: 'title',\n defaultValue: 'ioBroker',\n frontText: 'Title:',\n },\n {\n nameRender: 'renderSelect',\n attr: 'sound',\n defaultValue: 'magic',\n frontText: 'Sound:',\n doNotTranslate: true,\n options: [\n {value: \"_\", title: \"Device Default\"},\n {value: \"0 \", title: \"Silent\"},\n {value: \"1 \", title: \"Ahem (IM)\"},\n {value: \"2 \", title: \"Applause (Mail)\"},\n {value: \"3 \", title: \"Arrow (Reminder)\"},\n {value: \"4 \", title: \"Baby (SMS)\"},\n {value: \"5 \", title: \"Bell (Alarm)\"},\n {value: \"6 \", title: \"Bicycle (Alarm2)\"},\n {value: \"7 \", title: \"Boing (Alarm3)\"},\n {value: \"8 \", title: \"Buzzer (Alarm4)\"},\n {value: \"9 \", title: \"Camera (Alarm5)\"},\n {value: \"10\", title: \"Car Horn (Alarm6)\"},\n {value: \"11\", title: \"Cash Register (Alarm7)\"},\n {value: \"12\", title: \"Chime (Alarm8)\"},\n {value: \"13\", title: \"Creaky Door (Alarm9)\"},\n {value: \"14\", title: \"Cuckoo Clock (Alarm10)\"},\n {value: \"15\", title: \"Disconnect (Call)\"},\n {value: \"16\", title: \"Dog (Call2)\"},\n {value: \"17\", title: \"Doorbell (Call3)\"},\n {value: \"18\", title: \"Fanfare (Call4)\"},\n {value: \"19\", title: \"Gun Shot (Call5)\"},\n {value: \"20\", title: \"Honk (Call6)\"},\n {value: \"21\", title: \"Jaw Harp (Call7)\"},\n {value: \"22\", title: \"Morse (Call8)\"},\n {value: \"23\", title: \"Electricity (Call9)\"},\n {value: \"24\", title: \"Radio Tuner (Call10)\"},\n {value: \"25\", title: \"Sirens\"},\n {value: \"26\", title: \"Military Trumpets\"},\n {value: \"27\", title: \"Ufo\"},\n {value: \"28\", title: \"Whah Whah Whah\"},\n {value: \"29\", title: \"Man Saying Goodbye\"},\n {value: \"30\", title: \"Man Saying Hello\"},\n {value: \"31\", title: \"Man Saying No\"},\n {value: \"32\", title: \"Man Saying Ok\"},\n {value: \"33\", title: \"Man Saying Ooohhhweee\"},\n {value: \"34\", title: \"Man Saying Warning\"},\n {value: \"35\", title: \"Man Saying Welcome\"},\n {value: \"36\", title: \"Man Saying Yeah\"},\n {value: \"37\", title: \"Man Saying Yes\"},\n {value: \"38\", title: \"Beep short\"},\n {value: \"39\", title: \"Weeeee short\"},\n {value: \"40\", title: \"Cut in and out short\"},\n {value: \"41\", title: \"Finger flicking glas short\"},\n {value: \"42\", title: \"Wa Wa Waaaa short\"},\n {value: \"43\", title: \"Laser short\"},\n {value: \"44\", title: \"Wind Chime short\"},\n {value: \"45\", title: \"Echo short\"},\n {value: \"46\", title: \"Zipper short\"},\n {value: \"47\", title: \"HiHat short\"},\n {value: \"48\", title: \"Beep 2 short\"},\n {value: \"49\", title: \"Beep 3 short\"},\n {value: \"50\", title: \"Beep 4 short\"},\n {value: \"51\", title: \"The Alarm is armed\"},\n {value: \"52\", title: \"The Alarm is disarmed\"},\n {value: \"53\", title: \"The Backup is ready\"},\n {value: \"54\", title: \"The Door is closed\"},\n {value: \"55\", title: \"The Door is opend\"},\n {value: \"56\", title: \"The Window is closed\"},\n {value: \"57\", title: \"The Window is open\"},\n {value: \"58\", title: \"The Light is off\"},\n {value: \"59\", title: \"The Light is on\"},\n {value: \"60\", title: \"The Doorbell rings\"},\n {value: \"61\", title: \"Pager short\"},\n {value: \"62\", title: \"Pager long\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'priority',\n defaultValue: 0,\n frontText: 'Priority:',\n options: [\n {value: -2, title: \"lowest priority\"},\n {value: -1, title: \"lower priority\"},\n {value: 0, title: \"normal priority\"},\n {value: 1, title: \"high priority\"},\n {value: 2, title: \"highest priority\"},\n ]\n },\n {\n nameRender: 'renderSelect',\n attr: 'vibration',\n defaultValue: 0,\n frontText: 'Vibration:',\n options: [\n {value: '_', title: \"default\"},\n {value: 1, title: \"1\"},\n {value: 2, title: \"2\"},\n {value: 3, title: \"3\"},\n ]\n }\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pushsafer',\n id: 'ActionPushsafer',\n adapter: 'pushsafer',\n title: 'Sends message via Pushsafer',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPushsafer.getStaticData();\n }\n}\n\nexport default ActionPushsafer;\n","// eslint-disable-next-line no-unused-vars\n\nconst STANDARD_FUNCTION_STATE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION_STATE_ONCHANGE = `async function (obj) {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\nconst STANDARD_FUNCTION =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (_cond) {\n__%%THEN%%__\n } else {\n__%%ELSE%%__\n }\n}`;\n\nconst STANDARD_FUNCTION_ONCHANGE =\n`async function () {\n \"__%%DEBUG_TRIGGER%%__\";\n __%%CONDITIONS_VARS%%__\n const _cond = __%%CONDITION%%__;\n \n \"__%%DEBUG_CONDITIONS%%__\";\n \n if (__%%STATE%%__ === false && _cond) {\n __%%STATE%%__ = true; \n__%%THEN%%__\n } else if (__%%STATE%%__ === true && !_cond) {\n __%%STATE%%__ = false; \n__%%ELSE%%__\n }\n}`;\n\nconst NO_FUNCTION = `\"__%%DEBUG_TRIGGER%%__\";\n__%%CONDITIONS_VARS%%__\nconst _cond = __%%CONDITION%%__;\n\n\"__%%DEBUG_CONDITIONS%%__\";\n\nif (_cond) {\n__%%THEN%%__\n} else {\n__%%ELSE%%__\n}`;\n\nconst DEFAULT_RULE = {\n triggers: [],\n conditions: [[]],\n justCheck: false,\n actions: {\n then: [],\n 'else': []\n }\n};\n\nfunction compileTriggers(json, context, blocks) {\n const triggers = [];\n let jsonTriggers = json.triggers;\n if (!jsonTriggers.length) {\n jsonTriggers = [{id: 'TriggerScriptSave'}];\n }\n\n const vars = [];\n let prelines = [];\n let hist = json.conditions.find(conds => conds.find(cond => cond.tagCard === '()'));\n\n jsonTriggers.forEach((trigger, i) => {\n const found = findBlock(trigger.id, blocks);\n if (found) {\n const _context = {\n trigger,\n condition: {},\n justCheck: hist ? false : (json.justCheck || (!json.conditions.length || !json.conditions[0].length)),\n conditionsDebug: [],\n conditionsVars: [],\n };\n const text = found.compile(trigger, _context);\n const conditions = compileConditions(json.conditions, _context, blocks);\n const then = compileActions(json.actions.then, _context, blocks);\n const _else = compileActions(json.actions.else, _context, blocks);\n\n // find indent\n vars.push('cond' + i);\n\n if (_context.prelines && _context.prelines.length) {\n _context.prelines.forEach(line => prelines.push(line));\n }\n\n if (text.includes(' __%%CONDITIONS_VARS%%__')) {\n _context.conditionsVars = _context.conditionsVars.map((v, i) => i ? ' ' + v : v);\n _context.conditionsDebug = _context.conditionsDebug.map((v, i) => i ? ' ' + v : v);\n }\n\n triggers.push(\n text\n .replace('__%%CONDITIONS_VARS%%__', _context.conditionsVars.join('\\n'))\n .replace('\"__%%DEBUG_CONDITIONS%%__\";', _context.conditionsDebug.join('\\n'))\n .replace('__%%CONDITION%%__', conditions)\n .replace('__%%THEN%%__', then || '// ignore')\n .replace('__%%ELSE%%__', _else || '// ignore')\n .replace(/__%%STATE%%__/g, 'cond' + i)\n );\n }\n });\n\n let text = triggers.join('\\n\\n');\n\n if (!json.justCheck || hist) {\n text = vars.map(v => `let ${v} = false;`).join('\\n') + '\\n\\n' + text;\n }\n if (prelines) {\n text = prelines.join('\\n') + '\\n\\n' + text;\n }\n\n return text;\n}\n\nfunction findBlock(type, blocks) {\n return blocks.find(block => block.getStaticData && block.getStaticData().id === type);\n}\n\nfunction compileActions(actions, context, blocks) {\n let result = [];\n actions && actions.forEach(action => {\n const found = findBlock(action.id, blocks);\n if (found) {\n result.push(found.compile(action, context));\n }\n });\n return `\\t\\t${result.join('\\n\\n\\t\\t')}` || '';\n}\n\nfunction compileConditions(conditions, context, blocks) {\n let result = [];\n let i = 0;\n conditions && conditions.forEach(ors => {\n if (ors.hasOwnProperty('length') && ors.length) {\n const _ors = [];\n _ors && ors.forEach(block => {\n const found = findBlock(block.id, blocks);\n if (found) {\n context.condition.index = i++;\n _ors.push(found.compile(block, context));\n }\n });\n result.push('(' + _ors.join(') &&\\n (') + ')');\n } else {\n const found = findBlock(ors.id, blocks);\n if (found) {\n context.condition.index = i++;\n result.push(found.compile(ors, context));\n }\n }\n });\n\n if (!result.length) {\n return 'true';\n } else\n if (result.length === 1) {\n return result[0] || 'true';\n } else {\n return '(' + result.join(') || (') + ')';\n }\n}\n\nfunction compile(json, blocks) {\n return compileTriggers(json, null, blocks);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction code2json(code) {\n if (!code) {\n return DEFAULT_RULE;\n } else {\n const lines = code.split('\\n');\n try {\n let json = lines.pop().replace(/^\\/\\//, '');\n json = JSON.parse(json);\n if (!json.triggers) {\n json = DEFAULT_RULE;\n }\n return json;\n } catch (e) {\n return DEFAULT_RULE;\n }\n }\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction json2code(json, blocks) {\n let code = '';\n\n const compiled = compile(json, blocks);\n code += compiled;\n\n code += `\\n/*const demo = ${JSON.stringify(json, null, 2)};*/\\n`;\n\n return code + '\\n//' + JSON.stringify(json);\n}\n\nconst Compile = {\n code2json,\n json2code,\n compile,\n STANDARD_FUNCTION,\n STANDARD_FUNCTION_ONCHANGE,\n STANDARD_FUNCTION_STATE,\n STANDARD_FUNCTION_STATE_ONCHANGE,\n NO_FUNCTION,\n};\n\nexport default Compile;","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\nimport Compile from '../../helpers/Compile';\n\nclass TriggerScriptSave extends GenericBlock {\n constructor(props) {\n super(props, TriggerScriptSave.getStaticData());\n }\n\n static compile(config, context) {\n return Compile.NO_FUNCTION.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Triggered');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNameText',\n defaultValue: 'On script save or adapter start',\n attr: 'script'\n },\n ]\n }, () => super.onTagChange());\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Start script',\n id: 'TriggerScriptSave',\n icon: 'PlayArrow',\n title: 'Triggers the on script saving or the javascript instance restart'\n }\n }\n\n getData() {\n return TriggerScriptSave.getStaticData();\n }\n}\n\nexport default TriggerScriptSave;\n","import React from 'react';\nimport SunCalc from 'suncalc2';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport CustomInput from '../CustomInput';\nimport CustomButton from '../CustomButton';\nimport CustomModal from '../CustomModal';\n\nimport ComplexCron from '@iobroker/adapter-react-v5/Components/ComplexCron';\nimport Schedule from '@iobroker/adapter-react-v5/Components/Schedule';\nimport convertCronToText from '@iobroker/adapter-react-v5/Components/SimpleCron/cronText';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DEFAULT_WIZARD = '{\"time\":{\"start\":\"00:00\",\"end\":\"24:00\",\"mode\":\"hours\",\"interval\":1},\"period\":{\"days\":1}}';\n\nclass TriggerScheduleBlock extends GenericBlock {\n constructor(props) {\n super(props, TriggerScheduleBlock.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n let text = '';\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {trigger: true})`);\n\n if (config.tagCard === 'interval') {\n text = `setInterval(${func}, ${config.interval || 1} * ${config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000)});`;\n } else if (config.tagCard === 'cron') {\n text = `schedule(\"${config.cron}\", ${func});`;\n } else if (config.tagCard === 'at') {\n const [hours, minutes] = (config.at || '').split(':');\n let dow = '*';\n if (config?.dow?.length && !config.dow.includes('_')) {\n const _dow = [...config.dow].map(item => parseInt(item, 10));\n _dow.sort();\n\n let intervals = [];\n let start = _dow[0];\n let i = 1\n for (; i < _dow.length; i++) {\n if (_dow[i] - _dow[i - 1] > 1) {\n if (start === _dow[i - 1]) {\n intervals.push(start);\n } else if (_dow[i - 1] - start === 1) {\n intervals.push(start + ',' + _dow[i - 1]);\n } else {\n intervals.push(start + '-' + _dow[i - 1]);\n }\n\n start = _dow[i];\n } else if (i === _dow.length - 1) {\n if (start === _dow[i - 1] || _dow[i] - start === 1) {\n intervals.push(start + ',' + _dow[i]);\n } else {\n intervals.push(start + '-' + _dow[i]);\n }\n }\n }\n\n dow = intervals.join(',')\n }\n text = `schedule(\"${minutes || '0'} ${hours || '0'} * * ${dow}\", ${func});`;\n } else if (config.tagCard === 'astro') {\n text = `schedule({astro: \"${config.astro}\", shift: ${config.offset ? config.offsetValue : 0}}, ${func});`;\n } else if (config.tagCard === 'wizard') {\n text = `schedule('${config.wizard}', ${func});`;\n }\n\n return text;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude\n }\n }\n });\n }\n\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${TriggerScheduleBlock._time2String(sunValue[name])}]`,\n order: sunValue ? TriggerScheduleBlock._time2String(sunValue[name]) : '??:??'\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(at ${TriggerScheduleBlock._time2String(astroTime)})`;// translate\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n frontText: 'at',\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes', // translate\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n } else {\n inputs = [\n {\n frontText: 'at', // translate\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset', // translate\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n defaultValue: time,\n }\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n async _setInterval(interval) {\n interval = parseInt(interval || this.state.settings.interval, 10) || 30;\n let options;\n if (interval === 1) {\n options = [\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' }\n ];\n } else {\n options = [\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' }\n ];\n }\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n prefix: {\n en: 'every'\n },\n attr: 'interval',\n frontText: 'every',\n defaultValue: 30,\n className: 'block-input-interval'\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 's',\n options\n }\n ]\n }, () => super.onTagChange());\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Triggered');\n }\n\n onValueChanged(value, attr) {\n if (this.state.settings.tagCard === 'astro') {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n } else if (this.state.settings.tagCard === 'interval') {\n if (attr === 'interval') {\n this._setInterval(value);\n }\n }\n }\n\n renderCron(input, value, onChange) {\n const { className } = this.props;\n let textCron = '';\n const { settings } = this.state;\n const { attr } = input;\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'baseline' }}>\n <div style={{ width: '100%' }}>\n {this.renderText({\n attr: 'text',\n defaultValue: value\n }, !!settings['text'] ? settings['text'] : value, onChange)}\n </div>\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={async () => {\n await onChange(textCron, 'text');\n await onChange(convertCronToText(textCron, I18n.getLanguage()), 'addText');\n this.setState({ openDialog: false });\n }}\n onClose={() => this.setState({ openDialog: false })}>\n <ComplexCron\n cronExpression={!!settings[input.attr] ? '' : settings[attr]}\n onChange={el => {textCron = el}} />\n </CustomModal>\n {this.renderNameText({\n defaultValue: 'every hour at 0 minutes',\n attr: 'addText',\n signature: true\n }, !!settings['addText'] ? settings['addText'] : 'every hour at 0 minutes', onChange)}\n </div>;\n }\n\n renderWizard(input, value, onChange) {\n const { className } = this.props;\n const { attr } = input;\n let wizardText = '';\n let wizard = null;\n return <div key={attr}>\n <div style={{ display: 'flex', alignItems: 'center', marginTop: 7 }}>\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n // disabled\n variant=\"outlined\"\n size=\"small\"\n multiline\n rows={2}\n value={this.state.settings[attr + 'Text']}\n onChange={(el) => onChange(el)}\n customValue\n />\n <CustomButton\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openDialog: true })}\n />\n </div>\n <CustomModal\n open={this.state.openDialog}\n onApply={() =>\n this.setState({ openDialog: false }, () =>\n onChange({\n [attr + 'Text']: wizardText,\n [attr]: wizard,\n }))}\n onClose={() => this.setState({ openDialog: false })}>\n <Schedule onChange={(val, text) => {\n wizardText = text;\n wizard = typeof val === 'object' ? JSON.parse(JSON.stringify(val)) : JSON.parse(val);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n wizard = JSON.stringify(wizard);\n }} />\n </CustomModal>\n </div>;\n }\n\n onTagChange(tagCard) {\n tagCard = tagCard || this.state.settings.tagCard;\n switch (tagCard) {\n case 'interval':\n this._setInterval();\n break;\n\n case 'cron':\n this.setState({\n inputs: [\n {\n nameRender: 'renderCron',\n attr: 'cron',\n defaultValue: '0 * * * *',\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'wizard':\n const wizard = JSON.parse(DEFAULT_WIZARD);\n wizard.valid = wizard.valid || {};\n wizard.valid.from = wizard.valid.from || Schedule.now2string();\n\n this.setState({\n inputs: [\n {\n nameRender: 'renderWizard',\n attr: 'wizard',\n defaultValue: JSON.stringify(wizard),\n }\n ]\n }, () => super.onTagChange(null, () => {\n const wizardText = Schedule.state2text(this.state.settings.wizard || wizard);\n if (this.state.settings.wizardText !== wizardText) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n settings.wizardText = wizardText;\n this.setState({settings});\n this.props.onChange(settings);\n }\n }));\n break;\n\n case 'at':\n this.setState({\n inputs: [\n {\n nameRender: 'renderTime',\n prefix: 'at',\n attr: 'at',\n defaultValue: '07:30',\n },\n {\n nameRender: 'renderSelect',\n attr: 'dow',\n default: '',\n multiple: true,\n defaultValue: ['_', '1', '2', '3', '4', '5', '6', '0'],\n options: [\n { value: '_', title: 'Every day', only: true },\n { value: '1', title: 'Monday', titleShort: 'Mo' },\n { value: '2', title: 'Tuesday', titleShort: 'Tu' },\n { value: '3', title: 'Wednesday', titleShort: 'We' },\n { value: '4', title: 'Thursday', titleShort: 'Th' },\n { value: '5', title: 'Friday', titleShort: 'Fr' },\n { value: '6', title: 'Saturday', titleShort: 'Sa' },\n { value: '0', title: 'Sunday', titleShort: 'Su' },\n ]\n }\n ]\n }, () => super.onTagChange());\n break;\n\n case 'astro':\n this._setAstro();\n break;\n\n default:\n break;\n }\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'Schedule',\n id: 'TriggerScheduleBlock',\n icon: 'AccessTime',\n tagCardArray: ['cron', 'wizard', 'interval', 'at', 'astro'],\n title: 'Triggers the rule periodically or on some specific time'\n }\n }\n\n getData() {\n return TriggerScheduleBlock.getStaticData();\n }\n}\n\nexport default TriggerScheduleBlock;\n","import React from 'react';\nimport withStyles from '@mui/styles/withStyles';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport Button from '@mui/material/Button';\nimport Switch from '@mui/material/Switch';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Slide from '@mui/material/Slide';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { MdCancel as IconCancel } from 'react-icons/md';\nimport { MdCheck as IconCheck } from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323'\n },\n valueNotAck: {\n color: '#12ac15'\n },\n});\n\nconst Transition = React.forwardRef((props, ref) =>\n <Slide direction=\"up\" ref={ref} {...props} />);\n\nclass TriggerState extends GenericBlock {\n constructor(props) {\n super(props, TriggerState.getStaticData());\n this.inputRef = React.createRef();\n }\n\n static compile(config, context) {\n let func = context.justCheck ? Compile.STANDARD_FUNCTION_STATE : Compile.STANDARD_FUNCTION_STATE_ONCHANGE;\n func = func.replace('\"__%%DEBUG_TRIGGER%%__\"', `_sendToFrontEnd(${config._id}, {val: obj.state.val, ack: obj.state.ack, valOld: obj.oldState && obj.oldState.val, ackOld: obj.oldState && obj.oldState.ack})`);\n return `on({id: \"${config.oid || ''}\", change: \"${config.tagCard === 'on update' ? 'any' : 'ne'}\"}, ${func});`\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n if (debugMessage.data.valOld !== undefined) {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ackOld ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.valOld)}</span> → <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n } else {\n return <span>{I18n.t('Triggered')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{TriggerState.renderValue(debugMessage.data.val)}</span></span>;\n }\n }\n\n onWriteValue() {\n this.setState({openSimulate: false});\n let simulateValue = this.state.simulateValue;\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}_ack`, this.state.simulateAck);\n\n if (this.state.settings.oidType === 'boolean') {\n simulateValue = simulateValue === true || simulateValue === 'true' || simulateValue === '1';\n } else if (this.state.settings.oidType === 'number') {\n simulateValue = parseFloat(simulateValue) || 0;\n }\n\n window.localStorage.setItem(`javascript.app.${this.state.settings.oid}`, simulateValue);\n this.props.socket.setState(this.state.settings.oid, simulateValue, !!this.state.simulateAck);\n }\n\n renderWriteState() {\n return <>\n <Button\n disabled={!this.state.settings.oid || !this.state.enableSimulation}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n this.setState({\n openSimulate: true,\n simulateValue: this.state.settings.oidType === 'boolean' ?\n window.localStorage.getItem('javascript.app.' + this.state.settings.oid) === 'true' :\n (window.localStorage.getItem('javascript.app.' + this.state.settings.oid) || ''),\n simulateAck: window.localStorage.getItem(`javascript.app.${this.state.settings.oid}_ack`) === 'true'\n });\n setTimeout(() => this.inputRef.current?.focus(), 200);\n }}>{I18n.t('Simulate')}</Button>\n <Dialog\n open={!!this.state.openSimulate}\n TransitionComponent={Transition}\n keepMounted\n onClose={() => this.setState({openSimulate: false})}\n aria-labelledby=\"simulate-dialog-slide-title\"\n aria-describedby=\"simulate-dialog-slide-description\"\n >\n <DialogTitle id=\"simulate-dialog-slide-title\">{I18n.t('Trigger with value')}</DialogTitle>\n <DialogContent>\n {this.state.settings.oidType === 'boolean' ?\n <FormControlLabel\n control={<Switch\n inputRef={this.inputRef}\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={!!this.state.simulateValue}\n onChange={e => this.setState({simulateValue: e.target.checked})}\n />}\n label={I18n.t('Value')}\n />\n : <TextField\n variant=\"standard\"\n inputRef={this.inputRef}\n label={I18n.t('Value')}\n fullWidth={true}\n onKeyUp={e => e.keyCode === 13 && this.onWriteValue()}\n value={this.state.simulateValue}\n onChange={e => this.setState({simulateValue: e.target.value})}\n />\n }\n <br/>\n <FormControlLabel\n control={\n <Checkbox\n checked={!!this.state.simulateAck}\n onChange={e => this.setState({simulateAck: e.target.checked})}\n color=\"primary\"\n />\n }\n label={I18n.t('Ack')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.onWriteValue()}\n color=\"primary\">\n <IconCheck/>{I18n.t('Write')}\n </Button>\n <Button color=\"grey\"\n variant=\"contained\"\n onClick={() => this.setState({openSimulate: false})}\n >\n <IconCancel/>{I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </>;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: ''\n },\n {\n nameRender: 'renderWriteState',\n }\n ]\n }, () => {\n super.onTagChange();\n });\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'triggers',\n name: 'State',\n id: 'TriggerState',\n icon: 'FlashOn',\n tagCardArray: ['on change', 'on update'],\n title: 'Triggers the rule on update or change of some state' // translate\n }\n }\n\n getData() {\n return TriggerState.getStaticData();\n }\n}\nexport default withStyles(styles)(TriggerState);\n","import React from 'react';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport DialogActions from '@mui/material/DialogActions';\n\nimport GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport HysteresisImage from '../../../assets/hysteresis.png';\n\nconst HYSTERESIS = `function __hysteresis(val, limit, state, hist, comp) {\n let cond1, cond2;\n if (comp === '>') {\n cond1 = val > limit + hist;\n cond2 = val <= limit - hist;\n } else if (comp === '<') {\n cond1 = val < limit - hist;\n cond2 = val >= limit + hist;\n } else if (comp === '>=') {\n cond1 = val >= limit + hist;\n cond2 = val < limit - hist;\n } else if (comp === '<=') {\n cond1 = val <= limit - hist;\n cond2 = val > limit + hist;\n } else if (comp === '=') {\n cond1 = val <= limit + hist && val > limit - hist;\n cond2 = val > limit + hist || val <= limit - hist;\n } else if (comp === '<>') {\n cond1 = val > limit + hist || val <= limit - hist;\n cond2 = val <= limit + hist && val > limit - hist;\n }\n \n if (!state && cond1) {\n return true;\n } else if (state && cond2) {\n return false;\n } else {\n return state;\n }\n}`;\n\nclass ConditionState extends GenericBlock {\n constructor(props) {\n super(props, ConditionState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (value === null || value === undefined) {\n value = false;\n }\n let debugValue = '';\n\n let result;\n if (config.tagCard === '()') {\n context.prelines = context.prelines || [];\n !context.prelines.find(item => item !== HYSTERESIS) && context.prelines.push(HYSTERESIS);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (value === '') {\n value = 0;\n }\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n\n result = `__hysteresis(subCondVar${config._id}, ${value}, __%%STATE%%__, ${config.hist}, \"${config.histComp}\")`;\n }\n } else\n if (config.tagCard !== 'includes') {\n const compare = config.tagCard === '=' ? '==' : (config.tagCard === '<>' ? '!=' : config.tagCard);\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id} ${compare} \"${value}\"`;\n } else {\n if (value === '') {\n value = 0;\n }\n if (typeof value === 'string' && parseFloat(value.trim()).toString() !== value.trim()) {\n value = `\"${value}\"`;\n }\n result = `subCondVar${config._id} ${compare} ${value}`;\n }\n }\n } else {\n if (config.useTrigger) {\n debugValue = 'obj.state.val';\n if (context?.trigger?.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `obj.state.val.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n } else {\n debugValue = `(await getStateAsync(\"${config.oid}\")).val`;\n if (config.oidType === 'string') {\n value = value.replace(/\"/g, '\\\\\"');\n result = `subCondVar${config._id}.includes(\"${value}\")`;\n } else {\n result = `false`;\n }\n }\n }\n context.conditionsVars.push(`const subCondVar${config._id} = ${debugValue};`);\n context.conditionsVars.push(`const subCond${config._id} = ${result};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}, value: subCondVar${config._id}, compareWith: ${value}});`);\n return 'subCond' + config._id;\n }\n\n renderDebug(debugMessage) {\n const condition = this.state.settings.tagCard;\n if (condition === '()') {\n // TODO\n } else {\n return debugMessage.data.result.toString().toUpperCase() + ' [' + debugMessage.data.value + ' ' + condition + ' ' + debugMessage.data.compareWith + ']';\n }\n\n return I18n.t('Triggered');\n }\n\n onShowHelp = () => this.setState({showHysteresisHelp: true});\n\n _setInputs(useTrigger, tagCard, oidType, oidUnit, oidStates) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n tagCard = tagCard || this.state.settings.tagCard;\n oidType = oidType || this.state.settings.oidType;\n oidUnit = oidUnit || this.state.settings.oidUnit;\n oidStates = oidStates || this.state.settings.oidStates;\n\n if (isAllTriggersOnState && useTrigger && this.props.userRules?.triggers?.length === 1) {\n oidType = this.props.userRules.triggers[0].oidType;\n oidUnit = this.props.userRules.triggers[0].oidUnit;\n oidStates = this.props.userRules.triggers[0].oidStates;\n }\n\n const _tagCardArray = ConditionState.getStaticData().tagCardArray;\n const tag = _tagCardArray.find(item => item.title === tagCard);\n let tagCardArray;\n let options = null;\n\n if (oidType === 'number') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis'\n }\n ];\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n }\n } else if (oidType === 'boolean') {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ];\n options = [\n {title: 'false', value: false},\n {title: 'true', value: true},\n ];\n } else {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes'\n }\n ];\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n }\n }\n\n let settings = null;\n if (!tagCardArray.find(item => item.title === tagCard)) {\n tagCard = tagCardArray[0].title;\n settings = settings || {...this.state.settings};\n settings.tagCard = tagCard;\n }\n\n let inputs;\n let renderText = {\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value',\n frontText: tagCard === '()' ? 'Limit' : (tag?.text || 'compare with'),\n doNotTranslateBack: true,\n backText: oidUnit\n };\n\n if (options) {\n renderText = {\n nameRender: 'renderSelect',\n defaultValue: options[0].value,\n options,\n attr: 'value',\n frontText: tag?.text || 'compare with',\n doNotTranslateBack: true,\n backText: oidUnit\n };\n if (!options.find(item => item.value === this.state.settings.value)) {\n settings = settings || {...this.state.settings};\n settings.value = options[0].value;\n }\n if (options.length <= 2) {\n tagCardArray = [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ];\n }\n }\n\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n renderText,\n ];\n } else if (isAllTriggersOnState) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n },\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n },\n renderText,\n ];\n }\n\n if (tagCard === '()') {\n inputs.splice(1, 0, {\n nameRender: 'renderDialog',\n icon: 'HelpOutline',\n frontText: 'Explanation',\n onShowDialog: this.onShowHelp,\n });\n inputs.splice(2, 0, {\n nameRender: 'renderSelect',\n attr: 'histComp',\n defaultValue: '>',\n frontText: 'Condition',\n doNotTranslate: true,\n options: [\n {title: '>', value: '>'},\n {title: '>=', value: '>='},\n {title: '<', value: '<'},\n {title: '<=', value: '<='},\n {title: '=', value: '='},\n {title: '<>', value: '<>'},\n ]\n });\n inputs.push({\n frontText: 'Δ',\n doNotTranslate: true,\n nameRender: 'renderNumber',\n noHelperText: true,\n attr: 'hist',\n defaultValue: 1,\n doNotTranslateBack: true,\n backText: oidUnit\n });\n }\n\n const state = {\n iconTag: true,\n tagCardArray,\n inputs\n };\n\n this.setState(state,() =>\n super.onTagChange(null, () => {\n if (settings) {\n this.setState({settings});\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n if (typeof value === 'object') {\n this._setInputs(value.useTrigger, value.tagCard, value.oidType, value.states);\n } else {\n if (attr === 'useTrigger') {\n this._setInputs(value);\n } else if (attr === 'oidType') {\n this._setInputs(value, undefined, value);\n } else if (attr === 'oidUnit') {\n this._setInputs(value, undefined, undefined, value);\n } else if (attr === 'oidStates') {\n this._setInputs(value, undefined, undefined, undefined, value);\n }\n }\n }\n\n onUpdate() {\n this._setInputs(this.state.settings.useTrigger);\n }\n\n onTagChange(tagCard) {\n this._setInputs(this.state.settings.useTrigger, tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'State condition',\n id: 'ConditionState',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n },\n {\n title: '.',\n title2: '[includes]',\n text: 'includes'\n },\n {\n title: '()',\n title2: '[hysteresis]',\n text: 'hysteresis'\n }\n ],\n title: 'Compares the state value with user defined value'\n }\n }\n\n getData() {\n return ConditionState.getStaticData();\n }\n\n renderSpecific() {\n if (this.state.showHysteresisHelp) {\n return <Dialog\n open={true}\n maxWidth=\"md\"\n onClose={() => this.setState({showHysteresisHelp: false})}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <img src={HysteresisImage} alt=\"Hysteresis\"/>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => this.setState({showHysteresisHelp: false})} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n </Dialog>;\n } else {\n return null;\n }\n }\n}\n\nexport default ConditionState;\n","import GenericBlock from '../GenericBlock';\n\nconst DAYS = [\n 31, // 1\n 29, // 2\n 31, // 3\n 30, // 4\n 31, // 5\n 30, // 6\n 31, // 7\n 31, // 8\n 30, // 9\n 31, // 10\n 30, // 11\n 31 // 12\n];\n\nclass ConditionTime extends GenericBlock {\n constructor(props) {\n super(props, ConditionTime.getStaticData());\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let cond;\n\n if (config.withDate) {\n let [month, date] = (config.date || '01.01').toString().split('.');\n date = parseInt(date, 10) || 0;\n month = parseInt(month, 10) || 0;\n if (month > 12) {\n month = 12;\n } else if (month < 0) {\n month = 0;\n }\n\n if (date > DAYS[month]) {\n date = DAYS[month];\n } else if (date < 0) {\n date = 0;\n }\n if (date && month) {\n cond = `formatDate(Date.now(), 'MM.DD-hh:mm') ${compare} \"${config.date}-${config.time}\"`;\n } else if (date === 0 && month) {\n cond = `formatDate(Date.now(), 'MM-hh:mm') ${compare} \"${month.toString().padStart(2, '0')}-${config.time}\"`;\n } else if (month === 0 && date) {\n cond = `formatDate(Date.now(), 'DD-hh:mm') ${compare} \"${date.toString().padStart(2, '0')}-${config.time}\"`;\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n } else {\n cond = `formatDate(Date.now(), 'hh:mm') ${compare} \"${config.time}\"`;\n }\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: subCond${config._id}});`);\n return 'subCond' + config._id;\n }\n\n _setInputs(tagCard, withDate, ) {\n withDate = withDate === undefined ? this.state.settings.withDate : withDate;\n tagCard = tagCard || this.state.settings.tagCard;\n const tagCardArray = ConditionTime.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === tagCard);\n const inputs = [\n {\n nameRender: 'renderNameText',\n attr: 'interval',\n defaultValue: 'Actual time of day',\n },\n {\n frontText: tag?.text || tagCard,\n nameRender: 'renderTime',\n attr: 'time',\n defaultValue: '12:00',\n },\n {\n frontText: 'with date',\n nameRender: 'renderCheckbox',\n attr: 'withDate',\n defaultValue: false,\n }\n ];\n if (withDate) {\n inputs.push({\n nameRender: 'renderDate',\n attr: 'date',\n defaultValue: '01.01',\n });\n }\n this.setState({\n inputs,\n iconTag:true\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'withDate') {\n this._setInputs(undefined, value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs(tagCard);\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Time condition',\n id: 'ConditionTime',\n icon: 'Shuffle',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ],\n title: 'Compares current time with the user specific time'\n }\n }\n\n getData() {\n return ConditionTime.getStaticData();\n }\n}\n\nexport default ConditionTime;\n","import GenericBlock from '../GenericBlock';\nimport SunCalc from 'suncalc2';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ConditionAstrological extends GenericBlock {\n constructor(props) {\n super(props, ConditionAstrological.getStaticData());\n this.coordinates = null;\n }\n\n static compile(config, context) {\n const compare = config.tagCard === '=' ? '===' : (config.tagCard === '<>' ? '!==' : config.tagCard);\n let offset;\n if (config.offset) {\n offset = parseInt(config.offsetValue, 10) || 0;\n }\n const cond = `formatDate(Date.now(), 'hh:mm') ${compare} formatDate(getAstroDate(\"${config.astro}\"${offset ? `, undefined, ${offset}` : ''}), 'hh:mm')`;\n context.conditionsVars.push(`const subCond${config._id} = ${cond};`);\n context.conditionsDebug.push(`_sendToFrontEnd(${config._id}, {result: ${cond}});`);\n return cond;\n }\n\n static _time2String(time) {\n if (!time) {\n return '--:--';\n }\n return `${time.getHours().toString().padStart(2, '0')}:${time.getMinutes().toString().padStart(2, '0')}`;\n }\n\n onValueChanged(value, attr) {\n if (attr === 'astro') {\n this._setAstro(value);\n } else if (attr === 'offset') {\n this._setAstro(undefined, value);\n } else if (attr === 'offsetValue') {\n this._setAstro(undefined, undefined, value);\n }\n }\n\n async _setAstro(astro, offset, offsetValue) {\n astro = astro || this.state.settings.astro || 'solarNoon';\n offset = offset === undefined ? this.state.settings.offset : offset;\n offsetValue = offsetValue === undefined ? this.state.settings.offsetValue : offsetValue;\n\n offsetValue = parseInt(offsetValue, 10) || 0;\n if (!this.coordinates) {\n await this.props.socket.getObject('system.adapter.javascript.0')\n .then(({ native: { latitude, longitude } }) => {\n if (!latitude && !longitude) {\n return this.props.socket.getObject('system.config')\n .then(obj => {\n if (obj && (obj.common.latitude || obj.common.longitude)) {\n this.coordinates = {\n latitude: obj.common.latitude,\n longitude: obj.common.longitude\n }\n } else {\n this.coordinates = null;\n }\n });\n } else {\n this.coordinates = {\n latitude,\n longitude\n }\n }\n });\n }\n const sunValue = this.coordinates && SunCalc.getTimes(new Date(), this.coordinates.latitude, this.coordinates.longitude);\n const options = sunValue ? Object.keys(sunValue).map(name => ({\n value: name,\n title: name,\n title2: `[${ConditionAstrological._time2String(sunValue[name])}]`,\n order: ConditionAstrological._time2String(sunValue[name])\n })) : [];\n options.sort((a, b) => a.order > b.order ? 1 : (a.order < b.order ? -1 : 0));\n\n // calculate time text\n const tagCardArray = ConditionAstrological.getStaticData().tagCardArray;\n const tag = tagCardArray.find(item => item.title === this.state.settings.tagCard);\n\n let time = '--:--';\n if (astro && sunValue && sunValue[astro]) {\n const astroTime = new Date(sunValue[astro]);\n offset && astroTime.setMinutes(astroTime.getMinutes() + parseInt(offsetValue, 10));\n time = `(${I18n.t(tag.text)} ${ConditionAstrological._time2String(astroTime)})`;\n }\n\n let inputs;\n\n if (offset) {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text'\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n backText: offsetValue === 1 ? 'minute' : 'minutes',\n frontText: 'offset',\n nameRender: 'renderNumber',\n defaultValue: 0,\n attr: 'offsetValue',\n noHelperText: true,\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n }\n ];\n } else {\n inputs = [\n {\n nameRender: 'renderNameText',\n defaultValue: 'Actual time of day',\n attr: 'text'\n },\n {\n frontText: tag.text,\n attr: 'astro',\n nameRender: 'renderSelect',\n options,\n doNotTranslate2: true,\n defaultValue: 'solarNoon'\n },\n {\n backText: 'with offset',\n nameRender: 'renderCheckbox',\n attr: 'offset',\n },\n {\n nameRender: 'renderNameText',\n attr: 'textTime',\n doNotTranslate: true,\n defaultValue: time,\n }\n ];\n }\n\n this.setState({ inputs }, () => super.onTagChange());\n }\n\n onTagChange(tagCard) {\n this._setAstro();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'conditions',\n name: 'Astrological',\n id: 'ConditionAstrological',\n icon: 'Brightness3',\n tagCardArray: [\n {\n title: '=',\n title2: '[equal]',\n text: 'equal to'\n },\n {\n title: '>=',\n title2: '[greater or equal]',\n text: 'greater or equal to'\n },\n {\n title: '>',\n title2: '[greater]',\n text: 'greater than'\n },\n {\n title: '<=',\n title2: '[less or equal]',\n text: 'less or equal to'\n },\n {\n title: '<',\n title2: '[less]',\n text: 'less than'\n },\n {\n title: '<>',\n title2: '[not equal]',\n text: 'not equal to'\n }\n ],\n title: 'Compares current time with astrological event'\n }\n }\n\n getData() {\n return ConditionAstrological.getStaticData();\n }\n}\n\nexport default ConditionAstrological;\n","import GenericBlock from '../GenericBlock';\nimport withStyles from '@mui/styles/withStyles';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\n\nconst styles = theme => ({\n valueAck: {\n color: '#b02323'\n },\n valueNotAck: {\n color: '#12ac15'\n },\n});\n\nclass ActionSetState extends GenericBlock {\n constructor(props) {\n super(props, ActionSetState.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n return `// set state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} \n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetState.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const {oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep} = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n type = 'select';\n }\n }\n\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = {value: oidMax === undefined ? 0 : oidMax};\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value'\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = {value: oidMax};\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = {value: options[0].value};\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value'\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = {value: false};\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = {value: true};\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = {value: '#FFFFFF'};\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value'\n }];\n break;\n }\n\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n return {inputs, newSettings: settings};\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const {inputs, newSettings} = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set state action',\n id: 'ActionSetState',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSetState.getStaticData();\n }\n}\n\nexport default withStyles(styles)(ActionSetState);\n","import GenericBlock from '../GenericBlock';\n\nclass ActionExec extends GenericBlock {\n constructor(props) {\n super(props, ActionExec.getStaticData());\n }\n\n static compile(config, context) {\n return `// exec \"${config.exec}\"\n\\t\\tconst subActionVar${config._id} = \"${(config.exec || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {exec: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return 'Exec: ' + debugMessage.data.exec;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'exec',\n defaultValue: 'ls /opt/iobroker',\n nameBlock: 'Shell command'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Exec',\n id: 'ActionExec',\n icon: 'Apps',\n title: 'Executes some shell command',\n helpDialog: 'You can use %s in the command to use current trigger value or %id to use the triggered object ID'\n }\n }\n\n getData() {\n return ActionExec.getStaticData();\n }\n}\n\nexport default ActionExec;\n","import GenericBlock from '../GenericBlock';\n\nclass ActionHTTPCall extends GenericBlock {\n constructor(props) {\n super(props, ActionHTTPCall.getStaticData());\n }\n\n static compile(config, context) {\n return `// HTTP request ${config.url}\n\\t\\tconst subActionVar${config._id} = \"${(config.url || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {url: subActionVar${config._id}});\n\\t\\trequest(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return 'URL: ' + debugMessage.data.url;\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'url',\n defaultValue: 'http://mydevice.com?...',\n nameBlock: 'URL'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'HTTP Call',\n id: 'ActionHTTPCall',\n icon: 'Language',\n title: 'Make a HTTP get request',\n helpDialog: 'You can use %s in the URL to use current trigger value or %id to use the triggered object ID'\n }\n }\n\n getData() {\n return ActionHTTPCall.getStaticData();\n }\n}\n\nexport default ActionHTTPCall;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionPrintText extends GenericBlock {\n constructor(props) {\n super(props, ActionPrintText.getStaticData());\n }\n\n static compile(config, context) {\n return `// Log ${config.text}\n\\t\\tconst subActionVar${config._id} = \"${(config.text || '').replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)};\n\\t\\t_sendToFrontEnd(${config._id}, {text: subActionVar${config._id}});\n\\t\\tconsole.log(subActionVar${config._id});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Log: %s', debugMessage.data.text);\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'text',\n defaultValue: 'My device triggered',\n nameBlock: 'Log text'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Log text',\n id: 'ActionPrintText',\n icon: 'Subject',\n title: 'Print some text in log',\n helpDialog: 'You can use %s in the text to display current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionPrintText.getStaticData();\n }\n}\n\nexport default ActionPrintText;\n","import GenericBlock from '../GenericBlock';\nimport I18n from \"@iobroker/adapter-react-v5/i18n\";\n\nclass ActionPause extends GenericBlock {\n constructor(props) {\n super(props, ActionPause.getStaticData());\n }\n\n static compile(config, context) {\n const ms = config.unit === 'ms' ? 1 : (config.unit === 's' ? 1000 : (config.unit === 'm' ? 60000 : 3600000))\n\n return `// pause for ${ms}ms\n\\t\\t_sendToFrontEnd(${config._id}, {paused: true});\\n\n\\t\\tawait wait(${config.pause} * ${ms});\\n\n\\t\\t_sendToFrontEnd(${config._id}, {paused: false});`;\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Paused: %s', debugMessage.data.paused);\n }\n\n _getOptions(pause) {\n pause = pause === undefined ? this.state.settings.pause : pause;\n if (pause === 1 || pause === '1') {\n return [\n { value: 'ms', title: 'millisecond' },\n { value: 's', title: 'second' },\n { value: 'm', title: 'minute' },\n { value: 'h', title: 'hour' }\n ];\n } else {\n return [\n { value: 'ms', title: 'milliseconds' },\n { value: 's', title: 'seconds' },\n { value: 'm', title: 'minutes' },\n { value: 'h', title: 'hours' }\n ];\n }\n }\n\n _setInputs(pause) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderNumber',\n attr: 'pause',\n defaultValue: 100,\n noHelperText: true,\n },\n {\n nameRender: 'renderSelect',\n attr: 'unit',\n defaultValue: 'ms',\n options: this._getOptions(pause)\n },\n ]\n }, () => super.onTagChange());\n }\n\n onValueChanged(value, attr) {\n if (attr === 'pause') {\n this._setInputs(value);\n }\n }\n\n onTagChange(tagCard) {\n this._setInputs();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Pause',\n id: 'ActionPause',\n icon: 'Pause',\n title: 'Make a pause between actions'\n }\n }\n\n getData() {\n return ActionPause.getStaticData();\n }\n}\n\nexport default ActionPause;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionFunction extends GenericBlock {\n constructor(props) {\n super(props, ActionFunction.getStaticData());\n }\n\n static compile(config, context) {\n const lines = (config.func || '')\n .split('\\n')\n .map((line, i) => ' ' + line);\n\n lines.unshift(`\\t\\t_sendToFrontEnd(${config._id}, {func: 'executed'});`);\n lines.unshift(`// user function`);\n\n return lines.join('\\n');\n }\n\n renderDebug(debugMessage) {\n return I18n.t('Function: executed');\n }\n\n onTagChange(tagCard) {\n this.setState({\n inputs: [\n {\n nameRender: 'renderModalInput',\n attr: 'func',\n noTextEdit: true,\n defaultValue: 'console.log(\"Test\")',\n nameBlock: 'Function'\n }\n ]\n }, () => super.onTagChange(tagCard));\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'User function',\n id: 'ActionFunction',\n icon: 'Functions',\n title: 'Write your own code',\n helpDialog: 'This is advances option. You can write your own code here and it will be executed on trigger'\n }\n }\n\n getData() {\n return ActionFunction.getStaticData();\n }\n}\n\nexport default ActionFunction;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionSetStateDelayed extends GenericBlock {\n constructor(props) {\n super(props, ActionSetStateDelayed.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let value = config.value;\n if (config.useTrigger) {\n value = config.toggle ? '!obj.state.val' : 'obj.state.val';\n } else {\n if (value === undefined || value === null) {\n value = '';\n }\n\n if (typeof config.value === 'string' &&\n parseFloat(config.value).toString() !== config.value &&\n config.value !== 'true' &&\n config.value !== 'false'\n ) {\n value = `\"${value.replace(/\"/g, '\\\\\"')}\"${GenericBlock.getReplacesInText(context)}`;\n }\n }\n let v;\n if (config.toggle && !config.useTrigger) {\n v = `const subActionVar${config._id} = !(await getStateAsync(\"${config.oid}\")).val`;\n } else {\n v = `const subActionVar${config._id} = ${value}`;\n }\n\n return `// set delayed state ${config.oid} to ${config.toggle && !config.useTrigger ? 'toggle' : value} with delay of ${config.delay}ms\n\\t\\t${v};\n\\t\\t_sendToFrontEnd(${config._id}, {val: subActionVar${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tsetStateDelayed(\"${config.oid}\", subActionVar${config._id}, ${config.tagCard === 'update'}, ${parseInt(config.delay, 10)}, ${config.clearRunning ? 'true' : 'false'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionSetStateDelayed.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n _setInputs(useTrigger, toggle) {\n const isAllTriggersOnState = this.isAllTriggersOnState();\n\n toggle = toggle === undefined ? this.state.settings.toggle : toggle;\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n let type = '';\n let options;\n const {oidType, oidUnit, oidStates, oidMax, oidMin, oidRole, oidWrite, oidStep} = this.state.settings;\n let settings;\n\n if (oidType) {\n if (oidType === 'number') {\n type = 'number';\n if (oidMax !== undefined && oidMin !== undefined) {\n type = 'slider';\n }\n } else if (oidType === 'boolean') {\n type = 'boolean';\n if (oidRole && oidRole.includes('button') && oidWrite) {\n type = 'button';\n }\n } else {\n type = '';\n if (oidRole && oidRole.includes('color')) {\n type = 'color';\n }\n }\n\n if (oidStates) {\n options = Object.keys(oidStates).map(val =>\n ({value: val, title: oidStates[val]}));\n type = 'select';\n }\n }\n let inputs;\n if (isAllTriggersOnState && useTrigger) {\n inputs = [\n {\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n defaultValue: false,\n },\n ];\n if (type === 'boolean') {\n inputs.push({\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n });\n }\n } else {\n switch (type) {\n case 'number':\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderNumber',\n defaultValue: oidMax === undefined ? 0 : oidMax,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && isNaN(parseFloat(this.state.settings.value))) {\n settings = {value: oidMax === undefined ? 0 : oidMax};\n }\n break;\n\n case 'slider':\n inputs = [{\n nameRender: 'renderSlider',\n defaultValue: oidMax,\n min: oidMin,\n max: oidMax,\n unit: oidUnit,\n step: oidStep,\n attr: 'value'\n }];\n const f = parseFloat(this.state.settings.value);\n if (this.state.settings.value !== undefined &&\n (isNaN(f) || f < oidMin || f > oidMax)\n ) {\n settings = {value: oidMax};\n }\n break;\n\n case 'select':\n inputs = [{\n nameRender: 'renderSelect',\n frontText: 'with',\n options,\n defaultValue: options[0].value,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && !options.find(item => item.value === this.state.settings.value)) {\n settings = {value: options[0].value};\n }\n break;\n\n case 'boolean':\n inputs = [\n {\n backText: 'toggle value',\n attr: 'toggle',\n nameRender: 'renderCheckbox',\n defaultValue: false,\n }\n ];\n if (!toggle) {\n inputs.push({\n backText: 'true',\n frontText: 'false',\n nameRender: 'renderSwitch',\n defaultValue: false,\n attr: 'value'\n });\n }\n\n if (this.state.settings.value !== undefined && this.state.settings.value !== false && this.state.settings.value !== true) {\n settings = {value: false};\n }\n break;\n\n case 'button':\n inputs = [{\n nameRender: 'renderButton',\n defaultValue: true,\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined && this.state.settings.value !== true) {\n settings = {value: true};\n }\n break;\n\n case 'color':\n inputs = [{\n nameRender: 'renderColor',\n frontText: 'with',\n defaultValue: '#FFFFFF',\n attr: 'value'\n }];\n if (this.state.settings.value !== undefined &&\n (\n typeof this.state.settings.value !== 'string' ||\n (typeof this.state.settings.value.startsWith('#') &&\n typeof this.state.settings.value.startsWith('rgb'))\n )) {\n settings = {value: '#FFFFFF'};\n }\n break;\n\n default:\n inputs = [{\n backText: oidUnit || '',\n frontText: 'with',\n nameRender: 'renderText',\n defaultValue: '',\n attr: 'value'\n }];\n break;\n }\n if (isAllTriggersOnState) {\n inputs.unshift({\n backText: 'use trigger value',\n nameRender: 'renderCheckbox',\n attr: 'useTrigger',\n });\n }\n }\n\n inputs.push({\n backText: 'ms',\n frontText: 'Delay',\n nameRender: 'renderNumber',\n defaultValue: '1000',\n noHelperText: true,\n attr: 'delay'\n });\n inputs.push({\n backText: 'clear running',\n nameRender: 'renderCheckbox',\n defaultValue: true,\n attr: 'clearRunning'\n })\n\n return {inputs, newSettings: settings};\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n useTrigger = useTrigger === undefined ? this.state.settings.useTrigger : useTrigger;\n const {inputs, newSettings} = this._setInputs(useTrigger, toggle);\n inputs.unshift({\n nameRender: 'renderObjectID',\n attr: 'oid',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n if (newSettings) {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n Object.assign(settings, newSettings);\n this.setState(settings);\n this.props.onChange(settings);\n }\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Set with delay',\n id: 'ActionSetStateDelayed',\n icon: 'PlayForWork',\n tagCardArray: ['control', 'update'],\n title: 'Control or update some state with delay',\n helpDialog: 'You can use %s in the value to use the current trigger value or %id to display the triggered object ID'\n }\n }\n\n getData() {\n return ActionSetStateDelayed.getStaticData();\n }\n}\n\nexport default ActionSetStateDelayed;\n","import GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nclass ActionOperateStates extends GenericBlock {\n constructor(props) {\n super(props, ActionOperateStates.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let oid1 = `const val2_${config._id} = (await getStateAsync(\"${config.oid1}\")).val;`;\n let oid2 = `const val1_${config._id} = (await getStateAsync(\"${config.oid2}\")).val;`;\n\n return `// ${config.oid1} ${config.operation} ${config.oid2} => ${config.oidResult}\n\\t\\t ${oid1}\n\\t\\t ${oid2}\n\\t\\t_sendToFrontEnd(${config._id}, {val: val1_${config._id} ${config.operation} val2_${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oidResult}\", val1_${config._id} ${config.operation} val2_${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionOperateStates.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n const inputs = [];\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID1',\n attr: 'oid1',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderSelect',\n //frontText: 'with',\n options: [\n {value: '+', title: '+'},\n {value: '-', title: '-'},\n {value: '*', title: '*'},\n {value: '/', title: '/'},\n ],\n doNotTranslate: true,\n defaultValue: '+',\n attr: 'operation'\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID2',\n attr: 'oid2',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderNameText',\n defaultValue: 'store in',\n attr: 'textEqual',\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n attr: 'oidResult',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n this.props.onChange(settings);\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Operate two states',\n id: 'ActionOperateStates',\n icon: 'AddBox',\n tagCardArray: ['control', 'update'],\n title: 'Operations with two states',\n }\n }\n\n getData() {\n return ActionOperateStates.getStaticData();\n }\n}\n\nexport default ActionOperateStates;\n","import TriggerScriptSave from '../Blocks/TriggerScriptSave';\nimport TriggerSchedule from '../Blocks/TriggerSchedule';\nimport TriggerState from '../Blocks/TriggerState';\nimport ConditionState from '../Blocks/ConditionState';\nimport ConditionTime from '../Blocks/ConditionTime';\nimport ConditionAstrological from '../Blocks/ConditionAstrological';\nimport ActionSetState from '../Blocks/ActionSetState';\nimport ActionExec from '../Blocks/ActionExec';\nimport ActionHTTPCall from '../Blocks/ActionHTTPCall';\nimport ActionPrintText from '../Blocks/ActionPrintText';\nimport ActionPause from '../Blocks/ActionPause';\nimport ActionFunction from '../Blocks/ActionFunction';\nimport ActionSetStateDelayed from '../Blocks/ActionSetStateDelayed';\nimport ActionOperateStates from '../Blocks/ActionOperateStates';\n\nconst StandardBlocks = [\n TriggerSchedule,\n TriggerScriptSave,\n TriggerState,\n ConditionState,\n ConditionTime,\n ConditionAstrological,\n ActionSetState,\n ActionExec,\n ActionHTTPCall,\n ActionPrintText,\n ActionPause,\n ActionFunction,\n ActionSetStateDelayed,\n ActionOperateStates,\n];\n\nexport default StandardBlocks;","import React, {\n createContext,\n useEffect,\n useState,\n} from 'react';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport ActionSayText from '../Blocks/ActionSayText';\nimport ActionSendEmail from '../Blocks/ActionSendEmail';\nimport ActionTelegram from '../Blocks/ActionTelegram';\nimport ActionPushover from '../Blocks/ActionPushover';\nimport ActionWhatsappcmb from '../Blocks/ActionWhatsappcmb';\nimport ActionPushsafer from '../Blocks/ActionPushsafer';\nimport StandardBlocks from '../StandardBlocks';\n\nconst ADAPTERS = {\n telegram: ActionTelegram,\n email: ActionSendEmail,\n sayit: ActionSayText,\n pushover: ActionPushover,\n 'whatsapp-cmb': ActionWhatsappcmb,\n pushsafer: ActionPushsafer,\n};\n\nexport const ContextWrapperCreate = createContext();\n\nconst getOrLoadRemote = (remote, shareScope, remoteFallbackUrl = undefined) =>\n new Promise((resolve, reject) => {\n // check if remote exists on window\n if (!window[remote]) {\n // search dom to see if remote tag exists, but might still be loading (async)\n const existingRemote = document.querySelector(`[data-webpack=\"${remote}\"]`);\n // when remote is loaded..\n const onload = async () => {\n // check if it was initialized\n if (!window[remote].__initialized) {\n // if share scope doesnt 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 => console.log(`Cannot load i18n \"${file}\": ${error}`));\n } else if (obj.common.javascriptRules.i18n && typeof obj.common.javascriptRules.i18n === 'object') {\n try {\n I18n.extendTranslations(obj.common.javascriptRules.i18n);\n } catch (error) {\n console.error(`Cannot import i18n: ${error}`);\n }\n }\n\n try {\n // const Component = await window.importFederation(\n // obj.common.name,\n // {\n // url,\n // format: 'esm',\n // from: 'vite'\n // },\n // obj.common.javascriptRules.name\n // );\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(e);\n }\n }\n\n const adapterBlocksArray = adapters.filter(adapter => ADAPTERS[adapter]).map(adapter => ADAPTERS[adapter]);\n\n setBlocks([...StandardBlocks, ...adapterBlocksArray, ...adapterDynamicBlocksArray]);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return <ContextWrapperCreate.Provider value={{\n blocks,\n socket,\n onUpdate,\n setOnUpdate,\n onDebugMessage,\n setOnDebugMessage,\n enableSimulation,\n setEnableSimulation\n }}>\n {children}\n </ContextWrapperCreate.Provider>;\n};","export function findElement(settings, userRules, additionalParameter) {\n const { _id, acceptedBy } = settings;\n let block;\n\n if (!acceptedBy || !userRules[acceptedBy]) {\n console.warn('Cannot find ' + acceptedBy);\n return userRules;\n }\n\n switch (acceptedBy) {\n case 'actions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n case 'conditions':\n block = userRules[acceptedBy][additionalParameter].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][additionalParameter][userRules[acceptedBy][additionalParameter].indexOf(block)] = settings;\n }\n return userRules;\n default:\n block = userRules[acceptedBy].find(el => el._id === _id);\n if (!block) {\n console.warn('Cannot find ' + _id);\n } else {\n userRules[acceptedBy][userRules[acceptedBy].indexOf(block)] = settings;\n }\n return userRules;\n }\n}","import React, {memo, useCallback, useContext, useEffect, useMemo, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport { findElement } from '../../helpers/findElement';\nimport GenericBlock from '../GenericBlock';\n\n// @iobroker/javascript-block\n\nconst CurrentItem = memo(props => {\n const { setUserRules, userRules, _id, id, blockValue, active, acceptedBy, isTourOpen, setTourStep, tourStep } = props;\n const [anchorEl, setAnchorEl] = useState(null);\n const { blocks, socket, onUpdate, setOnUpdate, onDebugMessage, enableSimulation } = useContext(ContextWrapperCreate);\n\n useEffect(() => {\n console.log('New message !!' + JSON.stringify(onDebugMessage));\n }, [onDebugMessage]);\n\n\n const findElementBlocks = useCallback(id => blocks.find(el => {\n const staticData = el.getStaticData();\n return staticData.id === id;\n }), [blocks]);\n\n const onChange = useCallback(settings => {\n let newUserRules = findElement(settings, userRules, blockValue);\n newUserRules && setUserRules(newUserRules);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules]);\n\n const handlePopoverOpen = event =>\n event.currentTarget !== anchorEl && setAnchorEl(event.currentTarget);\n\n const handlePopoverClose = () =>\n setAnchorEl(null);\n\n const blockInput = useMemo(() => {\n const CustomBlock = findElementBlocks(id) || GenericBlock;\n return <CustomBlock\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n notFound={!findElementBlocks(id)}\n {...props}\n onUpdate={onUpdate}\n setOnUpdate={setOnUpdate}\n enableSimulation={enableSimulation}\n onDebugMessage={onDebugMessage}\n onChange={onChange}\n className={null}\n socket={socket}\n />;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userRules, onUpdate, onDebugMessage, enableSimulation]);\n\n const [isDelete, setIsDelete] = useState(false);\n\n return <div\n onMouseMove={handlePopoverOpen}\n onMouseEnter={handlePopoverOpen}\n onMouseLeave={handlePopoverClose}\n onMouseDown={el => {\n if (el.ctrlKey) {\n let newItem;\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n if (blockValue !== \"triggers\") {\n newItem = newUserRules[acceptedBy][blockValue].find(el => el._id === _id);\n } else {\n newItem = newUserRules[acceptedBy].find(el => el._id === _id);\n }\n if (blockValue !== \"triggers\") {\n newUserRules[acceptedBy][blockValue].splice(newUserRules[acceptedBy][blockValue].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n } else {\n newUserRules[acceptedBy].splice(newUserRules[acceptedBy].indexOf(newItem), 0, { ...newItem, _id: Date.now() });\n }\n setUserRules(newUserRules);\n }\n }}\n id=\"height\"\n style={active ? { width: document.getElementById('width').clientWidth - 70 } : null}\n className={`${cls.cardStyle} ${active ? cls.cardStyleActive : null} ${isDelete ? cls.isDelete : null}`}>\n <div className={cls.drag_mobile} />\n {blockInput}\n {setUserRules && <div className={cls.controlMenu} style={Boolean(anchorEl) ? { opacity: 1 } : { opacity: 0 }}>\n <div onClick={e => {\n let newItemsSwitches = deepCopy(acceptedBy, userRules, blockValue);\n newItemsSwitches = filterElement(acceptedBy, newItemsSwitches, blockValue, _id);\n setIsDelete(true);\n setTimeout(() => {\n if (acceptedBy === 'triggers') {\n setOnUpdate(true);\n }\n setUserRules(newItemsSwitches);\n }, 300);\n }} className={cls.closeBtn} />\n </div>}\n </div>;\n});\n\nCurrentItem.defaultProps = {\n active: false\n};\n\nCurrentItem.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\n};\n\nexport default CurrentItem;","import React from 'react';\nimport { useDragLayer } from 'react-dnd';\nimport CardMenu from '../CardMenu';\nimport CurrentItem from '../CurrentItem';\n\nconst layerStyles = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%'\n};\n\nconst snapToGrid = (x, y) => {\n const snappedX = Math.round(x / 32) * 32\n const snappedY = Math.round(y / 32) * 32\n return [snappedX, snappedY]\n}\n\nconst getItemStyles = (initialOffset, currentOffset, isSnapToGrid) => {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none'\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform\n };\n}\n\nexport const CustomDragLayer = props => {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n targetIds: monitor.getTargetIds()\n }));\n\n const renderItem = () => {\n switch (itemType) {\n case 'box':\n return targetIds.length ? <CurrentItem active {...item} allBlocks={props.allBlocks}/> :\n <CardMenu active {...item} socket={props.socket}/>;\n default:\n return null;\n }\n }\n\n if (!isDragging) {\n return null;\n }\n\n return <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>\n {renderItem()}\n </div>\n </div>;\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"border\":\"style_border__Zz9Km\",\"emptyBlockStyle\":\"style_emptyBlockStyle__sE5FO\",\"emptyBlock\":\"style_emptyBlock__dMBHS\",\"marginTop\":\"style_marginTop__uK9O+\",\"selectOnChange\":\"style_selectOnChange__6r-uo\",\"selectOnChangeHelp\":\"style_selectOnChangeHelp__nP0g8\",\"selectOnChangeHelpIcon\":\"style_selectOnChangeHelpIcon__r7G9x\",\"emptyBlockNone\":\"style_emptyBlockNone__DS6GG\",\"mainBlockItemRules\":\"style_mainBlockItemRules__JYCaQ\",\"nameBlockItems\":\"style_nameBlockItems__sNeEH\",\"contentBlockItem\":\"style_contentBlockItem__SQejW\",\"wrapperMargin\":\"style_wrapperMargin__v8PwE\",\"contentHeightOn\":\"style_contentHeightOn__T3ZZ-\",\"heightBlock\":\"style_heightBlock__B96p1\",\"contentHeightOff\":\"style_contentHeightOff__eaSlV\",\"cardAdd\":\"style_cardAdd__SNY3P\",\"blockCardAdd\":\"style_blockCardAdd__xHdXK\",\"addClassOverflow\":\"style_addClassOverflow__bcVva\",\"addClassHeight\":\"style_addClassHeight__GJALi\"};","import * as React from 'react';\n\nexport function useStateLocal(events, nameEvents) {\n const [state, setState] = React.useState(\n localStorage.getItem(nameEvents) ? JSON.parse(localStorage.getItem(nameEvents)) : events\n );\n\n const eventsToInstall = (newHeadCells) => {\n localStorage.setItem(nameEvents, JSON.stringify(newHeadCells));\n setState(newHeadCells);\n };\n return [state, eventsToInstall, localStorage.getItem(nameEvents) ? true : false];\n}\n","import _ from \"lodash\";\n\nconst funcSet = _.throttle(\n (setCards, userRules) => setCards(userRules)\n , 0);\n\nconst moveCard = (\n id,\n atIndex,\n cards,\n setCards,\n userRules,\n acceptedBy,\n additionally,\n hoverClientY,\n hoverMiddleY) => {\n\n const { card, index } = findCard(id, cards);\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = _.clone(cards);\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n const newTriggers = _.clone(userRules);\n switch (acceptedBy) {\n case 'actions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n case 'conditions':\n newTriggers[acceptedBy][additionally] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n default:\n newTriggers[acceptedBy] = copyCard;\n funcSet(setCards, newTriggers);\n return;\n }\n }\n};\nconst findCard = (id, cards) => {\n const card = cards.find((c) => c._id === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nexport { moveCard, findCard };","// extracted by mini-css-extract-plugin\nexport default {\"drag\":\"style_drag__Gq61w\",\"root\":\"style_root__nSnEB\"};","import React, { useContext, useEffect, useRef } from 'react';\n// import I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport { filterElement } from '../../helpers/filterElement';\nimport { findCard, moveCard } from '../../helpers/cardSort';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport cls from './style.module.scss';\n\nconst DragWrapper = ({ typeBlocks, allProperties, id, isActive, setUserRules, userRules, children, _id, blockValue }) => {\n const { setOnUpdate } = useContext(ContextWrapperCreate);\n const [{ opacity }, drag, preview] = useDrag({\n type: 'box',\n item: () => ({ ...allProperties, id, isActive, _id }),\n end: (item, monitor) => {\n let { acceptedBy } = item;\n let dropResult = monitor.getDropResult();\n let newUserRules;\n if (!dropResult) {\n if (typeof _id === 'number' && !monitor.getTargetIds().length) {\n newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n setUserRules(newUserRules);\n }\n return null;\n }\n if (dropResult.blockValue !== blockValue) {\n let idNumber = typeof _id === 'number' ? _id : Date.now();\n newUserRules = deepCopy(acceptedBy, userRules, dropResult.blockValue);\n const newItem = { id: item.id, acceptedBy: item.acceptedBy }\n switch (acceptedBy) {\n case 'actions':\n if (blockValue) {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n case 'conditions':\n if (typeof blockValue === 'number') {\n newUserRules = filterElement(acceptedBy, newUserRules, blockValue, _id);\n }\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy][dropResult.blockValue].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n\n default:\n setOnUpdate(true);\n newUserRules = filterElement(acceptedBy, newUserRules, dropResult.blockValue, _id);\n newUserRules[acceptedBy].push({ ...newItem, _id: idNumber });\n return setUserRules(newUserRules);\n }\n }\n },\n collect: monitor => ({\n opacity: monitor.isDragging() ? 0.4 : 1,\n isDragging: monitor.isDragging(),\n }),\n });\n const ref = useRef(null)\n const [, drop] = useDrop({\n accept: 'box',\n canDrop: () => false,\n hover({ _id: draggedId, acceptedBy }, monitor) {\n if (!ref.current) {\n return;\n }\n if (typeBlocks !== acceptedBy) {\n return\n }\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n if (!!_id && draggedId !== _id) {\n switch (acceptedBy) {\n case 'actions':\n if (blockValue === 'then' || blockValue === 'else') {\n const { index: overIndexActions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexActions !== draggedId) {\n moveCard(draggedId,\n overIndexActions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n case 'conditions':\n if (typeof blockValue === 'number') {\n const { index: overIndexConditions } = findCard(_id, userRules[acceptedBy][blockValue]);\n if (overIndexConditions !== draggedId) {\n moveCard(draggedId,\n overIndexConditions,\n userRules[acceptedBy][blockValue],\n setUserRules,\n userRules,\n acceptedBy,\n blockValue,\n hoverClientY,\n hoverMiddleY\n );\n }\n }\n return;\n default:\n const { index: overIndex } = findCard(_id, userRules[acceptedBy]);\n if (overIndex !== draggedId) {\n moveCard(draggedId,\n overIndex,\n userRules[acceptedBy],\n setUserRules,\n userRules,\n acceptedBy,\n null,\n hoverClientY,\n hoverMiddleY\n );\n }\n return;\n }\n }\n }\n });\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n drag(drop(ref));\n const isMobile = window.innerWidth < 600;\n return <div ref={isMobile && _id ? null : ref} className={cls.root} style={{ opacity }}><div className={_id ? cls.drag : null} ref={_id && isMobile ? ref : null} />{children}</div>;\n}\n\nDragWrapper.defaultProps = {\n name: '',\n active: false,\n id: '',\n _id: null\n};\n\nDragWrapper.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default DragWrapper;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\n\nimport IconOk from '@mui/icons-material/Check';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst DialogHelp = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <div style={{\n fontSize: '1rem',\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n fontWeight: 400,\n lineHeight: 1.5,\n letterSpacing: '0.00938em'\n }} >\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus startIcon={<IconOk/>}>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog >;\n\nDialogHelp.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogHelp.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogHelp;","import React from 'react';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\n\nconst DialogCondition = ({ onClose, open }) => <Dialog\n open={open}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <h3>{I18n.t('On condition change')}</h3>\n <div>{I18n.t('help_on_change')}</div>\n <h3>{I18n.t('Just check')}</h3>\n <div>{I18n.t('help_just_check')}</div>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" autoFocus>\n {I18n.t('OK')}\n </Button>\n </DialogActions>\n</Dialog>;\n\nDialogCondition.defaultProps = {\n open: false,\n onClose: () => { }\n};\n\nDialogCondition.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func\n};\n\nexport default DialogCondition;","\nimport React, { Fragment, useEffect, useState } from 'react';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { useDrop } from 'react-dnd';\nimport Select from '@mui/material/Select';\nimport MenuItem from '@mui/material/MenuItem';\nimport IconButton from '@mui/material/IconButton';\nimport IconHelp from '@mui/icons-material/HelpOutline';\nimport { deepCopy } from '../../helpers/deepCopy';\n\nimport CurrentItem from '../CurrentItem';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport DragWrapper from '../DragWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport DialogHelp from './DialogHelp';\nimport DialogCondition from './DialogCondition';\nimport clsx from 'clsx';\n\nconst AdditionallyContentBlockItems = ({ size, itemsSwitchesRender, blockValue, boolean, typeBlock, userRules, setUserRules, animation, setTourStep, tourStep, isTourOpen }) => {\n const [checkItem, setCheckItem] = useState(false);\n const [canDropCheck, setCanDropCheck] = useState(false);\n const [checkId, setCheckId] = useState(false);\n const [hoverBlock, setHoverBlock] = useState('');\n\n const options = useDrop({\n accept: 'box',\n drop: () => ({ blockValue }),\n hover: ({ acceptedBy, _id }, monitor) => {\n setCheckItem(acceptedBy === typeBlock);\n setCheckId(!!_id);\n setHoverBlock(monitor.getHandlerId());\n },\n canDrop: ({ acceptedBy }, monitor) => {\n setCanDropCheck(acceptedBy === typeBlock);\n return acceptedBy === typeBlock;\n },\n collect: monitor => ({\n isOver: monitor.isOver(),\n canDrop: monitor.getItem()?.acceptedBy === typeBlock,\n offset: monitor.getClientOffset(),\n targetId: monitor.targetId\n }),\n });\n\n const [{ canDrop, isOver, offset, targetId }, drop] = options;\n\n useEffect(() => { setHoverBlock('') }, [offset]);\n\n const isActive = canDrop && isOver;\n let backgroundColor = '';\n if (isActive) {\n backgroundColor = checkItem ? '#00fb003d' : '#fb00002e';\n } else if (canDrop) {\n backgroundColor = canDropCheck ? '#00fb003d' : '#fb00002e';\n } else if (offset) {\n backgroundColor = targetId === hoverBlock ? '#fb00002e' : '';\n }\n\n return <div ref={drop} style={{ backgroundColor }} className={`${clsx(cls.contentBlockItem,size && cls.addClassHeight)} ${boolean ? animation ? cls.contentHeightOn : null : cls.contentHeightOff}`}>\n <div className={cls.wrapperMargin}>{itemsSwitchesRender[blockValue]?.map(el => (\n <DragWrapper\n typeBlocks={typeBlock}\n key={el._id}\n {...el}\n blockValue={blockValue}\n allProperties={el}\n userRules={userRules}\n setUserRules={setUserRules}\n >\n <CurrentItem\n {...el}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n settings={el}\n blockValue={blockValue}\n userRules={userRules}\n setUserRules={setUserRules}\n />\n </DragWrapper>))}\n <div\n style={isActive && checkItem && !checkId ? { height: document.getElementById('height') ? document.getElementById('height').clientHeight : 200 } : null}\n className={`${cls.emptyBlockStyle} ${isActive && checkItem && !checkId ? cls.emptyBlock : cls.emptyBlockNone}`}\n />\n </div>\n </div>;\n}\n\nAdditionallyContentBlockItems.defaultProps = {\n children: null,\n boolean: true,\n animation: false\n};\n\nconst ContentBlockItems = ({ size, typeBlock, name, nameAdditionally, additionally, border, userRules, setUserRules, iconName, adapter, socket, setTourStep, tourStep, isTourOpen }) => {\n const [additionallyClickItems, setAdditionallyClickItems, checkLocal] = useStateLocal(typeBlock === 'actions' ? false : [], `additionallyClickItems_${typeBlock}`);\n const [showHelp, setShowHelp] = useState(false);\n const [showConditionDialog, setShowConditionDialog] = useState(false);\n\n useEffect(() => {\n if (typeBlock === 'conditions' && additionallyClickItems.length !== userRules['conditions'].length - 1) {\n let newArray = [];\n userRules['conditions'].forEach((el, idx) => {\n if (idx > 0) {\n newArray.push({\n _id: Date.now(),\n open: true\n });\n }\n });\n setAdditionallyClickItems([...additionallyClickItems, ...newArray]);\n }\n if (typeBlock === 'actions' && !checkLocal && userRules['actions']['else'].length) {\n setAdditionallyClickItems(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const [animation, setAnimation] = useState(false);\n\n return <div className={`${clsx(cls.mainBlockItemRules, size && cls.addClassOverflow)} ${border && !size ? cls.border : null}`}>\n <span id='width' className={cls.nameBlockItems}>\n <MaterialDynamicIcon iconName={iconName} className={cls.iconThemCard} adapter={adapter} socket={socket} />{name}\n </span>\n {typeBlock === 'conditions' ?\n <div style={{ width: '100%' }}>\n <Select\n variant=\"standard\"\n className={cls.selectOnChange}\n value={userRules.justCheck || false}\n onChange={e => {\n const _userRules = deepCopy('conditions', userRules);\n _userRules.justCheck = e.target.value;\n setUserRules(_userRules);\n }}\n >\n <MenuItem value={false}>{I18n.t('on condition change')}</MenuItem>\n <MenuItem value={true}>{I18n.t('just check')}</MenuItem>\n </Select>\n <IconButton size=\"small\" title={I18n.t('Explanation')} className={cls.selectOnChangeHelp} onClick={() => setShowHelp(true)}>\n <IconHelp className={cls.selectOnChangeHelpIcon} />\n </IconButton>\n </div>\n : null}\n <AdditionallyContentBlockItems\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n blockValue={typeBlock === 'actions' ? 'then' : typeBlock === 'conditions' ? 0 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n userRules={userRules}\n size={size}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n />\n {additionally && [...Array(typeBlock === 'actions' ? 1 : userRules.conditions.length - 1)].map((e, index) => {\n const booleanAdditionally = (value = index) => Boolean(typeBlock === 'actions' ? additionallyClickItems : additionallyClickItems.find((el, idx) => idx === value && el.open));\n return <Fragment key={`${index}_block_${typeBlock}`}>\n <div\n onClick={() => {\n if (typeBlock === 'actions') {\n setAdditionallyClickItems(!additionallyClickItems);\n return null;\n }\n let newAdditionally = JSON.parse(JSON.stringify(additionallyClickItems));\n if (userRules['conditions'][index + 1].length) {\n newAdditionally[index].open = !newAdditionally[index].open\n setAdditionallyClickItems(newAdditionally);\n return null;\n }\n newAdditionally = newAdditionally.filter((el, idx) => idx !== index);\n setAdditionallyClickItems(newAdditionally);\n setAnimation(typeBlock === 'actions' ? true : index);\n setTimeout(() => {\n setAnimation(false);\n setUserRules({ ...userRules, conditions: [...userRules.conditions.filter((el, idx) => idx !== index + 1)] });\n }, 250);\n\n }}\n key={index} className={cls.blockCardAdd}>\n {booleanAdditionally() ? '-' : '+'}<div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>\n <AdditionallyContentBlockItems\n blockValue={typeBlock === 'actions' ? 'else' : typeBlock === 'conditions' ? index + 1 : typeBlock}\n typeBlock={typeBlock}\n setUserRules={setUserRules}\n itemsSwitchesRender={typeBlock === 'actions' ? userRules['actions'] : typeBlock === 'conditions' ? userRules['conditions'] : userRules}\n userRules={userRules}\n boolean={booleanAdditionally()}\n animation={Boolean(animation === index)}\n size={size}\n />\n </Fragment>\n })}\n {additionally && typeBlock === 'conditions' && <div\n onClick={() => {\n setAdditionallyClickItems([...additionallyClickItems, {\n _id: Date.now(),\n open: true\n }]);\n setUserRules({ ...userRules, conditions: [...userRules.conditions, []] });\n setAnimation(typeBlock === 'actions' ? true : userRules.conditions.length - 1);\n setTimeout(() => setAnimation(false), 1000);\n }}\n className={cls.blockCardAdd}\n >\n {'+'}\n <div className={cls.cardAdd}>\n {nameAdditionally}\n </div>\n </div>}\n <DialogHelp open={showHelp} onClose={() => setShowHelp(false)} />\n <DialogCondition open={showConditionDialog} onClose={() => setShowConditionDialog(false)} />\n </div>;\n}\n\nContentBlockItems.defaultProps = {\n children: null,\n name: '',\n nameAdditionally: '',\n additionally: false,\n border: false,\n typeBlock: ''\n};\n\nContentBlockItems.propTypes = {\n name: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n nameAdditionally: PropTypes.string,\n border: PropTypes.bool,\n additionally: PropTypes.bool,\n children: PropTypes.object,\n typeBlock: PropTypes.string,\n blockValue: PropTypes.string,\n userRules: PropTypes.object,\n setUserRules: PropTypes.func,\n};\n\nexport default ContentBlockItems;","// extracted by mini-css-extract-plugin\nexport default {\"menuRules\":\"style_menuRules__NRFrw\",\"switchesRenderWrapper\":\"style_switchesRenderWrapper__MHBpo\",\"menuOff\":\"style_menuOff__GV8BN\",\"menuTitle\":\"style_menuTitle__bnI7K\",\"marginAuto\":\"style_marginAuto__h3I6J\",\"inputWidth\":\"style_inputWidth__Hkd3w\",\"menuWrapper\":\"style_menuWrapper__16zE-\",\"hamburgerWrapper\":\"style_hamburgerWrapper__+AsNg\",\"hamburgerOff\":\"style_hamburgerOff__Tmmok\",\"nothingFound\":\"style_nothingFound__hm0xN\",\"resetSearch\":\"style_resetSearch__oA8LS\",\"controlPanel\":\"style_controlPanel__ojI7Z\",\"controlPanelAppBar\":\"style_controlPanelAppBar__fjB3Y\",\"addClassMenu\":\"style_addClassMenu__3n58b\",\"addClassBackground\":\"style_addClassBackground__j1FHK\",\"addClassPosition\":\"style_addClassPosition__YL+W4\"};","import React from 'react';\nimport CardMenu from '.';\nimport { deepCopy } from '../../helpers/deepCopy';\nimport DragWrapper from '../DragWrapper';\nimport { STEPS } from '../../helpers/Tour';\n\nconst CustomDragItem = props => {\n const { allProperties, allProperties: { acceptedBy, id }, setUserRules, userRules, setTourStep, tourStep, isTourOpen, onTouchMove } = props;\n return <DragWrapper {...props} {...allProperties}>\n <CardMenu\n onTouchMove={onTouchMove}\n onDoubleClick={() => {\n (isTourOpen &&\n tourStep === STEPS.addScheduleByDoubleClick &&\n id === 'TriggerScheduleBlock' &&\n setTourStep(STEPS.openTagsMenu)\n );\n (isTourOpen &&\n tourStep === STEPS.addActionPrintText &&\n id === 'ActionPrintText' &&\n setTourStep(STEPS.showJavascript)\n );\n let _id = Date.now();\n let blockValue;\n switch (acceptedBy) {\n case 'actions':\n blockValue = 'then';\n break;\n\n case 'conditions':\n blockValue = userRules[acceptedBy].length - 1;\n break;\n\n default:\n break;\n }\n let newUserRules = deepCopy(acceptedBy, userRules, blockValue);\n const newItem = { id, _id, acceptedBy };\n if (blockValue !== undefined) {\n newUserRules[acceptedBy][blockValue].push({ ...newItem });\n } else {\n newUserRules[acceptedBy].push({ ...newItem });\n }\n setUserRules(newUserRules);\n }} onDoubl {...props} {...allProperties} />\n </DragWrapper>;\n}\n\nexport default CustomDragItem;","// extracted by mini-css-extract-plugin\nexport default {\"menu_wrapper\":\"hamburgerMenu_menu_wrapper__H+bSr\",\"hamburgerMenu\":\"hamburgerMenu_hamburgerMenu__zKaBW\",\"animate\":\"hamburgerMenu_animate__CjZxq\",\"menu_conatiner_wrapper\":\"hamburgerMenu_menu_conatiner_wrapper__9BkY3\"};","import React from 'react';\nimport cls from './hamburgerMenu.module.scss';\nimport PropTypes from 'prop-types';\n\nconst HamburgerMenu = ({boolean}) => {\n return <div className={`${cls.hamburgerMenu} ${boolean ? cls.animate : ''}`}/>\n}\n\nHamburgerMenu.defaultProps = {\n boolean: false\n};\n\nHamburgerMenu.propTypes = {\n boolean: PropTypes.bool\n};\n\nexport default HamburgerMenu;","import React, { Fragment, useContext, useEffect } from 'react';\nimport cls from './style.module.scss';\nimport { AppBar, ClickAwayListener, Tab, Tabs } from '@mui/material';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nimport CustomInput from '../CustomInput';\nimport CustomDragItem from '../CardMenu/CustomDragItem';\nimport HamburgerMenu from '../HamburgerMenu';\nimport { useStateLocal } from '../../hooks/useStateLocal';\nimport { ContextWrapperCreate } from '../ContextWrapper';\nimport MaterialDynamicIcon from '../../helpers/MaterialDynamicIcon';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { STEPS } from '../../helpers/Tour';\n\nconst Menu = ({ addClass, setAllBlocks, allBlocks, userRules, onChangeBlocks, setTourStep, tourStep, isTourOpen }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket } = useContext(ContextWrapperCreate);\n const [hamburgerOnOff, setHamburgerOnOff] = useStateLocal(false, 'hamburgerOnOff');\n const [filter, setFilter] = useStateLocal({\n text: '',\n type: 'triggers',\n index: 0\n }, 'filterControlPanel');\n\n const handleChange = (event, newValue) => {\n isTourOpen && (newValue === 0 && tourStep === STEPS.selectTriggers) && setTourStep(STEPS.addScheduleByDoubleClick);\n isTourOpen && (newValue === 2 && tourStep === STEPS.selectActions) && setTourStep(STEPS.addActionPrintText);\n setFilter({\n ...filter,\n index: newValue,\n type: ['triggers', 'conditions', 'actions'][newValue]\n });\n setBlocksFunc(filter.text, ['triggers', 'conditions', 'actions'][newValue]);\n };\n\n const setBlocksFunc = (text = filter.text, typeFunc = filter.type) => {\n if (!blocks) {\n return;\n }\n let newAllBlocks = [...blocks];\n newAllBlocks = newAllBlocks.filter(el => {\n if (!text) {\n return true;\n }\n const { name } = el.getStaticData();\n return name && I18n.t(name).toLowerCase().includes(text.toLowerCase());\n });\n newAllBlocks = newAllBlocks.filter(el => typeFunc === el.getStaticData().acceptedBy);\n setAllBlocks(newAllBlocks);\n };\n\n const a11yProps = index => ({\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`\n });\n\n useEffect(() => {\n setBlocksFunc();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [blocks]);\n return <ClickAwayListener\n mouseEvent={false}\n touchEvent=\"onTouchStart\"\n onClickAway={() => setHamburgerOnOff(true)}\n >\n <div className={clsx(cls.menuWrapper, addClass[1035] && cls.addClassMenu)}>\n <div className={`${cls.hamburgerWrapper} ${hamburgerOnOff ? cls.hamburgerOff : null}`}\n onClick={() => setHamburgerOnOff(!hamburgerOnOff)}><HamburgerMenu boolean={!hamburgerOnOff} />\n </div>\n <div className={`${clsx(cls.menuRules, addClass[1035] && cls.addClassBackground, addClass[835] && cls.addClassPosition)} ${hamburgerOnOff ? cls.menuOff : null}`}>\n <div className={cls.controlPanel}>\n <AppBar className={cls.controlPanelAppBar} position=\"static\">\n <Tabs\n value={filter.index}\n onChange={handleChange}\n >\n <Tab className=\"blocks-triggers\"\n title={I18n.t('Triggers')}\n icon={<MaterialDynamicIcon iconName='FlashOn' />}\n {...a11yProps(0)} />\n <Tab title={I18n.t('Conditions')} className=\"blocks-conditions\" icon={<MaterialDynamicIcon iconName='Help' />}\n {...a11yProps(1)} />\n <Tab title={I18n.t('Actions')} className=\"blocks-actions\" icon={<MaterialDynamicIcon iconName='PlayForWork' />}\n {...a11yProps(2)} />\n </Tabs>\n </AppBar>\n </div>\n <div className={cls.switchesRenderWrapper}>\n <span>\n {allBlocks.map(el => {\n const { name, id, icon, adapter } = el.getStaticData();\n return <Fragment key={id}>\n <CustomDragItem\n onTouchMove={() => setHamburgerOnOff(true)}\n setTourStep={setTourStep}\n tourStep={tourStep}\n isTourOpen={isTourOpen}\n allProperties={el.getStaticData()}\n name={name}\n icon={icon}\n adapter={adapter}\n socket={socket}\n userRules={userRules}\n setUserRules={onChangeBlocks}\n isActive={false}\n id={id}\n />\n </Fragment>;\n })}\n {allBlocks.length === 0 && <div className={cls.nothingFound}>\n {I18n.t('Nothing found')}...\n <div className={cls.resetSearch} onClick={() => {\n setFilter({\n ...filter,\n text: ''\n });\n setBlocksFunc('');\n }}>{I18n.t('reset search')}</div>\n </div>}\n </span>\n </div>\n <div className={clsx(cls.menuTitle, cls.marginAuto)} />\n <CustomInput\n className={cls.inputWidth}\n fullWidth\n customValue\n value={filter.text}\n size=\"small\"\n autoComplete=\"off\"\n label={I18n.t('search')}\n variant=\"outlined\"\n onChange={(value) => {\n setFilter({ ...filter, text: value });\n setBlocksFunc(value);\n }}\n />\n </div>\n </div>\n </ClickAwayListener>;\n}\n\nMenu.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string\n};\n\nexport default Menu;\n","// extracted by mini-css-extract-plugin\nexport default {};","import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport cls from './style.module.scss';\n\nimport { CustomDragLayer } from './components/CustomDragLayer';\nimport ContentBlockItems from './components/ContentBlockItems';\nimport { ContextWrapperCreate } from './components/ContextWrapper';\nimport Compile from './helpers/Compile';\nimport PropTypes from 'prop-types';\nimport Menu from './components/Menu';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport './helpers/stylesVariables.scss';\n\nimport DialogExport from '../../Dialogs/Export';\nimport DialogImport from '../../Dialogs/Import';\nimport clsx from 'clsx';\n\nconst RulesEditor = ({ code, onChange, themeName, setTourStep, tourStep, isTourOpen, command, scriptId, changed, running }) => {\n // eslint-disable-next-line no-unused-vars\n const { blocks, socket, setOnUpdate, setOnDebugMessage, setEnableSimulation } = useContext(ContextWrapperCreate);\n const [allBlocks, setAllBlocks] = useState([]);\n const [userRules, setUserRules] = useState(Compile.code2json(code));\n const [importExport, setImportExport] = useState('');\n const [modal, setModal] = useState(false);\n //const [jsAlive, setJsAlive] = useState(false);\n //const [jsInstance, setJsInstance] = useState(false);\n\n useEffect(() => {\n let _jsInstance;\n let _jsAlive;\n const handler = (id, obj) => {\n if (id === _jsInstance + '.alive') {\n if (_jsAlive !== obj?.val) {\n _jsAlive = obj?.val;\n //setJsAlive(_jsAlive);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n }\n } else {\n if (_jsInstance !== obj?.common?.engine) {\n _jsInstance && socket.unsubscribeState(`${_jsInstance}.alive`, handler);\n _jsAlive && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOn', scriptId);\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n }\n }\n };\n\n const handlerStatus = (id, state) => {\n if (state) {\n try {\n let msg = JSON.parse(state.val);\n // if not from previous session\n if (msg.ruleId === scriptId && Date.now() - msg.ts < 1000) {\n setOnDebugMessage({blockId: msg.blockId, data: msg.data, ts: msg.ts});\n }\n } catch (e) {\n console.error('Cannot parse: ' + state.val);\n }\n }\n };\n\n socket.getObject(scriptId)\n .then(obj => {\n _jsInstance = obj?.common?.engine;\n //setJsInstance(_jsInstance);\n socket.subscribeObject(scriptId, handler);\n _jsInstance && socket.subscribeState(`${_jsInstance}.alive`, handler);\n _jsInstance && socket.subscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n });\n\n return function cleanup() {\n _jsInstance && socket.unsubscribeObject(`${_jsInstance}.alive`, handler);\n socket.unsubscribeState(scriptId, handler);\n _jsAlive && _jsInstance && socket.sendTo(_jsInstance.replace(/^system\\.adapter\\./, ''), 'rulesOff', scriptId);\n _jsInstance && socket.unsubscribeState(_jsInstance.replace(/^system\\.adapter\\./, '') + '.debug.rules', handlerStatus);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setEnableSimulation(!changed && running);\n }, [changed, running, setEnableSimulation]);\n\n useEffect(() => {\n if (!!command) {\n setImportExport(command);\n if (!modal) {\n setModal(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [command]);\n\n useEffect(() => {\n const newUserRules = Compile.code2json(code);\n if (JSON.stringify(newUserRules) !== JSON.stringify(userRules)) {\n setUserRules(newUserRules);\n setOnUpdate(true);\n }\n // eslint-disable-next-line\n }, [code]);\n\n useEffect(() => {\n document.getElementsByTagName('HTML')[0].className = themeName || 'blue';\n }, [themeName]);\n\n const onChangeBlocks = useCallback(json => {\n setUserRules(json);\n onChange(Compile.json2code(json, blocks));\n }, [blocks, onChange]);\n\n const ref = useRef({ clientWidth: 0 });\n const [addClass, setAddClass] = useState({ 835: false, 1035: false });\n useEffect(() => {\n if (ref.current) {\n if (ref.current.clientWidth <= 1035) {\n setAddClass({ 835: false, 1035: true });\n }\n if (ref.current.clientWidth <= 835) {\n setAddClass({ 1035: true, 835: true });\n }\n if (ref.current.clientWidth > 1035) {\n setAddClass({ 835: false, 1035: false });\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref.current.clientWidth])\n\n if (!blocks) {\n return null;\n }\n\n return <div key=\"rulesEditor\" className={cls.wrapperRules} ref={ref}>\n {<CustomDragLayer allBlocks={allBlocks} socket={socket} />}\n {importExport === \"export\" ?\n <DialogExport\n key=\"dialogExport\"\n onClose={() => setModal(false)}\n open={modal}\n text={JSON.stringify(userRules, null, 2)} /> :\n <DialogImport\n open={modal}\n key=\"dialogImport\"\n onClose={text => {\n setModal(false);\n if (text) {\n onChangeBlocks(JSON.parse(text));\n }\n }} />}\n {<div className={clsx(cls.rootWrapper, addClass[835] && cls.addClass)}>\n <Menu\n setAllBlocks={setAllBlocks}\n allBlocks={allBlocks}\n userRules={userRules}\n onChangeBlocks={onChangeBlocks}\n setTourStep={setTourStep}\n tourStep={tourStep}\n addClass={addClass}\n isTourOpen={isTourOpen}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n userRules={userRules}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n name={`${I18n.t('when')}...`}\n typeBlock=\"triggers\"\n iconName=\"FlashOn\"\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('and')}...`}\n typeBlock=\"conditions\"\n iconName=\"Help\"\n nameAdditionally={I18n.t('or')}\n additionally\n border\n size={addClass[835]}\n />\n <ContentBlockItems\n setUserRules={onChangeBlocks}\n isTourOpen={isTourOpen}\n setTourStep={setTourStep}\n tourStep={tourStep}\n userRules={userRules}\n name={`...${I18n.t('then')}`}\n typeBlock=\"actions\"\n iconName=\"PlayForWork\"\n nameAdditionally={I18n.t('else')}\n additionally\n size={addClass[835]}\n />\n </div>}\n </div>;\n}\n\nRulesEditor.propTypes = {\n onChange: PropTypes.func,\n code: PropTypes.string,\n scriptId: PropTypes.string,\n setTourStep: PropTypes.func,\n tourStep: PropTypes.number,\n command: PropTypes.string,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n searchText: PropTypes.string,\n resizing: PropTypes.bool,\n\n};\n\nexport default RulesEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport ScriptEditorComponent from '../ScriptEditorVanilaMonaco';\n\nconst styles = theme => ({\n editorDiv: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n position: 'relative'\n },\n editor: {\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n line: {\n width: '100%',\n whiteSpace: 'nowrap',\n },\n lineNumber: {\n width: 40,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n textAlign: 'right',\n fontSize: 14,\n marginRight: 1,\n borderRight: '1px solid #555',\n cursor: 'pointer'\n },\n lineBreakpoint: {\n background: '#330000',\n color: 'white',\n },\n lineCode: {\n //whiteSpace: 'nowrap',\n display: 'inline-block',\n fontFamily: 'Lucida Console, Courier, monospace',\n fontSize: 14,\n margin: 0,\n whiteSpace: 'pre',\n },\n lineCurrentCode: {\n background: 'red',\n color: 'white',\n },\n lineCurrent: {\n background: '#880000',\n color: 'white',\n },\n});\n\nclass Editor extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n lines: (this.props.script || '').split(/\\r\\n|\\n/)\n };\n }\n\n editorDidMount(editor, monaco) {\n this.monaco = monaco;\n this.editor = editor;\n editor.focus();\n }\n\n render() {\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv2\">\n <ScriptEditorComponent\n key=\"scriptEditor2\"\n name={this.props.scriptName}\n adapterName={this.props.adapterName}\n readOnly={true}\n code={this.props.script || ''}\n isDark={this.props.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.props.runningInstances}\n language={'javascript'}\n\n breakpoints={this.props.breakpoints}\n location={this.props.paused ? this.props.location : null}\n onToggleBreakpoint={i => this.props.onToggleBreakpoint(i)}\n />\n </div>;\n }\n}\n\nEditor.propTypes = {\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n sourceId: PropTypes.string,\n script: PropTypes.string,\n scriptName: PropTypes.string,\n adapterName: PropTypes.string,\n paused: PropTypes.bool,\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n themeType: PropTypes.string,\n themeName: PropTypes.string,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport IconButton from '@mui/material/IconButton';\nimport {\n MdContentCopy as IconCopy,\n MdDeleteForever as IconDelete,\n MdVerticalAlignBottom as IconBottom,\n} from 'react-icons/md';\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n consoleLine: {\n fontSize: 14,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222'\n },\n console_log: {\n\n },\n console_warn: {\n backgroundColor: theme.palette.mode === 'dark' ? '#885900' : '#ffa500',\n },\n console_error: {\n backgroundColor: theme.palette.mode === 'dark' ? '#7a0000' : '#FF0000',\n },\n console_debug: {\n opacity: 0.6,\n },\n consoleSeverity: {\n verticalAlign: 'top',\n width: 50,\n textTransform: 'uppercase',\n },\n consoleTime: {\n whiteSpace: 'nowrap',\n verticalAlign: 'top',\n width: 170,\n\n },\n consoleText: {\n fontFamily: 'Lucida Console, Courier, monospace',\n paddingTop: 4,\n '&>pre': {\n margin: 0\n }\n },\n\n\n\n logBox: {\n width: '100%',\n height: '100%',\n position: 'relative',\n overflow: 'hidden'\n },\n logBoxInner: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? 'white' : 'black',\n width: `calc(100% - ${TOOLBOX_WIDTH}px)`,\n height: '100%',\n //marginLeft: TOOLBOX_WIDTH,\n overflow: 'auto',\n position: 'relative',\n verticalAlign: 'top',\n },\n info: {\n background: theme.palette.mode === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.mode === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.mode === 'dark' ? 'black' : 'white'\n },\n table: {\n fontFamily: 'monospace',\n width: '100%',\n },\n toolbox: {\n //position: 'absolute',\n //top: 0,\n //left: 0,\n //marginLeft: 2,\n width: TOOLBOX_WIDTH,\n height: '100%',\n boxShadow: '2px 0px 4px -1px rgba(0, 0, 0, 0.2), 4px 0px 5px 0px rgba(0, 0, 0, 0.14), 1px 0px 10px 0px rgba(0, 0, 0, 0.12)',\n display: 'inline-block',\n verticalAlign: 'top',\n overflow: 'hidden',\n },\n trTime: {\n width: 90\n },\n trSeverity: {\n width: 40,\n fontWeight: 'bold'\n },\n iconButtons: {\n width: 32,\n height: 32,\n padding: 4\n },\n});\n\nfunction copyToClipboard(str) {\n const el = window.document.createElement('textarea');\n el.value = str;\n window.document.body.appendChild(el);\n el.select();\n window.document.execCommand('copy');\n window.document.body.removeChild(el);\n}\n\nfunction getTimeString(d) {\n let text;\n let i = d.getHours();\n if (i < 10) i = '0' + i.toString();\n text = i + ':';\n\n i = d.getMinutes();\n if (i < 10) i = '0' + i.toString();\n text += i + ':';\n i = d.getSeconds();\n if (i < 10) i = '0' + i.toString();\n text += i + '.';\n i = d.getMilliseconds();\n if (i < 10) {\n i = '00' + i.toString();\n } else if (i < 100) {\n i = '0' + i.toString();\n }\n text += i;\n return text;\n}\n\nclass Console extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n lines: {},\n goBottom: true,\n };\n this.messagesEnd = React.createRef();\n }\n generateLine(message) {\n return <tr key={'tr_' + message.ts + '_' + message.text.substr(-10)} className={this.props.classes[message.severity]}>\n <td key=\"tdTime\" className={this.props.classes.trTime}>{getTimeString(new Date(message.ts))}</td>\n <td key=\"tdSeverity\" className={this.props.classes.trSeverity}>{message.severity}</td>\n <td key=\"tdMessage\">{message.text}</td>\n </tr>;\n }\n renderLogList(lines) {\n if (lines && lines.length) {\n return <div className={this.props.classes.logBoxInner} key=\"logList\">\n <table key=\"logTable\" className={this.props.classes.table}><tbody>\n {lines.map((line, i) => this.generateLine(line))}</tbody></table>\n <div key=\"logScrollPoint\" ref={this.messagesEnd} style={{float: 'left', clear: 'both'}}/>\n </div>;\n } else {\n return <div key=\"logList\" className={this.props.classes.logBoxInner} style={{paddingLeft: 10}}>{I18n.t('Log outputs')}</div>;\n }\n }\n\n onCopy() {\n copyToClipboard((this.props.console).join('\\n'));\n }\n\n scrollToBottom() {\n this.messagesEnd && this.messagesEnd.current && this.messagesEnd.current.scrollIntoView({behavior: 'smooth'});\n }\n\n componentDidUpdate() {\n this.state.goBottom && this.scrollToBottom();\n }\n\n render() {\n const lines = this.props.console;\n return (\n <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.setState({goBottom: !this.state.goBottom})}\n color={this.state.goBottom ? 'secondary' : ''}\n size=\"medium\"><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.props.onClearAllLogs()}\n size=\"medium\"><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton\n className={this.props.classes.iconButtons}\n onClick={() => this.onCopy()}\n size=\"medium\"><IconCopy/></IconButton> : null}\n </div>\n {this.renderLogList(lines)}\n </div>\n );\n }\n}\n\nConsole.propTypes = {\n theme: PropTypes.object,\n onClearAllLogs: PropTypes.func,\n console: PropTypes.array,\n};\n\nexport default withStyles(styles)(Console);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\nimport ReactJson from 'react-json-view';\n\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Input from '@mui/material/Input';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\n\nimport {MdCheck as CheckIcon} from 'react-icons/md';\nimport {MdAdd as IconAdd} from 'react-icons/md';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n frameRoot: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n frameTextRoot: {\n margin: 0,\n },\n frameTextPrimary: {\n color: theme.palette.mode === 'dark' ? '#CCC' : '#333',\n },\n frameTextSecondary: {\n fontStyle: 'italic',\n fontSize: 12,\n opacity: 0.6,\n paddingLeft: theme.spacing(1),\n },\n\n listRoot: {\n padding: 0,\n },\n\n scopeType: {\n verticalAlign: 'top',\n textTransform: 'uppercase',\n width: 50,\n },\n scopeType_local: {\n color: '#53a944'\n },\n scopeType_closure: {\n color: '#365b80'\n },\n scopeType_user: {\n color: '#a48a15'\n },\n scopeName: {\n color: '#bc5b5b',\n width: 'calc(100% - 82px)',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n scopeButton: {\n width: 32\n },\n scopeValueEditable: {\n cursor: 'pointer'\n },\n selectedFrame: {\n backgroundColor: '#777',\n color: 'white'\n },\n splitter: {\n width: '100%',\n height: 'calc(100% - 36px)',\n overflow: 'hidden',\n fontSize: 12\n },\n\n toolbarScopes: {\n width: 24,\n display: 'inline-block',\n height: '100%',\n background: theme.palette.mode === 'dark' ? '#222' : '#EEE',\n verticalAlign: 'top',\n },\n scopesAfterToolbar: {\n width: 'calc(100% - 24px)',\n display: 'inline-block',\n height: '100%',\n verticalAlign: 'top',\n },\n\n scopeNameName: {\n fontWeight: 'bold',\n display: 'inline-block',\n verticalAlign: 'top',\n },\n scopeNameEqual: {\n display: 'inline-block',\n color: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n verticalAlign: 'top',\n },\n scopeNameValue: {\n verticalAlign: 'top',\n display: 'inline-block',\n color: '#3b709f',\n whiteSpace: 'nowrap',\n },\n scopeButtonDel: {\n padding: 0,\n float: 'right',\n },\n\n valueNull: {\n color: '#a44a24'\n },\n valueUndefined: {\n color: '#a44a24'\n },\n valueString: {\n color: '#1e8816'\n },\n valueNumber: {\n color: '#163c88'\n },\n valueBoolean: {\n color: '#a44a24'\n },\n valueObject: {\n color: '#721b70'\n },\n valueNone: {\n color: '#8a8a8a'\n },\n valueFunc: {\n color: '#ac4343'\n }\n});\n\nclass Stack extends React.Component {\n constructor(props) {\n super(props);\n\n this.framesSize = parseFloat(window.localStorage.getItem('App.framesSize')) || 300;\n\n this.state = {\n editValue: null,\n callFrames: this.props.callFrames,\n };\n\n this.editRef = React.createRef();\n }\n\n onExpressionNameUpdate() {\n this.props.onExpressionNameUpdate(this.state.editValue.index, this.scopeValue, () => {\n this.setState({editValue: null});\n this.scopeValue = null;\n });\n }\n\n renderExpression(item, i) {\n const name = this.state.editValue && this.state.editValue.type === 'expression' && this.state.editValue.index === i ?\n <Input\n inputRef={this.editRef}\n fullWidth\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={item.name}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onExpressionNameUpdate();\n } else if (e.keyCode === 27) {\n this.setState({editValue: null});\n }\n }}\n\n onChange={e =>\n this.scopeValue = e.target.value}\n\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onExpressionNameUpdate()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to edit expression')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)}</div>\n ];\n\n return <tr key={`user_${i}${item.name}`}>\n <td className={clsx(this.props.classes.scopeType, this.props.classes['scopeType_user'])}>user</td>\n <td className={this.props.classes.scopeName}\n onDoubleClick={() => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n }}\n >{name}</td>\n <IconButton\n className={this.props.classes.scopeButtonDel}\n size=\"small\"\n disabled={!!this.state.editValue}\n onClick={() => this.props.onExpressionDelete(i)}\n >\n <IconDelete/>\n </IconButton>\n </tr>\n }\n\n renderExpressions() {\n return this.props.expressions.map((item, i) => this.renderExpression(item, i));\n }\n\n renderOneFrameTitle(frame, i) {\n if (this.props.mainScriptId === this.props.currentScriptId && frame.location.scriptId !== this.props.mainScriptId) {\n return null;\n }\n const fileName = frame.url.split('/').pop().replace(/^script\\.js\\./, '');\n return <ListItem\n key={frame.id}\n button\n onClick={() => this.props.onChangeCurrentFrame(i)}\n dense={true}\n selected={this.props.currentFrame === i}\n classes={{root: this.props.classes.frameRoot}}\n >\n <ListItemText\n classes={{root: this.props.classes.frameTextRoot, primary: this.props.classes.frameTextPrimary, secondary: this.props.classes.frameTextSecondary}}\n title={frame.url}\n primary={frame.functionName || 'anonymous'}\n secondary={`${fileName} (${frame.location.lineNumber}:${frame.location.columnNumber})`}\n />\n </ListItem>;\n }\n\n formatValue(value, forEdit) {\n if (!value) {\n if (forEdit) {\n return 'none';\n } else {\n return <span className={this.props.classes.valueNone}>none</span>;\n }\n } else if (value.type === 'function') {\n const text = value.description ? (value.description.length > 100 ? value.description.substring(0, 100) + '...' : value.description) : 'function';\n if (forEdit) {\n return text;\n } else {\n return <span className={this.props.classes.valueFunc} title={value.description}>{text}</span>;\n }\n } else if (value.value === undefined) {\n if (forEdit) {\n return 'undefined';\n } else {\n return <span className={this.props.classes.valueUndefined}>undefined</span>;\n }\n } else if (value.value === null) {\n if (forEdit) {\n return 'null';\n } else {\n return <span className={this.props.classes.valueNull}>null</span>;\n }\n } else if (value.type === 'string') {\n if (forEdit) {\n return value.value;\n } else {\n const text = value.value ? (value.value.length > 100 ? value.value.substring(0, 100) + '...' : value.value) : '';\n return <span className={this.props.classes.valueString} title={text}>\"{text}\"</span>;\n }\n } else if (value.type === 'boolean') {\n if (forEdit) {\n return value.value.toString();\n } else {\n return <span className={this.props.classes.valueBoolean}>{value.value.toString()}</span>;\n }\n } else if (value.type === 'object') {\n if (forEdit) {\n return JSON.stringify(value.value);\n } else {\n return <ReactJson\n enableClipboard={false}\n style={{backgroundColor: 'inherit', marginTop: 3}}\n src={value.value}\n collapsed={true}\n theme={this.props.themeType === 'dark' ? 'brewer' : 'rjv-default'}\n displayDataTypes={false}\n />;\n }\n } else {\n return value.value.toString();\n }\n }\n\n onWriteScopeValue() {\n if (this.scopeValue === 'true') {\n this.scopeValue = true;\n } else if (this.scopeValue === 'false') {\n this.scopeValue = false;\n } else if (this.scopeValue === 'null') {\n this.scopeValue = null;\n } else if (this.scopeValue === 'undefined') {\n this.scopeValue = undefined;\n } else\n if (parseFloat(this.scopeValue).toString() === this.scopeValue) {\n this.scopeValue = parseFloat(this.scopeValue);\n }\n\n this.props.onWriteScopeValue({\n variableName: this.state.editValue.name,\n scopeNumber: 0,\n newValue: {\n value: this.scopeValue,\n valueType: typeof this.scopeValue,\n },\n callFrameId: this.props.callFrames[this.props.currentFrame].callFrameId\n });\n\n this.setState({editValue: null});\n this.scopeValue = null;\n }\n\n componentDidUpdate() {\n //this.editRef.current?.select();\n this.editRef.current?.focus();\n }\n\n renderScope(scopeId, item, type) {\n const editable = !this.props.currentFrame && item.value && (item.value.type === 'undefined' || item.value.type === 'string' || item.value.type === 'number' || item.value.type === 'boolean' || item.value?.value === null || item.value?.value === undefined);\n\n const el = this.state.editValue && this.state.editValue.type === type && this.state.editValue.name === item.name ?\n [\n <div key=\"name\" className={this.props.classes.scopeNameName}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <Input\n inputRef={this.editRef}\n margin=\"dense\"\n onBlur={() => this.state.editValue && this.setState({editValue: null})}\n defaultValue={this.formatValue(item.value, true)}\n onKeyUp={e => {\n if (e.keyCode === 13) {\n this.onWriteScopeValue()\n } else if (e.keyCode === 27) {\n this.setState({editValue: null})\n }\n }}\n onChange={e =>\n this.scopeValue = e.target.value}\n endAdornment={\n <InputAdornment position=\"end\">\n <IconButton onClick={() => this.onWriteScopeValue()} size=\"medium\">\n <CheckIcon/>\n </IconButton>\n </InputAdornment>\n }\n />\n ]\n :\n [\n <div key=\"name\" className={this.props.classes.scopeNameName} title={I18n.t('Double click to write value')}>{item.name}</div>,\n <div key=\"=\" className={this.props.classes.scopeNameEqual}> = </div>,\n <div key=\"val\" className={this.props.classes.scopeNameValue}>{this.formatValue(item.value)} ({item.value.type})</div>\n ];\n\n\n return <tr key={`${type}_${scopeId}_${item.name}`}>\n <td className={clsx(this.props.classes.scopeType, this.props.classes['scopeType_' + type])}>{type}</td>\n <td\n className={clsx(this.props.classes.scopeName, !this.props.currentFrame && editable && this.props.classes.scopeValueEditable)}\n onDoubleClick={() => {\n if (editable) {\n this.scopeValue = item.value.value;\n this.setState({\n editValue: {\n scopeId,\n type,\n valueType: item.value.type,\n name: item.name,\n value: item.value.value\n }\n });\n }\n }}\n >{el}</td>\n </tr>;\n }\n\n renderScopes(frame) {\n if (!frame) {\n return null;\n } else {\n // first local\n let result = this.renderExpressions();\n\n let items = this.props.scopes?.local?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'local'));\n items && items.forEach(item => result.push(item));\n\n items = this.props.scopes?.closure?.properties?.result.map(item => this.renderScope(this.props.scopes.id, item, 'closure'));\n items && items.forEach(item => result.push(item));\n\n return <table style={{width: '100%'}}>\n <tbody>\n {result}\n </tbody>\n </table>;\n }\n }\n\n render() {\n return <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryIndex={1}\n secondaryMinSize={200}\n primaryMinSize={200}\n vertical={false}\n secondaryInitialSize={this.framesSize}\n onSecondaryPaneSizeChange={size => this.framesSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.framesSize', this.framesSize.toString())}\n >\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <List classes={{root: this.props.classes.listRoot}}>\n {this.props.callFrames ? this.props.callFrames.map((frame, i) =>\n this.renderOneFrameTitle(frame, i)) : null}\n </List>\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'auto'}}>\n <div className={this.props.classes.toolbarScopes}>\n <IconButton size=\"small\" onClick={() => this.props.onExpressionAdd((i, item) => {\n this.scopeValue = item.name || '';\n this.setState({\n editValue: {\n type: 'expression',\n valueType: 'string',\n index: i,\n name: item.name,\n value: item.name || ''\n }\n });\n })}><IconAdd/></IconButton>\n </div>\n <div className={this.props.classes.scopesAfterToolbar}>\n {this.props.callFrames && this.props.callFrames.length && this.renderScopes(this.props.callFrames[this.props.currentFrame])}\n </div>\n </div>\n </SplitterLayout>;\n }\n}\n\nStack.propTypes = {\n currentScriptId: PropTypes.string,\n mainScriptId: PropTypes.string,\n scopes: PropTypes.object,\n expressions: PropTypes.array,\n callFrames: PropTypes.array,\n currentFrame: PropTypes.number,\n onChangeCurrentFrame: PropTypes.func,\n onWriteScopeValue: PropTypes.func,\n onExpressionDelete: PropTypes.func,\n onExpressionAdd: PropTypes.func,\n onExpressionNameUpdate: PropTypes.func,\n themeType: PropTypes.string,\n};\n\nexport default withStyles(styles)(Stack);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Toolbar from '@mui/material/Toolbar';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport IconButton from '@mui/material/IconButton';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport Dialog from '@mui/material/Dialog';\nimport Badge from '@mui/material/Badge';\n\nimport {MdClose as IconClose, MdPlayArrow as IconRun} from 'react-icons/md';\nimport { MdPause as IconPause } from 'react-icons/md';\nimport { MdArrowForward as IconNext } from 'react-icons/md';\nimport { MdArrowDownward as IconStep } from 'react-icons/md';\nimport { MdArrowUpward as IconOut } from 'react-icons/md';\nimport { MdRefresh as IconRestart } from 'react-icons/md';\nimport { MdWarning as IconException } from 'react-icons/md';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport withStyles from '@mui/styles/withStyles';\nimport DialogError from '../../Dialogs/Error';\nimport Editor from './Editor';\nimport Console from './Console';\nimport Stack from './Stack';\n\nconst styles = theme => ({\n root: {\n width: '100%',\n height: `calc(100% - ${theme.toolbar.height + 38/*Theme.toolbar.height */ + 5}px)`,\n overflow: 'hidden',\n position: 'relative'\n },\n toolbar: {\n minHeight: 38,//Theme.toolbar.height,\n boxShadow: '0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)'\n },\n buttonRun: {\n color: 'green'\n },\n buttonPause: {\n color: 'orange'\n },\n buttonRestart: {\n color: 'darkgreen'\n },\n buttonStop: {\n color: 'red'\n },\n buttonNext: {\n color: 'blue'\n },\n buttonStep: {\n color: 'blue'\n },\n buttonOut: {\n color: 'blue'\n },\n buttonException: {\n\n },\n\n tabFile: {\n textTransform: 'inherit',\n color: theme.palette.mode === 'dark' ? '#DDD' : 'inherit'\n },\n tabText: {\n maxWidth: 130,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n closeButton: {\n position: 'absolute',\n top: 8,\n right: 0,\n zIndex: 10,\n padding: 8,\n cursor: 'pointer'\n },\n\n tabsRoot: {\n minHeight: 24,\n background: theme.palette.mode === 'dark' ? '#333' : '#e6e6e6',\n color: theme.palette.mode === 'dark' ? 'white' : 'inherit'\n },\n tabRoot: {\n minHeight: 24,\n },\n\n bpListItem: {\n borderTop: '1px dashed #bfbfbf44',\n },\n monospace: {\n fontFamily: 'Courier New, monospace',\n whiteSpace: 'pre',\n fontSize: 12,\n },\n arrow: {\n color: '#fffa4f',\n },\n splitter: {\n height: 'calc(100% - 52px)',\n '& .layout-pane': {\n overflow: 'hidden',\n height: '100%'\n }\n }\n});\n\nclass Debugger extends React.Component {\n constructor(props) {\n super(props);\n let breakpoints = window.localStorage.getItem('javascript.tools.bp.' + this.props.src);\n try {\n breakpoints = breakpoints ? JSON.parse(breakpoints) : [];\n } catch (e) {\n breakpoints = [];\n }\n\n let expressions = window.localStorage.getItem('javascript.tools.exps.' + this.props.src);\n try {\n expressions = expressions ? JSON.parse(expressions) : [];\n expressions = expressions.map(name => ({name}));\n } catch (e) {\n expressions = [];\n }\n\n this.toolSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.toolSize')) || 150 : 150;\n\n this.state = {\n starting: true,\n selected: null,\n tabs: {},\n script: '',\n breakpoints,\n expressions,\n running: false,\n error: '',\n started: false,\n paused: true,\n location: null,\n toolsTab: window.localStorage.getItem('javascript.tools.tab') || 'console',\n stopOnException: window.localStorage.getItem('javascript.tools.stopOnException') === 'true',\n console: [],\n finished: false,\n currentFrame: 0,\n scopes: {},\n queryBreakpoints: null,\n logErrors: 0,\n logWarnings: 0,\n logs: 0,\n };\n\n this.scripts = {};\n this.mainScriptId = null;\n }\n\n componentDidMount() {\n new Promise(resolve => {\n if (this.props.debugInstance) {\n resolve(this.props.debugInstance.instance);\n } else {\n this.props.socket.getObject(this.props.src)\n .then(obj => resolve(obj?.common?.engine?.replace('system.adapter.', '')));\n }\n })\n .then(instance =>\n this.setState({instance: instance}, () => {\n if (this.state.instance) {\n this.props.socket.setState(this.state.instance + '.debug.from', '{\"cmd\": \"subscribed\"}', 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', JSON.stringify(cmd));\n }\n\n reinitBreakpoints(cb) {\n if (this.state.breakpoints.length) {\n let breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n breakpoints = breakpoints.map(item => item.location);\n this.setState({breakpoints: []}, () => {\n this.sendToInstance({breakpoints, cmd: 'sb'});\n if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n }\n\n cb && cb();\n });\n } else if (this.state.stopOnException) {\n this.sendToInstance({cmd: 'stopOnException', state: true});\n cb && cb();\n } else {\n cb && cb();\n }\n }\n\n getLocation(context) {\n if (context.callFrames) {\n const frame = context.callFrames[0];\n return frame.location;\n }\n }\n\n readCurrentScope() {\n const frame = this.state.context.callFrames[this.state.currentFrame];\n if (frame) {\n const scopes = frame.scopeChain.filter(scope => scope.type !== 'global');\n if (scopes.length) {\n this.sendToInstance({cmd: 'scope', scopes});\n } else if (this.state.scopes.global || this.state.scopes.local || this.state.scopes.closure) {\n this.setState({scopes: {}});\n }\n }\n }\n\n readExpressions(i) {\n if (this.state.expressions.length && this.state.context?.callFrames && this.state.context.callFrames[this.state.currentFrame]) {\n if (i !== undefined) {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: [this.state.expressions[i]],\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n } else {\n this.sendToInstance({\n cmd: 'expressions',\n expressions: this.state.expressions,\n callFrameId: this.state.context.callFrames[this.state.currentFrame].callFrameId\n });\n }\n }\n }\n\n fromInstance = (id, state) => {\n try {\n const data = JSON.parse(state.val);\n if (data.cmd === 'subscribed') {\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src});\n } else\n if (data.cmd === 'readyToDebug') {\n this.mainScriptId = data.scriptId;\n this.scripts[data.scriptId] = data.script;\n if (data.script.startsWith('(async () => {debugger;\\n')) {\n this.scripts[data.scriptId] = '(async () => {\\n' + data.script.substring('(async () => {debugger;\\n'.length);\n } else if (data.script.startsWith('debugger;')) {\n this.scripts[data.scriptId] = data.script.substring('debugger;'.length);\n }\n\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n tabs[data.scriptId] = this.props.debugInstance ? data.url: this.props.src.replace('script.js.', '');\n\n const ts = Date.now() + '.' + Math.random() * 10000;\n data.context.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n\n this.setState({\n starting: false,\n finished: false,\n selected: this.mainScriptId,\n script: this.scripts[data.scriptId],\n tabs,\n currentFrame: 0,\n started: true,\n paused: true,\n location: this.getLocation(data.context),\n context: data.context,\n }, () =>\n this.reinitBreakpoints(() => {\n this.readCurrentScope();\n this.readExpressions();\n }));\n } else if (data.cmd === 'paused') {\n const ts = Date.now() + '.' + Math.random() * 10000;\n data.context.callFrames && data.context.callFrames.forEach((item, i) => item.id = ts + i);\n const location = this.getLocation(data.context);\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n const parts = data.context.callFrames[0].url.split('iobroker.javascript');\n tabs[location.scriptId] = (parts[1] || parts[0]).replace('script.js.', '');\n\n const newState = {\n tabs,\n paused: true,\n location,\n currentFrame: 0,\n context: data.context,\n scope: {id: (data.context && data.context.callFrames && data.context.callFrames[0] && data.context.callFrames[0].id) || 0}\n };\n\n newState.script = this.scripts[location.scriptId] === undefined ? I18n.t('loading...') : this.scripts[location.scriptId];\n newState.selected = location.scriptId;\n\n this.setState(newState, () => {\n this.readCurrentScope();\n this.readExpressions();\n if (!this.scripts[location.scriptId]) {\n this.sendToInstance({cmd: 'source', scriptId: location.scriptId});\n }\n });\n } else if (data.cmd === 'script') {\n this.scripts[data.scriptId] = data.text;\n if (this.state.selected === data.scriptId) {\n this.setState({script: this.scripts[data.scriptId]});\n }\n } else if (data.cmd === 'resumed') {\n this.setState({paused: false});\n } else if (data.cmd === 'log') {\n if (this.state.toolsTab === 'console') {\n this.console = null;\n const console = [...this.state.console];\n console.push({text: data.text, severity: data.severity, ts: data.ts});\n this.setState({console});\n } else {\n if (data.severity === 'error') {\n this.setState({logErrors: this.state.logErrors + 1});\n } else if (data.severity === 'warn') {\n this.setState({logWarnings: this.state.logWarnings + 1});\n } else {\n this.setState({logs: this.state.logs + 1});\n }\n this.console = this.console || [...this.state.console];\n this.console.push({text: data.text, severity: data.severity, ts: data.ts});\n }\n } else if (data.cmd === 'error') {\n this.setState({error: data.error});\n } else if (data.cmd === 'finished' || data.cmd === 'debugStopped') {\n this.setState({\n finished: true,\n starting: false,\n started: true,\n });\n } else if (data.cmd === 'sb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n data.breakpoints.filter(bp => bp).forEach(bp => {\n const found = breakpoints.find(item =>\n item.location.scriptId === bp.location.scriptId && item.location.lineNumber === bp.location.lineNumber);\n if (!found) {\n changed = true;\n breakpoints.push(bp);\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'cb') {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n let changed = false;\n\n data.breakpoints.filter(id => id !== undefined && id !== null).forEach(id => {\n const found = breakpoints.find(item => item.id === id);\n if (found) {\n const pos = breakpoints.indexOf(found);\n breakpoints.splice(pos, 1);\n changed = true;\n }\n });\n changed && window.localStorage.setItem('javascript.tools.bp.' + this.props.src, JSON.stringify(breakpoints));\n changed && this.setState({breakpoints});\n } else if (data.cmd === 'scope') {\n //const global = data.scopes.find(scope => scope.type === 'global') || null;\n const local = data.scopes.find(scope => scope.type === 'local') || null;\n const closure = data.scopes.find(scope => scope.type === 'closure') || null;\n\n console.log(JSON.stringify(closure));\n\n this.setState({scopes: {local, closure, id: this.state.scope.id + '_' + this.state.currentFrame}});\n } else if (data.cmd === 'setValue') {\n const scopes = JSON.parse(JSON.stringify(this.state.scopes));\n let item;\n if (data.scopeNumber === 0) {\n item = scopes.local && scopes.local.properties && scopes.local.properties.result && scopes.local.properties.result.find(item => item.name === data.variableName);\n } else {\n item = scopes.closure && scopes.closure.properties && scopes.closure.properties.result && scopes.closure.properties.result && scopes.closure.properties.result.find(item => item.name === data.variableName);\n }\n if (item) {\n item.value.value = data.newValue.value;\n this.setState({scopes});\n }\n } else if (data.cmd === 'expressions') {\n // update values\n let expressions = JSON.parse(JSON.stringify(this.state.expressions));\n let changed = false;\n data.expressions.forEach(item => {\n const expression = expressions.find(it => it.name === item.name);\n if (expression) {\n changed = true;\n expression.value = item.result;\n }\n });\n changed && this.setState({expressions});\n\n console.log('expressions: ' + JSON.stringify(data));\n } else if (data.cmd === 'getPossibleBreakpoints') {\n if (data.breakpoints?.locations?.length === 1) {\n this.sendToInstance({breakpoints: data.breakpoints.locations, cmd: 'sb'});\n } else if (!data.breakpoints?.locations?.length) {\n window.alert('cannot set');\n } else {\n this.setState({queryBreakpoints: data.breakpoints.locations});\n }\n } else {\n console.error(`Unknown command: ${JSON.stringify(data)}`);\n }\n } catch (e) {\n\n }\n }\n\n getTextAtLocation(location) {\n let line = this.state.script.split(/\\r\\n|\\n/)[location.lineNumber];\n let arrow = '';\n if (location.columnNumber >= 10) {\n line = line.substring(location.columnNumber - 10, location.columnNumber + 20);\n arrow = ''.padStart(10, ' ') + '↑';\n } else {\n line = line.substring(0, 30 - location.columnNumber);\n arrow = ''.padStart(location.columnNumber, ' ') + '↑';\n }\n return [\n <div className={this.props.classes.monospace}>{line}</div>,\n <div className={clsx(this.props.classes.monospace, this.props.classes.arrow)}>{arrow}</div>\n ];\n }\n\n renderQueryBreakpoints() {\n if (this.state.queryBreakpoints) {\n return <Dialog onClose={() => this.setState({queryBreakpoints: null})} aria-labelledby=\"bp-dialog-title\" open={true}>\n <DialogTitle id=\"bp-dialog-title\">{I18n.t('Select breakpoint')}</DialogTitle>\n <List>\n {this.state.queryBreakpoints.map((bp, i) => (\n <ListItem\n classes={{root: this.props.classes.bpListItem}}\n dense={true}\n button\n onClick={() => {\n this.sendToInstance({breakpoints: [bp], cmd: 'sb'});\n this.setState({queryBreakpoints: null})\n }}\n key={i}>\n <ListItemText\n classes={{primary: this.props.classes.bpListPrimary, secondary: this.props.classes.bpListSecondary}}\n primary={this.getTextAtLocation(bp)}\n />\n </ListItem>\n ))}\n </List>\n </Dialog>;\n } else {\n return null;\n }\n }\n\n renderError() {\n if (this.state.error) {\n return <DialogError key=\"dialogError\" onClose={() => this.setState({ error: '' })} text={this.state.error} />;\n } else {\n return null;\n }\n }\n\n closeTab(id, e) {\n e && e.stopPropagation();\n const tabs = JSON.parse(JSON.stringify(this.state.tabs));\n delete tabs[id];\n const newState = {tabs, script: this.scripts[this.mainScriptId], selected: this.mainScriptId};\n if (this.state.location && this.state.location.scriptId !== this.mainScriptId) {\n newState.location = null;\n }\n this.setState(newState);\n }\n\n renderTabs() {\n const disabled = !this.state.tabs || !this.state.started;\n return <Tabs\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: 'calc(100% - 300px)', display: 'inline-block' }}\n value={this.state.selected}\n onChange={(event, value) => {\n if (this.scripts[value]) {\n this.setState({selected: value, script: this.scripts[value]});\n } else {\n this.setState({selected: value, script: 'loading...'}, () =>\n this.sendToInstance({cmd: 'source', scriptId: value}));\n }\n }}\n scrollButtons=\"auto\"\n >\n {Object.keys(this.state.tabs || [])\n .map(id => {\n let label = id;\n let title = this.state.tabs[id] || '';\n if (this.state.tabs[id]) {\n label = this.state.tabs[id].split('/').pop();\n }\n label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText)}>{label}</div>,\n id !== this.mainScriptId && <span key=\"icon\" className={this.props.classes.closeButton}>\n <IconClose key=\"close\" onClick={e => this.closeTab(id, e)} fontSize=\"small\" /></span>];\n\n return <Tab disabled={disabled} classes={{root: this.props.classes.tabFile}} label={label} title={title} key={id} value={id}/>;\n })}\n </Tabs>;\n }\n\n onResume() {\n this.sendToInstance({cmd: 'cont'});\n }\n\n onPause() {\n this.sendToInstance({cmd: 'pause'});\n }\n\n onNext() {\n this.sendToInstance({cmd: 'next'});\n }\n\n onStepIn() {\n this.sendToInstance({cmd: 'step'});\n }\n\n onStepOut() {\n this.sendToInstance({cmd: 'out'});\n }\n\n onRestart() {\n this.setState({started: false, starting: true}, () =>\n this.props.socket.sendTo(this.state.instance, 'debug', this.props.debugInstance || {scriptName: this.props.src}));\n }\n\n onToggleException() {\n const stopOnException = !this.state.stopOnException;\n window.localStorage.setItem('javascript.tools.stopOnException', stopOnException ? 'true' : 'false');\n this.setState({stopOnException}, () =>\n this.sendToInstance({cmd: 'stopOnException', state: stopOnException}));\n }\n\n renderToolbar() {\n const disabled = !this.state.started;\n return (\n <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n <IconButton\n className={this.props.classes.buttonRestart}\n disabled={disabled}\n onClick={() => this.onRestart()}\n title={I18n.t('Restart')}\n size=\"medium\"><IconRestart/></IconButton>\n {\n !this.state.finished && this.state.paused ?\n <IconButton\n className={this.props.classes.buttonRun}\n disabled={disabled}\n onClick={() => this.onResume()}\n title={I18n.t('Resume execution')}\n size=\"medium\"><IconRun/></IconButton>\n :\n !this.state.finished && <IconButton\n disabled={disabled}\n className={this.props.classes.buttonPause}\n onClick={() => this.onPause()}\n title={I18n.t('Pause execution')}\n size=\"medium\"><IconPause/></IconButton>\n }\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonNext}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onNext()}\n title={I18n.t('Go to next line')}\n size=\"medium\"><IconNext/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonStep}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepIn()}\n title={I18n.t('Step into function')}\n size=\"medium\"><IconStep/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonOut}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onStepOut()}\n title={I18n.t('Step out from function')}\n size=\"medium\"><IconOut/></IconButton>}\n {!this.state.finished && <IconButton\n className={this.props.classes.buttonException}\n color={this.state.stopOnException ? 'primary' : 'default'}\n disabled={disabled || !this.state.paused}\n onClick={() => this.onToggleException()}\n title={I18n.t('Stop on exception')}\n size=\"medium\"><IconException/></IconButton>}\n {this.renderTabs()}\n </Toolbar>\n );\n }\n\n getPossibleBreakpoints(bp) {\n const end = {...bp, columnNumber: 1000};\n this.sendToInstance({cmd: 'getPossibleBreakpoints', start: bp, end});\n }\n\n toggleBreakpoint(lineNumber) {\n let bp = this.state.breakpoints.find(item => item.location.scriptId === this.state.selected && item.location.lineNumber === lineNumber);\n if (bp) {\n const breakpoints = JSON.parse(JSON.stringify(this.state.breakpoints));\n this.setState({breakpoints}, () =>\n this.sendToInstance({breakpoints: [bp.id], cmd: 'cb'}));\n } else {\n bp = {scriptId: this.state.selected, lineNumber, columnNumber: 0};\n this.getPossibleBreakpoints(bp);\n }\n }\n\n renderCode() {\n if (this.state.script && this.state.started) {\n const breakpoints = this.state.breakpoints.filter(bp => bp.location.scriptId === this.state.selected);\n\n return <Editor\n runningInstances={this.props.runningInstances}\n socket={this.props.socket}\n adapterName={this.props.adapterName}\n scriptName={this.state.tabs[this.state.selected]}\n sourceId={this.state.selected}\n script={this.state.script}\n paused={this.state.paused}\n breakpoints={breakpoints}\n location={this.state.location}\n themeType={this.props.themeType}\n themeName={this.props.themeName}\n onToggleBreakpoint={i => this.toggleBreakpoint(i)}\n />\n }\n }\n\n renderFrames() {\n if (!this.state.paused) {\n return null;\n }\n\n return <Stack\n currentScriptId={this.state.selected}\n scopes={this.state.scopes}\n expressions={this.state.expressions}\n themeType={this.props.themeType}\n callFrames={this.state.context?.callFrames}\n currentFrame={this.state.currentFrame}\n onChangeCurrentFrame={i => {\n this.setState({currentFrame: i, scopes: {}}, () => {\n this.readCurrentScope();\n this.readExpressions();\n })\n }}\n onWriteScopeValue={obj => {\n this.sendToInstance({\n cmd: 'setValue',\n variableName: obj.variableName,\n scopeNumber: obj.scopeNumber,\n newValue: obj.newValue,\n callFrameId: obj.callFrameId\n });\n }}\n onExpressionDelete={i => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.splice(i, 1);\n this.setState({expressions});\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n onExpressionAdd={cb => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n expressions.push({name: '', value: {value: ''}});\n this.setState({expressions}, () => cb && cb(expressions.length - 1, this.state.expressions[expressions.length - 1]));\n }}\n onExpressionNameUpdate={(i, name, cb) => {\n const expressions = JSON.parse(JSON.stringify(this.state.expressions));\n if (!name) {\n expressions.splice(i, 1);\n } else if (expressions.find(item => item.name === name)) {\n return cb && cb(false);\n } else {\n expressions[i].name = name;\n }\n\n this.setState({expressions}, () => {\n name && this.readExpressions(i);\n cb && cb();\n });\n window.localStorage.setItem('javascript.tools.exps.' + this.props.src, JSON.stringify(expressions.map(item => item.name)));\n }}\n />;\n }\n\n renderConsole() {\n return <Console\n theme={this.props.theme}\n console={this.state.console}\n onClearAllLogs={() => this.setState({console: [], logErrors: 0, logWarning: 0, logs: 0})}\n />;\n }\n\n renderTools() {\n const disabled = !this.state.tabs || !this.state.started;\n\n let _console;\n if (this.state.logErrors) {\n _console = <Badge badgeContent={this.state.logErrors} color=\"error\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logWarnings) {\n _console = <Badge badgeContent={this.state.logWarnings} color=\"secondary\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else if (this.state.logs) {\n _console = <Badge badgeContent={this.state.logs} color=\"default\">\n <span>{I18n.t('Console')}</span>\n </Badge>;\n } else {\n _console = I18n.t('Console');\n }\n\n return <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n <Tabs\n classes={{root: this.props.classes.tabsRoot}}\n component={'div'}\n indicatorColor=\"primary\"\n style={{ position: 'relative', width: '100%' }}\n value={this.state.toolsTab}\n onChange={(event, value) => {\n const newState = {toolsTab: value};\n\n // load logs from buffer\n if (this.console && value === 'console') {\n newState.console = this.console;\n this.console = null;\n newState.logs = 0;\n newState.logWarnings = 0;\n newState.logErrors = 0;\n }\n\n window.localStorage.setItem('javascript.tools.tab', value);\n\n this.setState(newState);\n }}\n scrollButtons=\"auto\"\n >\n <Tab classes={{root: this.props.classes.tabRoot}} disabled={disabled} label={I18n.t('Stack')} value=\"stack\"/>\n <Tab\n classes={{root: this.props.classes.tabRoot}}\n disabled={disabled}\n label={_console}\n value=\"console\"\n />\n </Tabs>\n <div style={{width: '100%', height: 'calc(100% - 36px)', overflow: 'hidden'}}>\n {this.state.toolsTab === 'stack' && !disabled ? this.renderFrames() : null}\n {this.state.toolsTab === 'console' && !disabled ? this.renderConsole() : null}\n </div>\n </div>;\n }\n\n render() {\n return <div key=\"debugger\" style={this.props.style} className={clsx(this.props.classes.root, this.props.className)}>\n {this.state.starting ? <LinearProgress/> : null}\n {this.renderToolbar()}\n <SplitterLayout\n customClassName={this.props.classes.splitter}\n primaryMinSize={100}\n vertical={true}\n secondaryInitialSize={this.toolSize}\n onSecondaryPaneSizeChange={size => this.toolSize = parseFloat(size)}\n onDragEnd={() => window.localStorage.setItem('App.toolSize', this.toolSize.toString())}\n //style={{width: '100%', height: 'calc(100% - 73px)', overflow: 'hidden'}}\n >\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderCode()}\n {this.renderQueryBreakpoints()}\n </div>\n <div style={{width: '100%', height: '100%', overflow: 'hidden'}}>\n {this.renderTools()}\n </div>\n </SplitterLayout>\n {this.renderError()}\n </div>;\n }\n}\n\nDebugger.propTypes = {\n runningInstances: PropTypes.object,\n adapterName: PropTypes.string,\n src: PropTypes.string,\n socket: PropTypes.object.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n themeType: PropTypes.string,\n theme: PropTypes.object,\n themeName: PropTypes.string,\n debugInstance: PropTypes.object,\n};\n\nexport default withStyles(styles)(Debugger);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Tour from 'reactour';\n\nimport Toolbar from '@mui/material/Toolbar';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport Badge from '@mui/material/Badge';\nimport Snackbar from '@mui/material/Snackbar';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport Checkbox from '@mui/material/Checkbox';\n\nimport { 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';\n\nimport ImgJS from './assets/js.png';\nimport ImgBlockly from './assets/blockly.png';\nimport ImgTypeScript from './assets/typescript.png';\nimport ImgBlockly2Js from './assets/blockly2js.png';\nimport ImgRules2Js from './assets/rules2js.png';\nimport ImgRules from './assets/rules.png';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogCron from '@iobroker/adapter-react-v5/Dialogs/Cron';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport DialogSelectID from '@iobroker/adapter-react-v5/Dialogs/SelectID';\n\nimport ScriptEditorComponent from './Components/ScriptEditorVanilaMonaco';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport DialogScriptEditor from './Dialogs/ScriptEditor';\nimport RulesEditor from './Components/RulesEditor';\nimport Debugger from './Components/Debugger';\nimport steps, { STEPS } from './Components/RulesEditor/helpers/Tour';\n\nconst images = {\n 'Blockly': ImgBlockly,\n 'Javascript/js': ImgJS,\n 'Rules': ImgRules,\n def: ImgJS,\n 'TypeScript/ts': ImgTypeScript,\n};\n\nconst MENU_ITEM_HEIGHT = 48;\nconst COLOR_DEBUG = '#02a102';\nconst COLOR_VERBOSE = '#70aae9';\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: 8,\n right: 0,\n zIndex: 10,\n padding: 8,\n cursor: 'pointer'\n },\n notRunning: {\n color: '#ffbc00',\n marginRight: theme.spacing(1)\n },\n tabButton: {\n\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 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\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.indexOf(id) !== -1) {\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 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', width: this.state.editing.length > 1 ? 'calc(100% - 50px)' : '100%', display: 'inline-block' }}\n textColor=\"primary\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {this.state.editing.map(id => {\n if (!this.props.objects[id]) {\n const label = [\n <div key=\"text\" className={clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{id.split('.').pop()}</div>,\n <span key=\"icon\" className={this.props.classes.closeButton}><IconClose key=\"close\" onClick={e => this.onTabClose(id, e)} fontSize=\"small\" /></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 = this.props.objects[id].common.name;\n let title = '';\n if (text.length > 18) {\n title = text;\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 <img key=\"icon\" alt={\"\"} src={images[this.props.objects[id].common.engineType] || images.def} className={this.props.classes.tabIcon} />,\n <div key=\"text\" className={clsx(this.props.classes.tabText, this.isScriptChanged(id) && this.props.classes.tabChanged)}>{text}</div>,\n changed ? <span key=\"changedSign\" className={this.props.classes.tabChangedIcon}>▣</span> : null,\n (!this.props.debugInstance && (!this.props.debugMode || this.state.selected !== id)) && <span key=\"icon2\" className={this.props.classes.closeButton}><IconClose key=\"close\" onClick={e => this.onTabClose(id, e)} fontSize=\"small\" /></span>,\n ];\n\n return <Tab\n disabled={this.props.debugInstance || (this.state.selected !== id && this.props.debugMode)}\n wrapped\n component={'div'}\n href={'#' + id}\n key={id}\n label={label}\n className={this.props.classes.tabButton}\n value={id}\n title={title}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n />;\n }\n })}\n {this.props.debugInstance ? <Tab\n disabled={false}\n wrapped\n component={'div'}\n href={'#' + this.props.debugInstance.adapter}\n key={this.props.debugInstance.adapter}\n label={this.props.debugInstance.adapter}\n className={this.props.classes.tabButton}\n value={this.props.debugInstance.adapter}\n title={this.props.debugInstance.adapter}\n classes={{ wrapper: this.props.classes.tabButtonWrapper }}\n /> : ''}\n </Tabs>,\n this.state.editing.length > 1 ? <IconButton\n key=\"menuButton\"\n href=\"#\"\n aria-label=\"Close all but current\"\n className={this.props.classes.tabMenuButton}\n title={I18n.t('Close all but current')}\n aria-haspopup=\"false\"\n onClick={_event => {\n const editing = [this.state.selected];\n // Do not close not saved tabs\n Object.keys(this.scripts).forEach(id =>\n id !== this.state.selected &&\n JSON.stringify(this.scripts[id]) !== JSON.stringify(this.props.objects[id].common) &&\n editing.push(id)\n );\n\n window.localStorage && window.localStorage.setItem('Editor.editing', JSON.stringify(editing));\n this.setState({ menuTabsOpened: false, menuTabsAnchorEl: null, editing: editing });\n }}\n size=\"medium\">\n <IconCloseAll />\n </IconButton> : null\n ];\n } else {\n return <div key=\"tabs2\" className={this.props.classes.toolbar}>\n <Button color=\"grey\" key=\"select1\" disabled={true} className={this.props.classes.hintButton} href=\"\">\n <span key=\"select2\">{I18n.t('Click on this icon')}</span>\n <IconDoEdit key=\"select3\" className={this.props.classes.hintIcon} />\n <span key=\"select4\">{I18n.t('for edit or create script')}</span>\n </Button>\n </div>;\n }\n }\n\n getDebugMenu() {\n if (!this.state.showDebugMenu) {\n return null;\n }\n\n return <Menu\n key=\"menuDebug\"\n id=\"menu-debug\"\n anchorEl={this.state.menuDebugAnchorEl}\n open={this.state.showDebugMenu}\n onClose={() => this.setState({ showDebugMenu: false, menuDebugAnchorEl: null })}\n PaperProps={{\n style: {\n maxHeight: MENU_ITEM_HEIGHT * 7.5,\n },\n }}\n >\n <MenuItem key=\"debugEnabled\"\n title={I18n.t('debug_help')}\n onClick={event => {\n event.stopPropagation();\n event.preventDefault();\n this.setState({ showDebugMenu: false, menuDebugAnchorEl: null, debugEnabled: !this.state.debugEnabled }, () => this.onChange({ debug: this.state.debugEnabled }));\n }}>\n <Checkbox checked={this.state.debugEnabled} />\n <IconDebug className={this.props.classes.menuIcon} style={{ color: COLOR_DEBUG }} />\n {I18n.t('debug')}\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')}\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={result => {\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\"><IconLocate /></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\"><IconRestart /></IconButton>}\n {!this.props.debugInstance && !changed && !isScriptRunning && <span className={this.props.classes.notRunning}>{I18n.t('Script is not running')}</span>}\n {!changed && isScriptRunning && !isInstanceRunning && <span className={this.props.classes.notRunning}>{I18n.t('Instance is disabled')}</span>}\n {changed && <Button color=\"grey\" key=\"save\" variant=\"contained\" className={clsx(this.props.classes.textButton, this.props.classes.saveButton, 'button-save')} onClick={() => this.onSave()}>{I18n.t('Save')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {(changedAll > 1 || (changedAll === 1 && !changed)) && <Button color=\"grey\" key=\"saveall\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onSaveAll()}>{I18n.t('Save all')}<IconSave className={this.props.classes.textIcon} /></Button>}\n {changed && <Button color=\"grey\" key=\"cancel\" variant=\"contained\" className={this.props.classes.textButton} onClick={() => this.onCancel()}>{I18n.t('Cancel')}<IconCancel className={this.props.classes.textIcon} /></Button>}\n <div style={{ flex: 2 }} />\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton\n key=\"export\"\n aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('export')}\n size=\"medium\">\n <IconExport /></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 <IconImport /></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 <IconCheck /></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\"><IconCron /></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\"><IconSelectId /></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 <IconExport /></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 <IconImport /></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 <IconDebugMode style={{fontSize: 32}}/>\n </IconButton>}\n\n {(this.state.blockly || this.state.rules) && <Button\n key=\"blockly-code\"\n aria-label=\"blockly\"\n title={I18n.t('Show javascript code')}\n className={clsx(this.props.classes.toolbarButtons, 'button-js-code', this.props.debugMode && this.props.classes.toolbarButtonsDisabled)}\n color={this.state.showCompiledCode ? 'secondary' : 'inherit'}\n disabled={this.props.debugMode}\n style={{ padding: '0 5px' }}\n onClick={() => {\n if (this.props.debugMode) {\n return;\n }\n this.setState({ showCompiledCode: !this.state.showCompiledCode });\n this.state.isTourOpen && this.state.tourStep === STEPS.showJavascript && this.setState({ tourStep: STEPS.switchBackToRules });\n this.state.isTourOpen && this.state.tourStep === STEPS.switchBackToRules && this.setState({ tourStep: STEPS.saveTheScript });\n }}>\n <img alt={this.state.blockly ? \"blockly2js\" : \"rules2js\"} src={this.state.blockly ? ImgBlockly2Js : ImgRules2Js} /></Button>}\n <IconButton\n key=\"debug\"\n disabled={this.props.debugMode}\n aria-label=\"Debug menu\"\n title={I18n.t('Debug options')}\n className={this.props.classes.toolbarButtons}\n onClick={e => this.setState({ showDebugMenu: true, menuDebugAnchorEl: e.currentTarget })}\n size=\"medium\">\n <Badge className={this.props.classes.badgeMargin} badgeContent={this.getDebugBadge()}>\n <IconDebugMenu />\n </Badge>\n </IconButton>\n </Toolbar>\n );\n } else {\n return null;\n }\n }\n\n getScriptEditor() {\n if (!this.props.debugMode &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly !== null &&\n (!this.state.blockly || this.state.showCompiledCode) &&\n (!this.state.rules || this.state.showCompiledCode)\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"scriptEditorDiv\">\n <ScriptEditorComponent\n key=\"scriptEditor1\"\n name={this.state.selected}\n adapterName={this.props.adapterName}\n insert={this.state.insert}\n onInserted={() => this.setState({ insert: '' })}\n onForceSave={() => this.onSave()}\n searchText={this.state.searchText}\n onRegisterSelect={func => this.onRegisterSelect(func)}\n readOnly={this.state.showCompiledCode}\n changed={this.state.changed[this.state.selected]}\n code={this.scripts[this.state.selected].source || ''}\n isDark={this.state.themeType === 'dark'}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n onChange={newValue => this.onChange({ script: newValue })}\n language={this.scripts[this.state.selected].engineType === 'TypeScript/ts' ? 'typescript' : 'javascript'}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getBlocklyEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.blockly &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n\n return <div className={this.props.classes.editorDiv} key=\"blocklyEditorDiv\">\n <BlocklyEditor\n command={this.state.cmdToBlockly}\n key=\"BlocklyEditor\"\n themeType={this.state.themeType}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getRulesEditor() {\n if (!this.props.debugMode &&\n this.state.instancesLoaded &&\n this.state.selected &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n !this.state.showCompiledCode &&\n this.state.visible\n ) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n const isScriptRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].enabled;\n\n return <div className={clsx(this.props.classes.editorDiv)} key=\"flowEditorDiv\">\n <RulesEditor\n scriptId={this.state.selected}\n setTourStep={this.setTourStep}\n tourStep={this.state.tourStep}\n isTourOpen={this.state.isTourOpen}\n changed={this.state.changed[this.state.selected]}\n running={isInstanceRunning && isScriptRunning}\n command={this.state.cmdToRules}\n key=\"flowEditor\"\n themeType={this.state.themeType}\n themeName={this.props.themeName}\n searchText={this.state.searchText}\n resizing={this.props.resizing}\n code={this.scripts[this.state.selected].source || ''}\n onChange={newValue => this.onChange({ script: newValue })}\n />\n </div>;\n } else {\n return null;\n }\n }\n\n getConfirmDialog() {\n if (this.state.confirm) {\n return <DialogConfirm\n key=\"dialogConfirm1\"\n text={this.state.confirm}\n onClose={result => {\n if (this.confirmCallback) {\n const cb = this.confirmCallback;\n this.confirmCallback = null;\n cb(result);\n }\n this.setState({ confirm: '' });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getSelectIdDialog() {\n if (this.state.showSelectId) {\n let selectedId = this.selectId.callback ? this.selectId.initValue || '' : this.getSelect ? this.getSelect() : '';\n // it could be:\n // - 'id.xx'/* aksjdhsdf*/\n // - \"id.xx\"/* aksjdhsdf*/\n // - \"id.xx\"//\n let pos = selectedId.indexOf('/*');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n pos = selectedId.indexOf('//');\n if (pos !== -1) {\n selectedId = selectedId.substring(0, pos);\n }\n let m = selectedId.match(/\"([^\"]+)\"/);\n if (m) {\n selectedId = m[1];\n }\n m = selectedId.match(/'([^']+)'/);\n if (m) {\n selectedId = m[1];\n }\n\n return <DialogSelectID\n key=\"dialogSelectID1\"\n imagePrefix=\"../..\"\n themeName={this.props.themeName}\n themeType={this.state.themeType}\n socket={this.props.socket}\n selected={selectedId}\n expertMode={this.selectId.type === 'script' ? true : undefined}\n // statesOnly={!this.selectId.type || this.selectId.type === 'state'}\n types={[this.selectId.type || 'state']}\n onClose={() => {\n this.setState({ showSelectId: false });\n if (this.selectId.callback) {\n this.selectId.callback = null;\n }\n }}\n onOk={(selected, name) => {\n this.selectId.initValue = null;\n if (this.selectId.callback) {\n this.selectId.callback(selected);\n this.selectId.callback = null;\n } else {\n this.setState({ insert: `'${selected}'/*${name}*/` })\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getCronDialog() {\n if (this.state.showCron) {\n return <DialogCron\n key=\"dialogCron1\"\n cron={this.cron.callback ? this.cron.initValue || '' : this.getSelect ? this.getSelect() : '* * * * *'}\n onClose={() => this.setState({ showCron: false })}\n onOk={cron => {\n this.cron.initValue = null;\n if (this.cron.callback) {\n this.cron.callback(cron);\n this.cron.callback = null;\n } else {\n this.setState({ insert: `'${cron}'` });\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getEditorDialog() {\n if (this.state.showScript) {\n return <DialogScriptEditor\n key=\"scriptEditorDialog\"\n adapterName={this.props.adapterName}\n source={this.scriptDialog.initValue}\n args={this.scriptDialog.args ? this.scriptDialog.args.join(', ') : ''}\n isReturn={this.scriptDialog.isReturn}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n themeType={this.state.themeType}\n onClose={result => {\n this.scriptDialog.initValue = null;\n if (this.scriptDialog.callback) {\n result !== false && this.scriptDialog.callback(result || '');\n this.scriptDialog.callback = null;\n }\n this.setState({ showScript: false });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getToast() {\n return (\n <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\"><IconClose />\n </IconButton>,\n ]}\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', true, true);\n }}\n //getCurrentStep={tourStep => this.setTourStep(tourStep)}\n goToStep={this.state.tourStep}\n />;\n }\n }\n\n getDebug() {\n if (this.props.debugMode) {\n const isInstanceRunning = this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].engine && this.state.runningInstances[this.scripts[this.state.selected].engine];\n if (isInstanceRunning) {\n return <Debugger\n key=\"debugger\"\n runningInstances={this.state.runningInstances}\n adapterName={this.props.adapterName}\n socket={this.props.socket}\n theme={this.props.theme}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n src={this.props.debugInstance ? this.props.debugInstance.adapter : this.state.selected}\n debugInstance={this.props.debugInstance}\n />;\n } else {\n setTimeout(() => this.props.onDebugModeChange(false));\n return null;\n }\n } else {\n return null;\n }\n }\n\n render() {\n if (this.state.selected && this.props.objects[this.state.selected] && this.state.blockly === null && this.state.rules === null) {\n this.scripts[this.state.selected] = this.scripts[this.state.selected] || JSON.parse(JSON.stringify(this.props.objects[this.state.selected].common));\n setTimeout(() => {\n const newState = {\n blockly: this.scripts[this.state.selected].engineType === 'Blockly',\n rules: this.scripts[this.state.selected].engineType === 'Rules',\n showCompiledCode: false,\n debugEnabled: this.scripts[this.state.selected].debug,\n verboseEnabled: this.scripts[this.state.selected].verbose,\n };\n\n // check if all opened files still exists\n this.removeNonExistingScripts(null, newState);\n this.setState(newState);\n }, 100);\n }\n\n return [\n this.getTabs(),\n this.getToolbar(),\n this.getScriptEditor(),\n this.getAskAboutDebug(),\n this.getBlocklyEditor(),\n this.getRulesEditor(),\n this.getDebug(),\n this.getConfirmDialog(),\n this.getSelectIdDialog(),\n this.getCronDialog(),\n this.getEditorDialog(),\n this.getDebugMenu(),\n this.getToast(),\n this.getTour(),\n ];\n }\n}\n\nEditor.propTypes = {\n objects: PropTypes.object.isRequired,\n instances: PropTypes.array.isRequired,\n adapterName: PropTypes.string.isRequired,\n selected: PropTypes.string.isRequired,\n onSelectedChange: PropTypes.func.isRequired,\n onRestart: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n visible: PropTypes.bool,\n menuOpened: PropTypes.bool,\n onLocate: PropTypes.func,\n runningInstances: PropTypes.object,\n socket: PropTypes.object,\n searchText: PropTypes.string,\n themeName: PropTypes.string,\n themeType: PropTypes.string,\n onDebugModeChange: PropTypes.func,\n debugMode: PropTypes.bool,\n debugInstance: PropTypes.object,\n expertMode: PropTypes.bool,\n};\n\nexport default withStyles(styles)(Editor);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@mui/styles/withStyles';\nimport Button from '@mui/material/Button';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport Dialog from '@mui/material/Dialog';\nimport Dropzone from 'react-dropzone';\nimport DialogError from './Error';\nimport {MdFileUpload as IconUpload} from 'react-icons/md';\nimport {MdCancel as IconNo} from 'react-icons/md';\nimport {MdPlusOne as IconPlus} from 'react-icons/md';\n\nimport IconCancel from '@mui/icons-material/Cancel';\n\nimport I18n from '@iobroker/adapter-react-v5/i18n';\n\nconst styles = theme => ({\n dialog: {\n height: '95%'\n },\n fullHeight: {\n height: '100%',\n overflow: 'hidden'\n },\n dropzone: {\n marginTop: 20,\n width: '100%',\n borderWidth: 5,\n borderStyle: 'dashed',\n borderColor: '#d0cccc',\n textAlign: 'center',\n boxSizing: 'border-box',\n paddingTop: 45,\n borderRadius: 10,\n height: 'calc(100% - 10px)'\n },\n dropzoneDiv: {\n width: '100%',\n height: '100%'\n },\n dropzoneRejected: {\n borderColor: '#970000',\n },\n dropzoneAccepted: {\n borderColor: '#17cd02',\n },\n icon: {\n height: '30%',\n width: '30%',\n color: '#eeeeee',\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n zIndex: 0,\n },\n iconError: {\n color: '#ffc3c6',\n },\n iconOk: {\n color: '#aaeebc',\n },\n text: {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%,-50%)',\n color: '#868686',\n position: 'absolute',\n zIndex: 1,\n }\n});\n\nclass DialogImportFile extends React.Component {\n\n constructor(props) {\n super(props);\n this.state = {\n error: '',\n imageStatus: ''\n };\n }\n\n componentDidMount() {\n setTimeout(() => {\n try {\n window.document.getElementById('import-text-area').focus();\n } catch (e) {\n\n }\n }, 100);\n }\n\n handleCancel () {\n this.props.onClose();\n }\n\n onChange(e) {\n this.setState({text: e.target.value});\n }\n\n static readFileDataUrl(file, cb) {\n const reader = new FileReader();\n reader.onload = () => {\n cb(null, {data: reader.result, name: file.name});\n };\n reader.onabort = () => {\n console.error('file reading was aborted');\n cb(I18n.t('file reading was aborted'));\n };\n reader.onerror = (e) => {\n console.error('file reading has failed');\n cb(I18n.t('file reading has failed: %s', e));\n };\n\n reader.readAsDataURL(file)\n }\n\n handleDropFile(files) {\n if (files && files.hasOwnProperty('target')) {\n files = files.target.files;\n }\n\n if (!files && !files.length) {\n return;\n }\n\n const file = files[files.length - 1];\n\n if (!file) {\n return;\n }\n DialogImportFile.readFileDataUrl(file, (err, result) => {\n if (err) {\n this.setState({error: err})\n } else {\n this.props.onClose(result && result.data);\n }\n });\n }\n\n render() {\n const classes = this.props.classes;\n const className = classes.dropzone + ' ' + (this.state.imageStatus === 'accepted' ? classes.dropzoneAccepted : (this.state.imageStatus === 'rejected' ? classes.dropzoneRejected : ''));\n\n return <Dialog\n onClose={(event, reason) => false}\n maxWidth=\"lg\"\n classes={{paper: classes.dialog}}\n fullWidth={true}\n open={true}\n aria-labelledby=\"import-dialog-title\"\n >\n <DialogTitle id=\"import-dialog-title\">{I18n.t('Import scripts')}</DialogTitle>\n <DialogContent className={classes.fullHeight}>\n <Dropzone key='image-drop'\n\n maxSize={50000000}\n acceptClassName={classes.dropzoneAccepted}\n rejectClassName={classes.dropzoneRejected}\n onDrop={files => this.handleDropFile(files)}\n multiple={false}\n accept='application/zip,application/x-zip-compressed'\n className={className}>\n {\n ({ getRootProps, getInputProps, isDragActive, isDragReject}) => {\n if (isDragReject) {\n if (this.state.imageStatus !== 'rejected') {\n this.setState({imageStatus: 'rejected'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Some files will be rejected')}</span>\n <IconNo key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconError}/>\n </div>);\n } else if (isDragActive) {\n if (this.state.imageStatus !== 'accepted') {\n this.setState({imageStatus: 'accepted'});\n }\n\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('All files will be accepted')}</span>\n <IconPlus key=\"icon\" className={this.props.classes.icon + ' ' + this.props.classes.iconOk}/>\n </div>);\n } else {\n if (this.state.imageStatus !== 'wait') {\n this.setState({imageStatus: 'wait'});\n }\n return (\n <div className={this.props.classes.dropzoneDiv} {...getRootProps()}>\n <input {...getInputProps()} />\n <span key=\"text\" className={this.props.classes.text}>{I18n.t('Drop some files here or click...')}</span>\n <IconUpload key=\"icon\" className={this.props.classes.icon}/>\n </div>);\n }\n }\n }\n </Dropzone>\n {this.state.error ? (<DialogError text={this.state.error} onClose={() => this.setState({error: ''})}/>) : null}\n </DialogContent>\n <DialogActions>\n <Button color=\"grey\" variant=\"contained\" onClick={() => this.handleCancel()} startIcon={<IconCancel/>}>{I18n.t('Close')}</Button>\n </DialogActions>\n </Dialog>;\n }\n}\n\nDialogImportFile.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nexport default withStyles(styles)(DialogImportFile);\n","import React from 'react';\n// import ReactDOM from 'react-dom';\nimport withStyles from '@mui/styles/withStyles';\nimport SplitterLayout from 'react-splitter-layout';\n\nimport 'react-splitter-layout/lib/index.css';\n\nimport GenericApp from '@iobroker/adapter-react-v5/GenericApp';\nimport Loader from '@iobroker/adapter-react-v5/Components/Loader'\nimport I18n from '@iobroker/adapter-react-v5/i18n';\nimport DialogMessage from '@iobroker/adapter-react-v5/Dialogs/Message';\nimport DialogConfirm from '@iobroker/adapter-react-v5/Dialogs/Confirm';\nimport Utils from '@iobroker/adapter-react-v5/Components/Utils';\n\nimport { MdMenu as IconMenuClosed } from 'react-icons/md';\nimport { MdArrowBack as IconMenuOpened } from 'react-icons/md';\nimport { MdVisibility as IconShowLog } from 'react-icons/md';\n\nimport SideMenu from './SideMenu';\nimport Log from './Log';\nimport Editor from './Editor';\nimport DialogError from './Dialogs/Error';\nimport DialogImportFile from './Dialogs/ImportFile';\nimport BlocklyEditor from './Components/BlocklyEditor';\nimport { ContextWrapper } from './Components/RulesEditor/components/ContextWrapper';\n\nconst styles = theme => ({\n root: {\n flexGrow: 1,\n display: 'flex',\n width: '100%',\n height: '100%'\n },\n menuDiv: {\n overflow: 'hidden',\n },\n splitterDivs: {\n '&>div': {\n overflow: 'hidden',\n width: '100%',\n height: '100%',\n },\n '& .layout-splitter': {\n background: theme.palette.mode === 'dark' ? '#595858' : '#ccc;'\n }\n },\n mainDiv: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n /*appBarWithMenu: {\n width: `calc(100% - ${Theme.menu.width}px)`,\n marginLeft: Theme.menu.width,\n },\n appBarWithoutMenu: {\n width: `100%`,\n marginLeft: 0,\n },*/\n content: {\n width: '100%',\n height: '100%',\n backgroundColor: theme.palette.background && theme.palette.background.default,\n position: 'relative'\n },\n splitterDivWithMenu: {\n width: `calc(100% - 300px)`,\n height: '100%'\n },\n menuDivWithoutMenu: {\n '&>div:first-child': {\n display: 'none'\n },\n '&>.layout-splitter': {\n display: 'none'\n },\n },\n progress: {\n margin: 100\n },\n menuOpenCloseButton: {\n position: 'absolute',\n left: 0,\n borderRadius: '0 5px 5px 0',\n top: 6,\n paddingTop: 8,\n cursor: 'pointer',\n zIndex: 1,\n height: 25,\n width: 20,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 3,\n '&:hover': {\n color: 'white'\n }\n },\n showLogButton: {\n position: 'absolute',\n right: 3,\n borderRadius: '5px 5px 0 0',\n bottom: 0,\n paddingTop: 3,\n cursor: 'pointer',\n zIndex: 10,\n height: 20,\n width: 25,\n background: theme.palette.secondary.main,\n color: theme.palette.primary.main,\n paddingLeft: 8,\n '&:hover': {\n color: 'white'\n }\n }\n});\n\nclass App extends GenericApp {\n constructor(props) {\n super(props, {\n translations: {\n 'en': require('./i18n/en'),\n 'de': require('./i18n/de'),\n 'es': require('./i18n/es'),\n 'fr': require('./i18n/fr'),\n 'it': require('./i18n/it'),\n 'nl': require('./i18n/nl'),\n 'pl': require('./i18n/pl'),\n 'pt': require('./i18n/pt'),\n 'ru': require('./i18n/ru'),\n 'zh-cn': require('./i18n/zh-cn'),\n },\n bottomButtons: false,\n socket: {\n autoSubscribeLog: true,\n },\n sentryDSN: window.sentryDSN,\n });\n\n // this.logIndex = 0;\n this.logSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.logSize')) || 150 : 150;\n this.menuSize = window.localStorage ? parseFloat(window.localStorage.getItem('App.menuSize')) || 500 : 500;\n this.hosts = [];\n this.importFile = null;\n this.scripts = {};\n\n window.alert = message => {\n console.error(message);\n this.showError(message.toString());\n };\n }\n\n onScriptsChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n if (id.startsWith('script.js.')) {\n if (obj) {\n if (JSON.stringify(this.scripts[id]) !== JSON.stringify(obj)) {\n this.scripts[id] = obj;\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n } else if (this.scripts[id]) {\n delete this.scripts[id];\n changed = true;\n newState.scriptsHash = this.state.scriptsHash + 1;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onInstanceChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.match(/^system\\.adapter\\.[-_\\w\\d]+\\$/)) {\n // update instances\n if (id.startsWith(`system.adapter.${this.adapterName}.`)) {\n if (obj && obj.type === 'instance') {\n if (!this.state.instances.includes(id)) {\n newState.instances = [...this.state.instances];\n newState.instances.push(id);\n newState.instances.sort();\n changed = true;\n // request alive\n this.socket.subscribeState(obj._id + '.alive', this.onInstanceAliveChange);\n }\n } else if (!obj && this.state.instances.includes(id)) {\n this.socket.unsubscribeState(id + '.alive', this.onInstanceAliveChange);\n newState.instances = [...this.state.instances];\n const pos = newState.instances.indexOf(id);\n newState.instances.splice(pos, 1);\n changed = true;\n }\n }\n\n if (obj && obj[id].common && obj[id].common.blockly) {\n this.confirmCallback = result => result && window.location.reload();\n newState.confirm = I18n.t('Some blocks were updated. Reload admin?');\n changed = true;\n }\n }\n\n changed && this.setState(newState);\n };\n\n onHostChanged = (id, obj) => {\n if (!id) {\n return;\n }\n let changed = false;\n const newState = {};\n\n if (id.startsWith('system.host.')) {\n if (obj && obj.type === 'host') {\n if (!this.hosts.includes(id)) {\n this.hosts.push(id);\n this.hosts.sort();\n }\n } else if (!obj && this.hosts.includes(id)) {\n const pos = this.hosts.indexOf(id);\n this.hosts.splice(pos, 1);\n }\n }\n\n changed && this.setState(newState);\n };\n\n onConnectionReady() {\n window.systemLang = this.socket.systemLang;\n this.setState({\n ready: false,\n updateScripts: 0,\n scriptsHash: 0,\n instances: [],\n updating: false,\n resizing: false,\n selected: null,\n logMessage: {},\n editing: [],\n menuOpened: window.localStorage.getItem('App.menuOpened') !== 'false',\n menuSelectId: '',\n expertMode: window.localStorage.getItem('App.expertMode') === 'true',\n logHorzLayout: window.localStorage.getItem('App.logHorzLayout') === 'true',\n runningInstances: {},\n confirm: '',\n importFile: false,\n message: '',\n searchText: '',\n hideLog: window.localStorage.getItem('App.hideLog') === 'true',\n debugMode: false,\n debugInstance: null,\n });\n\n const newState = {};\n\n // load instances & scripts\n // Read all instances\n this.subscribeOnInstances()\n .then(result => {\n newState.instances = result.instances;\n newState.runningInstances = result.runningInstances;\n\n return this.readAdaptersWithBlockly();\n })\n .then(() => this.socket.getHosts())\n .then(hosts => {\n this.hosts = hosts.map(obj => obj._id);\n // load all scripts\n return this.readAllScripts();\n })\n .then(scripts => {\n if (window.localStorage && window.localStorage.getItem('App.expertMode') !== 'true' && window.localStorage.getItem('App.expertMode') !== 'false') {\n // detect if some global scripts exists\n if (Object.keys(scripts).find(id => id.startsWith('script.js.global.') && scripts.type === 'script')) {\n newState.expertMode = true;\n }\n }\n this.scripts = scripts;\n\n let scriptsHash = this.state.scriptsHash;\n if (this.compareScripts(scripts)) {\n scriptsHash++;\n }\n newState.scriptsHash = scriptsHash;\n newState.ready = true;\n this.socket.subscribeObject('script.*', this.onScriptsChanged);\n this.socket.subscribeObject('system.adapter.*', this.onInstanceChanged);\n this.socket.subscribeObject('system.host.*', this.onHostChanged);\n\n this.setState(newState);\n });\n }\n\n subscribeOnInstances() {\n return this.socket.getAdapterInstances(this.adapterName)\n .then(instancesArray => {\n const instances = instancesArray.map(obj => parseInt(obj._id.split('.').pop())).sort();\n const runningInstances = {};\n instances.forEach(id => runningInstances[`system.adapter.${this.adapterName}.${id}`] = false);\n\n const promises = [];\n\n // subscribe on instances\n instances.forEach(instance => {\n const instanceId = `system.adapter.${this.adapterName}.${instance}`;\n const id = `${instanceId}.alive`;\n promises.push(this.socket.getState(id)\n .then(state => {\n runningInstances[instanceId] = state ? state.val : false;\n this.socket.subscribeState(id, this.onInstanceAliveChange);\n }));\n });\n\n return Promise.all(promises)\n .then(() => ({ instances, runningInstances }));\n })\n }\n\n readAllScripts() {\n return this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'channel')\n .then(folders =>\n this.socket.getObjectView('script.js.', 'script.js.\\u9999', 'script')\n .then(scripts => {\n Object.keys(scripts).forEach(id => folders[id] = scripts[id]);\n return folders;\n }));\n }\n\n readAdaptersWithBlockly() {\n return this.socket.getObjectView('system.adapter.', 'system.adapter.\\u9999', 'adapter')\n .then(adapters =>\n new Promise(resolve =>\n BlocklyEditor.loadCustomBlockly(adapters, () => resolve())));\n }\n\n onInstanceAliveChange = (id, state) => {\n if (id) {\n id = id && id.substring(0, id.length - 6); // - .alive\n\n if (this.state.runningInstances[id] !== (state ? state.val : false)) {\n const runningInstances = JSON.parse(JSON.stringify(this.state.runningInstances));\n runningInstances[id] = state ? state.val : false;\n this.setState({ runningInstances });\n }\n }\n };\n\n onToggleExpertMode(expertMode) {\n this.onExpertModeChange(expertMode);\n }\n\n compareScripts(newScripts) {\n const oldIds = Object.keys(this.scripts);\n const newIds = Object.keys(newScripts);\n if (oldIds.length !== newIds.length) {\n this.scripts = this.newScripts;\n return true;\n }\n if (JSON.stringify(oldIds) !== JSON.stringify(newIds)) {\n this.scripts = this.newScripts;\n return true;\n }\n for (let i = 0; i < oldIds.length; i++) {\n let oldScript = this.scripts[oldIds[i]].common;\n let newScript = newScripts[oldIds[i]].common;\n if (oldScript.name !== newScript.name) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engine !== newScript.engine) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.engineType !== newScript.engineType) {\n this.scripts = this.newScripts;\n return true;\n }\n if (oldScript.enabled !== newScript.enabled) {\n this.scripts = this.newScripts;\n return true;\n }\n }\n }\n\n onRename(oldId, newId, newName, newInstance) {\n if (newId.trim().endsWith('.')) {\n newId = newId.replace(/\\.\\s*$/, '_');\n }\n console.log(`Rename ${oldId} => ${newId}`);\n let promise;\n this.setState({ updating: true });\n\n // Rename script.js.common.Skript_1 => script.js.common.New folder.Skript_1\n\n if (this.scripts[oldId] && this.scripts[oldId].type === 'script') {\n const common = JSON.parse(JSON.stringify(this.scripts[oldId].common));\n common.name = newName || common.name;\n if (newInstance !== undefined) {\n common.engine = 'system.adapter.javascript.' + newInstance;\n }\n // Check if the script is not a children of other script\n const parts = newId.split('.');\n parts.pop();\n const parentID = parts.join('.');\n\n if (this.scripts[parentID] && this.scripts[parentID].type === 'script') {\n parts.pop();\n newId = parts.join('.') + '.' + newId.split('.').pop();\n }\n\n promise = this.updateScript(oldId, newId, common);\n } else {\n promise = this.renameGroup(oldId, newId, newName);\n }\n\n promise\n .then(() => this.setState({ updating: false }))\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n\n renameGroup(id, newId, newName, _list) {\n if (!_list) {\n _list = [];\n\n // collect all elements to rename\n // find all elements\n _list = Object.keys(this.scripts).filter(_id => _id.startsWith(id + '.'));\n\n return this.socket.getObject(id)\n .then(obj => {\n obj = obj || { common: {} };\n obj.common.name = newName || obj.common.name || id.split('.').pop();\n obj._id = newId;\n\n this.socket.delObject(id)\n .catch(() => { })\n .then(() => this.socket.setObject(newId, obj))\n .then(() => this.renameGroup(id, newId, newName, _list))\n .catch(e => {\n console.log(e);\n });\n })\n .catch(e => {\n console.log(e);\n const obj = {\n _id: newId,\n type: 'channel',\n common: {\n name: newName || id.split('.').pop(),\n expert: true\n },\n native: {}\n };\n // may be it is virtual folder\n return this.socket.setObject(newId, obj)\n .then(() => this.renameGroup(id, newId, newName, _list));\n });\n } else if (_list.length) {\n let nId = _list.pop();\n\n return this.socket.getObject(nId)\n .then(obj =>\n this.socket.delObject(nId)\n .catch(() => { })\n .then(() => {\n nId = newId + nId.substring(id.length);\n obj._id = nId;\n obj.common = obj.common || {};\n obj.common.expert = true;\n return this.socket.setObject(nId, obj);\n })\n .then(() => this.renameGroup(id, newId, newName, _list))\n );\n } else {\n return Promise.resolve();\n }\n }\n\n onUpdateScript(id, common) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n this.updateScript(id, id, common)\n .then(() => { })\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n onSelect(selected) {\n if (this.scripts[selected] && this.scripts[selected].common && this.scripts[selected].type === 'script') {\n this.setState({ selected, menuSelectId: selected }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300);\n }\n }\n\n onExpertModeChange(expertMode) {\n if (this.state.expertMode !== expertMode) {\n window.localStorage && window.localStorage.setItem('App.expertMode', expertMode ? 'true' : 'false');\n this.setState({ expertMode });\n }\n }\n\n showError(err) {\n this.setState({ errorText: err ? err.toString() : '' });\n }\n\n showMessage(message) {\n this.setState({ message: message ? message.toString() : '' });\n }\n\n onDelete(id) {\n this.socket.delObject(id)\n .then(() => { })\n .catch(err =>\n this.showError(err));\n }\n\n onEdit(id) {\n if (this.state.selected !== id) {\n this.setState({ selected: id });\n }\n }\n\n onAddNew(id, name, isFolder, instance, type, source) {\n const reg = new RegExp(`^${id}\\\\.`);\n\n if (Object.keys(this.scripts).find(_id => id === _id || reg.test(id))) {\n return this.showError(I18n.t('Yet exists!'));\n }\n\n if (isFolder) {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true\n },\n type: 'channel'\n })\n .then(() =>\n setTimeout(() => this.setState({ menuSelectId: id }, () =>\n setTimeout(() => this.setState({ menuSelectId: '' })), 300), 1000))\n .catch(err => this.showError(err));\n } else {\n this.socket.setObject(id, {\n common: {\n name,\n expert: true,\n engineType: type,\n engine: 'system.adapter.javascript.' + (instance || 0),\n source: source || '',\n debug: false,\n verbose: false\n },\n type: 'script'\n })\n .then(() => setTimeout(() => this.onSelect(id), 1000))\n .catch(err => this.showError(err));\n }\n }\n\n updateScript(oldId, newId, newCommon) {\n return this.socket.getObject(oldId)\n .then(_obj => {\n const obj = { common: {} };\n\n if (newCommon.engine !== undefined) obj.common.engine = newCommon.engine;\n if (newCommon.enabled !== undefined) obj.common.enabled = newCommon.enabled;\n if (newCommon.source !== undefined) obj.common.source = newCommon.source;\n if (newCommon.debug !== undefined) obj.common.debug = newCommon.debug;\n if (newCommon.verbose !== undefined) obj.common.verbose = newCommon.verbose;\n\n obj.from = 'system.adapter.admin.0'; // we must distinguish between GUI(admin.0) and disk(javascript.0)\n\n if (oldId === newId && _obj && _obj.common && newCommon.name === _obj.common.name) {\n if (!newCommon.engineType || newCommon.engineType !== _obj.common.engineType) {\n if (newCommon.engineType !== undefined) {\n obj.common.engineType = newCommon.engineType || 'Javascript/js';\n }\n }\n obj.type = 'script';\n return this.socket.extendObject(oldId, obj);\n } else {\n // let prefix;\n\n // let parts = _obj.common.engineType.split('/');\n\n // prefix = 'script.' + (parts[1] || parts[0]) + '.';\n\n if (_obj && _obj.common) {\n _obj.common.engineType = newCommon.engineType || _obj.common.engineType || 'Javascript/js';\n return this.socket.delObject(oldId)\n .then(() => {\n if (obj.common.engine !== undefined) _obj.common.engine = obj.common.engine;\n if (obj.common.enabled !== undefined) _obj.common.enabled = obj.common.enabled;\n if (obj.common.source !== undefined) _obj.common.source = obj.common.source;\n if (obj.common.name !== undefined) _obj.common.name = obj.common.name;\n if (obj.common.debug !== undefined) _obj.common.debug = obj.common.debug;\n if (obj.common.verbose !== undefined) _obj.common.verbose = obj.common.verbose;\n\n delete _obj._rev;\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n this.socket.setObject(newId, _obj);\n });\n } else {\n _obj = obj;\n }\n\n // Name must always exist\n _obj.common.name = newCommon.name;\n _obj.common.expert = true;\n _obj.type = 'script';\n _obj._id = newId; // prefix + newCommon.name.replace(/[\\s\"']/g, '_');\n\n return this.socket.setObject(newId, _obj);\n }\n });\n }\n\n onEnableDisable(id, enabled) {\n if (this.scripts[id] && this.scripts[id].type === 'script') {\n const common = this.scripts[id].common;\n common.enabled = enabled;\n common.expert = true;\n this.updateScript(id, id, common)\n .catch(err => err !== 'canceled' && this.showError(err));\n }\n }\n\n getLiveHost(cb, _list) {\n if (!_list) {\n _list = this.hosts ? [...this.hosts] : [];\n }\n\n if (_list.length) {\n const id = _list.shift();\n this.socket.getState(id + '.alive')\n .then(state => {\n if (state && state.val) {\n cb(id);\n } else {\n setTimeout(() => this.getLiveHost(cb, _list));\n }\n });\n } else {\n cb();\n }\n }\n\n onExport() {\n this.getLiveHost(host => {\n if (!host) {\n return this.showError(I18n.t('No active host found'));\n }\n\n const d = new Date();\n let date = d.getFullYear();\n let m = d.getMonth() + 1;\n if (m < 10) {\n m = '0' + m;\n }\n date += '-' + m;\n m = d.getDate();\n if (m < 10) {\n m = '0' + m;\n }\n date += '-' + m + '-';\n\n this.socket.getRawSocket().emit('sendToHost', host, 'readObjectsAsZip', {\n adapter: 'javascript',\n id: 'script.js',\n link: date + 'scripts.zip' // request link to file and not the data itself\n }, data => {\n if (typeof data === 'string') {\n // it is a link to created file\n const a = document.createElement('a');\n // the data is \"system.host.HOST.zip.2020-01-26-scripts.zip\"\n const parts = data.split('.zip.');\n a.href = '/zip/' + parts[0] + '/' + parts[1];\n document.body.appendChild(a);\n a.click();\n a.remove();\n } else {\n data.error && this.showError(data.error);\n if (data.data) {\n const a = document.createElement('a');\n a.href = 'data: application/zip;base64,' + data.data;\n a.download = date + 'scripts.zip';\n document.body.appendChild(a);\n a.click();\n a.remove();\n }\n }\n });\n });\n }\n\n onImport(data) {\n this.importFile = data;\n if (data) {\n this.confirmCallback = this.onImportConfirmed.bind(this);\n this.setState({ importFile: false, confirm: I18n.t('Existing scripts will be overwritten.') });\n } else {\n this.setState({ importFile: false });\n }\n }\n\n onImportConfirmed(ok) {\n let data = this.importFile;\n this.importFile = null;\n if (ok && data) {\n data = data.split(',')[1];\n this.getLiveHost(host => {\n if (!host) {\n this.showError(I18n.t('No active host found'));\n return;\n }\n this.socket.getRawSocket().emit('sendToHost', host, 'writeObjectsAsZip', {\n data: data,\n adapter: 'javascript',\n id: 'script.js'\n }, data => {\n if (data === 'permissionError') {\n this.showError(I18n.t(data));\n } else if (!data || data.error) {\n this.showError(data ? I18n.t(data.error) : I18n.t('Unknown error'));\n } else {\n this.showMessage(I18n.t('Done'));\n }\n });\n });\n }\n }\n\n toggleLogLayout() {\n window.localStorage && window.localStorage.setItem('App.logHorzLayout', this.state.logHorzLayout ? 'false' : 'true');\n this.setState({ logHorzLayout: !this.state.logHorzLayout });\n }\n\n renderEditor() {\n const isAnyRulesExists = Object.keys(this.scripts).reduce((sum, id) =>\n sum + (this.scripts[id].common.engineType === 'Rules' ? 1 : 0), 0);\n\n return <Editor\n key=\"editor\"\n debugMode={this.state.debugMode}\n onDebugModeChange={value => {\n if (!value) {\n this.setState({debugMode: false, debugInstance: null});\n } else {\n this.setState({debugMode: true});\n }\n }}\n visible={!this.state.resizing}\n socket={this.socket}\n adapterName={this.adapterName}\n onLocate={menuSelectId => this.setState({ menuSelectId })}\n runningInstances={this.state.runningInstances}\n menuOpened={this.state.menuOpened}\n searchText={this.state.searchText}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n onChange={(id, common) => this.onUpdateScript(id, common)}\n isAnyRulesExists={isAnyRulesExists}\n debugInstance={this.state.debugInstance}\n onSelectedChange={(id, editing) => {\n const newState = {};\n let changed = false;\n if (id !== this.state.selected) {\n changed = true;\n newState.selected = id;\n }\n if (JSON.stringify(editing) !== JSON.stringify(this.state.editing)) {\n changed = true;\n newState.editing = JSON.parse(JSON.stringify(editing));\n }\n changed && this.setState(newState);\n }}\n onRestart={id => this.socket.extendObject(id, { common: { enabled: true } })}\n selected={this.state.selected && this.scripts[this.state.selected] && this.scripts[this.state.selected].type === 'script' ? this.state.selected : ''}\n objects={this.scripts}\n instances={this.state.instances}\n />;\n }\n\n showLogButton() {\n return <div\n key=\"showLog\"\n title={I18n.t('Show logs')}\n className={this.props.classes.showLogButton}\n onClick={() => {\n window.localStorage.setItem('App.hideLog', 'false');\n this.setState({ hideLog: false, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n >\n <IconShowLog />\n </div>;\n }\n\n renderErrorDialog() {\n return this.state.errorText ?\n <DialogError\n key=\"dialogError\"\n onClose={() => this.setState({ errorText: '' })}\n text={this.state.errorText}\n /> :\n null;\n }\n\n renderMain() {\n const { classes } = this.props;\n return [\n this.state.message ? <DialogMessage key=\"dialogMessage\" onClose={() => this.setState({ message: '' })} text={this.state.message} /> : null,\n this.renderErrorDialog(),\n this.state.importFile ? <DialogImportFile key=\"dialogImportFile\" onClose={data => this.onImport(data)} /> : null,\n this.state.confirm ? <DialogConfirm\n key=\"dialogConfirm\"\n onClose={result => {\n this.state.confirm && this.setState({ confirm: '' });\n this.confirmCallback && this.confirmCallback(result);\n this.confirmCallback = null;\n }}\n text={this.state.confirm} /> : null,\n <div className={classes.content + ' iobVerticalSplitter'} key=\"main\">\n <div key=\"closeMenu\" className={classes.menuOpenCloseButton} onClick={() => {\n window.localStorage.setItem('App.menuOpened', this.state.menuOpened ? 'false' : 'true');\n this.setState({ menuOpened: !this.state.menuOpened, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}>\n {this.state.menuOpened ? <IconMenuOpened /> : <IconMenuClosed />}\n </div>\n <SplitterLayout\n key=\"splitterLayout\"\n vertical={!this.state.logHorzLayout}\n primaryMinSize={100}\n secondaryInitialSize={this.state.hideLog ? 0 : this.logSize}\n //customClassName={classes.menuDiv + ' ' + classes.splitterDivWithoutMenu}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.state.hideLog ? 0 : this.logSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.logSize', this.logSize.toString());\n }}\n >\n <>\n {this.renderEditor()}\n {!this.state.debugMode && this.state.hideLog && this.showLogButton()}\n </>\n {!this.state.debugMode && !this.state.hideLog && <Log\n key=\"log\"\n verticalLayout={!this.state.logHorzLayout}\n onLayoutChange={() => this.toggleLogLayout()}\n editing={this.state.editing}\n socket={this.socket}\n selected={this.state.selected}\n onHideLog={() => {\n window.localStorage.setItem('App.hideLog', 'true');\n this.setState({ hideLog: true, resizing: true });\n setTimeout(() => this.setState({ resizing: false }), 300);\n }}\n />}\n </SplitterLayout>\n </div>,\n ];\n }\n\n render() {\n const { classes } = this.props;\n\n if (!this.state.ready) {\n // return (<CircularProgress className={classes.progress} size={50} />);\n return <Loader theme={this.state.themeType} />;\n }\n\n return <div className={classes.root}>\n <ContextWrapper socket={this.socket}>\n <SplitterLayout\n key=\"menuSplitter\"\n vertical={false}\n primaryMinSize={300}\n primaryIndex={1}\n secondaryMinSize={300}\n secondaryInitialSize={this.menuSize}\n customClassName={classes.splitterDivs + ' ' + (!this.state.menuOpened ? classes.menuDivWithoutMenu : '')}\n onDragStart={() => this.setState({ resizing: true })}\n onSecondaryPaneSizeChange={size => this.menuSize = parseFloat(size)}\n onDragEnd={() => {\n this.setState({ resizing: false });\n window.localStorage.setItem('App.menuSize', this.menuSize.toString());\n }}\n >\n <div className={classes.mainDiv} key=\"menu\">\n <SideMenu\n debugMode={this.state.debugMode}\n onDebugInstance={data => {\n\n this.setState({debugInstance: data, debugMode: !!data});\n }}\n key=\"sidemenu\"\n scripts={this.scripts}\n scriptsHash={this.state.scriptsHash}\n instances={this.state.instances}\n update={this.state.updateScripts}\n onRename={this.onRename.bind(this)}\n onSelect={this.onSelect.bind(this)}\n socket={this.socket}\n selectId={this.state.menuSelectId}\n onEdit={this.onEdit.bind(this)}\n expertMode={this.state.expertMode}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n onThemeChange={themeName => {\n Utils.setThemeName(themeName);\n const themeType = Utils.getThemeType(themeName);\n this.setState({ themeName, themeType }, () => this.props.onThemeChange(themeName));\n }}\n runningInstances={this.state.runningInstances}\n onExpertModeChange={this.onExpertModeChange.bind(this)}\n onDelete={this.onDelete.bind(this)}\n onAddNew={this.onAddNew.bind(this)}\n onEnableDisable={this.onEnableDisable.bind(this)}\n onExport={this.onExport.bind(this)}\n width={this.menuSize}\n onImport={() => this.setState({ importFile: true })}\n onSearch={searchText => this.setState({ searchText })}\n />\n </div>\n {this.renderMain()}\n </SplitterLayout>\n </ContextWrapper>\n </div>;\n }\n}\n\nexport default withStyles(styles)(App);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { StylesProvider, createGenerateClassName } from '@mui/styles';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport pgk from '../package.json';\nimport theme from '@iobroker/adapter-react-v5/Theme';\n// import Utils from '@iobroker/adapter-react-v5/Components/Utils';\nimport { Utils } from '@iobroker/adapter-react-v5';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\nimport GenericBlock from './Components/RulesEditor/components/GenericBlock/index.jsx'\n\nwindow.GenericBlock = GenericBlock;\n\nwindow.adapterName = 'javascript';\nwindow.sentryDSN = 'https://504499a725eb4898930d3b9e9da95740@sentry.iobroker.net/56';\n\nlet themeName = Utils.getThemeName();\n\nconsole.log('iobroker.' + window.adapterName + '@' + pgk.version + ' using theme \"' + themeName + '\"');\n\nconst generateClassName = createGenerateClassName({\n productionPrefix: 'iob',\n});\n\nfunction build() {\n const isMobile = window.innerWidth < 600;\n const container = document.getElementById('root');\n const root = createRoot(container);\n return root.render(<StylesProvider generateClassName={generateClassName}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme(themeName)}>\n <DndProvider backend={isMobile ? TouchBackend : HTML5Backend}>\n <App onThemeChange={_theme => {\n themeName = _theme;\n build();\n }} />\n </DndProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n </StylesProvider>);\n}\n\nbuild();\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n\n/*\n improved VSCode editor. This has to be down here, or we get conflicts\n between loader.js and require calls in jQuery and other loaded modules\n*/\n// loader must be after socket.io, elsewise there is no window.io\nconst loadDynamicScript = window.loadDynamicScript;\nloadDynamicScript(window.location.port === '3000' ? window.location.protocol + '//' + window.location.hostname + ':8081/lib/js/socket.io.js' : './../../lib/js/socket.io.js', function () {\n loadDynamicScript('vs/loader.js', function () {\n loadDynamicScript('vs/configure.js', function () {\n typeof window.socketLoadedHandler === 'function' && window.socketLoadedHandler();\n });\n });\n});"],"sourceRoot":""}
|