iobroker.javascript 5.2.13 → 5.2.14

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["Components/RulesEditor/components/CurrentItem/style.module.scss","Components/RulesEditor/components/GenericBlock/style.module.scss","Components/RulesEditor/components/CustomDate/style.module.scss","Components/RulesEditor/style.module.scss","Components/RulesEditor/components/CardMenu/style.module.scss","Components/RulesEditor/components/CustomButton/style.module.scss","Components/RulesEditor/components/CustomInput/style.module.scss","Components/RulesEditor/components/CustomModal/style.module.scss","Components/RulesEditor/components/CustomSlider/style.module.scss","Components/RulesEditor/components/DragWrapper/style.module.scss","Components/RulesEditor/components/HamburgerMenu/hamburgerMenu.module.scss","Components/RulesEditor/components/CustomCheckbox/style.module.scss","Components/RulesEditor/components/CustomSelect/style.module.scss","Components/RulesEditor/components/CustomSwitch/style.module.scss","Components/RulesEditor/components/CustomTime/style.module.scss","Components/RulesEditor/components/ContentBlockItems/style.module.scss","assets/js.png","assets/blockly.png","assets/typescript.png","assets/rules.png","Dialogs/Rename.js","Dialogs/Delete.js","Dialogs/AddNewScript.js","assets/tileJS.png","assets/tileTS.png","assets/tileBlockly.png","assets/tileRules.png","Dialogs/New.js","Dialogs/Error.js","Dialogs/AdapterDebug.js","SideMenu.js","Log.js","Components/ScriptEditorVanilaMonaco.js","Dialogs/Export.js","Dialogs/Import.js","Components/BlocklyEditor.js","Dialogs/ScriptEditor.js","Components/RulesEditor/helpers/MaterialDynamicIcon.js","Components/RulesEditor/components/CardMenu/index.js","Components/RulesEditor/helpers/deepCopy.js","Components/RulesEditor/helpers/filterElement.js","Components/RulesEditor/components/CustomButton/index.js","Components/RulesEditor/components/CustomCheckbox/index.js","Components/RulesEditor/components/CustomInput/index.js","Components/RulesEditor/components/CustomInstance/index.js","Components/RulesEditor/components/CustomModal/index.js","Components/RulesEditor/components/CustomSelect/index.js","Components/RulesEditor/components/CustomSlider/index.js","Components/RulesEditor/components/CustomSwitch/index.js","Components/RulesEditor/components/CustomTime/index.js","Components/RulesEditor/components/CustomDate/index.js","Components/RulesEditor/helpers/utils.js","Components/RulesEditor/helpers/Tour.js","Components/RulesEditor/components/GenericBlock/index.js","Components/RulesEditor/components/Blocks/ActionSayText.js","Components/RulesEditor/components/Blocks/ActionSendEmail.js","Components/RulesEditor/components/Blocks/ActionTelegram.js","Components/RulesEditor/components/Blocks/ActionPushover.js","Components/RulesEditor/components/Blocks/ActionWhatsappcmb.js","Components/RulesEditor/components/Blocks/ActionPushsafer.js","Components/RulesEditor/helpers/Compile.js","Components/RulesEditor/components/Blocks/TriggerScriptSave.js","Components/RulesEditor/components/Blocks/TriggerSchedule.js","Components/RulesEditor/components/Blocks/TriggerState.js","Components/assets/hysteresis.png","Components/RulesEditor/components/Blocks/ConditionState.js","Components/RulesEditor/components/Blocks/ConditionTime.js","Components/RulesEditor/components/Blocks/ConditionAstrological.js","Components/RulesEditor/components/Blocks/ActionSetState.js","Components/RulesEditor/components/Blocks/ActionExec.js","Components/RulesEditor/components/Blocks/ActionHTTPCall.js","Components/RulesEditor/components/Blocks/ActionPrintText.js","Components/RulesEditor/components/Blocks/ActionPause.js","Components/RulesEditor/components/Blocks/ActionFunction.js","Components/RulesEditor/components/Blocks/ActionSetStateDelayed.js","Components/RulesEditor/components/StandardBlocks/index.js","Components/RulesEditor/components/ContextWrapper/index.js","Components/RulesEditor/components/CurrentItem/index.js","Components/RulesEditor/helpers/findElement.js","Components/RulesEditor/components/CustomDragLayer/index.js","Components/RulesEditor/hooks/useStateLocal.js","Components/RulesEditor/helpers/cardSort.js","Components/RulesEditor/components/DragWrapper/index.js","Components/RulesEditor/components/ContentBlockItems/DialogHelp.js","Components/RulesEditor/components/ContentBlockItems/DialogCondition.js","Components/RulesEditor/components/ContentBlockItems/index.js","Components/RulesEditor/components/CardMenu/CustomDragItem.js","Components/RulesEditor/components/HamburgerMenu/index.js","Components/RulesEditor/components/Menu/index.js","Components/RulesEditor/index.js","Components/Debugger/Editor.js","Components/Debugger/Console.js","Components/Debugger/Stack.js","Components/Debugger/index.js","Editor.js","assets/blockly2js.png","assets/rules2js.png","Dialogs/ImportFile.js","App.js","serviceWorker.js","index.js","Components/RulesEditor/components/Menu/style.module.scss"],"names":["module","exports","DialogRename","React","Component","constructor","props","super","handleCancel","this","onClose","handleOk","onRename","oldId","state","id","name","instance","handleChange","setState","getId","isShowInstance","folder","instances","length","prefix","getPrefix","parts","split","pop","join","replace","componentWillReceiveProps","nextProps","render","Dialog","event","reason","maxWidth","fullWidth","open","DialogTitle","I18n","t","DialogContent","noValidate","autoComplete","TextField","style","width","autoFocus","label","value","onKeyPress","ev","key","preventDefault","setTimeout","onChange","e","target","margin","disabled","FormControl","InputLabel","htmlFor","Select","parseInt","inputProps","map","MenuItem","DialogActions","Button","variant","onClick","color","startIcon","withStyles","theme","DialogDelete","onDelete","fontSize","fontWeight","DialogAddNew","type","openHtml","html","lang","getLanguage","includes","window","focus","getJSCard","Card","className","classes","card","CardActionArea","CardMedia","media","image","title","CardContent","complexity","text","CardActions","size","getTSCard","getBlocklyCard","getRulesCard","textAlign","display","height","fontStyle","marginBottom","spacing","DialogNew","onAdd","existingItems","indexOf","error","parent","trim","helperText","minWidth","parents","splice","names","forEach","n","i","el","find","item","push","DialogError","console","log","titleBackground","root","titleColor","DialogContentText","background","palette","main","contrastText","DialogAdapterDebug","adapterToDebug","enabled","socket","getObject","then","obj","common","setObject","_id","onDebug","jsInstance","filter","localStorage","getItem","showAskForStop","jsInstanceHost","componentDidMount","getAdapterInstances","onlyWWW","adapter","host","icon","sort","a","b","jsInstanceObj","startsWith","renderJavascriptList","js","Grid","List","component","ListItem","button","selected","ListItemIcon","src","alt","ListItemText","primary","renderInstances","toLowerCase","onDoubleClick","container","direction","Input","filterWithButton","placeholder","setItem","endAdornment","InputAdornment","position","IconButton","buttonIcon","marginRight","marginTop","COLOR_RUN","green","COLOR_PROBLEM","yellow","COLOR_PAUSE","red","ROOT_ID","COMMON_ID","GLOBAL_ID","NARROW_WIDTH","SELECTED_STYLE","images","ImgBlockly","ImgJS","def","ImgRules","ImgTypeScript","getObjectName","en","toString","prepareList","data","result","depth","index","ids","Object","keys","engineType","engine","modified","it","idA","idB","parentIndex","Droppable","onDrop","isOver","isOverAny","drop","useDrop","accept","undefined","collect","monitor","shallow","ref","clsx","children","Draggable","opacity","drag","useDrag","isDragging","transform","SideDrawer","expanded","JSON","parse","inputRef","createRef","listItems","scripts","problems","reorder","themeName","creatingScript","creatingFolder","copingScript","renaming","deleting","choosingType","errorText","menuOpened","menuAnchorEl","searchMode","expertMode","searchText","typeFilter","statusFilter","runningInstances","scriptsHash","showAdapterDebug","newExp","ensureSelectedIsVisible","filterTimer","isAllZeroInstances","getIsAllZeroInstances","problemsTimer","onProblemUpdatedBound","onProblemUpdated","bind","readProblems","cb","tasks","shift","match","that","substring","getState","err","subscribeState","componentWillUnmount","unsubscribeState","stringify","changed","val","pos","isSearchEnabled","objects","newState","filteredPartly","found","source","lastIndexOf","filtered","filterList","filterListStatic","ensureSelectedIsVisibleStatic","nState","assign","getIsAllZeroInstancesStatic","selectId","saveExpanded","showError","onToggle","stopPropagation","renderItemButtonsOnEnd","iconButtons","debugMode","iconButtonsDisabled","onEnableDisable","onEdit","Promise","resolve","getTextStyle","whiteSpace","padding","overflow","flex","onDblClick","isFilteredOut","renderListItem","childrenFiltered","depthPx","marginLeft","cursor","isExpanded","iconClass","iconStyle","folderIcon","folderIconReorder","folderIconNoReorder","scriptIcon","scriptIconReorder","scriptIconNoReorder","childrenCount","script","scriptReorder","folderReorder","listItemIcon","ListItemSecondaryAction","onDragFinish","newId","renderOneItem","items","dragging","element","reactChildren","renderAllItems","dense","disablePadding","mainList","onAddNew","onCopy","onAddNewFolder","getUniqueName","copyId","word","m","getUniqueFolderName","onCloseMenu","menuAnchorFilterEl","getFilterBadge","filterIcon","getMainMenu","selectedItem","Menu","anchorEl","PaperProps","maxHeight","MENU_ITEM_HEIGHT","iconDropdownMenu","onExpertModeChange","onExport","onImport","onThemeChange","newThemeName","getToolbarButtons","RootRef","rootRef","toolbarSearch","clearTimeout","onSearch","toolbarButtons","float","mini","currentTarget","getFolders","folders","onCollapseAll","onExpandAll","getBottomButtons","footerButtons","Blockly","footerButtonsRight","getAdapterDebugDialog","onDebugInstance","renamingItem","copingItem","Drawer","menu","paper","drawerPaper","anchor","toolbar","Divider","backend","HTML5Backend","innerMenu","footer","newName","newInstance","lineHeight","paddingRight","iconOnTheRight","right","top","overflowX","overflowY","borderRadius","userSelect","transitionDuration","transitionProperty","paddingTop","paddingBottom","paddingLeft","expandButton","backgroundColor","getTimeString","d","getHours","getMinutes","getSeconds","getMilliseconds","gText","Log","logHandler","message","allLines","lines","editing","generateLine","severity","date","Date","ts","ms","toLocaleString","goBottom","lastIndex","messagesEnd","trTime","trSeverity","substr","scrollToBottom","current","scrollIntoView","behavior","registerLogHandler","unregisterLogHandler","componentDidUpdate","hasOwnProperty","str","document","createElement","body","appendChild","select","execCommand","removeChild","copyToClipboard","clearLog","renderLogList","logBoxInner","table","clear","logBox","toolbox","onLayoutChange","layoutIcon","verticalLayout","onHideLog","verticalAlign","info","warn","debug","silly","fontFamily","boxShadow","ScriptEditor","isDark","language","readOnly","alive","check","typingsLoaded","runningInstancesStr","monacoDiv","editor","monaco","insert","originalCode","code","typings","lastSearch","waitForMonaco","monacoCounter","loadTypings","scriptAdapterInstance","sendTo","setTypeCheck","setEditorTypings","onRegisterSelect","getModel","getValueInRange","getSelection","compilerOptions","languages","typescript","typescriptDefaults","ScriptTarget","ES2015","allowJs","checkJs","noLib","lib","useUnknownInCatchVariables","moduleResolution","ModuleResolutionKind","NodeJs","setCompilerOptions","create","lineNumbers","scrollBeyondLastLine","automaticLayout","glyphMargin","breakpoints","onDidChangeModelContent","getValue","addCommand","KeyMod","CtrlCmd","KeyCode","KEY_S","onForceSave","highlightText","location","showDecorators","options","selectOnLineNumbers","setEditorOptions","setValue","onToggleBreakpoint","onMouseDown","detail","glyphMarginLeft","lineNumber","setEditorLanguage","updateOptions","lineWrap","wordWrap","typeCheck","setTheme","dispose","model","uri","path","filenameWithoutExtension","extension","newLanguage","newModel","createModel","Uri","from","setModel","noSemanticValidation","noSyntaxValidation","setDiagnosticsOptions","currentScriptName","isGlobalScript","test","partialDeclarationsPath","wantedTypings","filePath","content","setExtraLibs","addExtraLib","existingLibs","getExtraLibs","insertTextIntoEditor","selection","range","Range","startLineNumber","startColumn","endLineNumber","endColumn","executeEdits","forceMoveMarkers","findMatches","r","setSelection","revealLine","row","getPosition","col","column","decorations","columnNumber","isWholeLine","bp","glyphMarginClassName","deltaDecorations","initNewScript","scrollToLineIfNeeded","ranges","getVisibleRanges","revealLineInCenter","UNSAFE_componentWillReceiveProps","onInserted","newValue","Fab","bottom","zIndex","forceUpdate","DialogExport","popper","getElementById","dialog","textArea","themeType","textAreaLight","Popper","placement","transition","TransitionProps","Fade","timeout","Paper","typography","left","tabIndex","defaultProps","DialogImport","fullHeight","resize","toolboxXml","languageBlocklyLoaded","languageOwnLoaded","toolboxText","scriptsLoaded","searchXml","_result","tagName","attributes","nodeName","innerHTML","innerText","childNodes","node","BlocklyEditor","blockly","blocklyWorkspace","exportText","importText","someSelected","changeTimer","onResizeBind","onResize","lastCommand","blinkBlock","loadLanguages","url","callback","scriptTag","onload","onreadystatechange","onerror","loadJS","loadScripts","adapters","toLoad","parseXml","DOMParser","xmlStr","parseFromString","ActiveXObject","xmlDoc","async","loadXML","searchBlocks","Xml","workspaceToDom","allBlocks","getAllBlocks","searchId","blocks","addSelect","someSelectedTime","now","removeSelect","command","blocklyCheckBlocks","badBlock","blocklyBlinkBlock","exportBlocks","importBlocks","updateBackground","loadCode","fileLang","setAttribute","readyState","getElementsByTagName","fileCustom","svgResize","jsCode2Blockly","xml","l","decodeURIComponent","atob","block","unselect","blocklyRemoveOrphanedShadows","isShadow","connections","getConnections_","conn","j","targetConnection","warningText","blocklyGetUnconnectedBlock","blocklyGetBlockWithWarning","sourceBlock_","INPUT_VALUE","OUTPUT_VALUE","_optional","warning","blocklyCode2JSCode","oneWay","JavaScript","workspaceToCode","dom","domToText","btoa","encodeURIComponent","xmlBlock","blockToDom","dragMode_","DRAG_FREE","deleteNext","xy","getRelativeToSurfaceXY","RTL","x","y","domToPrettyText","onImportBlocks","variables","vars","utils","textToDomDocument","nodes","createVariable","loading","xmlBlocks","textToDom","paste","onBlocklyChanged","ignoreChanges","domToWorkspace","didUpdate","addEventListener","getToolbox","inject","zoom","controls","wheel","startScale","maxScale","minScale","scaleSpeed","move","scrollbars","trashcan","grid","colour","snap","sounds","addChangeListener","masterEvent","Events","UI","CREATE","getElementsByClassName","_originalStyle","stroke","fill","removeEventListener","outerHTML","p1","MSG","CustomBlocks","Words","HUE","_b","renderMessageDialog","renderErrorDialog","renderExportDialog","renderImportDialog","DialogScriptEditor","isReturn","args","argsTitle","adapterName","ICON_CACHE","MaterialDynamicIcon","iconName","setUrl","useState","useEffect","Element","Icons","CardMenu","active","onTouchMove","cls","switchesItem","switchesItemActive","iconTheme","deepCopy","userRules","additionalParameter","newItemsSwitches","filterElement","CustomButton","square","CustomCheckbox","customValue","switchChecked","setSwitchChecked","Checkbox","checked","Boolean","native","styleComponentBlock","memo","CustomInput","multiline","rows","inputText","setInputText","InputProps","SelectMod","borderBottomColor","CustomInstance","multiple","attr","onInstanceHide","setOptions","_options","unshift","renderValue","input","placeContent","title2","FormHelperText","CustomModal","titleButtonApply","titleButtonClose","onApply","textInput","defaultValue","disableEscapeKeyDown","modalDialog","modalWrapper","i18n","CustomSelect","doNotTranslate","doNotTranslate2","v","onlyItem","only","titleShort","sel","valueOnly","CustomSlider","min","max","step","unit","marks","Slider","valueLabelDisplay","mark","CustomSwitch","FormControlLabel","control","Switch","CustomTime","InputLabelProps","shrink","DAYS","CustomDate","month","days","padStart","getName","STEPS","steps","selector","GenericBlock","PureComponent","renderText","frontText","backText","nameBlock","doNotTranslateBack","displayFlex","blockMarginTop","renderSwitch","renderNameText","signature","displayItalic","renderNumber","settings","openCheckbox","visibility","noHelperText","renderColor","renderCheckbox","renderSlider","renderButton","buttonText","findIcon","getSelectIdIcon","catch","renderObjectID","showSelectId","checkReadOnly","lastObjectIdChange","write","Utils","getObjectNameFromObj","imagePrefix","dialogName","getThemeName","statesOnly","onOk","role","states","read","setOnUpdate","renderIconTag","iconTag","tagCard","tagCardArray","onChangeTag","openTagMenu","renderTime","renderSelect","renderInstance","hideAttributes","renderDialog","onShowDialog","iconDialog","renderModalInput","openModal","noTextEdit","renderDate","renderTags","isTourOpen","tourStep","setTourStep","keepMounted","tag","onTagChange","search","newTagCardArray","newSettings","newTagCard","prevProps","acceptedBy","onUpdate","onChangeInput","attribute","_attr","getData","onValueChanged","inputs","helpDialog","notFound","iconThemCard","iconThemCardSelectable","blockName","nameCard","iconHelp","helpText","nameRender","controlMenuTop","renderDebugInfo","renderSpecific","oid","instanceSelectionOptions","instanceSelectionDef","debugMessage","enableSimulation","debugHideTimeout","onDebugMessage","blockId","hideTimeout","context","trigger","oidType","debugInfo","renderDebug","sayitEngines","params","voice","emotion","gender","ename","ssml","ActionSayText","getStaticData","config","volume","getReplacesInText","ActionSendEmail","recipients","subject","ActionTelegram","cachePromises","user","_setUsers","users","userName","firstName","ActionPushover","sound","priority","ActionWhatsappcmb","phone","ActionPushsafer","device","vibration","DEFAULT_RULE","triggers","conditions","justCheck","actions","compileTriggers","json","jsonTriggers","prelines","hist","conds","cond","findBlock","_context","condition","conditionsDebug","conditionsVars","compile","ors","_ors","compileConditions","compileActions","_else","else","line","action","Compile","code2json","json2code","STANDARD_FUNCTION","STANDARD_FUNCTION_ONCHANGE","STANDARD_FUNCTION_STATE","STANDARD_FUNCTION_STATE_ONCHANGE","NO_FUNCTION","TriggerScriptSave","TriggerScheduleBlock","coordinates","func","interval","cron","hours","minutes","at","dow","_dow","intervals","start","astro","offset","offsetValue","wizard","time","latitude","longitude","sunValue","SunCalc","getTimes","_time2String","order","astroTime","setMinutes","_setAstro","_setInterval","renderCron","textCron","alignItems","openDialog","convertCronToText","cronExpression","renderWizard","wizardText","valid","Schedule","now2string","state2text","default","Transition","forwardRef","Slide","TriggerState","Array","isArray","valOld","ackOld","valueAck","valueNotAck","ack","onWriteValue","openSimulate","simulateValue","simulateAck","parseFloat","renderWriteState","TransitionComponent","onKeyUp","keyCode","HYSTERESIS","ConditionState","onShowHelp","showHysteresisHelp","isAllTriggersOnState","debugValue","useTrigger","histComp","compare","toUpperCase","compareWith","_setInputs","oidUnit","oidStates","HysteresisImage","ConditionTime","withDate","ConditionAstrological","ActionSetState","toggle","oidMax","oidMin","oidRole","oidWrite","oidStep","isNaN","f","ignore","ActionExec","exec","ActionHTTPCall","ActionPrintText","ActionPause","pause","paused","_getOptions","ActionFunction","ActionSetStateDelayed","delay","clearRunning","StandardBlocks","TriggerSchedule","ADAPTERS","telegram","email","sayit","pushover","ContextWrapperCreate","createContext","ContextWrapper","setBlocks","setOnDebugMessage","setEnableSimulation","adapterBlocksArray","Provider","CurrentItem","setUserRules","blockValue","setAnchorEl","useContext","findElementBlocks","useCallback","newUserRules","findElement","handlePopoverOpen","blockInput","useMemo","CustomBlock","isDelete","setIsDelete","onMouseMove","onMouseEnter","onMouseLeave","ctrlKey","newItem","clientWidth","cardStyle","cardStyleActive","drag_mobile","controlMenu","closeBtn","layerStyles","pointerEvents","getItemStyles","initialOffset","currentOffset","isSnapToGrid","Math","round","snapToGrid","WebkitTransform","CustomDragLayer","itemType","targetIds","useDragLayer","getItemType","getInitialSourceClientOffset","getSourceClientOffset","getTargetIds","useStateLocal","events","nameEvents","newHeadCells","funcSet","_","throttle","setCards","moveCard","atIndex","cards","additionally","hoverClientY","hoverMiddleY","findCard","copyCard","clone","newTriggers","c","DragWrapper","typeBlocks","allProperties","isActive","preview","end","dropResult","getDropResult","idNumber","useRef","canDrop","hover","draggedId","hoverBoundingRect","getBoundingClientRect","getClientOffset","overIndexActions","overIndexConditions","overIndex","getEmptyImage","captureDraggingState","isMobile","innerWidth","DialogHelp","letterSpacing","DialogCondition","AdditionallyContentBlockItems","itemsSwitchesRender","boolean","typeBlock","animation","checkItem","setCheckItem","canDropCheck","setCanDropCheck","checkId","setCheckId","hoverBlock","setHoverBlock","getHandlerId","targetId","contentBlockItem","addClassHeight","contentHeightOn","contentHeightOff","wrapperMargin","clientHeight","emptyBlockStyle","emptyBlock","emptyBlockNone","ContentBlockItems","nameAdditionally","border","additionallyClickItems","setAdditionallyClickItems","checkLocal","showHelp","setShowHelp","showConditionDialog","setShowConditionDialog","newArray","idx","setAnimation","mainBlockItemRules","addClassOverflow","nameBlockItems","selectOnChange","_userRules","selectOnChangeHelp","selectOnChangeHelpIcon","booleanAdditionally","newAdditionally","blockCardAdd","cardAdd","CustomDragItem","onDoubl","HamburgerMenu","hamburgerMenu","animate","addClass","setAllBlocks","onChangeBlocks","hamburgerOnOff","setHamburgerOnOff","setFilter","setBlocksFunc","typeFunc","newAllBlocks","a11yProps","ClickAwayListener","mouseEvent","touchEvent","onClickAway","menuWrapper","addClassMenu","hamburgerWrapper","hamburgerOff","menuRules","addClassBackground","addClassPosition","menuOff","controlPanel","AppBar","controlPanelAppBar","Tabs","Tab","switchesRenderWrapper","nothingFound","resetSearch","menuTitle","marginAuto","inputWidth","RulesEditor","scriptId","running","importExport","setImportExport","modal","setModal","_jsInstance","_jsAlive","handler","handlerStatus","msg","ruleId","subscribeObject","unsubscribeObject","setAddClass","wrapperRules","rootWrapper","Editor","editorDidMount","editorDiv","scriptName","borderRight","lineBreakpoint","lineCode","lineCurrentCode","lineCurrent","Console","onClearAllLogs","consoleLine","console_log","console_warn","console_error","console_debug","consoleSeverity","textTransform","consoleTime","consoleText","Stack","framesSize","editValue","callFrames","editRef","onExpressionNameUpdate","scopeValue","renderExpression","onBlur","scopeNameName","scopeNameEqual","scopeNameValue","formatValue","scopeType","scopeName","valueType","scopeButtonDel","onExpressionDelete","renderExpressions","expressions","renderOneFrameTitle","frame","mainScriptId","currentScriptId","fileName","onChangeCurrentFrame","currentFrame","frameRoot","frameTextRoot","frameTextPrimary","secondary","frameTextSecondary","functionName","forEdit","description","valueFunc","valueUndefined","valueNull","valueString","valueBoolean","enableClipboard","collapsed","displayDataTypes","valueNone","onWriteScopeValue","variableName","scopeNumber","callFrameId","renderScope","scopeId","editable","scopeValueEditable","renderScopes","scopes","local","properties","closure","customClassName","splitter","primaryIndex","secondaryMinSize","primaryMinSize","vertical","secondaryInitialSize","onSecondaryPaneSizeChange","onDragEnd","listRoot","toolbarScopes","onExpressionAdd","scopesAfterToolbar","scopeType_local","scopeType_closure","scopeType_user","textOverflow","scopeButton","selectedFrame","valueNumber","valueObject","Debugger","fromInstance","cmd","debugInstance","tabs","random","starting","finished","started","getLocation","reinitBreakpoints","readCurrentScope","readExpressions","scope","sendToInstance","toolsTab","logErrors","logWarnings","logs","expression","locations","queryBreakpoints","alert","toolSize","stopOnException","scopeChain","global","getTextAtLocation","arrow","monospace","renderQueryBreakpoints","bpListItem","bpListPrimary","bpListSecondary","renderError","closeTab","renderTabs","indicatorColor","scrollButtons","tabText","closeButton","tabFile","onResume","onPause","onNext","onStepIn","onStepOut","onRestart","onToggleException","renderToolbar","Toolbar","buttonRestart","buttonRun","buttonPause","buttonNext","buttonStep","buttonOut","buttonException","getPossibleBreakpoints","toggleBreakpoint","renderCode","sourceId","renderFrames","renderConsole","logWarning","renderTools","_console","Badge","badgeContent","tabsRoot","tabRoot","LinearProgress","minHeight","buttonStop","borderTop","COLOR_DEBUG","COLOR_VERBOSE","onInstanceChanged","onBrowserClose","isChanged","returnValue","tabsRef","rules","debugEnabled","verboseEnabled","showCompiledCode","showCron","showScript","visible","cmdToBlockly","cmdToRules","menuTabsOpened","menuTabsAnchorEl","showDebugMenu","toast","instancesLoaded","setChangedInAdmin","initValue","scriptDialog","systemLang","selectIdDialog","cronDialog","showScriptDialog","getAllAdapterInstances","onSelectedChange","instanceObjects","configNotSaved","removeNonExistingScripts","_changed","verbose","oldSource","commonLocal","nextCommon","onSave","onSaveAll","onCancel","getSelect","onConvertBlockly2JS","showConfirmDialog","nowSelected","onTabChange","isScriptChanged","onTabClose","ok","question","confirmCallback","confirm","sendCommandToBlockly","sendCommandToRules","getTabs","textColor","tabIcon","tabChanged","tabChangedIcon","wrapped","href","tabButton","wrapper","tabButtonWrapper","tabMenuButton","_event","hintButton","hintIcon","getDebugMenu","menuDebugAnchorEl","menuIcon","getDebugBadge","getAskAboutDebug","askAboutDebug","onDebugModeChange","cancel","getToolbar","isInstanceRunning","isScriptRunning","changedAll","onLocate","notRunning","textButton","saveButton","textIcon","toolbarButtonsDisabled","badgeMargin","getScriptEditor","getBlocklyEditor","resizing","getRulesEditor","getConfirmDialog","getSelectIdDialog","selectedId","getCronDialog","getEditorDialog","getToast","Snackbar","anchorOrigin","horizontal","autoHideDuration","ContentProps","closeToast","getTour","isAnyRulesExists","isOpen","onRequestClose","goToStep","getDebug","hintText","DialogImportFile","imageStatus","file","reader","FileReader","onabort","readAsDataURL","handleDropFile","files","readFileDataUrl","dropzone","dropzoneAccepted","dropzoneRejected","maxSize","acceptClassName","rejectClassName","getRootProps","getInputProps","isDragActive","isDragReject","dropzoneDiv","iconError","iconOk","borderWidth","borderStyle","borderColor","boxSizing","App","GenericApp","translations","require","bottomButtons","autoSubscribeLog","onScriptsChanged","onInstanceAliveChange","reload","onHostChanged","hosts","logSize","menuSize","importFile","onConnectionReady","ready","updateScripts","updating","logMessage","menuSelectId","logHorzLayout","hideLog","subscribeOnInstances","systemConfig","diag","sentryEnabled","disableDataReporting","sentryDSN","Sentry","dsn","release","version","integrations","SentryIntegrations","uuidObj","uuid","setUser","readAdaptersWithBlockly","getHosts","readAllScripts","compareScripts","reject","getObjectView","instancesArray","promises","instanceId","all","loadCustomBlockly","onToggleExpertMode","newScripts","oldIds","newIds","oldScript","newScript","promise","endsWith","parentID","updateScript","renameGroup","_list","nId","delObject","expert","onUpdateScript","onSelect","showMessage","isFolder","reg","RegExp","newCommon","_obj","extendObject","_rev","getLiveHost","getFullYear","getMonth","getDate","getRawSocket","emit","link","click","remove","download","onImportConfirmed","toggleLogLayout","renderEditor","reduce","sum","showLogButton","renderMain","menuOpenCloseButton","onDragStart","splitterDivs","menuDivWithoutMenu","mainDiv","SideMenu","update","setThemeName","getThemeType","flexGrow","menuDiv","splitterDivWithMenu","progress","hostname","build","ReactDOM","DndProvider","TouchBackend","_theme","navigator","serviceWorker","registration","unregister"],"mappings":"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","file":"static/js/main.7da5f873.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"cardStyle\":\"style_cardStyle__2FqBU\",\"cardStyleActive\":\"style_cardStyleActive__206Gb\",\"controlMenu\":\"style_controlMenu__9gHcU\",\"closeBtn\":\"style_closeBtn__Mhw4C\",\"isDelete\":\"style_isDelete__1Hlpz\",\"drag_mobile\":\"style_drag_mobile__-t97_\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"cardStyle\":\"style_cardStyle__1Wrgh\",\"nameCard\":\"style_nameCard__2uqAj\",\"cardStyleActive\":\"style_cardStyleActive__1zo7h\",\"iconThemCard\":\"style_iconThemCard__1CmFx\",\"iconThemCardSelectable\":\"style_iconThemCardSelectable__2n4ez\",\"iconHelp\":\"style_iconHelp__1rXyl\",\"inputCard\":\"style_inputCard__2enAx\",\"blockName\":\"style_blockName__PJas8\",\"controlMenu\":\"style_controlMenu__239QJ\",\"closeBtn\":\"style_closeBtn__2_yyI\",\"controlMenuTop\":\"style_controlMenuTop__3qElw\",\"debugInfo\":\"style_debugInfo__VJzN5\",\"fadeIn\":\"style_fadeIn__1Agdt\",\"tagCard\":\"style_tagCard__2Wdiv\",\"displayFlex\":\"style_displayFlex__DCxGG\",\"blockMarginTop\":\"style_blockMarginTop__3pUp3\",\"nameBlock\":\"style_nameBlock__2grew\",\"frontText\":\"style_frontText__2G8z3\",\"backText\":\"style_backText__2z9z-\",\"iconTag\":\"style_iconTag__2whZd\",\"displayItalic\":\"style_displayItalic__15dOd\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__2VeWD\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"wrapperRules\":\"style_wrapperRules__sVEP2\",\"rootWrapper\":\"style_rootWrapper__L853S\",\"addClass\":\"style_addClass__3BRnT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"switchesItem\":\"style_switchesItem__2h0hK\",\"switchesItemActive\":\"style_switchesItemActive__2MxKs\",\"iconTheme\":\"style_iconTheme__36obM\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__2A4bJ\",\"square\":\"style_square__9zSNd\",\"icon\":\"style_icon__hYogR\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__30jKO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"modalContentWrapper\":\"style_modalContentWrapper__1RGJ8\",\"modalButtonBlock\":\"style_modalButtonBlock__2C9UN\",\"modalButtonBlockTwo\":\"style_modalButtonBlockTwo__ZIOzv\",\"modalWrapper\":\"style_modalWrapper__3mJLW\",\"modalDialog\":\"style_modalDialog__3ISKq\",\"close\":\"style_close__uuE9r\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__4R7TB\",\"mark\":\"style_mark__11YGO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"drag\":\"style_drag__2OV0V\",\"root\":\"style_root__1hb5D\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"menu_wrapper\":\"hamburgerMenu_menu_wrapper__1ptCg\",\"hamburgerMenu\":\"hamburgerMenu_hamburgerMenu__2cxXi\",\"animate\":\"hamburgerMenu_animate__2W8Ju\",\"menu_conatiner_wrapper\":\"hamburgerMenu_menu_conatiner_wrapper__2xDC-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__3aMtm\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__2pluA\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__1YR91\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"root\":\"style_root__2OJ3P\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"border\":\"style_border__qu_lo\",\"emptyBlockStyle\":\"style_emptyBlockStyle__2zeBd\",\"emptyBlock\":\"style_emptyBlock__1w7XB\",\"marginTop\":\"style_marginTop__1a3o-\",\"selectOnChange\":\"style_selectOnChange__28ShR\",\"selectOnChangeHelp\":\"style_selectOnChangeHelp__2x5b9\",\"selectOnChangeHelpIcon\":\"style_selectOnChangeHelpIcon__9KUqr\",\"emptyBlockNone\":\"style_emptyBlockNone__2MlEP\",\"mainBlockItemRules\":\"style_mainBlockItemRules__3R_h3\",\"nameBlockItems\":\"style_nameBlockItems__2381u\",\"contentBlockItem\":\"style_contentBlockItem__35DrZ\",\"wrapperMargin\":\"style_wrapperMargin__2cgmH\",\"contentHeightOn\":\"style_contentHeightOn__2Wa9E\",\"heightBlock\":\"style_heightBlock__1N27D\",\"contentHeightOff\":\"style_contentHeightOff__V5Nur\",\"cardAdd\":\"style_cardAdd__34m12\",\"blockCardAdd\":\"style_blockCardAdd__2bIUa\",\"addClassOverflow\":\"style_addClassOverflow__25dVh\",\"addClassHeight\":\"style_addClassHeight__ShDZ1\"};","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjEuMWMqnEsAAAe3SURBVGhD7Vl7bFNlFL+bc/hAJxAQg0B8B0TjI6KiUYxKND6jMTECf2A0+GKw0cfaIeDmGAjoeKljooMIDMEpbgPcZDLd2t7bru3Wdd1KH7QbXeno1rXduj7xfN+9jO6ui7RbciHpyS/LTb9zzvf97nfuOd/5RhBixVUJkTxFrJi4Xnl1E5iUp7q6CUzOVycJcIUkAa6RJMA1kgS4RpIA10gS4BpJAlwjSYBrJAlwjSQBrpEkwDUSISCSEzlyQkgRQvibMCjkBFyNdE77Z0+B9WmTaKu4CWDvaQJqAo9M51OJg0eCk5RoDvTKcmDRVAqfuoZPXssn03m0MgXPaXwylU9iJhSjjK3iJMCnMtY1vlSqX1PdyT9mBQiOd8QF2kR0ovPdMuOUL5SEgGI8w4JWy4hsWapYft/Xmtf26j8sN2dVIeXsY9blv515Z79h/q7WW/KUBNAAAHlsFSeBLNndG9UlCke/P+z1h8aA8EmDe94WDZFNoqXz0NIfKGpZX3P2lNFtdwdcvpB78JK+ZzDU5wv1DAS15wb+aO15pVSfJpYj8jlUnARWSe8uVP/Y2H1hzPK3CRNYhZZ+a76y4KRN3z3o7A8GQxFGI7ZEBoPhTXVdU2H3MPm4d+DODaoSuYPxNgapMfTdv7mZ+Kh+zmbND3JHtzfIDFyG7JDYp+epgDksKe4duKdQvU91nvE0Bqm3eOYUqCcJqfxaGwQJ8+vlyTcNXdO+UBGrSVhS3Dtwxwb1Nom9uz/Y5fZjBDD8NrcfAjcSYQcAhLLdE4DRIU34e84bKNf2zMxTvrVXf9rpY1SjBLyAidrWT1q9jZ1efbcPnDNjQKDePjVBAnwSstDLP7Wvre4UVlkRjnUgVFr4FZayJmcwFGYmuShHW3vFkH8qLIwmNhGf6Hhnr/72QvWeWNHY5QmUt/SAw7dK9YtK2l7d07bskGlDre2g2glk+v0hIDAtwRACQBqGfJcpIVZIETIxPpUQH9e/vd/gD7KD4YNyM7FSSnzcwGjSJvDL8voFu1obzngYPSywgb5AOK/27JR1jcSnDcQKCTbBc62UQUV7cmdrqaI7s9KCPmLYgUQqcUxAVuaR7x8xB0bsAOTy63JRAWGbZErfO2DQOgYYPSzhcBhiZtp6JcQqk+lpiPAUkDeBuYBKX6NIA5/wS9xpdDQkQkCWedRicfkZPSywAxVtrulrleCNrT8EtG6oxPiZ2x1YXm42OQcZPSywA1bX4NxvNChgRprQoM8RCR4lRkMCBFZI3tyrV9m8jB4W2IFgOPKXse/54jZUp3Dcsw2jwSWBLNl9W5v/1PcxelESCEU09oGNtWcfgq1ANKTIP8ucBpcEBNR1Qmpznd0/ytkBTj7Vepegyjrnq2b0TcOhA2ahQ38IXBKApayUPv1da53ZzajGEjgdQfpffMA4Ox9XLvi46ehnnHBIACBAB+MlZUbD8E95pDi8gZ2ScwuLdRNz0USXIopjAoBs8kaxfNlhs+G8zxdk27LE1OP78FfzVKhx4I3mkMM5AQCPTOGRC3Zpj2p74eAEWYixjCWRC5HPqztRpcNlmBBxWMiiAebZsjSRHGJdYvH4oCfAwrgYLuHwhc+OWlA7Cn2ZWJ4iuhIIwLsED0IqjUdlrFcuLjPUmfoCsNJRRGr1vLBbh85IcJi7IggAICkBDTjtCKjrhdSMfNXSQ8ZTphhVAsQfDH9Za0uFGie4QkJoCCisMQ0eeUOO/MEtmo2nbO7BGM1aWbNzZmET1IeUXA4J0JHDqk00YIiHzp6zCtRFDXbGV5Qcb3c9XNQCCtwRoF82JHXIJ2DOGqUBn2m27KliHTQxjLuLUnO67/EdWmKlhDsCPHL2pqZHtmtvgxILvRVdntCXEKUjpCBI5m1r6R1gR1H1addj22EHOCSQKXm9VH+kpQei/N5NTRngAX/BSJN+AKwmJ4rlSw+bRhaHCl3v3K0aYhWHIbRCuqikXWnrBx1FhzerwvrotpYpecqMXMXNIuomEZUhVszIV0PPoD/P7vrDkUiJ3DEZd5Uc7oD0hd1tMutQTxwZ8IcaOz1HNM4f5I7dlOOXZmerYwBKGjMeJXZP4P3DJnj9MC93aZRNALUz4TBqaKAfAMADvGlmaLgUU46ZBSp0xubyMJcpfbGknewY1pFdjpzQux7frk2FRgcmBQLjWImXHTaNvFZZVWmZEPsbkLy8p13TNexW4n/lUHPPEzu06agG06fR8arE4HG17JPfzzDzRInweMf1QGDkLQNPNmtjU1altVLXa+4ZHO3oRou111+l6+VXdczb0pyCrtcvvo7xCyFIf+Qb+/T/mj31Zzz/YsCDxOp9t8yYDgojdwCqmJCavK7xsSLNe/sNa2vO/qw+D8mxxtB3yuyuM7lPGt3H2l2Hmp1b/+lactA4v0ibDiZQMaA4DNWKcSMArnPktxWoFn6ve7647TkMeFhU0nZ7oToFj7JNADjwUM+Or6umF6ju36qZv0P7zLe6Z7/TLdjZ+lCRZvYGNfpXAChk4osWcBXt4RIBGBg7YHPpK0f6FpG+FWRK7Ci4uA7UXsLbpckMeYBnSDXgNuqVDwP+d9MteSoCeIwDckcHS5MFlnJMsExoiOSpYkUGEIBduBoxKU81JV991xbNf+HIGKTzOnGeAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAABN2lDQ1BBZG9iZSBSR0IgKDE5OTgpAAAokZWPv0rDUBSHvxtFxaFWCOLgcCdRUGzVwYxJW4ogWKtDkq1JQ5ViEm6uf/oQjm4dXNx9AidHwUHxCXwDxamDQ4QMBYvf9J3fORzOAaNi152GUYbzWKt205Gu58vZF2aYAoBOmKV2q3UAECdxxBjf7wiA10277jTG+38yH6ZKAyNguxtlIYgK0L/SqQYxBMygn2oQD4CpTto1EE9AqZf7G1AKcv8ASsr1fBBfgNlzPR+MOcAMcl8BTB1da4Bakg7UWe9Uy6plWdLuJkEkjweZjs4zuR+HiUoT1dFRF8jvA2AxH2w3HblWtay99X/+PRHX82Vun0cIQCw9F1lBeKEuf1UYO5PrYsdwGQ7vYXpUZLs3cLcBC7dFtlqF8hY8Dn8AwMZP/fNTP8gAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAdLaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA2LjAtYzAwMiA3OS4xNjQ0NjAsIDIwMjAvMDUvMTItMTY6MDQ6MTcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMS4yIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMS0wMS0xMFQxMTowNDoxNiswMzowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDItMjVUMDk6MzM6NTMrMDM6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMDItMjVUMDk6MzM6NTMrMDM6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iQWRvYmUgUkdCICgxOTk4KSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowODYwNDk3ZS1kM2NmLTQ4NjktOTJkMy1lZDdhMWJhZjRjNDMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDphZGNhYzk5MC01NDk0LTMxNGEtOGUzOS0yMjM3MGIzYTc1NjEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ZGJiZjliOC1lOThkLTQ1YmQtOWZlMS00Njk4NjZkODdiYmUiPiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlJVTEVTIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSJSVUxFUyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2RiYmY5YjgtZTk4ZC00NWJkLTlmZTEtNDY5ODY2ZDg3YmJlIiBzdEV2dDp3aGVuPSIyMDIxLTAxLTEwVDExOjA0OjE2KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5p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\"","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from \"@material-ui/core/styles\";\n\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\nimport TextField from '@material-ui/core/TextField';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nimport IconCancel from '@material-ui/icons/Cancel';\nimport IconOk from '@material-ui/icons/Check';\n\nimport I18n from '@iobroker/adapter-react/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 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 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>\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\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 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 '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\nimport {MdDelete as IconDelete} from 'react-icons/md';\n\nimport IconOk from '@material-ui/icons/Check';\nimport IconCancel from '@material-ui/icons/Cancel';\n\nimport I18n from '@iobroker/adapter-react/i18n';\nimport {withStyles} from \"@material-ui/core/styles\";\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 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 '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/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 '@material-ui/icons/Cancel';\n\nimport I18n from '@iobroker/adapter-react/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 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","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAM0AAABkCAIAAACqzSMYAAABN2lDQ1BBZG9iZSBSR0IgKDE5OTgpAAAokZWPv0rDUBSHvxtFxaFWCOLgcCdRUGzVwYxJW4ogWKtDkq1JQ5ViEm6uf/oQjm4dXNx9AidHwUHxCXwDxamDQ4QMBYvf9J3fORzOAaNi152GUYbzWKt205Gu58vZF2aYAoBOmKV2q3UAECdxxBjf7wiA10277jTG+38yH6ZKAyNguxtlIYgK0L/SqQYxBMygn2oQD4CpTto1EE9AqZf7G1AKcv8ASsr1fBBfgNlzPR+MOcAMcl8BTB1da4Bakg7UWe9Uy6plWdLuJkEkjweZjs4zuR+HiUoT1dFRF8jvA2AxH2w3HblWtay99X/+PRHX82Vun0cIQCw9F1lBeKEuf1UYO5PrYsdwGQ7vYXpUZLs3cLcBC7dFtlqF8hY8Dn8AwMZP/fNTP8gAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAdLaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA2LjAtYzAwMiA3OS4xNjQ0NjAsIDIwMjAvMDUvMTItMTY6MDQ6MTcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMS4yIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMS0wMS0xMFQxMTowNDoxNiswMzowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDItMjVUMDk6NTM6MTYrMDM6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMDItMjVUMDk6NTM6MTYrMDM6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iQWRvYmUgUkdCICgxOTk4KSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphODQ2NTA5Ny0yN2UyLTQwMmMtYmU5Ni02NDI0MDliZDc0MzMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoyMmI0ZjY0Ni1kYjQ4LWY3NGUtYmJiMi0zZDY4ZTE1OTg1MWIiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpmY2ZmNmIzMi0xOThkLTRlOWUtODllYi04ODAwNTA1MTIzYjUiPiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlJVTEVTIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSJSVUxFUyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZmNmZjZiMzItMTk4ZC00ZTllLTg5ZWItODgwMDUwNTEyM2I1IiBzdEV2dDp3aGVuPSIyMDIxLTAxLTEwVDExOjA0OjE2KzAzOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5p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\"","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withStyles} from \"@material-ui/core/styles\";\n\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\nimport TextField from '@material-ui/core/TextField';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\n\nimport IconOk from '@material-ui/icons/Check';\nimport IconCancel from '@material-ui/icons/Cancel';\n\nimport I18n from '@iobroker/adapter-react/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 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 style={{minWidth: 100}}>\n <InputLabel htmlFor=\"parent\">{I18n.t('Folder')}</InputLabel>\n <Select\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 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>\n <InputLabel htmlFor=\"instance\">{I18n.t('Instance')}</InputLabel>\n <Select\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 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 '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nimport IconOk from '@material-ui/icons/Check';\n\nimport I18n from '@iobroker/adapter-react/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 \"@material-ui/core/styles\";\n\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport Grid from '@material-ui/core/Grid';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Input from '@material-ui/core/Input';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\n\nimport IconOk from '@material-ui/icons/Check';\nimport IconCancel from '@material-ui/icons/Cancel';\nimport IconClose from '@material-ui/icons/Close';\n\nimport I18n from '@iobroker/adapter-react/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 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 '@material-ui/core/styles';\nimport Drawer from '@material-ui/core/Drawer';\nimport Divider from '@material-ui/core/Divider';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport IconButton from '@material-ui/core/IconButton';\nimport { useDrag, useDrop, DndProvider as DragDropContext } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend'\n\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Input from '@material-ui/core/Input';\nimport RootRef from '@material-ui/core/RootRef';\n\nimport red from '@material-ui/core/colors/red';\nimport green from '@material-ui/core/colors/green';\nimport yellow from '@material-ui/core/colors/yellow';\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/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\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.type === '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.type === '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.type === '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 {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)}><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 >\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 <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)}><IconDelete/></IconButton>;\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(<RootRef key=\"searchInputRoof\" rootRef={this.inputRef}><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 /></RootRef>);\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 ><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 ><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 >\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 ><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 ><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 ><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 ><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 ><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 '@material-ui/core/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/i18n';\nimport {withStyles} from '@material-ui/core/styles/index';\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.type === '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.type === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.type === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.type === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.type === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.type === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.type === '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.type === 'dark' ? '#9d9d9d' : undefined,\n borderRadius: theme.palette.type === '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 <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton className={this.props.classes.iconButtons} onClick={() => this.setState({goBottom: !this.state.goBottom})} color={this.state.goBottom ? 'secondary' : ''}><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton className={this.props.classes.iconButtons} onClick={() => this.clearLog()}><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton className={this.props.classes.iconButtons} onClick={() => this.onCopy()}><IconCopy/></IconButton> : null}\n {this.props.onLayoutChange ? <IconButton className={this.props.classes.iconButtons} onClick={() => this.props.onLayoutChange()} title={I18n.t('Change layout')}><img className={this.props.classes.layoutIcon} alt=\"split\" src={this.props.verticalLayout ? IconVerticalSplit : IconHorizontalSplit} /></IconButton> : null}\n <IconButton className={this.props.classes.iconButtons} onClick={() => this.props.onHideLog()} title={I18n.t('Hide logs')}><IconHide /></IconButton>\n </div>\n {this.renderLogList(lines)}\n </div>;\n }\n}\n\nLog.propTypes = {\n selected: PropTypes.string,\n socket: PropTypes.object,\n onLayoutChange: PropTypes.func,\n verticalLayout: PropTypes.bool\n};\n\nexport default withStyles(styles)(Log);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Fab from '@material-ui/core/Fab';\n\nimport {MdGTranslate as IconNoCheck} from 'react-icons/md';\nimport I18n from '@iobroker/adapter-react/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 // 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.languages.typescript.typescriptDefaults.setExtraLibs) {\n this.monaco.languages.typescript.typescriptDefaults.setExtraLibs(wantedTypings);\n } else if (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 '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\nimport Popper from '@material-ui/core/Popper';\nimport Fade from '@material-ui/core/Fade';\nimport Paper from '@material-ui/core/Paper';\n\nimport IconCopy from '@material-ui/icons/FileCopy';\nimport IconCancel from '@material-ui/icons/Cancel';\n\nimport I18n from '@iobroker/adapter-react/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 '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\n\nimport IconOk from '@material-ui/icons/Check';\nimport IconCancel from '@material-ui/icons/Cancel';\n\nimport I18n from '@iobroker/adapter-react/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 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/i18n';\nimport DialogMessage from '@iobroker/adapter-react/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 '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/Dialog';\n\nimport IconSave from '@material-ui/icons/Save';\nimport IconCancel from '@material-ui/icons/Cancel';\n\nimport ScriptEditorComponent from '../Components/ScriptEditorVanilaMonaco';\nimport I18n from '@iobroker/adapter-react/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.type === 'dark' ? 'white' : 'black',\n height: 30,\n width: '100%',\n fontSize: 16\n },\n argsTitle: {\n color: theme.palette.type === 'dark' ? 'white' : 'black',\n fontWeight: 'bold'\n }\n});\n\nclass DialogScriptEditor extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\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({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 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 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","import { useState, useEffect } from 'react';\nimport * as Icons from '@material-ui/icons/';\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/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;","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}","import { Button } from '@material-ui/core';\nimport React from 'react';\n// import I18n from '@iobroker/adapter-react/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport cls from './style.module.scss';\nimport CustomIcon from '@iobroker/adapter-react/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;","import { Checkbox } from '@material-ui/core';\nimport React, { memo, useState } from 'react';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react/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);","import { TextField } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport cls from './style.module.scss';\n// import I18n from '@iobroker/adapter-react/i18n';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport CustomIcon from '@iobroker/adapter-react/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, withStyles } from '@material-ui/core';\nimport React, { useEffect, useState } from 'react';\nimport I18n from '@iobroker/adapter-react/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 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;","import React, {useState} from 'react';\nimport Button from '@material-ui/core/Button';\nimport { Dialog, DialogActions, DialogContent } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport i18n from '@iobroker/adapter-react/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 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;","import { FormControl, FormHelperText, Input, MenuItem, Select } from '@material-ui/core';\nimport React, { useState } from 'react';\nimport I18n from '@iobroker/adapter-react/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 className={clsx(cls.root, className)}\n fullWidth\n style={style}\n >\n <Select\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;","import React, { useState } from 'react';\nimport cls from './style.module.scss';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport { Slider } from '@material-ui/core';\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;","import { FormControlLabel, Switch } from '@material-ui/core';\nimport React, { memo, useState } from 'react';\n// import I18n from '@iobroker/adapter-react/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);","import { TextField } from '@material-ui/core';\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 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;","import { FormControl, MenuItem, Select } from '@material-ui/core';\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/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 className={clsx(cls.root, className)}\n style={style}\n >\n <Select\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 className={clsx(cls.root, className)}\n style={style}\n >\n <Select\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/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 '@material-ui/core';\nimport IconButton from '@material-ui/core/IconButton';\nimport IconHelp from '@material-ui/icons/HelpOutline';\n\nimport DialogSelectID from '@iobroker/adapter-react/Dialogs/SelectID';\nimport DialogError from '@iobroker/adapter-react/Dialogs/Error';\nimport DialogMessage from '@iobroker/adapter-react/Dialogs/Message';\nimport Utils from '@iobroker/adapter-react/Components/Utils';\nimport I18n from '@iobroker/adapter-react/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/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 showSelectId: false,\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 { showSelectId, settings } = this.state;\n const { className, socket } = this.props;\n const { attr, openCheckbox, checkReadOnly } = input;\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 // return null\n return visibility ? <div className={cls.blockMarginTop} key={attr}>\n <div className={cls.displayFlex}>\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={() => this.setState({ showSelectId: true })}\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 key=\"tableSelect\"\n imagePrefix=\"../..\"\n dialogName={'javascript'}\n themeType={Utils.getThemeName()}\n socket={socket}\n statesOnly={true}\n selected={value}\n onClose={() => this.setState({ showSelectId: false })}\n onOk={(selected, name, common) =>\n this.setState({ showSelectId: false }, () =>\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 /> : 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 <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 </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/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/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/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/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/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/Components/ComplexCron';\nimport Schedule from '@iobroker/adapter-react/Components/Schedule';\nimport convertCronToText from '@iobroker/adapter-react/Components/SimpleCron/cronText';\nimport I18n from '@iobroker/adapter-react/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 '@material-ui/core/styles';\n\nimport GenericBlock from '../GenericBlock';\nimport Compile from '../../helpers/Compile';\nimport Button from '@material-ui/core/Button';\nimport Switch from '@material-ui/core/Switch';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport TextField from '@material-ui/core/TextField';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Slide from '@material-ui/core/Slide';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/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/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 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\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","export default __webpack_public_path__ + \"static/media/hysteresis.04ebd02c.png\";","import React from 'react';\n\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nimport GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react/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/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 \"@material-ui/core/styles\";\nimport I18n from \"@iobroker/adapter-react/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/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/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/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/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 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';\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];\n\nexport default StandardBlocks;","import React, {\n createContext,\n useEffect,\n useState,\n} from 'react';\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\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 socket.getAdapterInstances()\n .then(instances => {\n const adapters = Object.keys(ADAPTERS).filter(adapter =>\n instances.find(obj => obj?.common?.name === adapter));\n const adapterBlocksArray = adapters.map(adapter => ADAPTERS[adapter]);\n\n setBlocks([...StandardBlocks, ...adapterBlocksArray]);\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};","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;","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 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","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 };","import React, { useContext, useEffect, useRef } from 'react';\n// import I18n from '@iobroker/adapter-react/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 '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\n\nimport IconOk from '@material-ui/icons/Check';\n\nimport I18n from '@iobroker/adapter-react/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 '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport I18n from '@iobroker/adapter-react/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/i18n';\nimport PropTypes from 'prop-types';\nimport cls from './style.module.scss';\nimport { useDrop } from 'react-dnd';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport IconButton from '@material-ui/core/IconButton';\nimport IconHelp from '@material-ui/icons/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 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;","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;","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 '@material-ui/core';\n\nimport I18n from '@iobroker/adapter-react/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","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/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 const handlerStatus = (id, 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')\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 '@material-ui/core/styles';\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 '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/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/i18n';\n\nconst TOOLBOX_WIDTH = 34;\n\nconst styles = theme => ({\n consoleLine: {\n fontSize: 14,\n color: theme.palette.type === 'dark' ? '#EEE' : '#222'\n },\n console_log: {\n\n },\n console_warn: {\n backgroundColor: theme.palette.type === 'dark' ? '#885900' : '#ffa500',\n },\n console_error: {\n backgroundColor: theme.palette.type === '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.type === '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.type === 'dark' ? 'darkgrey' : 'lightgrey',\n color: theme.palette.type === 'dark' ? 'black' : 'black'\n },\n error: {\n background: '#FF0000',\n color: theme.palette.type === 'dark' ? 'black' : 'white'\n },\n warn: {\n background: '#FF8000',\n color: theme.palette.type === 'dark' ? 'black' : 'white'\n },\n debug: {\n background: 'gray',\n opacity: 0.8,\n color: theme.palette.type === 'dark' ? 'black' : 'white'\n },\n silly: {\n background: 'gray',\n opacity: 0.6,\n color: theme.palette.type === '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 <div className={this.props.classes.logBox}>\n <div className={this.props.classes.toolbox} key=\"toolbox\">\n <IconButton className={this.props.classes.iconButtons} onClick={() => this.setState({goBottom: !this.state.goBottom})} color={this.state.goBottom ? 'secondary' : ''}><IconBottom/></IconButton>\n {lines && lines.length ? <IconButton className={this.props.classes.iconButtons} onClick={() => this.props.onClearAllLogs()}><IconDelete/></IconButton> : null}\n {lines && lines.length ? <IconButton className={this.props.classes.iconButtons} onClick={() => this.onCopy()}><IconCopy/></IconButton> : null}\n </div>\n {this.renderLogList(lines)}\n </div>;\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 '@material-ui/core/styles';\nimport SplitterLayout from 'react-splitter-layout';\nimport ReactJson from 'react-json-view';\n\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Input from '@material-ui/core/Input';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport List from '@material-ui/core/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/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.type === '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.type === '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.type === '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()}>\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()}>\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 '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport IconButton from '@material-ui/core/IconButton';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Dialog from '@material-ui/core/Dialog';\nimport Badge from '@material-ui/core/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/i18n';\nimport {withStyles} from '@material-ui/core/styles';\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.type === '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.type === 'dark' ? '#333' : '#e6e6e6',\n color: theme.palette.type === '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 <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n <IconButton className={this.props.classes.buttonRestart} disabled={disabled} onClick={() => this.onRestart()} title={I18n.t('Restart')}><IconRestart/></IconButton>\n {\n !this.state.finished && this.state.paused ?\n <IconButton className={this.props.classes.buttonRun} disabled={disabled} onClick={() => this.onResume()}\n title={I18n.t('Resume execution')}><IconRun/></IconButton>\n :\n !this.state.finished && <IconButton disabled={disabled} className={this.props.classes.buttonPause} onClick={() => this.onPause()}\n title={I18n.t('Pause execution')}><IconPause/></IconButton>\n }\n {!this.state.finished && <IconButton className={this.props.classes.buttonNext} disabled={disabled || !this.state.paused} onClick={() => this.onNext()} title={I18n.t('Go to next line')}><IconNext/></IconButton>}\n {!this.state.finished && <IconButton className={this.props.classes.buttonStep} disabled={disabled || !this.state.paused} onClick={() => this.onStepIn()} title={I18n.t('Step into function')}><IconStep/></IconButton>}\n {!this.state.finished && <IconButton className={this.props.classes.buttonOut} disabled={disabled || !this.state.paused} onClick={() => this.onStepOut()} title={I18n.t('Step out from function')}><IconOut/></IconButton>}\n {!this.state.finished && <IconButton className={this.props.classes.buttonException} color={this.state.stopOnException ? 'primary' : 'default'} disabled={disabled || !this.state.paused} onClick={() => this.onToggleException()} title={I18n.t('Stop on exception')}><IconException/></IconButton>}\n {this.renderTabs()}\n </Toolbar>;\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 '@material-ui/core/Toolbar';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Badge from '@material-ui/core/Badge';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Checkbox from '@material-ui/core/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/i18n';\nimport DialogCron from '@iobroker/adapter-react/Dialogs/Cron';\nimport DialogConfirm from '@iobroker/adapter-react/Dialogs/Confirm';\nimport DialogSelectID from '@iobroker/adapter-react/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, cb) => {\n this.selectId.callback = cb;\n this.selectId.initValue = initValue;\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 ' + 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 >\n <IconCloseAll />\n </IconButton> : null\n ];\n } else {\n return <div key=\"tabs2\" className={this.props.classes.toolbar}>\n <Button 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 <Toolbar variant=\"dense\" className={this.props.classes.toolbar} key=\"toolbar1\">\n {!this.props.debugInstance && this.state.menuOpened && this.props.onLocate && <IconButton className={this.props.classes.toolbarButtons} key=\"locate\" title={I18n.t('Locate file')} onClick={() => this.props.onLocate(this.state.selected)}><IconLocate /></IconButton>}\n {!this.props.debugInstance && !changed && isInstanceRunning && <IconButton key=\"restart\" disabled={this.props.debugMode} variant=\"contained\" className={this.props.classes.toolbarButtons} onClick={() => this.onRestart()} title={I18n.t('Restart')}><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 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 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 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 key=\"export\" aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('export')}>\n <IconExport /></IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton key=\"import\" aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('import')}>\n <IconImport /></IconButton>}\n\n {this.state.blockly && !this.state.showCompiledCode &&\n <IconButton key=\"check\" aria-label=\"Check code\"\n title={I18n.t('Check blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToBlockly('check')}>\n <IconCheck /></IconButton>}\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton key=\"select-cron\" 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 })}><IconCron /></IconButton>}\n\n {!this.props.debugMode && !this.state.blockly && !this.state.rules && !this.state.showCompiledCode && <IconButton key=\"select-id\" aria-label=\"select ID\"\n title={I18n.t('Insert object ID')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.setState({ showSelectId: true })}><IconSelectId /></IconButton>}\n\n {this.state.blockly && !this.state.rules && this.state.showCompiledCode && <Button 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 key=\"export\" aria-label=\"Export Blocks\"\n title={I18n.t('Export blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('export')}>\n <IconExport /></IconButton>}\n {this.state.rules && !this.state.showCompiledCode &&\n <IconButton key=\"import\" aria-label=\"Import Blocks\"\n title={I18n.t('Import blocks')}\n className={this.props.classes.toolbarButtons}\n onClick={() => this.sendCommandToRules('import')}>\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 >\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 >\n <Badge className={this.props.classes.badgeMargin} badgeContent={this.getDebugBadge()}>\n <IconDebugMenu />\n </Badge>\n </IconButton>\n </Toolbar>;\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 statesOnly={true}\n onClose={() => {\n this.setState({ showSelectId: false });\n if (this.selectId.callback) {\n this.selectId.callback = null;\n }\n }}\n onOk={(selected, name) => {\n this.selectId.initValue = null;\n if (this.selectId.callback) {\n this.selectId.callback(selected);\n this.selectId.callback = null;\n } else {\n this.setState({ insert: `'${selected}'/*${name}*/` })\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getCronDialog() {\n if (this.state.showCron) {\n return <DialogCron\n key=\"dialogCron1\"\n cron={this.cron.callback ? this.cron.initValue || '' : this.getSelect ? this.getSelect() : '* * * * *'}\n onClose={() => this.setState({ showCron: false })}\n onOk={cron => {\n this.cron.initValue = null;\n if (this.cron.callback) {\n this.cron.callback(cron);\n this.cron.callback = null;\n } else {\n this.setState({ insert: `'${cron}'` });\n }\n }}\n />;\n } else {\n return null;\n }\n }\n\n getEditorDialog() {\n if (this.state.showScript) {\n return <DialogScriptEditor\n key=\"scriptEditorDialog\"\n adapterName={this.props.adapterName}\n source={this.scriptDialog.initValue}\n args={this.scriptDialog.args ? this.scriptDialog.args.join(', ') : ''}\n isReturn={this.scriptDialog.isReturn}\n socket={this.props.socket}\n runningInstances={this.state.runningInstances}\n themeType={this.state.themeType}\n onClose={result => {\n this.scriptDialog.initValue = null;\n if (this.scriptDialog.callback) {\n result !== false && this.scriptDialog.callback(result || '');\n this.scriptDialog.callback = null;\n }\n this.setState({ showScript: false });\n }}\n />;\n } else {\n return null;\n }\n }\n\n getToast() {\n return <Snackbar\n key=\"toast\"\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n open={!!this.state.toast}\n autoHideDuration={6000}\n onClose={() => this.setState({ toast: '' })}\n ContentProps={{ 'aria-describedby': 'message-id', }}\n message={<span id=\"message-id\">{this.state.toast}</span>}\n action={[\n <IconButton\n key=\"close\"\n aria-label=\"close\"\n color=\"inherit\"\n className={this.props.classes.closeToast}\n onClick={() => this.setState({ toast: '' })}\n ><IconClose />\n </IconButton>,\n ]}\n />;\n }\n\n setTourStep = tourStep => this.setState({ tourStep });\n\n getTour() {\n if (this.state.instancesLoaded &&\n this.state.selected &&\n this.props.isAnyRulesExists === 1 &&\n this.props.objects[this.state.selected] &&\n this.state.rules &&\n this.state.visible) {\n return <Tour\n key=\"tour\"\n steps={steps}\n isOpen={this.state.isTourOpen}\n onRequestClose={() => {\n this.setState({ isTourOpen: false });\n window.localStorage.setItem('tour', 'true');\n this.props.socket.setState('javascript.0.variables.rulesTour', 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","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGIAAAAeCAYAAADXRcu0AAABN2lDQ1BBZG9iZSBSR0IgKDE5OTgpAAAokZWPv0rDUBSHvxtFxaFWCOLgcCdRUGzVwYxJW4ogWKtDkq1JQ5ViEm6uf/oQjm4dXNx9AidHwUHxCXwDxamDQ4QMBYvf9J3fORzOAaNi152GUYbzWKt205Gu58vZF2aYAoBOmKV2q3UAECdxxBjf7wiA10277jTG+38yH6ZKAyNguxtlIYgK0L/SqQYxBMygn2oQD4CpTto1EE9AqZf7G1AKcv8ASsr1fBBfgNlzPR+MOcAMcl8BTB1da4Bakg7UWe9Uy6plWdLuJkEkjweZjs4zuR+HiUoT1dFRF8jvA2AxH2w3HblWtay99X/+PRHX82Vun0cIQCw9F1lBeKEuf1UYO5PrYsdwGQ7vYXpUZLs3cLcBC7dFtlqF8hY8Dn8AwMZP/fNTP8gAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAfpaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA2LjAtYzAwMiA3OS4xNjQ0NjAsIDIwMjAvMDUvMTItMTY6MDQ6MTcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMS4yIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMS0wMS0zMFQwOTo0Njo0MCswMzowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDItMjVUMDk6NTA6MzIrMDM6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjEtMDItMjVUMDk6NTA6MzIrMDM6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0iQWRvYmUgUkdCICgxOTk4KSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo2NTUwYTA2OS0wNjQ3LTQxM2ItOWI5MC02MjYxMjBjNDg1MzMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkYTliOGE0YS01MzMzLTc1NDgtYjUxZi01YTI2NWU4NDU3ZjUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplNzdmMTM3Ni0xYWRiLTQ5ZTktYmM2NS1hOTQxMjExMGQ0YzAiPiA8cGhvdG9zaG9wOlRleHRMYXllcnM+IDxyZGY6QmFnPiA8cmRmOmxpIHBob3Rvc2hvcDpMYXllck5hbWU9IlJVTEVTIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSJSVUxFUyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDxwaG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDxyZGY6QmFnPiA8cmRmOmxpPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDpmMjg5NDQwYi1hMjJlLWMxNGEtOGRhMy1jMmI4NTA1YjJhMjA8L3JkZjpsaT4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplNzdmMTM3Ni0xYWRiLTQ5ZTktYmM2NS1hOTQx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\"","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Dialog from '@material-ui/core/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 '@material-ui/icons/Cancel';\n\nimport I18n from '@iobroker/adapter-react/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 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';\nimport * as Sentry from '@sentry/browser';\nimport * as SentryIntegrations from '@sentry/integrations';\nimport { withStyles } from '@material-ui/core/styles';\nimport SplitterLayout from 'react-splitter-layout';\nimport { version } from '../package.json';\n\nimport 'react-splitter-layout/lib/index.css';\n\nimport GenericApp from '@iobroker/adapter-react/GenericApp';\nimport Loader from '@iobroker/adapter-react/Components/Loader'\nimport I18n from '@iobroker/adapter-react/i18n';\nimport DialogMessage from '@iobroker/adapter-react/Dialogs/Message';\nimport DialogConfirm from '@iobroker/adapter-react/Dialogs/Confirm';\nimport Utils from '@iobroker/adapter-react/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.type === '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 });\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 new Promise(resolve => {\n const socket = this.socket;\n\n if (socket.systemConfig.common.diag !== 'none') {\n this.socket.getAdapterInstances(window.adapterName)\n .then(instances => {\n const sentryEnabled = !!instances.find(item => !item.common.disableDataReporting);\n\n // if not local development\n if (window.sentryDSN && sentryEnabled && window.location.host !== 'localhost:3000') {\n Sentry.init({\n dsn: window.sentryDSN,\n release: `iobroker.${window.adapterName}@${version}`,\n integrations: [\n new SentryIntegrations.Dedupe()\n ]\n });\n\n // BF 2021.08.31: may be this is not required as executed in adapter-react\n this.socket.getObject('system.meta.uuid')\n .then(uuidObj => {\n if (uuidObj && uuidObj.native && uuidObj.native.uuid) {\n Sentry.configureScope(scope =>\n scope.setUser({id: uuidObj.native.uuid}));\n }\n resolve();\n });\n } else {\n resolve();\n }\n });\n } else {\n resolve();\n }\n });\n })\n .then(() => this.readAdaptersWithBlockly())\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 // BF(2021.07.16): support fallback on admin4. Remove it after one year\n getAdapterInstances() {\n return new Promise((resolve, reject) => {\n let timeout = setTimeout(() => {\n timeout = null;\n this.socket.getObjectView(\n `system.adapter.${this.adapterName}.`,\n `system.adapter.${this.adapterName}.\\u9999`,\n 'instance'\n )\n .then(items => resolve(Object.keys(items).map(id => items[id])))\n .catch(e => reject(e));\n }, 2000);\n\n return this.socket.getAdapterInstances(this.adapterName)\n .then(result => {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n return resolve(result);\n }\n })\n .catch(e => {\n if (timeout && e !== 'unknown command') {\n clearTimeout(timeout);\n timeout = null;\n reject(e);\n }\n });\n });\n }\n\n subscribeOnInstances() {\n return this.getAdapterInstances()\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 ReactDOM from 'react-dom';\nimport { MuiThemeProvider } from '@material-ui/core/styles';\n\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\nimport { version } from '../package.json';\nimport theme from '@iobroker/adapter-react/Theme';\nimport Utils from '@iobroker/adapter-react/Components/Utils';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\nwindow.adapterName = 'javascript';\nwindow.sentryDSN = 'https://504499a725eb4898930d3b9e9da95740@sentry.iobroker.net/56';\n\nlet themeName = Utils.getThemeName();\n\nconsole.log('iobroker.' + window.adapterName + '@' + version + ' using theme \"' + themeName + '\"');\n\nfunction build() {\n const isMobile = window.innerWidth < 600;\n return ReactDOM.render(<MuiThemeProvider theme={theme(themeName)}>\n <DndProvider backend={isMobile ? TouchBackend : HTML5Backend}>\n <App onThemeChange={_theme => {\n themeName = _theme;\n build();\n }} />\n </DndProvider>\n </MuiThemeProvider>, document.getElementById('root'));\n\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","// extracted by mini-css-extract-plugin\nmodule.exports = {\"menuRules\":\"style_menuRules__4ggtB\",\"switchesRenderWrapper\":\"style_switchesRenderWrapper__VIgiB\",\"menuOff\":\"style_menuOff__1VSEU\",\"menuTitle\":\"style_menuTitle__2l_P9\",\"marginAuto\":\"style_marginAuto__3mSSs\",\"inputWidth\":\"style_inputWidth__1OEeq\",\"menuWrapper\":\"style_menuWrapper__d9Hwl\",\"hamburgerWrapper\":\"style_hamburgerWrapper__1rLfl\",\"hamburgerOff\":\"style_hamburgerOff__3a8CV\",\"nothingFound\":\"style_nothingFound__2MnKx\",\"resetSearch\":\"style_resetSearch__123ZC\",\"controlPanel\":\"style_controlPanel__4ZUlZ\",\"controlPanelAppBar\":\"style_controlPanelAppBar__2axOZ\",\"addClassMenu\":\"style_addClassMenu__M1GVU\",\"addClassBackground\":\"style_addClassBackground__1lRy2\",\"addClassPosition\":\"style_addClassPosition__104dS\"};"],"sourceRoot":""}