/
main.43069cbb.chunk.js.map
1 lines (1 loc) · 946 KB
/
main.43069cbb.chunk.js.map
1
{"version":3,"sources":["Components/RulesEditor/components/CurrentItem/style.module.scss","Components/RulesEditor/components/CustomDate/style.module.scss","Components/RulesEditor/components/GenericBlock/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/StandardBlocks/index.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/Blocks/ActionOperateStates.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","props","handleCancel","onClose","handleOk","onRename","oldId","state","id","name","instance","handleChange","setState","getId","isShowInstance","folder","instances","length","prefix","getPrefix","parts","split","pop","join","replace","this","nextProps","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","React","Component","withStyles","theme","DialogDelete","onDelete","fontSize","fontWeight","DialogAddNew","type","html","lang","getLanguage","includes","window","focus","Card","className","classes","card","CardActionArea","CardMedia","media","image","title","CardContent","complexity","text","CardActions","size","openHtml","textAlign","getRulesCard","getBlocklyCard","getJSCard","getTSCard","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","getAdapterInstances","onlyWWW","adapter","host","icon","sort","a","b","jsInstanceObj","startsWith","js","Grid","List","component","ListItem","button","selected","ListItemIcon","src","alt","ListItemText","primary","toLowerCase","onDoubleClick","container","direction","Input","filterWithButton","placeholder","setItem","endAdornment","InputAdornment","position","IconButton","renderJavascriptList","renderInstances","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","modified","result","depth","index","ids","Object","keys","engineType","engine","it","idA","idB","parentIndex","Droppable","onDrop","useDrop","accept","drop","isOver","undefined","collect","monitor","shallow","isOverAny","ref","clsx","children","Draggable","useDrag","opacity","isDragging","drag","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","cb","tasks","shift","match","that","substring","getState","err","readProblems","subscribeState","unsubscribeState","stringify","changed","val","pos","isSearchEnabled","newState","filterListStatic","ensureSelectedIsVisibleStatic","getIsAllZeroInstancesStatic","stopPropagation","saveExpanded","iconButtons","debugMode","iconButtonsDisabled","onEnableDisable","onEdit","Promise","resolve","whiteSpace","padding","overflow","flex","onToggle","filtered","filteredPartly","childrenFiltered","depthPx","assign","marginLeft","cursor","isExpanded","iconClass","iconStyle","folderIcon","folderIconReorder","folderIconNoReorder","scriptIcon","scriptIconReorder","scriptIconNoReorder","childrenCount","script","scriptReorder","folderReorder","onDblClick","listItemIcon","getTextStyle","ListItemSecondaryAction","renderItemButtonsOnEnd","source","newId","items","dragging","isFilteredOut","reactChildren","element","renderListItem","renderOneItem","onDragFinish","dense","disablePadding","mainList","copyId","word","m","menuAnchorFilterEl","filterIcon","selectedItem","anchorEl","PaperProps","maxHeight","MENU_ITEM_HEIGHT","showError","iconDropdownMenu","onCloseMenu","onExpertModeChange","onExport","onImport","onThemeChange","newThemeName","onAddNew","onCopy","RootRef","rootRef","toolbarSearch","clearTimeout","filterList","onSearch","toolbarButtons","float","mini","currentTarget","getMainMenu","onAddNewFolder","folders","footerButtons","Blockly","footerButtonsRight","onExpandAll","onCollapseAll","onDebugInstance","renamingItem","copingItem","Drawer","menu","paper","drawerPaper","anchor","toolbar","getToolbarButtons","Divider","backend","HTML5Backend","innerMenu","renderAllItems","footer","getBottomButtons","newName","newInstance","getUniqueName","getFolders","getUniqueFolderName","getAdapterDebugDialog","objects","found","lastIndexOf","nState","selectId","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","ms","date","Date","ts","toLocaleString","goBottom","lastIndex","messagesEnd","trTime","trSeverity","substr","current","scrollIntoView","behavior","registerLogHandler","unregisterLogHandler","scrollToBottom","str","document","createElement","body","appendChild","select","execCommand","removeChild","copyToClipboard","logBoxInner","table","clear","logBox","toolbox","clearLog","onLayoutChange","layoutIcon","verticalLayout","onHideLog","renderLogList","hasOwnProperty","verticalAlign","info","warn","debug","silly","fontFamily","boxShadow","isIdOfGlobalScript","test","ScriptEditor","isDark","language","readOnly","alive","check","typingsLoaded","runningInstancesStr","monacoDiv","editor","monaco","insert","originalCode","code","typings","lastSearch","monacoCounter","waitForMonaco","scriptAdapterInstance","sendTo","setTypeCheck","setEditorTypings","componentDidMount","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","loadTypings","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","partialDeclarationsPath","wantedTypings","filePath","content","setExtraLibs","addExtraLib","existingLibs","getExtraLibs","selection","range","Range","startLineNumber","startColumn","endLineNumber","endColumn","executeEdits","forceMoveMarkers","findMatches","r","setSelection","revealLine","row","getPosition","col","column","decorations","columnNumber","isWholeLine","bp","glyphMarginClassName","deltaDecorations","ranges","getVisibleRanges","revealLineInCenter","initNewScript","scrollToLineIfNeeded","insertTextIntoEditor","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","toolboxXml","resize","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","Xml","workspaceToDom","allBlocks","getAllBlocks","blocks","searchBlocks","addSelect","someSelectedTime","now","removeSelect","command","blocklyCheckBlocks","badBlock","blocklyBlinkBlock","exportBlocks","importBlocks","searchId","updateBackground","loadCode","fileLang","setAttribute","onload","onreadystatechange","readyState","getElementsByTagName","fileCustom","svgResize","xml","l","decodeURIComponent","atob","block","unselect","isShadow","connections","getConnections_","conn","j","targetConnection","warningText","blocklyGetUnconnectedBlock","blocklyGetBlockWithWarning","sourceBlock_","INPUT_VALUE","OUTPUT_VALUE","_optional","warning","oneWay","JavaScript","workspaceToCode","dom","domToText","btoa","encodeURIComponent","xmlBlock","blockToDom","dragMode_","DRAG_FREE","deleteNext","xy","getRelativeToSurfaceXY","RTL","x","y","domToPrettyText","variables","vars","utils","textToDomDocument","nodes","createVariable","loading","xmlBlocks","textToDom","paste","onBlocklyChanged","ignoreChanges","jsCode2Blockly","domToWorkspace","blocklyRemoveOrphanedShadows","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","blocklyCode2JSCode","outerHTML","p1","MSG","CustomBlocks","_b","Words","HUE","onImportBlocks","componentDidUpdate","renderMessageDialog","renderErrorDialog","renderExportDialog","renderImportDialog","url","callback","scriptTag","onerror","loadJS","loadScripts","adapters","toLoad","DOMParser","xmlStr","parseFromString","ActiveXObject","xmlDoc","async","loadXML","DialogScriptEditor","isReturn","args","argsTitle","adapterName","ICON_CACHE","MaterialDynamicIcon","iconName","useState","setUrl","useEffect","Element","Icons","CardMenu","active","onTouchMove","cls","switchesItem","switchesItemActive","iconTheme","deepCopy","userRules","additionalParameter","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","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","checkReadOnly","showSelectId","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","render","inputs","helpDialog","notFound","iconThemCard","iconThemCardSelectable","blockName","nameCard","iconHelp","helpText","nameRender","controlMenuTop","renderDebugInfo","renderSpecific","oid","instanceSelectionOptions","instanceSelectionDef","debugMessage","enableSimulation","debugHideTimeout","onDebugMessage","blockId","hideTimeout","debugInfo","renderDebug","context","trigger","oidType","PureComponent","sayitEngines","params","voice","emotion","gender","ename","ssml","ActionSayText","getStaticData","config","volume","getReplacesInText","ActionSendEmail","recipients","subject","ActionTelegram","cachePromises","_setUsers","users","user","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","astro","offset","offsetValue","latitude","longitude","sunValue","SunCalc","getTimes","_time2String","order","time","astroTime","setMinutes","interval","_setAstro","_setInterval","textCron","alignItems","openDialog","convertCronToText","cronExpression","wizardText","wizard","valid","Schedule","now2string","state2text","default","func","cron","at","hours","minutes","dow","_dow","intervals","start","Transition","forwardRef","Slide","TriggerState","valOld","ackOld","valueAck","valueNotAck","ack","openSimulate","simulateValue","simulateAck","parseFloat","TransitionComponent","onKeyUp","keyCode","onWriteValue","Array","isArray","HYSTERESIS","ConditionState","onShowHelp","showHysteresisHelp","toUpperCase","compareWith","useTrigger","oidUnit","oidStates","isAllTriggersOnState","_setInputs","HysteresisImage","debugValue","histComp","compare","ConditionTime","withDate","ConditionAstrological","ActionSetState","toggle","oidMax","oidMin","oidRole","oidWrite","oidStep","isNaN","f","ignore","StandardBlocks","TriggerSchedule","ActionExec","exec","ActionHTTPCall","ActionPrintText","ActionPause","paused","pause","_getOptions","ActionFunction","ActionSetStateDelayed","delay","clearRunning","ActionOperateStates","oid1","oid2","operation","oidResult","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","newItemsSwitches","closeBtn","layerStyles","pointerEvents","getItemStyles","initialOffset","currentOffset","isSnapToGrid","Math","round","snapToGrid","WebkitTransform","CustomDragLayer","useDragLayer","itemType","getItemType","getInitialSourceClientOffset","getSourceClientOffset","targetIds","getTargetIds","renderItem","useStateLocal","events","nameEvents","newHeadCells","funcSet","_","throttle","setCards","moveCard","atIndex","cards","additionally","hoverClientY","hoverMiddleY","findCard","copyCard","clone","newTriggers","c","DragWrapper","typeBlocks","allProperties","isActive","end","dropResult","getDropResult","idNumber","preview","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","Menu","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","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","onBlur","scopeNameName","scopeNameEqual","scopeNameValue","formatValue","scopeType","scopeName","valueType","scopeButtonDel","onExpressionDelete","expressions","renderExpression","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","scopeId","editable","scopeValueEditable","renderExpressions","scopes","local","properties","renderScope","closure","customClassName","splitter","primaryIndex","secondaryMinSize","primaryMinSize","vertical","secondaryInitialSize","onSecondaryPaneSizeChange","onDragEnd","listRoot","renderOneFrameTitle","toolbarScopes","onExpressionAdd","scopesAfterToolbar","renderScopes","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","arrow","monospace","bpListItem","bpListPrimary","bpListSecondary","getTextAtLocation","indicatorColor","scrollButtons","tabText","closeButton","closeTab","tabFile","Toolbar","buttonRestart","onRestart","buttonRun","onResume","buttonPause","onPause","buttonNext","onNext","buttonStep","onStepIn","buttonOut","onStepOut","buttonException","onToggleException","renderTabs","getPossibleBreakpoints","sourceId","toggleBreakpoint","logWarning","_console","Badge","badgeContent","tabsRoot","tabRoot","renderFrames","renderConsole","LinearProgress","renderToolbar","renderCode","renderQueryBreakpoints","renderTools","renderError","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","_changed","verbose","removeNonExistingScripts","oldSource","commonLocal","nextCommon","getSelect","showConfirmDialog","nowSelected","isScriptChanged","ok","onTabClose","question","confirmCallback","confirm","onTabChange","textColor","tabIcon","tabChanged","tabChangedIcon","wrapped","href","tabButton","wrapper","tabButtonWrapper","tabMenuButton","_event","hintButton","hintIcon","menuDebugAnchorEl","menuIcon","askAboutDebug","onDebugModeChange","cancel","isInstanceRunning","isScriptRunning","changedAll","onLocate","notRunning","textButton","saveButton","onSave","textIcon","onSaveAll","onCancel","sendCommandToBlockly","onConvertBlockly2JS","sendCommandToRules","toolbarButtonsDisabled","badgeMargin","getDebugBadge","resizing","selectedId","Snackbar","anchorOrigin","horizontal","autoHideDuration","ContentProps","closeToast","isAnyRulesExists","isOpen","onRequestClose","goToStep","getTabs","getToolbar","getScriptEditor","getAskAboutDebug","getBlocklyEditor","getRulesEditor","getDebug","getConfirmDialog","getSelectIdDialog","getCronDialog","getEditorDialog","getDebugMenu","getToast","getTour","hintText","DialogImportFile","imageStatus","files","file","readFileDataUrl","dropzone","dropzoneAccepted","dropzoneRejected","maxSize","acceptClassName","rejectClassName","handleDropFile","getRootProps","getInputProps","isDragActive","isDragReject","dropzoneDiv","iconError","iconOk","reader","FileReader","onabort","readAsDataURL","borderWidth","borderStyle","borderColor","boxSizing","App","translations","require","bottomButtons","autoSubscribeLog","onScriptsChanged","onInstanceAliveChange","reload","onHostChanged","hosts","logSize","menuSize","importFile","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","loadPlugins","reject","getObjectView","instancesArray","promises","instanceId","all","loadCustomBlockly","newScripts","oldIds","newIds","oldScript","newScript","promise","endsWith","parentID","updateScript","renameGroup","_list","nId","delObject","expert","isFolder","reg","RegExp","onSelect","newCommon","_obj","extendObject","_rev","getLiveHost","getFullYear","getMonth","getDate","getRawSocket","emit","link","click","remove","download","onImportConfirmed","showMessage","reduce","sum","onUpdateScript","showLogButton","menuOpenCloseButton","onDragStart","renderEditor","toggleLogLayout","splitterDivs","menuDivWithoutMenu","mainDiv","SideMenu","update","setThemeName","getThemeType","renderMain","GenericApp","flexGrow","menuDiv","splitterDivWithMenu","progress","hostname","build","ReactDOM","DndProvider","TouchBackend","_theme","navigator","serviceWorker","registration","unregister"],"mappings":"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","file":"static/js/main.43069cbb.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 = {\"root\":\"style_root__2VeWD\"};","// 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 = {\"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,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAADPhJREFUaEPtV4lTU9caf/9bWxdwqZa2CpKVgEgAlbYKKHcJS0IIKNWwmH1jDWtAJYvs2UhAZRFI2KyiXdzIvQkB4vvODVTbzlv6Zl7z3ky++c2Zk5OzfL9zvu3+7f3/uSQJJFqSBBItSQKJliSBREuSQKIlSSDRkiSQaEkSSLQkCSRakgQSLX8kEIvt0rHo61j0VSz6C9Mi7EG7t70/5Y8S24vtvPt1MrPww9r/Dl6/j+3Ayb8hAKrvvBoPL1WFfWfD3tORqVNhbxo99SXl/+Kt78vIWvMutQa67s8+EFB99+eR0Gzh1nQaNZUW8n5BTZ0C0FOnaX8caQDK/yXtA6Qd4AsAhdrTAAow9QHxEdoHm5xi+mgy7QegDSPTp6gZ9s5WAA7/QGB3az6yIoU1b10nno58FXBkLNkzlq3nArZz0H828kXIfYJ+nB95atgLP4OVzKLY3tbj8MqNsC/jletkYDg9YD+3bANkLNvSUQs72DMWHRmL0NpYizb2ko0F2yLA/o6MZUcGbM5MS/8YAWYhs0n6kg12yFx8AMhYHD4bHP76zWQK7f96B27z1xfYowKRuaJ33qMLI+laXYmorvJaTXWptLpUIgGUSGXV9cRkb9a7iVTa/Tm9JNp5+3CXfhrd7I48zKY8x9ccaSZd0bVaaUl1TbFEViyWXRXXXIVWUntVEm8BUqZfw7Sy4mpZSXVtSbXsahwS2ZUD7I+gwbpiKZpWKq0tkdWUyKpLa6SSetHivQza83n03cL+C8T26PBa05b3eMCejt+U8kkVlzRwSSOHMHJxDRdTs3EtB1MXVDSZlCXPRtNp78mI/yvKf4b2nKZdR54MZd64RZwXNXNwLQvTsDAtq8zAwows3MjCDGxcz8UMXMzExbTcsjgM3DIjGsGNHAAGMHBw3UfQsjE9G9Yyf7HJVg5u4GMqNq5gidQXJQ0z9ziU90w0FATlEYG9rUX6UfbL8ZP18mtsAo40fgCpZRF6Fg6An3qOSC2+Wfn4HvfniWO/OFN+Gj852pN7rfom6MTGlVxcjYABW3QwWgVr48ANHFLHJgBaLg7QsdGIiU0a2WU6DqYHpTm45gBqhoaeW6bjYXpBhaa2sWK0N8/aIhTJyGs10vmhzPAj1i6yZIZA9IWF9qbO3D2bLWr4HQGuSCesNnFJXVybTAL0u1NUc6fydi1WV1Msu5FNKlmEitFSh54L4YAAo3omrhNUmc5XGdmEBrRHwNRZIr1Q0sYhEMkDAujiDwAcEAHocDG9+Htx0JG+5T1KeY78OHZirIP31PF5+BF3N7y5T2Bns5v2pPS35Ajg7fDfEMiRtHcN+y9L25hx2BEeVEeqh7SW4dwquE6gpMsktCwcMUR6IBgYAgD0k43rqgxWldmRU6njkFp4B1DrarOl2+ErqAQCwFbPJeImxGiPAR/oIAKwNotQdmgvvXWfCAVK6Y360DQv5D6y5fwsslAU23nzK4GusCfVbCjg40pY/zEBYW2Pe2GltK6Nh+n4ZTr2dfAHvax97N6op0CMjmShK1dzr6t4YNwHqoNx83ADr0zJK1PwcLW8d7Lf7j5fCYThETRsTIUbrN7Z5aIqHQtZlJ4L5gTqYhoOuNB1FbTM9RvOEUZBufJBdw7E0N23/tjO1s7bR1SAoBev7bya+JAHoptdlPtYt6GQB46CwV0y/sfgQm3vzPJ6r93jmVt/4FkS1Zt4ZSpZ+8jgsKegUs8hdKUNfQ7/gm9hvX3QWUAq4MW5RItEZx+eDk4trjs8C9/KjA19Tot9SlipF1Qq24Z98p7x8tYRz+zyN1VacetY25BPAATK9Lni1vGZleu3euFS0GsjJzadFyk9/Zm07+s9Crksypi7W5B54tqD7JtQyJ1qMVzMBksgjB8jX9YX/OWN3flYph4c8i4tBdYLiebaDsfg2FRhpemCrG969UXvsOtWp/Xh6mbHoENAKovvDHiXNloHR6Qqi7Jn8tKN7tt94712b1Fde//04sT0QqFYhxlGPfMrlyXa7xos3vmVK9IWdpm+rnM8uPZDYQWySeTrYAuYKbdcMTOQEZ4+s0evxDX+ncQJ9Gy5U3v0F/l/IFBY2/tw7VllU28G3iqQmVdfvJJrLXUdwwNjU/mVJlmfb3llraACPMEk656c33heKFYpBt29D5y55VouiYybTRrk/c7xqSfuJ6v2yemcCi2nTIUZxt3zK99JwZtbBp0LTa0DueI258LTTouVjSnB9ME4gQALNwmqFA8HWZHps7F/SaBLd5FH/IFATYd/abX0RjuLMHEqWh+vbZrMttp2IOApFOu19mnv9FwOODFhuq61rm6+LL5harX7W/sfZJHMLYr03HKdvN8TWHu5uv7shu4ul9RmEnrcMOydC34rgcirqm5xWEbcTV3Dc8srRdVq5CQoyIIHGzIhioiavAMZ9PTX//wFuoFAt66QS2hYENo+InC5pnN2Y1Os6IWwkF9jDm7+Ilf31O0TUNebJxaDTwslJhbZcqvXtby2XlilVQ54BkZ8eZUQtTQo9pfrb/W5h8ZmNAPOqSfr9QbEgTTYp2aD34jVHEJVdKvrgW92ceNZz/1RLqliE4gDUgOHbGjKIRXj3bxffQBqyuhLS/RF517kebycYZz4RTflARMqgqTLRCGUcSCuQwgvqutd+um1wzN3p8064l/2zq9eKlfWtY1aRqbzxfrC2h7f0nPL+CNV79jD4HNTn42HKUubLONza23Wqe+Ng6333Vdvdsp7XD12b77EWGOyzgQ2ZLp7pHHEPbv+TTUQ0GSJTV1j0xubL0h5OwdXxCMVEGATENBMWaR+sK2Adh/beWnZfe2j566Evaci/lP0UiUEpX0C2y9633mODbXx+VgzlAwcTAW5kEWoM3F1rqRDMTB6p2fM6l7oG/EV17XwytQl8v5anTWn3MDFTaW3+/tGZ+zeOaX5vrASgqwOTJ9UDXSPPxzxz/UNOy9XqcuaLNXqu3xSzyY1Yu1gY7vtatP9xs7R/Ao17MYS6VV3PbZJf365nkvCo0Gu0ILnsAkTWBGPMKjVV15PpoDetDuNdh595U555zkans1DFfX+C/xoe+M7veT48pJYmolDGIZMvk+ADcAUkDvBq6AiYpehHAnFAh8KGwAJRqzlXIdwoc6EOZCkSD2AS0AmgiVoK7QWbqQMsrU2AyVmDQRiZrkm67o2G5xHMWD3P6lXd2QTsBA20XCQUxkyCWMmZuRhmmtSqc/Cej1x/MeR49ODWSrl9QXb2e25Cx8I7IWfUwvfvnWmDrQKC8tvoeoN3QEcpod3BAdlHMPAIk1MUcSECBQlNDwSih9InMjqYDKL0Z5J2LBQx2OoxpkzKU+XAXWeyMAhIGfp2KSaI9KcFxvbR2eMdycvi3V8XA9hkEdoIZZAHQkvgEo90sDDlcWS2u8bK6TyikLy9rfVisf3zm3PCuCzZp8AZIfoz/awP/3NRKqj/XxFbYWw/KaAbOCTjXxSwSNUkKH5UPBAHYEqJZT20cWj0g1lfihmUBLFFVyRiifSZJFqgUiRRTbnkM0CvImP34F7hUE+AYWNkl+u4hGQnlV8AuYo+ETj+XIEAdmURSgEhCKbaMommrMJpYBQC+BoAkpjNezMJ+9wRHeycHVxze25++nbs9kfEQDZi+z8ZKenMt9MHF+znXUNCuw9eUNdFwC2bqG1K/+++aJcTuSKQBuID60csgWKonipA69cWi3uMFy81yUcMufbzAVW1Mmzm/NsZqGtK2/ILLR2Cq0dQuZn/lBn3lBnvq0zz96ZZ+u84DAL7V0XrF25sMTWmW835zLIg4U2OL0rz9ottHXnw0JbV6Gt89Joz/kXoye3Hws/mNC+xHajr12hJ5co7+ch9+GtycMhZyo1kUJNHqGcKW9dR16OnrC25V+punkOIjTZBs6XQeqh1Kmsq/DeZb12poZch2n3IdpzlHYdpZyHtlyfbLk/Dbk+DbsOh12H6MlDtBNwmJo8DP/S7s/CMBnGYbLrEOX6jEJ/HYL5W65PQ859UJOfUNDCv+7PYP+QMyXkPAKdyNzFWPSgmPtIYu9j0e03Hvqpkl6T08Hb2yuNkWBDGDBbFHEdo1xH54f4NfXibHhQUnlB1KhRFP8wfIZyH6f9Z8KB+vCKPLzSEAk2RYKNqL/aQAcb6OXGcKAxjEaaIgjN0NKB23RQjgYDTZHVRkAYAMcdAPoI8dMZwFZUELSS0yu36R864AseNP4dgX8s8D4/2aj5fPikfOpIu9cmMOoKPP38n10poZk0alnCfF7EP5T/Uvm3CSABzhuRjWZ65hzlOkK5jtPu1NDD7PCPlr2d0P6Uv1z+FAEkUM3uvHJGn5mjz83RzY6dd3Oxvcj+f4mQP00ASWz3/d72PhJhNh/Lf0Tgf0mSBBItSQKJliSBREuSQKIlSSDRkiSQaEkSSLQkCSRW3r//O89RIR0Kq6AfAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","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,iVBORw0KGgoAAAANSUhEUgAAAM0AAABkCAIAAACqzSMYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNWWFMmUAAAWGSURBVHhe7d3La1xlHMbxttKKdCVUVMSdSxFX/gG6cdF/wo0bV+JCqK03Qq3gQgvdiBcUVyIUi6iICoKIStObljbG0pttsGlsU5tOJjc99fyIwzczc97zm/POeWfO8/DZPO15L5z+oKFpkk2bdh0WiY5dJAZ2kRjYRWJgF4mBXSQGdpEY2EViYBeJgV0kBnaRGNhFYmAXiYFdJAZ2kRjYRWJgF4mBXSQGdpEY2EViYJcGePL93947PPvTxZtTs60TM7e+mp7f/8OfT7x7Go9Vib3Z/kk4860V3LaUj45etY3CMvHtZewwEPZms3ecZP5edM6ZrfcGuzmxN5u92iSz0F7FbQvZyoGzuraGnUtjbzZ7r0mmtVRizu7de8yWVRccUQ57s9kbTTLtldA5+3r6uq2pOlt3T+KsUOzNZq8zySyvBv3ldebqLVsQJ5s3nBiEvdnsXSaZkA+SdkwctadjBocGYW82e5FJZi1gzuzR+MG5xdibzd5iqsFtwR4aVnB6AfZms1eYanDbTtv2TNpDw8rOD6dxh37Ym81eYarBbTvZE0PMoVN/4Q79sDebvcJUg9t2sidK5uDJa2//fOXs3KL14OD0YuzN9uj+kz5LK2v2J1AULCwFt12377sZ2z0s23Zzh9xjB07ZE73TWi79aYnb2MVlcXnV/hyKgoWVsK3DgrUb2XPdgidLYBeXUZkzLOzFnu7I9cH+t4jmrBpjNmcZW/Bf8Fse7OIyEnMW/hnSzN2v3v7UwsyNJfy6E7u4jMScnZlbxMLhYReXkZizuYVlLBwednEZv4/PKsYuLpqzAuziMipzlgVrh4RdXEZozrJg+TCwi0u9c9YOPn09OyaOYZO42MWl3jnL2O4l4/xP2A7s4jKic5bn/teOY7fqsYtL7XO284NpO8Cb57+4gD2rxC4utc9Zxg4YLIFfVVUau7ikMGfbXz5iZ1QRbD4odnFJYc4ydkZ1wf5+7OKSyJxl7JjqEvL1fMXYxSWdOcvYSZXm+MwCTimHXVySmrOMHVZ1cEoJ7OKS2pxl7Lyq8/25GzgoCLu4JDhnmac+OWunVhrPR2zs4pLmnOXs4KqDUwqwi0vKc5az4ysNjuiHXVzSn7PM5qqnbWq2hSN6YheXkZizdXaVKoKde2IXl9Gas1wr+M79g227YxeXUZyz3IEfr9jNvMGG3bGLy+jOWe6Bfcftfq5gty7YxWXU5yz34OvOacM+XbCLy3jMWe7LqdLfFn7Lhk2IXVzGac5ydt2w/H616B842MVl/OYsYzcOC9YSu7iM5ZwdvbRglw4I1hK7uIzlnGXs0gHBQmIXl9TmLDuokq/NzO8cEiwkdnFJZ87W1v7/jsz4LQfbKCBYSOziksKcPfPpeTujI3imLNslIFhI7OJS75zd8ULPgfhjvo2HS7FdAoKFxC4uNc6Z7ds75685v13oymroD0XIgrXELi61zNm11rJtWpRsYrC20D0lf8QilhO7uAx/zmy7MsEOfXx8Ys7WhKX4Z4qxi8tIzFme7S8dwVadHn9nyp4rE2zSBbu41PL3pu04QK7cXDoxs3Dxetu6N7hYF+ziUsucDT4fleThN3/FxbpgF5da5ixjm9YaXKk7dnGpa84ytm9N2bp7Evfpjl1capyzjG099Cy0g3+IHbu41DtnW3p/PiBqcI1+2MWl3jnL2QHDCk4vwC4uKcxZxs6IHH0fl9okMmeZO/dM2klx8shbPX9Mez/s4pLOnOWePnjOzqs0OKUEdnFJbc5yD73xi506WByfhid2cUlzztY9+9kFO75k7nox7J/HCrHLuLtv77HnPr9wevaWjVJHLs+3X/nmEp6vBrtIDOwiMbCLxMAuEgO7SAzsIjGwi8TALhIDu0gM7CKV23X4X+z2cWDXCRtHAAAAAElFTkSuQmCC\"","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\n // TODO BF: check https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-semantic-tokens-provider-example\n // to support 0.21.0\n\n if (this.monaco && this.monaco.languages.typescript.typescriptDefaults.setExtraLibs) {\n this.monaco.languages.typescript.typescriptDefaults.setExtraLibs(wantedTypings);\n } else if (this.monaco && this.monaco.languages.typescript.typescriptDefaults.addExtraLib) {\n const existingLibs = this.monaco.languages.typescript.typescriptDefaults.getExtraLibs();\n wantedTypings.forEach(lib => {\n if (!existingLibs[lib.filePath]) {\n this.monaco.languages.typescript.typescriptDefaults.addExtraLib(lib, lib.filePath);\n }\n });\n }\n }\n\n /**\n * Inserts some text into the given editor\n * @param {string} text The text to add\n */\n insertTextIntoEditor(text) {\n const selection = this.editor.getSelection();\n const range = new this.monaco.Range(\n selection.startLineNumber, selection.startColumn,\n selection.endLineNumber, selection.endColumn\n );\n this.editor.executeEdits('', [{range: range, text: text, forceMoveMarkers: true}]);\n this.editor.focus();\n }\n\n highlightText(text) {\n let range = text && this.editor.getModel().findMatches(text);\n if (range && range.length) {\n range.forEach(r => this.editor.setSelection(r.range));\n this.editor.revealLine(range[0].range.startLineNumber);\n } else if (this.editor) {\n const row = this.editor.getPosition().lineNumber;\n const col = this.editor.getPosition().column;\n this.editor.setSelection(new this.monaco.Range(row, col, row, col));\n }\n }\n\n showDecorators() {\n this.decorations = this.decorations || [];\n const decorations = [];\n if (this.location) {\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, this.location.columnNumber + 1, this.location.lineNumber + 1, 1000),\n options: {\n isWholeLine: false,\n className: this.props.isDark ? 'monacoCurrentLineDark' : 'monacoCurrentLine',\n }\n });\n decorations.push({\n range: new this.monaco.Range(this.location.lineNumber + 1, 0, this.location.lineNumber + 1, 0),\n options: {\n isWholeLine: true,\n className: this.props.isDark ? 'monacoCurrentFullLineDark' : 'monacoCurrentFullLine',\n }\n });\n }\n\n if (this.breakpoints) {\n this.breakpoints.forEach(bp => {\n decorations.push({\n range: new this.monaco.Range(bp.location.lineNumber + 1, 0, bp.location.lineNumber + 1, 100),\n options: {\n isWholeLine: true,\n glyphMarginClassName: this.props.isDark ? 'monacoBreakPointDark' : 'monacoBreakPoint',\n }\n });\n });\n }\n this.editor && (this.decorations =\n this.editor.deltaDecorations(this.decorations, decorations));\n }\n\n initNewScript(name, code) {\n this.setState({name});\n this.originalCode = code || '';\n this.editor && this.editor.setValue(code);\n this.highlightText(this.lastSearch);\n this.showDecorators();\n //this.setEditorLanguage();\n // Update the typings because global scripts need different typings than normal scripts\n // and each global script has different typings\n this.setEditorTypings(name);\n }\n\n scrollToLineIfNeeded(lineNumber) {\n if (this.editor) {\n const ranges = this.editor.getVisibleRanges();\n if (!ranges || !ranges[0] || ranges[0].startLineNumber > lineNumber || lineNumber > ranges[0].endLineNumber) {\n this.editor.revealLineInCenter(lineNumber);\n }\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const options = {};\n if (this.state.name !== nextProps.name) {\n // A different script was selected\n this.initNewScript(nextProps.name, nextProps.code);\n }\n\n // if some running instance will be found and\n if (JSON.stringify(nextProps.runningInstances) !== this.runningInstancesStr) {\n this.runningInstancesStr = JSON.stringify(nextProps.runningInstances);\n if (!this.state.typingsLoaded) {\n this.loadTypings(nextProps.runningInstances);\n }\n }\n\n // if the code not yet changed, update the new code\n if (!nextProps.changed && nextProps.code !== this.originalCode) {\n this.originalCode = nextProps.code;\n this.editor.setValue(this.originalCode);\n this.showDecorators();\n this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n }\n\n if (nextProps.searchText !== this.lastSearch) {\n this.lastSearch = nextProps.searchText;\n this.highlightText(this.lastSearch);\n }\n\n if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location) &&\n JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)) {\n this.location = nextProps.location;\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n } else if (JSON.stringify(nextProps.breakpoints) !== JSON.stringify(this.breakpoints)) {\n this.breakpoints = nextProps.breakpoints;\n this.showDecorators();\n } else if (JSON.stringify(nextProps.location) !== JSON.stringify(this.location)) {\n this.location = nextProps.location;\n this.showDecorators();\n this.editor && this.location && this.scrollToLineIfNeeded(this.location.lineNumber + 1);\n //this.editor && this.location && this.editor.setPosition(this.location.lineNumber + 1, this.location.columnNumber + 1);\n }\n\n if (this.state.language !== (nextProps.language || 'javascript')) {\n this.setState({language: nextProps.language || 'javascript'});\n options.language = nextProps.language || 'javascript';\n } else if (this.state.readOnly !== (nextProps.readOnly || false)) {\n this.setState({readOnly: nextProps.readOnly || false});\n options.readOnly = nextProps.readOnly;\n } else if (this.state.isDark !== (nextProps.isDark || false)) {\n this.setState({isDark: nextProps.isDark || false});\n options.isDark = nextProps.isDark;\n }\n\n this.setEditorOptions(options);\n\n if (this.insert !== nextProps.insert) {\n this.insert = nextProps.insert;\n if (this.insert) {\n console.log('Insert text' + this.insert);\n setTimeout(insert => {\n this.insertTextIntoEditor(insert);\n setTimeout(() => this.props.onInserted && this.props.onInserted(), 100);\n }, 100, this.insert);\n }\n }\n }\n\n onChange(newValue, e) {\n if (!this.props.readOnly) {\n this.props.onChange && this.props.onChange(this.editor.getValue());\n }\n }\n\n render() {\n if (!this.monaco || !this.props.runningInstances) {\n setTimeout(() => {\n this.monaco = window.monaco;\n this.forceUpdate()\n }, 200);\n return null;\n }\n\n return <div ref={el => this.monacoDiv = el} style={{width: '100%', height: '100%', overflow: 'hidden', position: 'relative'}}>\n {!this.state.check && <Fab\n size=\"small\"\n title={I18n.t('Check is not active, because javascript adapter is disabled')}\n style={{bottom: 10, right: 10, opacity: 0.5, position: 'absolute', zIndex: 1, background: 'red', color: 'white'}}\n color=\"secondary\"><IconNoCheck/></Fab>}\n </div>;\n }\n}\n\nScriptEditor.propTypes = {\n adapterName: PropTypes.string.isRequired,\n socket: PropTypes.object,\n runningInstances: PropTypes.object,\n name: PropTypes.string,\n onChange: PropTypes.func,\n onForceSave: PropTypes.func,\n onInserted: PropTypes.func,\n isDark: PropTypes.bool,\n readOnly: PropTypes.bool,\n code: PropTypes.string,\n language: PropTypes.string,\n onRegisterSelect: PropTypes.func,\n searchText: PropTypes.string,\n checkJs: PropTypes.bool,\n changed: PropTypes.bool,\n\n breakpoints: PropTypes.array,\n location: PropTypes.object,\n onToggleBreakpoint: PropTypes.func,\n};\n\nexport default ScriptEditor;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@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 openTagMenu: false,\n openModal: false,\n iconTag: false,\n error: '',\n helpText: '',\n\n oid: {},\n instanceSelectionOptions: [],\n instanceSelectionDef: '',\n\n hideAttributes: [], // e.g. instance\n\n settings,\n debugMessage: null,\n enableSimulation: this.props.enableSimulation,\n };\n\n this.debugHideTimeout = null;\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (!nextProps || !nextProps.settings) {\n console.log(JSON.stringify(nextProps));\n return;\n }\n\n const settings = JSON.parse(JSON.stringify(nextProps.settings));\n if (!settings.tagCard && this.state.tagCardArray && this.state.tagCardArray.length) {\n settings.tagCard = typeof this.state.tagCardArray[0] !== 'string' ? this.state.tagCardArray[0].title : this.state.tagCardArray[0];\n }\n\n let newState = null;\n\n if (nextProps.onDebugMessage && nextProps.onDebugMessage.blockId === this.props._id) {\n newState = {};\n newState.debugMessage = JSON.parse(JSON.stringify(nextProps.onDebugMessage));\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = setTimeout(() =>\n this.setState({ debugMessage: null }),\n nextProps.onDebugMessage.hideTimeout || 5000);\n }\n\n if (JSON.stringify(settings) !== JSON.stringify(this.state.settings)) {\n newState = newState || {};\n newState.settings = settings;\n }\n\n if (this.state.enableSimulation !== nextProps.enableSimulation) {\n newState = newState || {};\n newState.enableSimulation = nextProps.enableSimulation;\n }\n\n newState && this.setState(newState);\n }\n\n componentWillUnmount() {\n this.debugHideTimeout && clearTimeout(this.debugHideTimeout);\n this.debugHideTimeout = null;\n }\n\n // called every time, the tagCard changes or at start\n onTagChange(tagCard, cb) {\n // analyse inputs and fill the attributes with default values\n let changed = false;\n let settings = JSON.parse(JSON.stringify(this.state.settings));\n this.state.inputs.forEach(input => {\n if (input.attr && input.defaultValue !== undefined) {\n if (settings[input.attr] === undefined) {\n changed = true;\n settings[input.attr] = input.defaultValue;\n }\n }\n });\n if (changed) {\n this.setState({ settings }, () => cb && cb());\n this.props.onChange(settings);\n } else {\n cb && cb();\n }\n }\n\n // called if trigger added or removed\n onUpdate() {\n // do nothing, but blocks can overwrite it\n }\n\n // called every time if some attribute changes\n onValueChanged(value, attr) {\n // do nothing, but blocks can overwrite it\n }\n\n renderText = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, name, doNotTranslate, doNotTranslateBack } = input;\n return <Fragment key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n label={utils.getName(name)}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </Fragment>;\n }\n\n renderSwitch = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSwitch\n className={className}\n label=''\n customValue\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderNameText = ({ attr, signature, doNotTranslate, defaultValue }, value) => <div\n className={clsx(!!signature ? cls.displayItalic : cls.displayFlex, cls.blockMarginTop)}\n key={attr}>\n {doNotTranslate ? defaultValue : I18n.t(defaultValue)}\n </div>;\n\n renderNumber = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, openCheckbox, doNotTranslate, doNotTranslateBack } = input;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n return visibility ? <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={clsx(className, input.className)}\n fullWidth\n autoComplete=\"off\"\n label={input.noHelperText ? '' : 'number'}\n variant=\"outlined\"\n size=\"small\"\n type=\"number\"\n value={value}\n onChange={onChange}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div> : null;\n }\n\n renderColor = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n type=\"color\"\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderCheckbox = (input, value, onChange) => {\n const { className } = this.props;\n const { settings } = this.state;\n const { attr, backText, frontText, defaultValue, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={cls.displayFlex}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomCheckbox\n className={className}\n size=\"small\"\n style={{ marginRight: 5 }}\n value={typeof settings[attr] === 'boolean' ? settings[attr] : defaultValue}\n customValue\n onChange={onChange}\n />\n {backText && <div onClick={() => onChange(typeof settings[attr] === 'boolean' ? !settings[attr] : !defaultValue)} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderSlider = (input, value, onChange) => {\n const { className } = this.props;\n const { attr, frontText, backText, nameBlock, min, max, step, unit, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr}>\n <div className={cls.displayFlex} style={{ marginRight: 20 }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomSlider\n customValue\n min={min}\n max={max}\n step={step}\n unit={unit}\n className={className}\n autoComplete=\"off\"\n label=\"number\"\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={val => {\n console.log(val);\n onChange(val)\n }}\n />\n {backText && <div style={{ marginLeft: 20 }} className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n }\n\n renderButton = (input, value, onClick) => {\n const { className } = this.props;\n const { attr, frontText, backText, buttonText, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomButton\n label={buttonText}\n fullWidth\n value={value}\n className={className}\n onClick={onClick}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n findIcon = obj => {\n if (!obj) {\n return Promise.resolve(null);\n } else\n if (obj.common?.icon) {\n return Promise.resolve(getSelectIdIcon(obj, '../..'));\n } else if (obj.type === 'state' || obj.type === 'channel') {\n const parts = obj._id.split('.');\n parts.pop();\n const newId = parts.join('.');\n return this.props.socket.getObject(newId)\n .then(obj => this.findIcon(obj))\n .catch(() => null);\n }\n }\n\n renderObjectID = (input, value, onChange) => {\n const { attr, openCheckbox, checkReadOnly } = input;\n const { settings } = this.state;\n const showSelectId = this.state['showSelectId' + attr];\n const { className, socket } = this.props;\n let visibility = true;\n if (openCheckbox) {\n visibility = typeof settings['offset'] === 'boolean' ? settings['offset'] : true\n }\n\n if (settings[attr] && !this.state[settings[attr]]) {\n setTimeout(() => {\n socket.getObject(value)\n .then(obj => {\n this.findIcon(obj)\n .then(icon => this.setState({\n [settings[attr]]: obj,\n [settings[attr] + '___icon']: icon,\n error: checkReadOnly && this.lastObjectIdChange && Date.now() - this.lastObjectIdChange < 1000 && obj?.common?.write === false ? I18n.t('Read only ID selected: %s', settings[attr]) : ''\n }))\n });\n }, 0);\n }\n\n // return null\n return visibility ? <div className={cls.blockMarginTop} key={attr}>\n <div className={cls.displayFlex}>\n {input.title ? <div>{I18n.t(input.title)}</div> : null}\n <CustomInput\n className={className}\n autoComplete=\"off\"\n fullWidth\n disabled\n variant=\"outlined\"\n size=\"small\"\n value={value}\n customValue\n />\n <CustomButton\n icon={this.state[this.state.settings[input.attr] + '___icon']}\n square\n style={{ marginLeft: 7 }}\n value='...'\n className={className}\n onClick={() => {\n const settings = {};\n settings['showSelectId' + attr] = true;\n this.setState(settings);\n }}\n />\n </div>\n {this.state[this.state.settings[input.attr]] && <div className={clsx(cls.nameBlock, cls.displayItalic)}>{Utils.getObjectNameFromObj(this.state[settings[attr]], I18n.getLanguage())}</div>}\n {showSelectId ? <DialogSelectID\n imagePrefix=\"../..\"\n dialogName={'javascript'}\n themeType={Utils.getThemeName()}\n socket={socket}\n statesOnly={true}\n selected={value}\n onClose={() => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings);\n }}\n onOk={(selected, name, common) => {\n const settings = {};\n settings['showSelectId' + attr] = false;\n this.setState(settings, () =>\n // read type of object\n socket.getObject(selected)\n .then(obj => {\n this.lastObjectIdChange = Date.now();\n onChange({\n [attr]: selected,\n [attr + 'Role']: obj.common.role,\n [attr + 'Type']: obj.common.type,\n [attr + 'Unit']: obj.common.unit,\n [attr + 'States']: obj.common.states,\n [attr + 'Min']: obj.common.min,\n [attr + 'Max']: obj.common.max,\n [attr + 'Step']: obj.common.step,\n [attr + 'Def']: obj.common.def,\n [attr + 'Write']: obj.common.write,\n [attr + 'Read']: obj.common.read,\n }, null, () =>\n this.props.setOnUpdate && this.props.setOnUpdate(true))\n }))}\n }\n /> : null}\n </div> : null;\n }\n\n renderIconTag = () => {\n return <div\n className={cls.iconTag}\n onClick={e => {\n if (this.state.settings.tagCard) {\n if (this.state.tagCardArray.length < 3) {\n this.onChangeTag();\n } else {\n this.setState({ openTagMenu: e.currentTarget })\n }\n }\n }}>\n {this.state.settings.tagCard}\n </div>;\n }\n\n renderTime = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomTime\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderSelect = (input, value, onChange) => {\n const { className } = this.props;\n const { name, options, frontText, backText, attr, multiple, doNotTranslate, doNotTranslate2, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{I18n.t(frontText)}</div>}\n <CustomSelect\n attr={attr}\n doNotTranslate={doNotTranslate}\n doNotTranslate2={doNotTranslate2}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n multiple={multiple}\n customValue\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n renderInstance = (input, value, onChange) => {\n const { className, socket } = this.props;\n const { name, options, frontText, backText, attr, adapter, doNotTranslate, doNotTranslateBack } = input;\n if (this.state.hideAttributes.includes(attr)) {\n return null;\n }\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInstance\n attr={attr}\n socket={socket}\n adapter={adapter}\n title={name}\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n customValue\n onInstanceHide={value => this.setState({ hideAttributes: [...this.state.hideAttributes, attr] }, () => onChange(value))} // hide instance if only exactly one exists\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderDialog = (input, value, onChange) => {\n const { onShowDialog, frontText, backText, attr, icon, doNotTranslate, doNotTranslateBack } = input;\n return <div key={attr} className={clsx(cls.displayFlex, cls.blockMarginTop)} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <MaterialDynamicIcon\n iconName={icon}\n className={clsx(cls.iconDialog)}\n onClick={e => onShowDialog && onShowDialog()}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n }\n\n renderModalInput = (input, value, onChange) => {\n const { openModal } = this.state;\n const { className } = this.props;\n const { attr, nameBlock, frontText, backText, noTextEdit, doNotTranslate, doNotTranslateBack} = input;\n return <div key={attr}>\n <div className={clsx(cls.displayFlex, cls.blockMarginTop)}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomInput\n disabled={!!noTextEdit}\n className={className}\n autoComplete=\"off\"\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={value}\n onChange={onChange}\n customValue\n />\n <CustomButton\n square\n // fullWidth\n style={{ marginLeft: 5 }}\n value='...'\n className={className}\n onClick={() => this.setState({ openModal: true })}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>\n {openModal ? <CustomModal\n open={true}\n onApply={val =>\n this.setState({ openModal: false }, () =>\n val !== null && val !== undefined && onChange(val))}\n onClose={() => this.setState({ openModal: false })}\n defaultValue={value}\n textInput={true}\n /> : null}\n {nameBlock && <div className={cls.nameBlock}>{I18n.t(nameBlock)}</div>}\n </div>;\n };\n\n renderDate = (input, value, onChange) => {\n const { attr, backText, frontText, doNotTranslate, doNotTranslateBack } = input\n return <div key={attr} className={cls.displayFlex} style={{ whiteSpace: 'nowrap' }}>\n {frontText && <div className={cls.frontText}>{doNotTranslate ? frontText : I18n.t(frontText)}</div>}\n <CustomDate\n value={value}\n onChange={onChange}\n />\n {backText && <div className={cls.backText}>{doNotTranslateBack ? backText : I18n.t(backText)}</div>}\n </div>;\n };\n\n static getReplacesInText(context) {\n let value = '';\n if (context.trigger?.oidType) {\n value = '.replace(/%s/g, obj.state.val).replace(/%id/g, obj.id).replace(/%name/g, obj.common && obj.common.name).replace(/%old/g, obj.oldState.val)';\n }\n return value;\n }\n\n /////////////////////////////\n renderTags = () => {\n let { tagCardArray, openTagMenu } = this.state;\n let { tagCard } = this.state.settings;\n let result = tagCard !== '=' && tagCard !== '<>' && tagCard !== '>=' && tagCard !== '()' && tagCard !== '.' && tagCard !== '<=' && tagCard !== '<' && tagCard !== '>' ? I18n.t(tagCard) : tagCard;\n if (tagCardArray.length >= 3) {\n result = <div>\n <div aria-controls=\"simple-menu\" aria-haspopup=\"true\"\n onClick={e => {\n this.setState({ openTagMenu: e.currentTarget }, () => {\n this.props.isTourOpen &&\n this.props.tourStep === STEPS.openTagsMenu &&\n setTimeout(() => this.props.setTourStep(STEPS.selectIntervalTag), 300);\n });\n }}>{result}</div>\n <Menu\n id=\"simple-menu\"\n anchorEl={openTagMenu}\n keepMounted\n open={Boolean(openTagMenu)}\n onClose={() => this.setState({ openTagMenu: null })}\n >\n {tagCardArray.map(el => {\n let tag = el;\n if (typeof el !== 'string') {\n tag = el.title;\n }\n return <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 TriggerScriptSave from '../Blocks/TriggerScriptSave';\nimport TriggerSchedule from '../Blocks/TriggerSchedule';\nimport TriggerState from '../Blocks/TriggerState';\nimport ConditionState from '../Blocks/ConditionState';\nimport ConditionTime from '../Blocks/ConditionTime';\nimport ConditionAstrological from '../Blocks/ConditionAstrological';\nimport ActionSetState from '../Blocks/ActionSetState';\nimport ActionExec from '../Blocks/ActionExec';\nimport ActionHTTPCall from '../Blocks/ActionHTTPCall';\nimport ActionPrintText from '../Blocks/ActionPrintText';\nimport ActionPause from '../Blocks/ActionPause';\nimport ActionFunction from '../Blocks/ActionFunction';\nimport ActionSetStateDelayed from '../Blocks/ActionSetStateDelayed';\nimport ActionOperateStates from '../Blocks/ActionOperateStates';\n\nconst StandardBlocks = [\n TriggerSchedule,\n TriggerScriptSave,\n TriggerState,\n ConditionState,\n ConditionTime,\n ConditionAstrological,\n ActionSetState,\n ActionExec,\n ActionHTTPCall,\n ActionPrintText,\n ActionPause,\n ActionFunction,\n ActionSetStateDelayed,\n ActionOperateStates,\n];\n\nexport default StandardBlocks;","import 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 GenericBlock from '../GenericBlock';\nimport I18n from '@iobroker/adapter-react/i18n';\n\nclass ActionOperateStates extends GenericBlock {\n constructor(props) {\n super(props, ActionOperateStates.getStaticData());\n }\n\n isAllTriggersOnState() {\n return this.props.userRules?.triggers?.find(item => item.id === 'TriggerState') &&\n !this.props.userRules?.triggers?.find(item => item.id !== 'TriggerState');\n }\n\n static compile(config, context) {\n let oid1 = `const val2_${config._id} = (await getStateAsync(\"${config.oid1}\")).val;`;\n let oid2 = `const val1_${config._id} = (await getStateAsync(\"${config.oid2}\")).val;`;\n\n return `// ${config.oid1} ${config.operation} ${config.oid2} => ${config.oidResult}\n\\t\\t ${oid1}\n\\t\\t ${oid2}\n\\t\\t_sendToFrontEnd(${config._id}, {val: val1_${config._id} ${config.operation} val2_${config._id}, ack: ${config.tagCard === 'update'}});\n\\t\\tawait setStateAsync(\"${config.oidResult}\", val1_${config._id} ${config.operation} val2_${config._id}, ${config.tagCard === 'update'});`;\n }\n\n static renderValue(val) {\n if (val === null) {\n return 'null';\n } else if (val === undefined) {\n return 'undefined';\n } else if (Array.isArray(val)) {\n return val.join(', ');\n } else if (typeof val === 'object') {\n return JSON.stringify(val);\n } else {\n return val.toString();\n }\n }\n\n renderDebug(debugMessage) {\n return <span>{I18n.t('Set:')} <span className={debugMessage.data.ack ? this.props.classes.valueAck : this.props.classes.valueNotAck}>{ActionOperateStates.renderValue(debugMessage.data.val)}</span></span>;\n }\n\n onTagChange(tagCard, cb, ignore, toggle, useTrigger) {\n const inputs = [];\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID1',\n attr: 'oid1',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderSelect',\n //frontText: 'with',\n options: [\n {value: '+', title: '+'},\n {value: '-', title: '-'},\n {value: '*', title: '*'},\n {value: '/', title: '/'},\n ],\n doNotTranslate: true,\n defaultValue: '+',\n attr: 'operation'\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n title: 'ID2',\n attr: 'oid2',\n defaultValue: '',\n checkReadOnly: false,\n });\n\n inputs.push({\n nameRender: 'renderNameText',\n defaultValue: 'store in',\n attr: 'textEqual',\n });\n\n inputs.push({\n nameRender: 'renderObjectID',\n attr: 'oidResult',\n defaultValue: '',\n checkReadOnly: true,\n });\n\n this.setState({inputs}, () => super.onTagChange(null, () => {\n const settings = JSON.parse(JSON.stringify(this.state.settings));\n this.props.onChange(settings);\n }));\n }\n\n onValueChanged(value, attr, context) {\n this.onTagChange(undefined, undefined, undefined, attr === 'toggle' ? value : undefined, attr === 'useTrigger' ? value : undefined);\n }\n\n onUpdate() {\n this.onTagChange();\n }\n\n static getStaticData() {\n return {\n acceptedBy: 'actions',\n name: 'Operate two states',\n id: 'ActionOperateStates',\n icon: 'AddBox',\n tagCardArray: ['control', 'update'],\n title: 'Operations with two states',\n }\n }\n\n getData() {\n return ActionOperateStates.getStaticData();\n }\n}\n\nexport default ActionOperateStates;\n","import 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,iVBORw0KGgoAAAANSUhEUgAAAGIAAAAeCAYAAADXRcu0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwgAADsIBFShKgAAAABh0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC41ZYUyZQAABxRJREFUaEPdmotTE0ccx/Pn9OG003baaeuoqGh1pPUtIogvFIWqoKLUIiY8whunqKjBKloVsMZQEV8FFBWtgkKtGFoRUWx9gsgzCcl9u3u5JLvJFuk01ITfzGeS++4vd7e/b2739hIVgBFPQEBAAQGEfsJ+gjDvTSIURxK06IoB1AgHwtw3iVAcSdCiu5lwV5T3phGKIwlSeKObEcK8N41QpKiTUlTpOj38mfXqXNYATAoch87zbwPX3/I5hCZQ1Mmpquwj1di4sxzr88r8khmhyzkj0tZ/IiyCLyA0geIwYklqCRaoj/gdwfE6BIwfzxnRpB8lLIIvIDSB4u9GBC2K5UxYETZaWABfQS76Vk2SaqtaPWKMCEk8hAmTp3JGnNz+gbAAXsHW78K97fY8SLZ+idTUHqIcgkpDCp51qBLRyTpsVqc6jdCkZrzWiLg9Z7A255hnm6YIWwpOIyLJTR8iWwrOINxDL8a3RF+ocdc9mRmVwpkwbcpYmGs8O+812GB0qa/FpKie0ZLI5ao02qyjtOBhpHi0E6vV26/Eq7WqdZkHkXn4AsKTiz06aqcYDy1ARUWNR9uSjOPkSDZsy+L1oUK+Qtjgrmech5XsNSrj9Vfo5BkhnBH5iR9znfY6bDi0pghFGCSYfajSdh1pSz1QKezQwiS7OWKK0WoGzlVcxgKSF6F1GeYwIocxIkL7I1alHXVus6zMOEaO5dqmRsQw7TJpVRgge32dEXM37OBMoDw4+S7Xaa/DhkOz9ikC6U7vH71OnfRN6rltcm4ryGuFBN0ZYacGx25Ex8suDNjsQ2BnRzuWkjbOiBQDGv/qgmOQ7H75EonJ9n3EH6pFl5l+z+n5WVF/7bqsO4wI0xrQ/KIX5p4OrMlWjMgph8lkQXXpCed5NHea0HLzhrw9LTSaMyFuxWdch4cFNhwaa0T7WRuXL0A2YtOuU0qn/g12I+jko803IDq3HP1WCZbO+5wRhtvt5L0JSXl6RGYZ0Ge1wdLXg0UZpRgg7rQam7AqU4/CXx7Sc5avLGrEutRjeNxrgc3Uhdg0chUwV0QXee3ueCqfR7TugmzynsPlmJ9wAOMDJ3NGXNj7vrDjXoUNh/YgUxHsIZmfDGqGbET8fzCiig5NinbE2EEOaWOMKMEjMo/UnHblLNtvhGQdQEz+BZJjhVbr2l/u4SpEkmHOFRasUT7HGhFX1kY+asFKou+ofETedyGSvJ++PIEzYc70MbBeFXfcq7DxTzobv07l8wiyEVt0Z52FGjrMHKFoe+qfkaNIjBHH8NQsQf9TlTMnbNs1eRhK3HWFFLAXUYpOWZxSjFDySsPc3y9Pzo03b9nb3eYIGtWnz6KNGH2n9qasBQbN5ow4qP3Io8PDAhuDtTEhvbrWx+ap0neXtGkPugo1dOxGtN2549SMHeQe2fKSuyLaTBLu3Whw5pxo6YFtwIK1Oyvp6aDge72sr9xbKw8x68gw5Jgj9lyiw5WE3XsNHkY0dFrR298r5+4q0GNO7DbOhAkTxqG98h2+KMMFG6L2hkBIkjKRMiE9+UFy5LhuX5U7pNmbdAhcuhXztxx0Fk9MMR4od8lNxmZc/v25/P7APr3TCHr7uqOiWdavX29Eac09ckJkjVNzCSFJP6Kl0wIrKaah6hZemawwv3qKcLJOoMVdT44RkqJHW/cAzJ3PsTKHNyJ6X528335lrpgybxlnROLqT/liDCdsiNod1H2oJDGhtMmLt/QCwxW6Xpi0TI3RM1cgJm6zKiElO3dT/mBzRxHyyurwXclFVDXcx293H0JXZL/7CksuQeGpWqxR7o6yj9fCeK8Nd+8/RmHpRec+Fqfrob/UhPqmVpRX3UBEqv0WmH52mZITs+Nnsl2H2Lxy7COvS1LsX5hFGQa5H5eraxC8eR8CJkzkjKgveo8vgjdpXtfNbbPB6NIzg4Q6wRqGDUWTjUhUa1RfLYpBZMzmXLVGwz3iWOyDjzjUhyqhq26FZOlDFDH7yyUbORMWzh3Dd9xLSI3BruGlYZI8rEhNkfyQQ7WGQE6TbgU5hyC0n/PIpzgfabjjy8+ajPalB65WX5SfK02cEsQZcXwbGQIcHfcionGeDclmcRV8CCG9OOWaI8i2EH956Dfr6zTOhCmTx6K7erh+/CEr9MGCza0dpYjikKzdLtMIQhMo/mLEF7PDOSNy4of/xx/pvtpMrg4bqZMc0qP8AVEeRTKG2yTTn+R20h5S52UbGiZ65AlNoDiMCE86jOCEQp9kzobtnAmUu6W+++PPYAhNcJCUmXc0NOobhERu9EmmzeKfsq4K/1zulPnK/7R+8CJCA/wBUnjKc9YIqoly/QGh6A/QoruZQE0R5voDQtEfIEW/yphASRPl+QtC0dchRXe/GgaoJsr1F4Sir0OLTigiOP7TWibK8x+g+hsk/tajNC8OFQAAAABJRU5ErkJggg==\"","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';\n// import ReactDOM from 'react-dom';\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 this.loadPlugins();\n });\n }\n\n loadPlugins() {\n return;\n /*if (!this.pluginsLoaded) {\n this.pluginsLoaded = true;\n const div = window.document.createElement('div');\n div.socket = this.socket;\n div.setAttribute('id', 'hello');\n window.document.body.appendChild(div);\n window.jsPlugins = {};\n window.React = React;\n\n const script = window.document.createElement('script');\n script.onload = () => {\n ReactDOM.render(React.createElement(window.jsPlugins.JSPluginDemo, {\n socket: this.socket,\n theme: this.state.theme,\n themeName: this.state.themeName,\n themeType: this.state.themeType\n }), div);\n };\n\n script.src = './plugins/bundle.js';\n window.document.documentElement.firstChild.appendChild(script);\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":""}