HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/lcc.kaunokolegija.lt/wp-content/plugins/wp-table-builder/inc/admin/js/admin.js.map
{"version":3,"sources":["WPTB_ActionsField.js","WPTB_BackgroundMenu.js","WPTB_Builder.js","WPTB_Cell.js","WPTB_CutGlueTable.js","WPTB_DropHandle.js","WPTB_ElementCounters.js","WPTB_ElementObject.js","WPTB_ElementIdProvider.js","WPTB_ElementOptions.js","WPTB_Emoji.js","WPTB_ExtraStyles.js","WPTB_GetDirectionAfterReconstruction.js","WPTB_HeaderToolbox.js","WPTB_Helper.js","WPTB_Initializer.js","WPTB_LeftPanel.js","WPTB_Logger.js","WPTB_MultipleSelect.js","WPTB_NotificationManager.js","WPTB_Parser.js","WPTB_Polyfills.js","WPTB_RecalculateIndexes.js","WPTB_Responsive.js","WPTB_Settings.js","WPTB_SortableTable.js","WPTB_Stringifier.js","WPTB_Table.js","WPTB_TableSettingsData.js","WPTB_TableStateSaveManager.js","WPTB_innerElementSet.js","WPTB_Upsells.js","applyGenericItemSettings.js","WPTB_IconManager.js"],"names":["WPTB_ActionsField","_this","this","wptbActions","document","getElementsByClassName","length","addActionField","actionType","thisNode","body","getElementsByTagName","actions","previousNode","activeElem","classList","remove","parentNode","removeChild","btnDelete","createElement","btnCopy","add","appendChild","type","onclick","event","act","target","el","className","match","_typeof","hasOwnProperty","kind","thisRow","WPTB_Helper","rowIsTop","table","findAncestor","contains","dataTitleColumnSet","actionsRemove","WPTB_TableStateSaveManager","tableStateSet","wptbDocumentEventGenerate","copy","elementCopy","activeElement","activeElemParent","infArr","Array","isArray","data","elemProt","tinyMceClear","WPTB_ElementObject","getDOMElement","insertBefore","nextSibling","cloneNode","applyGenericItemSettings","WPTB_innerElementSet","setParameters","btnMove","draggable","ondragstart","dragImages","jsonIconsDirectories","wp","template","IconsDirectories","JSON","parse","getElementIcon","dataTransfer","effectAllowed","setDragImage","setData","style","display","actionsHide","ondragend","elementDragEndClear","coordinatesElement","wptbContainer","getBoundingClientRect","top","parseFloat","left","right","clientWidth","onscroll","leaveFromField","node","relatedTarget","onmouseleave","opacity","key","context","factory","self","global","singletonInstance","getSelectorToolbox","querySelector","removeHighlights","from","getCurrentTable","querySelectorAll","map","cell","calculateRailPositions","columnRailElement","rowRailElement","tableWidth","_currentTable$getBoun","width","tableHeight","height","columnRailHeight","columnRail","concat","mark","currentTable","indexRow","reduce","carry","item","currentRowCellCount","_cell$getBoundingClie","cellX","x","cellWidth","cellDataObject","index","railMark","createRailMark","addEventListener","preventDefault","stopPropagation","store","commit","element","rowRailWidth","rowRail","row","_row$getBoundingClien","rowHeight","rowPositionObject","addSelectorToolbox","toolbox","rowSelector","rowSelectorInnerWrapper","title","WPTB_IconManager","getIcon","then","icon","colSelector","colSelectorInnerWrapper","first","getters","hoveredCell","_getCellsAtColumnInde2","_toArray","getCellsAtColumnIndex","rest","slice","highlightCellLogic","types","selected","column","_toConsumableArray","assignRowClickHandler","getRowSelector","currentActiveRow","hoveredRow","_Array$from4","rowMouseEnter","selectorToolboxVisibility","builderTable","visible","arguments","undefined","dataset","WPTB_Store","get","overflowVisible","assignCellClickHandlers","highlightCell","cellMouseEnter","removeHandlersAndStates","removeEventListener","getColumnSelector","dispatch","watchStoreMutations","suppliedStore","subscribe","_ref4","targetRow","parentY","payload","y","_targetRow$getBoundin","cellsAtIndex","cellToUse","offsetWidth","parentX","_cellToUse$getBoundin","initialized","applyOptions","_ref","headerBg","evenBg","oddBg","headerHoverBg","evenHoverBg","oddHoverBg","header","hoverClass","rowOptions","wptbHeaderBackgroundColor","wptbEvenRowBackgroundColor","wptbOddRowBackgroundColor","wptbHeaderHoverBackgroundColor","wptbEvenRowHoverBackgroundColor","wptbOddRowHoverBackgroundColor","_Array$from2","colorVal","removeProperty","backgroundColor","setProperty","customBgColorRuleSet","customBgColor","wptbBgColor","hasCustomBgColor","includes","targetElement","multiSelection","currentTargetType","nodeName","toLowerCase","state","current","cellIndex","columnIndex","parsedIndex","Number","parseInt","cells","isNaN","_Array$from$splice","splice","cellAtIndex","_slicedToArray","push","init","_ref3","detail","WPTB_ControlsManager","callControlScript","getPreviousSection","elementActionsToolbox","addStore","storeObject","url","window","location","href","WPTB_FIX_MERGE","RegExp","exec","http","urlSet","table_id","detectMode","XMLHttpRequest","ajaxurl","open","setRequestHeader","onreadystatechange","d","wptbTableSetupEl","readyState","status","ans","responseText","getElementById","value","WPTB_Parser","WPTB_Table","wptbTableContainerMaxWidth","maxWidth","tdDefaultWidth","WPTB_Settings","send","counter","ElementCounters","select","MultipleSelect","WPTB_Initializer","settings","cellCount","rows","hasGap","i","Math","max","j","colSpan","rowSpan","forEach","occupied","newCell","xIndex","yIndex","WPTB_Cell","callback","DOMElement","padding","jQuery","val","innerBorderWidth","border","newElementProxy","ondblclick","wptbTableSetup","wptbSortableTable","currentTarget","elementStartScript","wptbPhElement","_loop","wptbElementTypeClass","wptbTypeElementArr","split","wptbInternalActiveElement","_loop2","wptbInternalActiveElementObj","setCoords","getCoords","coords","appendElement","getCellDimensions","tableBorderRight","tableBorderTop","tr","tdStyleObj","getComputedStyle","tdPaddingLeft","getPropertyValue","tdPaddingRight","tdBorderLeftWidth","tdBorderRightWidth","tdPaddingTop","tdPaddingBottom","tdBorderTopWidth","tdBorderBottomWidth","offsetHeight","borderCollapse","tableBorderLeft","tableFullStyleObj","tableBorderBottom","firstChild","lastChild","WPTB_CutGlueTable","cutTableHorizontally","rowBefore","tableRowsIChildren","children","newTdRowspan","td","sameCellBeforeDivision","wptbCell","tdTopStyle","getAttribute","dataXIndex","setAttribute","dataXIndexNext","beforeTd","maxCols","WPTB_RecalculateIndexes","glueTableHorizontally","tds","hasAttribute","dataSameCellBeforeDivision","tdsSameBeforeDivision","tdsSameBeforeDivisionJPlusChildren","k","cutTableVertically","col","rowSpanNewTd","colSpanNewTd","rowChildren","rowChildrenLength","afterTd","colSpanOld","tdLeftStyle","tdAnalogThisX","tdAnalogThisY","glueTableVertically","jFirstTdGlue","WPTB_DropHandle","thisElem","e","wptbDropHandle","wptbDropBorderMarker","wptbDropBorderMarkerTop","wptbDropBorderMarkerRight","wptbDropBorderMarkerBottom","wptbDropBorderMarkerLeft","hide","toPx","getDragRelativeType","cellRelatedDropHandle","range","createRange","setStart","shadowRoot","createContextualFragment","_parentTd$getBounding","getParentOfType","ondragenter","ondragover","ondragleave","ondrop","getData","wptbMovingMode","text","getDOMParentElement","innerElement","innerElementNext","localName","indics","notDragEnter","indexOf","elementDrag","offsetY","layerY","bottom","priv","increment","nextIndex","elementIds","getNewId","elementType","elements","regex","matchArray","wptbElementMutch","kindIndexProt","elementClearFromTinyMce","wpTemplateId","itemHtml","replace","trim","innerHTML","inElems","inElemObj","WPTB_ElementOptions","elementOptionsSet","capture","EmojiConversionDisabler","targetTable","getPluginTables","MutationObserver","mutationList","addedNodes","addedElement","observe","childList","subtree","getSetting","module","exports","applyExtraStyle","tableElement","tableId","head","styleElement","uniqueClass","extraStylesRaw","wptbExtraStyles","extraStyles","atob","_tableElement$getAttr","styleId","baseDocument","id","disableThemeStyles","currentMode","modes","frontEnd","block","insertAdjacentElement","generalStyles","applyGeneralStyles","prefixedStyles","prefixStyleRules","createTextNode","tableQueries","builder","_defineProperty","formatStyles","styles","replaceAll","prefix","splitStyles","prefixedStylesArray","matches","join","baseElement","generalStylesheet","prefixedStyleRules","parentPrefix","applyStyles","mode","allTables","WPTB_GetDirectionAfterReconstruction","typeFirst","typeSecond","verticalProp","responsiveFront","itemsPerHeader","tableMaxCols","switchMode","getDirective","directives","sizeRangeId","responsiveMode","modeOptions","topRowAsHeader","cellStackDirection","cellsPerRow","newTable","WPTB_HeaderToolbox","wrapperQuery","assignButtons","topMargin","button","activateSection","buttonType","toggleToolboxVisibility","show","hideList","currentSection","hexToRgb","hex","result","rgbToHex","rgb","rgbm","isHex","toString","toUpperCase","round","test","icon_directory","protocol","hostname","img","src","wptbDropHandles","wptbDropBorderMarkers","linkHttpCheckChange","link","linkClean","convertToAbs","origin","linkArr","cls","parentElement","getSelectionText","getSelection","selection","elementOptionsPanelClear","elementOptionsGroup","wpColorPickerCheckChangeForTableStateSaving","originalEvent","wpPickerContainer","irisStripMouseUpStateSaveManager","wpColorPickerClear","attribute","isId","input","parent","newInput","results","decodeURIComponent","getTableId","getColumnWidth","xIndexes","getRowHeight","yIndexes","cellHeight","wpColorPickerChange","ui","uiColor","color","classe","number","affectedEl","ps","ratingStar","span","fill","numberImputSize","wptbNumberInputs","maxCount","maxValue","onkeydown","thisValue","String","substring","onkeyup","ucfirst","str","charAt","eventName","details","CustomEvent","bubbles","dispatchEvent","elementId","WPTB_ElementsScriptsLauncher","elementIdMatch","deleteEventHandlers","off","elementChildren","string","search","mceContentBodys","dataMceStyle","removeAttribute","mceEditFocus","contentEditable","spellCheck","mceIds","elementOptionContainerCustomClassSet","targetInput","customClassForContainer","containerElement","elementOptionContainerAdditionalStyles","containerAdditionalStyles","containerStylesArrOne","containerStylesSet","containerStyleStr","containerStyleStrArr","controlsInclude","functionHandler","acceptEventValues","controlConnectFunctionsName","name","elementKind","elementOptionsGroupIds","optionsGroupIds","elementOptionsGroupId","controlActiveElements","controlActiveElement","controlUnicClassName","regularText","controlInfArr","controls","controlName","control","targetControlValue","targetControlValueGet","targetValue","eventValue","oneControlInclude","jsonControlsConfig","controlClassName","wptbContrlStacksConfigId","jsonControlsConfigJson","container","innerElementCopyIncludeHandler","valueDependOnControl","dependOnControlName","targetControlElementClass","valueDependOnControlCorrect","dependOnControlDataGet","dependOnControlElements","valueDependOnControlCorrectObj","dependOnControlElementsArr","s","dependOnControlElementClass","dependOnControlData","Object","keys","unicClass","appearDependOnControl","dependOnMain","showHideTargetControlElement","controlContainerElem","dependOnControlElementsValue","targetControlInactiveVal","prototype","call","targetControlElements","controlActiveVal","dependOnControlElementValue","dependOn","returnBool","coincided","hasNumberAnyParams","targetControlElement","toggleSwitch","dataToggleSwitch","toggleSwitchExecute","dependOnParams","elems","checked","eventType","dependOnValue","bind","switchThirdToggleIf","dataSwitchThirdToggleIf","dependencyElemClass","dependencyElemVal","dependencyElem","dependencyParameters","dependentElemVal","dependentElemClass","dependentElems","dependentElem","console","log","controlsStateManager","targetControlClass","controlChangeIndic","targetControls","elementsSettings","elementSettings","elementsSettingsTemplatesJs","stringify","alignmentValue","elementControlsStateCopy","elementProt","copyElem","elemProtKind","elemCopyKind","elementSettingsProt","elementSettingsCopy","infArrProt","infArrCopy","elementsSettingsTemplateJs","elementSettingValue","elementSettingKeyCopy","elementControlsStateDelete","nameControl","wptbElementDatas","elementIdClassMatch","_wrapRegExp","cellId","_element$dataset","decisiveAttr","groups","elementContainerClass","elementOptionClassIndic","controlElementParent","elementOptionsScriptsContainer","tmplControlsConfig","editActionClassRemove","startsWith","wptbelementOptionClass","childNodes","controlsConfigJson","controlsConfig","elementOptionsGroupIdsInvolved","elementOptionsGroupInvolved","elementOptionsContainerInvolved","controlScriptsObj","controlappearDependOnControl","controltoggleSwitch","controlSwitchThirdToggleIf","controlValueDependOnControl","controlsConfigNew","elementOptionContainer","tmplControlTemplate","controlKey","controlTemplate","elemContainer","elementControlTargetUnicClass","controlParamCalculateValue","elementOptionsGroupChildren","elementOptionsContainerOn","elementOptionsContainer","elementOptionContainerOn","elementOptionClass","controlContainerElemParent","helperJavascriptCode","helperJavascriptElem","innerText","script","controlScriptsArr","editActiveElems","unicClassP","controlParamCalculateValueCreateFunction","handlerFunction","managerExternalCssStyles","elementContainer","selector","cssName","cssValue","cssForThisElement","cssText","cssTextArrFirst","selectorExists","pop","cssTextArrSecond","cssTextArrThird","cssNameExists","registerSections","sections","previousSection","sectionElement","sectionDataId","_this2","displayType","builderAdminContainer","triggerSectionEvent","wptbActiveSection","getCurrentSection","getSectionFromUrl","urlSection","URL","searchParams","some","setupSectionButtons","sectionButtons","vm","sectionName","wptbSectionButton","wptbSectionDisplayType","setupPanelToggleButtons","$","each","find","click","slideToggle","toggleClass","sectionEvent","setupSidebarToggle","toggleSelector","toggleButton","toggle","externalCssStylesDelete","externalCssStylesCopy","copyElement","cssForNewElement","cssForNewElementInnerHTML","activeElemClass","cssForActiveElement","infArrCopyEl","cssForActiveElementInnerHTML","elementsStylesConvertToObject","stylesElements","stylesObj","styleElemId","elementsStylesSetFromObject","jsonObject","styleCss","getSanitizedHtml","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","FORBID_ATTR","FORBID_TAGS","sanitizeXSS","saveTable","startSaving","previewSaving","tableSaveIndicator","wptbTableStateNumberSave","wptbTableStateNumberShow","bar","toggleTableEditMode","tableClean","messagingArea","postId","code","datas","messagingAreaText","wptb_admin_object","t","paramIdsNecessaryChange","rs","wptbId","styleObjJson","codeClone","columns","WPTB_Stringifier","datas_containers","setTimeout","params","content","elements_datas","elements_styles","security_code","preview_saving","action","builderPageUrl","history","pushState","WPTB_NotificationManager","sendNotification","message","tableStateClear","wptbPreviewBtn","wptbPreviewBtnHref","previewHref","wptbSaveBtn","clickOnFreeSpace","cellModeBackground","wpcdFixedToolbar","elementAjax","dataAjaxData","element_name","element_ajax_data","close","leftScrollPanelCurtain","leftScrollPanelCellSettings","wptbPreviewTable","builderPanel","toggleEditMode","deactivateMultipleSelectMode","wptbPreviewTableTds","manageCellsActive","activateMultipleSelectMode","checkingDimensionValue","dimension","searchIndex","checkSetGetStyleSizeValue","styleName","computedStyleName","elemStyleValue","elementStyles","checkSetGetStyleColorValue","set","elemStyleColorValue","checkSetGetStyleValue","getValueMaxCountSameElementsInArray","arr","maxPropName","check","countEmpty","recalculateIndexes","tableRowsColorsReinstall","tableIndex","tableHeaderBackground","tableEvenRowBackground","tableOddRowBackground","parentType","dragRelativeType","setDragRelativeType","getElementColorStylesHex","showControlsOnElementMount","showElementsListOnRemove","blockTinyMCE","addBlocker","blockerElement","haveChild","removeBlocker","calledByBlock","isTableClean","getTableDirtyStatus","confirm","getTranslation","saveStatus","wptbSaving","availablePluginTables","addHook","tagName","tableGenerator","columnsDecrementButton","columnsIncrementButton","rowsDecrementButton","rowsIncrementButton","columnsInput","rowsInput","WptbResponsive","WPTB_ExtraStyles","subscribeToControl","WPTB_LeftPanel","wptbElementButtons","wptbElement","closeButton","wptbHeader","bgColors","normal","prepareMessage","prepareMessageStyle","messageType","keyName","selectedCells","multipleCellMode","isActivated","pushSelectedCell","flushSelectedCells","getFirst","minXIndex","minYIndex","getLast","last","maxXIndex","maxYIndex","removeAllButFirst","_context$wptb_admin_o","managerData","notificationManager","notificationOptions","options","defaults","parsedOptions","_objectSpread","setControlData","notificationTypes","queueTypes","revealTypes","dismissTypes","div","columnTitleMobile","LAST_ID","image","list","shortcode","starRating","customHTML","circleRating","textIcon","ribbon","badge","styledList","progressBar","WPTB_BlockFixer","_el$className","newClassName","_el$className2","_el$className3","_el$className4","_el$className5","_el$className6","_el$className7","_el$className8","_el$className9","_el$className10","_el$className11","_el$className12","_el$className13","_el$className14","blocks","hasDontEnumBug","propertyIsEnumerable","dontEnums","dontEnumsLength","obj","TypeError","prop","trs","maxColsFull","tdsArr","jMainIter","z","responsiveWrapperId","mainContainerQuery","responsiveTable","loaded","addContainerToDom","mainContainer","Error","responsiveElement","load","startUp","tablePreview","wptbRelativeElements","wptbTableStateSaveManager","wptbUndo","wptbRedo","wptbUndoRedoContainer","tableStateGet","wptbUndoredo","tableTitleField","onbeforeunload","shortcodePopupWindow","previewId","newHref","floor","random","onchange","thisObject","sortingCellMouseMov","xMatch","offsetX","layerX","clientHeight","sortingCellMouseMoveVertical","sortingCellMouseMoveHorizontal","tdMouseLeave","sortableTable","tableWasSorted","tableRowsBefore","tableRowsAfter","tableRowsArr","tableLastCont","rowspan","rowNum","rowsTdFirst","rowsValuesArr","tdYCoordsRowSpanPrevious","tableRowsPushed","tdsChanged","changeSortingTdsCollection","tdRowspan","textElementsValues","textElementsValuesGet","rowsTd","orderBy","setSortedAscDataAttr","sort","prev","next","sortOrder","unshift","trRef","tBody","rowsValObj","colspan","colNum","columnsTdFirst","columnsValuesArr","tdXCoordsColSpanPrevious","tdColspan","columnsTd","tdsColumn","difference","columnsValObj","removeCellsAttrAfterDivision","tdsAll","tableSM","reassignElementsStyles","dataAttr","prevValue","nextValue","textElements","tdIndexSpanPrev","collectionTdsJSpan","collectionTdsJSpanProperty","indexName","indexNameCamelCase","indexNamePerpendicularCamelCase","tdSpanProperty","tableGroupCount","tdsCollectionChanged","collectionTds","tdSpan","cellsStylesScheme","rowsStylesScheme","sortModeSwitcher","active","sortableTableVerticalStart","sortingCellMouseMoveSwitcher","wptbSortableTableVertical","createTableElementsStylesScheme","sortableTableHorizontalStart","wptbSortableTableHorizontal","tableObjectChange","start","elemSelector","elem","objectKey","elementsStylesScheme","elemStyles","sortableTableInitialization","sortModeSwitcherRun","tableOld","switchModeObj","sCMM","dataAttrSortChange","rowsLength","dataYIndexStart","codeMain","tBodyData","firstTd","allTr","tableProps","_codeMain$querySelect","tableStyle","alignment","wptbTableAlignment","enableMaxWidth","wptbApplyTableContainerMaxWidth","minWidth","cellMinWidth","wptbTdWidthAuto","sortHorizontal","sortVertical","tableSpacingX","borderSpacingColumns","tableSpacingY","borderSpacingRows","cols","tableColumns","cellsWidthAutoCount","wptbCellsWidthAutoCount","tdSumMaxWidth","wptbTableTdsSumMaxWidth","fontColor","globalFontColor","linkColor","globalLinkColor","fontSize","globalFontSize","tableBorder","borderWidth","borderColor","borderStyle","headerInnerBorder","scrollX","wptbHorizontalScrollStatus","wptbDisableThemeStyles","stickyFirstColumn","wptbFirstColumnSticky","stickyTopRow","_codeMain$querySelect2","wptbStickyRow","paginationEnable","wptbPaginationEnable","paginationTopRowAsHeader","wptbProPaginationTopRowHeader","rowsPerPage","wptbRowsPerPage","rowsChangeable","wptbRowsChangeable","searchEnable","wptbSearchEnable","searchKeepHeader","wptbProSearchTopRowHeader","searchPosition","wptbSearchbarPosition","role","wptbTableDirectives","responsiveDirectives","wptbResponsiveDirectives","evenRowBg","oddRowBg","hoverHeaderBg","hoverEvenRowBg","hoverOddRowBg","hMatch","props","hightLighted","background","tData","autoWidth","wptbCssTdAutoWidth","autoHeight","wptbCssTdAutoHeight","ownBgColor","wptbOwnBgColor","borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","vAlign","wptbCellVerticalAlignment","isEmpty","highlighted","xSort","sortedVertical","ySort","sortedHorizontal","hideOnMobile","blockEl","WPTB_BlockSerializer","shortCode","_el$className$match","_el$firstElementChild","firstElementChild","margin","imgEl","lTarget","wptbImageAlignment","alt","imgHeight","imgWidth","sizeRelativeTo","wptbImageSizeRelative","size","wptbSize","linkRel","linkTarget","convertToAbsolute","wptbLinkEnableConvertRelative","bWrap","btnDiv","iconEl","labelEl","pEl","_bWrap$className$matc","wptbElementBgColor","wptbElementColor","buttonAlignment","justifyContent","contentAlignment","hoverBg","wptbElementHoverBgColor","hoverColor","wptbElementHoverTextColor","hoverScale","wptbElementHoverScale","wptbButtonIconSrc","iconPosition","iconSize","hasLabel","labelBg","labelColor","labelText","_labelEl$querySelecto","firstLi","firstP","items","_firstP$className$mat","child","toolTipEl","tooltipPosision","_child$className$matc","textAlign","toolTip","toolTipStyle","listIcon","itemSpacing","marginBottom","firstStar","ratingBox","ratingEl","starSize","starColor","_firstStar$querySelec","starCount","showRating","_ratingEl$textContent","textContent","cDiv","wrapper","ratingType","wptbRatingType","wptbRatingNumber","percentageCount","total","wptbTotalNumber","firstIcon","icons","divEl","wptbIconSrc","count","wptbIconNumber","_firstIcon$firstEleme","_ref2","inner","colorDump","pEL","wptbRibbonType","modifications","wptbRibbonModifications","side","wptbRibbonSide","xOffset","wptbRibbonXOffset","yOffset","wptbRibbonYOffset","wptbRibbonWidth","wptbRibbonIconSrc","enableAnimation","animationType","wptbRibbonIconAnimationType","iconEL","_child$className$matc2","_child$firstElementCh","wptbStyledListAlignment","wptbStyledListIconSrc","iconColor","iconSpacing","marginLeft","spaceBetween","wptbTextIconSpaceBetween","wptbTextIconAlignment","wptbTextIconIconSrc","iconLocation","wptbTextIconIconLocation","_el$querySelector","prBar","thickness","strokeWidth","primaryColor","secondaryColor","_wrapper$firstElement","array","wptb_preview_table","cs","noCells","singleCells","multipleCells","cellSettings","cellSelectOperation","cellElement","_getCoords","_getCoords2","position","isShiftActive","shiftKey","cellHighlighted","ele","markedCells","sizeName","getSizeFunctionName","elementControlSizeUnicClass","elementControlSizeFixedUnicClass","cellSizeInputs","cellSizeFixedInput","isSquare","controlKeys","_thisElem$className$m","highlightValue","highlightColInput","settingId","settingElem","substr","highlightRowInput","countMarkedCells","splitButton","drawTable","a","undoSelect","fillTableArray","colspansSums","colspanSumInRow","maxAmountOfCells","apply","maxAmountOfRows","skipInCols","cellsBuffer","xPosition","cellPointer","stepsToMove","reconstraction","insertRow","setMaxAmountOfCells","getMaxAmountOfCells","addColumnWidth","cleaner","tableTdsFor","tableRows","widthIsSet","arrayTdsFromPreviousRow","wptbFixedWidth","tableTdsSumMaxWidthFixed","tableTdsSumMaxWidthAuto","wptbTableSetupWidth","arrayCellsWidthFixedHelper","arrayCellsWidthAutoHelper","tdPaddingCommon","tableTdBorderCommonWidth","cssForTdsWidthAuto","borderLeftWidth","borderRightWidth","tableBorderCommon","tableTdBorderLeftWidth","tableTdBorderRightWidth","CellsWidthAutoCount","tableTdsSumMaxWidth","mergingСellsHorizontally","wptbFixedWidthSize","tableTdWidthAuto","styleElementCreate","cssForTdsWidthAutoOld","addRowHeight","dataYIndex","heightIsSet","arrayTdsPrevious","wptbFixedHeight","forBreak","mergingCellsVertically","addColumnEnd","currentTableTd","currentTdStyle","WPTB_TableSettingsData","getTableSetting","addColumnStart","firstCell","addColumnAfter","c_pos","cellStyle","pos","newTd","nextSib","addColumnBefore","addRowToTheEnd","aux","r","addRowToTheStart","addRowBefore","cellNew","addRowAfter","rowAfter","cellsColSpan","tableRIChildrenLength","rNextChildren","rNextChildrenLength","rowStart","columnStart","rowEnd","columnEnd","mergeCells","dimensions","tdsChildrenNew","tdsInternalElements","tdsIntElemLength","firstWidth","firstDataFixedWidth","firstHeight","firstDataFixedHeight","splitCell","cellStyles","cellXIndex","rowChildInsertBefore","rowNext","findRowspannedCells","actualPoints","points","addLackingCells","sumRows","totalColspan","deleteRow","thisRowChildren","nextRow","tdArr","nextRowChildren","nextRowChildrenLength","nextRowChildrenK","jRowChildren","deleteColumn","onresize","setTableSetting","generate","wptbTableStateSaving","wptbNewTableSetup","wptbHighlighted","wptbDirectlyhovered","cssForTdsWidthAutoValue","wptbTableTitle","wptbSetupName","datawptbUndoredo","outerHTML","wptbTableSetupNew","wptbLeftScrollPanelCellSetting","proStatus","mountPointId","mountPoint","classId","onmouseover","WPTB_ElementIdProvider","newDataAttributeName","newDataAttributeValue","wptbNodeattributes","attributes","attr","nodeValue","kindIndexProtArr","node_wptb_element_kind_num","onmouseenter","elemChild","wptbActionsField","_elemChild$children","IconManager","iconList","cachedIcons","prepareIcon","iconSvgString","extraClass","stringifiedVersion","iconWrapper","eClass","getIconList","iconName","getStringifiedVersion","Promise","res","rej","cachedIcon","fetch","resp","ok","iconString","error","err","getIconUrl","iconUrl","iconManager"],"mappings":"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","file":"admin.js","sourcesContent":["var WPTB_ActionsField = function() {\n    //this.wptbBorderMarker;\n    this.wptbActions;\n    if( document.getElementsByClassName( 'wptb-actions' ).length != 0 ) {\n        this.wptbActions = document.getElementsByClassName( 'wptb-actions' )[0];\n    }\n\n    this.addActionField = ( actionType, thisNode ) => {\n        let body = document.getElementsByTagName( 'body' )[0];\n\n        let actions = document.getElementsByClassName( 'wptb-actions' );\n        if( actions.length != 0 ) {\n            let previousNode = actions[0].activeElem;\n            if( previousNode ) {\n                previousNode.classList.remove( 'wptb-directlyhovered' );\n            }\n\n            while( actions.length != 0 ) {\n                actions[0].parentNode.removeChild( actions[0] );\n            }\n        }\n\n        if( actionType == 1 ) {\n\n            let btnDelete, btnCopy;\n\n            btnDelete = document.createElement( 'span' ),\n            btnCopy = document.createElement( 'span' ),\n            actions = document.createElement( 'div' );\n\n            actions.classList.add( 'wptb-actions' );\n            btnDelete.classList.add( 'dashicons', 'dashicons-trash', 'wptb-delete-action' );\n            btnCopy.classList.add( 'dashicons', 'dashicons-admin-page', 'wptb-duplicate-action' );\n\n            actions.appendChild( btnCopy );\n            actions.appendChild( btnDelete );\n\n            body.appendChild( actions );\n\n            actions.activeElem = thisNode;\n\n            actions.type = 1;\n\n            btnDelete.onclick = function( event ) {\n                let act = event.target.parentNode.activeElem,\n                    el = act.parentNode;\n                let infArr = act.className.match( /wptb-element-(.+)-(\\d+)/i );\n//                if( act && infArr && Array.isArray( infArr ) ) {\n//                    WPTB_Helper.elementControlsStateDelete( act );\n//                    WPTB_Helper.externalCssStylesDelete( infArr[0] );\n//                }\n\n                if( act ) {\n                    el.removeChild( act );\n                }\n\n                if( act && typeof act === 'object' && act.hasOwnProperty( 'kind' ) && act.kind == 'text' ) {\n                    let thisRow = el.parentNode;\n\n                    if( WPTB_Helper.rowIsTop( thisRow ) ) {\n                        let table = WPTB_Helper.findAncestor( thisRow, 'wptb-preview-table' );\n\n                        if( table.classList.contains( 'wptb-table-preview-head' ) ) {\n                            WPTB_Helper.dataTitleColumnSet( table );\n                        }\n                    }\n                }\n\n                let wptbActionsField = new WPTB_ActionsField();\n                wptbActionsField.actionsRemove();\n\n                let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n                wptbTableStateSaveManager.tableStateSet();\n\n                WPTB_Helper.wptbDocumentEventGenerate('element:removed:dom', document, act);\n            };\n\n            btnCopy.onclick = ( event ) => {\n                let copy,\n                    infArr,\n                    type;\n                let activeElement = event.target.parentNode.activeElem;\n                let activeElemParent = activeElement.parentNode;\n                infArr = activeElement.className.match( /wptb-element-(.+)-(\\d+)/i );\n                if( infArr && Array.isArray( infArr ) ) {\n                    type = infArr[1];\n                    let data = {};\n                    data.kind = type;\n                    data.elemProt = activeElement;\n                    data.tinyMceClear = true;\n                    copy = new WPTB_ElementObject( data );\n                    //WPTB_Helper.elementControlsStateCopy( activeElement, copy.getDOMElement() );\n                    //WPTB_Helper.externalCssStylesCopy( activeElement, copy.getDOMElement() );\n                    //WPTB_Helper.elementStartScript( copy.getDOMElement() );\n                    copy.getDOMElement().classList.remove('edit-active');\n                    activeElemParent.insertBefore( copy.getDOMElement(), activeElement.nextSibling );\n                } else {\n                    copy = {};\n                    let elementCopy = activeElement.cloneNode( true );\n                    elementCopy.classList.remove( 'wptb-directlyhovered' );\n\n                    copy.getDOMElement = function() {\n                        return elementCopy;\n                    }\n\n                    applyGenericItemSettings( copy );\n\n                    activeElemParent.insertBefore( copy.getDOMElement(), activeElement.nextSibling );\n\n                    WPTB_Helper.wptbDocumentEventGenerate( 'wptb-inner-element:copy', activeElement, copy.getDOMElement() );\n                }\n\n                WPTB_innerElementSet( copy.getDOMElement() );\n\n                let wptbActionsField = new WPTB_ActionsField( 1, activeElement );\n                wptbActionsField.setParameters( activeElement );\n\n                let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n                wptbTableStateSaveManager.tableStateSet();\n            };\n\n\n            if( thisNode.classList.contains( 'wptb-ph-element' ) ) {\n                let btnMove;\n                btnMove = document.createElement( 'span' );\n                btnMove.classList.add( \"dashicons\", \"dashicons-move\", 'wptb-move-action' );\n                btnMove.draggable = true;\n                actions.appendChild( btnMove );\n\n                btnMove.ondragstart = ( event ) => {\n                    let wptbElementIconsDirectories = 'wptb-element-icons-directories';\n                    let tmplIconsDirectories = wp.template( wptbElementIconsDirectories );\n                    let data = {};\n                    let jsonIconsDirectories = tmplIconsDirectories( data );\n                    let IconsDirectories = JSON.parse( jsonIconsDirectories );\n\n                    let dragImages,\n                        actions = event.target.parentNode,\n                        activeElem = actions.activeElem,\n                        infArr,\n                        type;\n                    infArr = activeElem.className.match( /wptb-element-(.+)-(\\d+)/i );\n                    if( infArr && Array.isArray( infArr ) ) {\n                        type = infArr[1];\n                        activeElem.classList.add( 'wptb-moving-mode' );\n\n                        if( IconsDirectories && typeof IconsDirectories === 'object' && IconsDirectories[type] ) {\n                            dragImages =  WPTB_Helper.getElementIcon( IconsDirectories[type] );\n                        }\n\n                        event.dataTransfer.effectAllowed = 'move';\n                        event.dataTransfer.setDragImage( dragImages, 0, 0 );\n                        event.dataTransfer.setData( 'node', 'wptb-element-' + infArr[1] + '-' + infArr[2] );\n                        event.dataTransfer.setData( 'wptb-moving-mode', 'wptb-element-' + infArr[1] + '-' + infArr[2] );\n                        event.dataTransfer.setData( 'wptbElIndic-' + infArr[1], 'wptbElIndic-' + infArr[1] );\n                        let act = event.target.parentNode.activeElem;\n                        if( act.kind == 'text' ) {\n                            let thisRow = act.parentNode.parentNode;\n\n                            if( WPTB_Helper.rowIsTop( thisRow ) ) {\n                                let table = WPTB_Helper.findAncestor( thisRow, 'wptb-preview-table' );\n\n                                if( table.classList.contains( 'wptb-table-preview-head' ) ) {\n                                    WPTB_Helper.dataTitleColumnSet( table );\n                                }\n                            }\n                        }\n                    } else {\n                        this.style.display = 'none';\n                    }\n\n                    this.actionsHide();\n                };\n\n                btnMove.ondragend = ( event ) => {\n                    WPTB_Helper.elementDragEndClear();\n                }\n            }\n\n            actions.style.display = 'flex';\n\n            this.wptbActions = actions;\n        }\n\n        WPTB_Helper.wptbDocumentEventGenerate('wptb:actionfield:generated', document);\n    }\n\n    this.setParameters = ( thisNode ) => {\n\n        if( ! this.wptbActions ) {\n            let actions = document.getElementsByClassName( 'wptb-actions' );\n            if( actions.length > 0 ) {\n                this.wptbActions = actions[0];\n            } else {\n                this.wptbActions = false;\n            }\n        }\n\n        if( this.wptbActions && this.wptbActions.classList.contains( 'wptb-actions' ) ) {\n            this.wptbActions.style.display = 'flex';\n        } else {\n            return;\n        }\n\n        let coordinatesElement = thisNode.getBoundingClientRect();\n\n        let wptbContainer = document.getElementsByClassName( 'wptb-container' )[0];\n        let correctTop = () => {\n            let coordinatesElement = thisNode.getBoundingClientRect();\n            this.wptbActions.style.top = parseFloat( coordinatesElement.top ) - 15 + 'px';\n        }\n        //wptbContainer.removeEventListener( 'scroll', correctTop, false );\n\n        this.wptbActions.style.top = parseFloat( coordinatesElement.top ) - 15 + 'px';\n        this.wptbActions.style.left = ( parseFloat( coordinatesElement.right ) - parseFloat( this.wptbActions.clientWidth ) ) + 1 + 'px';\n\n        this.wptbActions.style.display = 'flex';\n        thisNode.classList.add( 'wptb-directlyhovered' );\n\n        //wptbContainer.addEventListener( 'scroll', correctTop, false );\n        wptbContainer.onscroll = correctTop;\n    }\n\n    this.leaveFromField = ( event, node, actionType ) => {\n        if( ! this.wptbActions ) {\n            let actions = document.getElementsByClassName( 'wptb-actions' );\n            if( actions.length > 0 ) {\n                this.wptbActions = actions[0];\n            } else {\n                this.wptbActions = false;\n            }\n        }\n\n        if( ! this.wptbActions ) {\n            return;\n        }\n\n        if( event.relatedTarget ) {\n            if ( event.relatedTarget.classList.contains( 'wptb-actions' ) ||\n                event.relatedTarget.classList.contains( 'wptb-move-action' ) ||\n                event.relatedTarget.classList.contains( 'wptb-duplicate-action' ) ||\n                event.relatedTarget.classList.contains( 'wptb-delete-action' )  || event.relatedTarget.classList.contains( 'wptb-prebuilt-mark-action' ) )\n            {\n                if( ! this.wptbActions ) {\n                    this.wptbActions = document.getElementsByClassName( 'wptb-actions' )[0];\n                }\n                this.wptbActions.onmouseleave = ( event ) => {\n                    if( event.relatedTarget != null && ( event.relatedTarget.classList.contains( 'wptb-ph-element' ) ||\n                            WPTB_Helper.findAncestor( event.relatedTarget, 'wptb-ph-element') ) && event.relatedTarget != this.wptbActions.activeElem &&\n                        WPTB_Helper.findAncestor( event.relatedTarget, 'wptb-directlyhovered' ) != this.wptbActions.activeElem ) {\n\n//                        this.wptbActions.style.display = 'none';\n//                        event.relatedTarget.parentNode.parentNode.classList.remove( 'wptb-directlyhovered' );\n//\n//                        let wptbActionsField = new WPTB_ActionsField();\n//\n//                        wptbActionsField.addActionField( 1, event.relatedTarget.parentNode.parentNode );\n//\n//                        wptbActionsField.setParameters( event.relatedTarget.parentNode.parentNode );\n                    } else {\n\n                    }\n\n                    let wptbActionsField = new WPTB_ActionsField();\n\n                    wptbActionsField.leaveFromField( event, event.relatedTarget.parentNode.parentNode );\n\n                    event.target.activeElem.classList.remove( 'wptb-directlyhovered' );\n                }\n\n                return;\n            }\n        }\n\n        node.classList.remove( 'wptb-directlyhovered' );\n        this.wptbActions.style.display = 'none';\n\n        if( event.relatedTarget ) {\n            if( event.relatedTarget.classList.contains( 'wptb-ph-element' ) || WPTB_Helper.findAncestor( event.relatedTarget, 'wptb-ph-element' ) ) {\n                this.addActionField( 1, event.relatedTarget.parentNode );\n\n                this.setParameters( event.relatedTarget.parentNode );\n            }\n        }\n    }\n\n    this.actionsRemove = () => {\n        if( ! this.wptbActions ) {\n            let actions = document.getElementsByClassName( 'wptb-actions' );\n            if( actions.length > 0 ) {\n                this.wptbActions = actions[0];\n            }\n        }\n\n        if( this.wptbActions ) {\n            this.wptbActions.parentNode.removeChild( this.wptbActions );\n        }\n    }\n\n    this.actionsHide = () => {\n        if( ! this.wptbActions ) {\n            let actions = document.getElementsByClassName( 'wptb-actions' );\n            if( actions.length > 0 ) {\n                this.wptbActions = actions[0];\n            }\n        }\n\n        if( this.wptbActions ) {\n            this.wptbActions.style.opacity = 0;\n        }\n    }\n}\n","/**\n * UMD for background menu setup.\n */\n(function umd(key, context, factory) {\n    // eslint-disable-next-line no-param-reassign\n    context[key] = factory();\n    // eslint-disable-next-line no-restricted-globals\n})(\"WPTB_BackgroundMenu\", self || global, function wptbBackgroundMenuSetup() {\n    /**\n     * Background menu component.\n     *\n     * @class\n     */\n    function BackgroundMenu() {\n        // whether setup operation done or not\n        this.initialized = false;\n\n        // flux store that will be used with menu\n        let store = null;\n\n        /**\n         * Get current active table on builder.\n         *\n         * @return {HTMLElement | null} found active table\n         */\n        const getCurrentTable = () => {\n            return document.querySelector(\n                \".wptb-table-setup .wptb-preview-table\"\n            );\n        };\n\n        /**\n         * Get selector toolbox element.\n         *\n         * @return {Element | undefined} selector toolbox\n         */\n        const getSelectorToolbox = () => {\n            return document.querySelector(\".wptb-bg-color-selectors\");\n        };\n\n        /**\n         * Get background specific options from table attributes.\n         */\n        const parseOptionsFromTable = () => {\n            const currentTable = getCurrentTable();\n\n            const headerBg = currentTable.dataset.wptbHeaderBackgroundColor;\n            const evenBg = currentTable.dataset.wptbEvenRowBackgroundColor;\n            const oddBg = currentTable.dataset.wptbOddRowBackgroundColor;\n            const headerHoverBg =\n                currentTable.dataset.wptbHeaderHoverBackgroundColor;\n            const evenHoverBg =\n                currentTable.dataset.wptbEvenRowHoverBackgroundColor;\n            const oddHoverBg =\n                currentTable.dataset.wptbOddRowHoverBackgroundColor;\n\n            return {\n                row: {\n                    headerBg,\n                    evenBg,\n                    oddBg,\n                    headerHoverBg,\n                    evenHoverBg,\n                    oddHoverBg,\n                },\n            };\n        };\n\n        /**\n         * Apply color value to element.\n         *\n         * @param {string | null} colorVal color value\n         * @param {Element} element html element\n         */\n        const applyColor = (colorVal, element) => {\n            if (colorVal === \"\" || colorVal === null) {\n                // eslint-disable-next-line no-param-reassign\n                element.style.removeProperty(\"background-color\");\n            } else {\n                // eslint-disable-next-line no-param-reassign\n                element.style.backgroundColor = colorVal;\n            }\n        };\n\n        /**\n         * Row specific operations.\n         *\n         * @param {Object} rowOptions row options object\n         * @param {string} rowOptions.headerBg header color\n         * @param {string} rowOptions.evenBg even row color\n         * @param {string} rowOptions.oddBg odd row color\n         */\n        const rowOperations = ({\n            headerBg,\n            evenBg,\n            oddBg,\n            headerHoverBg,\n            evenHoverBg,\n            oddHoverBg,\n        }) => {\n            const currentTable = getCurrentTable();\n\n            const [header, ...rest] = Array.from(\n                currentTable.querySelectorAll(\"tr\")\n            );\n\n            const hoverClass = \"wptb-row-has-hover\";\n\n            // apply header row color\n            applyColor(headerBg, header);\n\n            // add header hover class and style\n            if (headerHoverBg) {\n                header.classList.add(hoverClass);\n                header.style.setProperty(\"--hover-bg-color\", headerHoverBg);\n            } else header.classList.remove(hoverClass);\n\n            // apply even/odd row color\n            // eslint-disable-next-line array-callback-return\n            rest.map((row, index) => {\n                // ruleset to decide whether row has a custom bg color applied or not\n                const customBgColorRuleSet = [\"\", null, undefined];\n                const customBgColor = row.dataset.wptbBgColor;\n                const hasCustomBgColor = !customBgColorRuleSet.includes(\n                    customBgColor\n                );\n\n                // eslint-disable-next-line no-param-reassign,no-nested-ternary\n                row.style.backgroundColor = hasCustomBgColor\n                    ? customBgColor\n                    : index % 2 === 0\n                    ? evenBg\n                    : oddBg;\n\n                // add row hover class and style\n                if (index % 2 === 0) {\n                    if (evenHoverBg) row.classList.add(hoverClass);\n                    else row.classList.remove(hoverClass);\n\n                    row.style.setProperty(\"--hover-bg-color\", evenHoverBg);\n                } else {\n                    if (oddHoverBg) row.classList.add(hoverClass);\n                    else row.classList.remove(hoverClass);\n\n                    row.style.setProperty(\"--hover-bg-color\", oddHoverBg);\n                }\n            });\n        };\n\n        /**\n         * Apply background options to table.\n         *\n         * @param {null | Object} suppliedOptions options object, if supplied, these options will be used instead of parsing from table itself\n         */\n        this.applyOptions = (suppliedOptions = null) => {\n            const { row: rowOptions } =\n                suppliedOptions || parseOptionsFromTable();\n\n            rowOperations(rowOptions);\n        };\n\n        /**\n         * Remove all highlight visuals from cells.\n         */\n        const removeHighlights = () => {\n            // remove any active highlighted cells\n            const allCells = Array.from(\n                getCurrentTable().querySelectorAll(\"td\")\n            );\n\n            // eslint-disable-next-line array-callback-return\n            allCells.map((cell) => {\n                cell.classList.remove(\"wptb-highlighted\");\n            });\n        };\n\n        /**\n         * Extracted cell highlight logic to use with other parts of component.\n         *\n         * @param {Element} targetElement target element\n         * @param {boolean} multiSelection is multi selection active, multi selection should be enabled for elements after the first selected one onwards\n         */\n        const highlightCellLogic = (targetElement, multiSelection = false) => {\n            const currentTargetType = targetElement.nodeName.toLowerCase();\n\n            if (!multiSelection) {\n                removeHighlights();\n            }\n\n            // only add highlight style to table cell elements\n            if (currentTargetType !== \"td\") {\n                // eslint-disable-next-line no-param-reassign\n                targetElement = targetElement.parentNode;\n            }\n\n            targetElement.classList.add(\"wptb-highlighted\");\n        };\n\n        /**\n         * Highlight selected data cell element.\n         *\n         * @param {Event} event click event\n         */\n        const highlightCell = (event) => {\n            event.preventDefault();\n            event.stopPropagation();\n\n            const currentTargetType = event.target.nodeName.toLowerCase();\n\n            let targetElement = event.target;\n\n            if (currentTargetType !== \"td\") {\n                targetElement = event.target.parentNode;\n            }\n\n            highlightCellLogic(targetElement);\n\n            store.commit(\"setMenuSelectedTableElement\", {\n                type: store.state.types.selected.cell,\n                item: targetElement,\n            });\n        };\n\n        /**\n         * Get column selection element.\n         *\n         * @return {Element} row selection element\n         */\n        const getColumnSelector = () => {\n            const rowSelectionClass = \".wptb-col-selection\";\n            return document.querySelector(rowSelectionClass);\n        };\n\n        /**\n         * Get column rail element\n         *\n         * @return {Element} column rail element\n         */\n        const getColumnRail = () => {\n            return document.querySelector(\n                \".wptb-bg-color-selectors .wptb-bg-column-rail\"\n            );\n        };\n\n        /**\n         * Get row rail element\n         *\n         * @return {Element} row rail element\n         */\n        const getRowRail = () => {\n            return document.querySelector(\n                \".wptb-bg-color-selectors .wptb-bg-row-rail\"\n            );\n        };\n\n        /**\n         * Get column selection element.\n         *\n         * @return {Element} column selection element\n         */\n        const getRowSelector = () => {\n            const columnSelectionClass = \".wptb-row-selection\";\n            return document.querySelector(columnSelectionClass);\n        };\n\n        /**\n         * Handle mouse over event for table rows.\n         *\n         * @param {Event} event event object\n         */\n        const rowMouseEnter = (event) => {\n            // update hovered row element on store\n            store.commit(\"updateHoveredRowElement\", event.target);\n        };\n\n        /**\n         * Handle mouse over event for table cells.\n         *\n         * @param {Event} event event object\n         */\n        const cellMouseEnter = (event) => {\n            const targetElement = event.target;\n\n            // find index of cell element relative to its container row element\n            const index = Array.from(\n                targetElement.parentNode.querySelectorAll(\"td\")\n            ).reduce((carry, current, cellIndex) => {\n                return current === targetElement ? cellIndex : carry;\n            }, -1);\n\n            // update hovered cell element on store\n            store.commit(\"updateHoveredCellElement\", {\n                element: targetElement,\n                index,\n            });\n        };\n\n        /**\n         * Get all cells at the given column index.\n         *\n         * @param {number | string} columnIndex column index\n         */\n        const getCellsAtColumnIndex = (columnIndex) => {\n            // parse index to an integer if its type is not a number\n            const parsedIndex =\n                typeof columnIndex === \"number\"\n                    ? columnIndex\n                    : Number.parseInt(columnIndex, 10);\n\n            const cells = [];\n            // eslint-disable-next-line no-restricted-globals\n            if (!isNaN(parsedIndex)) {\n                // eslint-disable-next-line array-callback-return\n                Array.from(getCurrentTable().querySelectorAll(\"tr\")).map(\n                    (row) => {\n                        const [cellAtIndex] = Array.from(\n                            row.querySelectorAll(\"td\")\n                        ).splice(parsedIndex, 1);\n\n                        // only push the cell to found ones if there is a cell at the given index\n                        if (cellAtIndex) {\n                            cells.push(cellAtIndex);\n                        }\n                    }\n                );\n            }\n\n            return cells;\n        };\n\n        /**\n         * Calculate row selector position relative to supplied table row element.\n         *\n         * @param {Element} targetRow target row element\n         */\n        const rowSelectorPosition = (targetRow) => {\n            const { y: parentY } = document\n                .querySelector(\".wptb-table-setup\")\n                .getBoundingClientRect();\n            const { height, y } = targetRow.getBoundingClientRect();\n\n            const rowSelector = getRowSelector();\n            rowSelector.classList.add(\"wptb-bg-selection-visible\");\n            rowSelector.style.height = `${height}px`;\n            rowSelector.style.top = `${y - parentY}px`;\n\n            // @deprecated\n            // // since row selector is hidden with 'display: none' css rule, should get its size values after it becomes visible\n            // const { width: selectorWidth } = getRowSelector().getBoundingClientRect();\n            // rowSelector.style.left = `${x - parentX - selectorWidth}px`;\n        };\n\n        /**\n         * Calculate position of column selector element.\n         *\n         * @param {number | string} index index of the column relative to current table\n         */\n        const columnSelectorPosition = (index) => {\n            const cellsAtIndex = getCellsAtColumnIndex(index);\n\n            if (cellsAtIndex.length > 0) {\n                const colSelector = getColumnSelector();\n\n                // select the cell width lowest width value to use as a pivot point\n                const cellToUse = cellsAtIndex.reduce((carry, cell) => {\n                    return carry.offsetWidth > cell.offsetWidth ? cell : carry;\n                }, cellsAtIndex[0]);\n\n                const { x: parentX } = document\n                    .querySelector(\".wptb-table-setup\")\n                    .getBoundingClientRect();\n                const { width, x } = cellToUse.getBoundingClientRect();\n\n                colSelector.classList.add(\"wptb-bg-selection-visible\");\n                colSelector.style.left = `${x - parentX}px`;\n                // colSelector.style.top = `${-colSelector.offsetHeight}px`;\n                colSelector.style.width = `${width}px`;\n            }\n        };\n\n        /**\n         * Create rail mark element.\n         *\n         * @return {HTMLDivElement} rail mark element\n         */\n        const createRailMark = () => {\n            const railMark = document.createElement(\"div\");\n            railMark.classList.add(\"wptb-bg-rail-mark\");\n            return railMark;\n        };\n\n        /**\n         * Add column marks to selector rail.\n         *\n         * @param {Element} columnRailElement column rail element\n         */\n        const addColumnMarksToRail = (columnRailElement) => {\n            // clear rail from all previous mark elements\n            // eslint-disable-next-line array-callback-return\n            Array.from(\n                columnRailElement.querySelectorAll(\".wptb-bg-rail-mark\")\n            ).map((mark) => {\n                mark.remove();\n            });\n\n            const currentTable = getCurrentTable();\n            // find row with most columns to use an index\n            // eslint-disable-next-line array-callback-return\n            const indexRow = Array.from(\n                currentTable.querySelectorAll(\"tr\")\n            ).reduce((carry, item) => {\n                if (carry === null) {\n                    return item;\n                }\n                const currentRowCellCount = item.querySelectorAll(\"td\").length;\n                const carryRowCellCount = carry.querySelectorAll(\"td\").length;\n\n                return currentRowCellCount > carryRowCellCount ? item : carry;\n            }, null);\n\n            // get required position data for each cell element at our index row, this position data will be used to put rails on correct places to be in sync with columns\n            const indexRowCellData = Array.from(\n                indexRow.querySelectorAll(\"td\")\n            ).map((cell) => {\n                const { x, width } = cell.getBoundingClientRect();\n                return { cellX: x, cellWidth: width };\n            });\n\n            // eslint-disable-next-line array-callback-return\n            indexRowCellData.map((cellDataObject, index) => {\n                // create a new rail mark element and update its properties\n                const railMark = createRailMark();\n                railMark.style.width = `${cellDataObject.cellWidth}px`;\n                railMark.addEventListener(\"click\", (event) => {\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    store.commit(\"updateHoveredCellElement\", {\n                        element: null,\n                        index,\n                    });\n                });\n                columnRailElement.appendChild(railMark);\n            });\n        };\n\n        /**\n         * Add row marks to selector rail.\n         *\n         * @param {Element} rowRailElement row rail element\n         */\n        const addRowMarksToRail = (rowRailElement) => {\n            // clear any rail mark available within row rail element\n            // eslint-disable-next-line array-callback-return\n            Array.from(\n                rowRailElement.querySelectorAll(\".wptb-bg-rail-mark\")\n            ).map((mark) => {\n                mark.remove();\n            });\n\n            // get position data for row elements in current table\n            const rowsPositionsObject = Array.from(\n                getCurrentTable().querySelectorAll(\"tr\")\n            ).map((row) => {\n                const { height } = row.getBoundingClientRect();\n\n                return { element: row, rowHeight: height };\n            });\n\n            rowsPositionsObject.map((rowPositionObject) => {\n                // create a rail mark element and update its properties\n                const railMark = createRailMark();\n                railMark.style.height = `${rowPositionObject.rowHeight}px`;\n                railMark.addEventListener(\"click\", (event) => {\n                    event.preventDefault();\n                    event.stopPropagation();\n\n                    store.commit(\n                        \"updateHoveredRowElement\",\n                        rowPositionObject.element\n                    );\n                });\n\n                // add rail mark to row rail element\n                rowRailElement.appendChild(railMark);\n            });\n        };\n\n        /**\n         * Calculate rail positions.\n         *\n         * This function will calculate main component position and also fill up rail with column marks.\n         */\n        const calculateRailPositions = () => {\n            const currentTable = getCurrentTable();\n\n            const {\n                width: tableWidth,\n                height: tableHeight,\n            } = currentTable.getBoundingClientRect();\n\n            // column rail position calculations\n            const columnRail = getColumnRail();\n            const {\n                height: columnRailHeight,\n            } = columnRail.getBoundingClientRect();\n            columnRail.style.top = `-${columnRailHeight}px`;\n            columnRail.style.width = `${tableWidth}px`;\n            // add rail marks to column rail\n            addColumnMarksToRail(columnRail);\n\n            // row rail position calculations\n            const rowRail = getRowRail();\n            const { width: rowRailWidth } = rowRail.getBoundingClientRect();\n            rowRail.style.left = `-${rowRailWidth}px`;\n            rowRail.style.height = `${tableHeight}px`;\n            // add rail marks to column rail\n            addRowMarksToRail(rowRail);\n        };\n\n        /**\n         * Selecting an entire row operation handler.\n         */\n        const selectRow = () => {\n            const currentActiveRow = store.getters.hoveredRow;\n\n            if (currentActiveRow) {\n                const [first, ...rest] = Array.from(\n                    currentActiveRow.querySelectorAll(\"td\")\n                );\n\n                // don't activate multi highlight for first element to clear any previous highlighted cell\n                highlightCellLogic(first);\n\n                // activate multi highlight for the rest\n                // eslint-disable-next-line array-callback-return\n                rest.map((cell) => {\n                    highlightCellLogic(cell, true);\n                });\n\n                store.commit(\"setMenuSelectedTableElement\", {\n                    type: store.getters.types.selected.row,\n                    item: currentActiveRow,\n                });\n            }\n        };\n\n        /**\n         * Select cells of an entire column.\n         *\n         * This function will use store index value to determine which column to use.\n         */\n        const selectColumn = () => {\n            const { index } = store.getters.hoveredCell;\n\n            if (index !== null) {\n                const [first, ...rest] = getCellsAtColumnIndex(index);\n                highlightCellLogic(first);\n                // eslint-disable-next-line array-callback-return\n                rest.map((cell) => {\n                    highlightCellLogic(cell, true);\n                });\n\n                store.commit(\"setMenuSelectedTableElement\", {\n                    type: store.getters.types.selected.column,\n                    item: [first, ...rest],\n                });\n            }\n        };\n\n        /**\n         * Add a container that will contain row and column selectors.\n         */\n        const addSelectorToolbox = () => {\n            // main toolbox wrapper\n            const toolbox = document.createElement(\"div\");\n            toolbox.classList.add(\"wptb-bg-color-selectors\");\n\n            // row rail\n            const rowRail = document.createElement(\"div\");\n            rowRail.classList.add(\"wptb-bg-row-rail\");\n\n            // row selector\n            const rowSelector = document.createElement(\"div\");\n            rowSelector.classList.add(\n                \"wptb-row-selection\",\n                \"wptb-bg-selection-item\"\n            );\n            rowSelector.title = \"Select row\";\n\n            const rowSelectorInnerWrapper = document.createElement(\"div\");\n            rowSelectorInnerWrapper.classList.add(\n                \"wptb-bg-selection-item-inner-wrapper\"\n            );\n            rowSelector.appendChild(rowSelectorInnerWrapper);\n\n            WPTB_IconManager.getIcon(\n                \"arrow-alt-circle-right\",\n                \"wptb-selector-icon-wrapper\"\n            ).then((icon) => {\n                rowSelectorInnerWrapper.appendChild(icon);\n            });\n\n            // column rail\n            const columnRail = document.createElement(\"div\");\n            columnRail.classList.add(\"wptb-bg-column-rail\");\n\n            // column selector\n            const colSelector = document.createElement(\"div\");\n            colSelector.classList.add(\n                \"wptb-col-selection\",\n                \"wptb-bg-selection-item\"\n            );\n            colSelector.title = \"Select column\";\n\n            const colSelectorInnerWrapper = document.createElement(\"div\");\n            colSelectorInnerWrapper.classList.add(\n                \"wptb-bg-selection-item-inner-wrapper\"\n            );\n            colSelector.appendChild(colSelectorInnerWrapper);\n\n            WPTB_IconManager.getIcon(\n                \"arrow-alt-circle-down\",\n                \"wptb-selector-icon-wrapper\"\n            ).then((icon) => {\n                colSelectorInnerWrapper.appendChild(icon);\n            });\n\n            // add column selector click event\n            colSelector.addEventListener(\"click\", (event) => {\n                event.preventDefault();\n                event.stopPropagation();\n\n                selectColumn();\n            });\n\n            // add row selector to column rail\n            rowRail.appendChild(rowSelector);\n            // add column selector to column rail\n            columnRail.appendChild(colSelector);\n            // add column rail to toolbox\n            toolbox.appendChild(columnRail);\n            // add row rail to toolbox\n            toolbox.appendChild(rowRail);\n\n            // add toolbox element to its parent container\n            document\n                .querySelector(\".wptb-builder-content .wptb-table-setup\")\n                .appendChild(toolbox);\n        };\n\n        /**\n         * Assign row select handlers for current table.\n         */\n        const assignRowClickHandler = () => {\n            const rowSelector = getRowSelector();\n\n            rowSelector.addEventListener(\"click\", (event) => {\n                event.preventDefault();\n                event.stopPropagation();\n\n                selectRow();\n            });\n\n            const rows = Array.from(getCurrentTable().querySelectorAll(\"tr\"));\n\n            // eslint-disable-next-line array-callback-return\n            rows.map((row) => {\n                row.addEventListener(\"mouseenter\", rowMouseEnter);\n            });\n        };\n\n        /**\n         * Set visibility of selector toolbox.\n         *\n         * @param {boolean} visible visibility state\n         */\n        const selectorToolboxVisibility = (visible = true) => {\n            const toolbox = getSelectorToolbox();\n\n            if (toolbox) {\n                getSelectorToolbox().dataset.visible = visible;\n            }\n\n            // compatibility setup for upsell\n            if (!WPTB_Store.get(\"proStatus\")) {\n                const builderTable = document.querySelector(\n                    \".wptb-table-setup\"\n                );\n\n                if (builderTable) {\n                    builderTable.dataset.overflowVisible = visible;\n                }\n            }\n        };\n\n        /**\n         * Remove row related event listeners and handlers\n         */\n        const removeRowHandlers = () => {\n            // eslint-disable-next-line array-callback-return\n            Array.from(getCurrentTable().querySelectorAll(\"tr\")).map((row) => {\n                // remove event listener for each row element on table\n                row.removeEventListener(\"mouseenter\", rowMouseEnter);\n            });\n\n            // @deprecated\n            // const rowSelector = getRowSelector();\n            // if (rowSelector) {\n            // \t// hide row selector element if any found\n            // \trowSelector.classList.remove('wptb-bg-selection-visible');\n            // }\n\n            // clear up last hovered row element value\n            store.commit(\"updateHoveredRowElement\", null);\n        };\n\n        /**\n         * Assign cell click handlers to data cells.\n         */\n        const assignCellClickHandlers = () => {\n            const cells = Array.from(getCurrentTable().querySelectorAll(\"td\"));\n\n            // eslint-disable-next-line array-callback-return\n            cells.map((cell) => {\n                cell.addEventListener(\"click\", highlightCell);\n                cell.addEventListener(\"mouseenter\", cellMouseEnter);\n            });\n        };\n\n        /**\n         * Remove cell click handlers from data cells.\n         */\n        const removeCellHandlers = () => {\n            const cells = Array.from(getCurrentTable().querySelectorAll(\"td\"));\n\n            // eslint-disable-next-line array-callback-return\n            cells.map((cell) => {\n                cell.removeEventListener(\"click\", highlightCell);\n                cell.removeEventListener(\"mouseenter\", cellMouseEnter);\n            });\n\n            // hide column selector element\n            getColumnSelector().classList.remove(\"wptb-bg-selection-visible\");\n        };\n\n        /**\n         * Clear specific states from store.\n         */\n        const clearStates = () => {\n            store.dispatch(\"clearSelection\");\n            store.dispatch(\"clearHoverStates\");\n        };\n        /**\n         * Clear out hover,edit active etc indicators that might have been stated on table.\n         */\n        const clearTableIndicators = () => {\n            const currentTable = getCurrentTable();\n\n            // remove active edit indicators\n            Array.from(currentTable.querySelectorAll(\".edit-active\")).map(\n                (el) => {\n                    el.classList.remove(\"edit-active\");\n                }\n            );\n\n            // hide element hover toolbox\n            const elementActionsToolbox = document.querySelector(\n                \".wptb-actions\"\n            );\n            if (elementActionsToolbox) {\n                elementActionsToolbox.style.display = \"none\";\n            }\n        };\n\n        /**\n         * Startup positions for selectors.\n         */\n        const startUpPositionsForSelectors = () => {\n            // start both column and row selectors at first row and first column\n            store.commit(\"updateHoveredCellElement\", {\n                element: null,\n                index: 0,\n            });\n            store.commit(\n                \"updateHoveredRowElement\",\n                getCurrentTable().querySelector(\"tr\")\n            );\n        };\n\n        /**\n         * Remove various event listeners and clear out states.\n         */\n        const removeHandlersAndStates = () => {\n            removeCellHandlers();\n            removeRowHandlers();\n            removeHighlights();\n            clearStates();\n        };\n\n        /**\n         * Initialize hook for component.\n         */\n        this.init = () => {\n            // initialize background menu on correct section change\n            document.addEventListener(\"wptbSectionChanged\", ({ detail }) => {\n                // only run setup once\n                if (!this.initialized && detail === \"background_menu\") {\n                    WPTB_ControlsManager.callControlScript(\n                        \"BackgroundMenu\",\n                        \"wptb-background-menu\"\n                    );\n                    this.initialized = true;\n                }\n\n                if (\n                    WPTB_Helper.getPreviousSection() !== \"background_menu\" &&\n                    detail === \"background_menu\"\n                ) {\n                    if (!getSelectorToolbox()) {\n                        addSelectorToolbox();\n                    }\n\n                    selectorToolboxVisibility(true);\n\n                    if (WPTB_Store.get(\"proStatus\")) {\n                        assignCellClickHandlers();\n                    }\n\n                    assignCellClickHandlers();\n\n                    assignRowClickHandler();\n                    clearTableIndicators();\n                    calculateRailPositions();\n                    startUpPositionsForSelectors();\n                }\n\n                if (\n                    WPTB_Helper.getPreviousSection() === \"background_menu\" &&\n                    detail !== \"background_menu\"\n                ) {\n                    selectorToolboxVisibility(false);\n                    removeHandlersAndStates();\n                }\n            });\n\n            // reapply options after table changed events\n            document.addEventListener(\n                \"wp-table-builder/table-changed/after\",\n                () => {\n                    this.applyOptions();\n                }\n            );\n        };\n\n        /**\n         * Watch store mutations.\n         *\n         * @param {Object} suppliedStore store object\n         */\n        // eslint-disable-next-line no-shadow\n        const watchStoreMutations = (suppliedStore) => {\n            suppliedStore.subscribe(({ type, payload }) => {\n                switch (type) {\n                    case \"updateHoveredRowElement\":\n                        if (payload) {\n                            // update row selector position on hovered row element changes\n                            rowSelectorPosition(payload);\n                        }\n                        break;\n                    case \"updateHoveredCellElement\":\n                        columnSelectorPosition(payload.index);\n                        break;\n                    default:\n                        break;\n                }\n            });\n        };\n\n        /**\n         * Define a flux store for background menu.\n         *\n         * @param {Object} storeObject store object\n         */\n        this.addStore = (storeObject) => {\n            if (!store) {\n                store = storeObject;\n                watchStoreMutations(store);\n            }\n        };\n    }\n\n    // create singleton instance for background menu component\n    const singletonInstance = new BackgroundMenu();\n\n    // initialize background menu component\n    singletonInstance.init();\n\n    return singletonInstance;\n});\n","/* eslint-disable */\n(function () {\n  var WPTB_Builder = function () {\n    var table_id = WPTB_Helper.detectMode();\n    if (table_id) {\n      var http = new XMLHttpRequest(),\n        urlSet = ajaxurl + \"?action=get_table\" + \"&id=\" + table_id;\n      http.open(\"GET\", urlSet, true);\n      http.setRequestHeader(\n        \"Content-type\",\n        \"application/x-www-form-urlencoded\"\n      );\n      http.onreadystatechange = function (d) {\n        if (this.readyState == 4 && this.status == 200) {\n          var ans = JSON.parse(http.responseText);\n          document.getElementById(\"wptb-setup-name\").value = ans[0];\n\n          if (ans[1]) {\n            // @deprecated old generate logic\n            // document.getElementsByClassName('wptb-table-generator')[0].style.display = 'none';\n            let wptbTableSetupEl =\n              document.getElementsByClassName(\"wptb-table-setup\")[0];\n            wptbTableSetupEl.appendChild(WPTB_Parser(ans[1]));\n\n            WPTB_FIX_MERGE(wptbTableSetupEl.querySelector(\"table\"));\n\n            let body = document.getElementsByTagName(\"body\")[0];\n\n            WPTB_Table();\n            let element = document.querySelector(\".wptb-preview-table\");\n            if (element) {\n              let infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n              if (!infArr) {\n                element.classList.add(\n                  \"wptb-element-main-table_setting-\" + table_id\n                );\n              }\n\n              if (element.dataset.wptbTableContainerMaxWidth) {\n                wptbTableSetupEl.style.maxWidth =\n                  element.dataset.wptbTableContainerMaxWidth + \"px\";\n\n                element.tdDefaultWidth();\n              }\n            }\n\n            //WPTB_LeftPanel();\n            WPTB_Settings();\n\n            let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n            wptbTableStateSaveManager.tableStateSet();\n          } else {\n            document.getElementsByClassName(\n              \"wptb-table-generator\"\n            )[0].style.display = \"table\";\n          }\n\n          return;\n        }\n      };\n      http.send(null);\n    } else {\n      // @deprecated old generate logic\n      // document.getElementsByClassName('wptb-table-generator')[0].style.display = 'table';\n\n      let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n      wptbTableStateSaveManager.tableStateSet();\n    }\n    document.counter = new ElementCounters();\n    document.select = new MultipleSelect();\n\n    var initializer = WPTB_Initializer();\n    settings = WPTB_Settings();\n  };\n\n  let url = window.location.href,\n    regex = new RegExp(\"[?&]page=wptb-builder\"),\n    results = regex.exec(url);\n  if (results) {\n    document.addEventListener(\"DOMContentLoaded\", WPTB_Builder);\n  }\n\n  var WPTB_FIX_MERGE = function (table) {\n    if (!table) return;\n    let cellCount = table.rows[0].cells.length;\n    let hasGap = false;\n    for (let i = 0; i < table.rows.length; i++) {\n      const row = table.rows[i];\n      cellCount = Math.max(cellCount, row.cells.length);\n\n      if (row.cells.length !== cellCount) {\n        hasGap = true;\n      }\n      for (let j = 0; j < row.cells.length; j++) {\n        const cell = row.cells[j];\n        if (cell.colSpan > 1 || cell.rowSpan > 1) {\n          return;\n        }\n      }\n    }\n\n    if (!hasGap) return;\n\n    const cell = document.createElement(\"td\");\n    cell.className = \"wptb-cell wptb-droppable\";\n\n    Array.from(table.rows).forEach((row, i) => {\n      let occupied = row.cells.length;\n      while (occupied < cellCount) {\n        const newCell = (row.cells[row.cells.length - 1] || cell).cloneNode(\n          false\n        );\n        newCell.dataset.xIndex = occupied;\n        newCell.dataset.yIndex = i;\n        row.appendChild(newCell);\n        occupied++;\n      }\n    });\n  };\n})();\n","var WPTB_Cell = function ( callback, DOMElement ) {\n\n    function highlightRow(td) {\n        var parentRow = td.parentNode,\n            columnCount = parseInt(document.getElementById('wptb-columns-number').value),\n            tds = document.getElementsByClassName('wptb-preview-table')[0].getElementsByTagName('td');\n        for (var i = 0; i < tds.length; i++) {\n            tds[i].classList.remove('wptb-highlighted-row-first', 'wptb-highlighted-row-last', 'wptb-highlighted-row-inner', 'wptb-highlighted-column-first', 'wptb-highlighted-column-last', 'wptb-highlighted-column-inner');\n        }\n        for (var i = 0; i < columnCount; i++) {\n\n            var classToAdd = i == 0 ? 'wptb-highlighted-row-first' : i == columnCount - 1 ? 'wptb-highlighted-row-last' : 'wptb-highlighted-row-inner';\n            var ttd = parentRow.getElementsByTagName('td')[i];\n            if (ttd !== td) {\n                ttd.classList.add(classToAdd);\n            }\n        }\n    }\n\n    function highlightColumn(td) {\n\n        var index,\n            parentRow = td.parentNode,\n        columnCount = parseInt(document.getElementById('wptb-columns-number').value), rowCount = parseInt(document.getElementById('wptb-rows-number').value), table = document.getElementsByClassName('wptb-preview-table')[0];\n        for (var i = 0; i < columnCount; i++) {\n            if (parentRow.getElementsByTagName('td')[i] === td) {\n                index = i;\n                break;\n            }\n        }\n\n        for (var i = 0; i < rowCount; i++) {\n            var classToAdd = i == 0 ? 'wptb-highlighted-column-first' : i == rowCount - 1 ? 'wptb-highlighted-column-last' : 'wptb-highlighted-column-inner';\n            var tr = table.getElementsByTagName('tr')[i];\n            if (tr.getElementsByTagName('td')[index] !== td) {\n                tr.getElementsByTagName('td')[index].classList.add(classToAdd);\n            }\n        }\n    }\n\n    if( ! DOMElement ) {\n        DOMElement = document.createElement(\"td\");\n\n        DOMElement.style.padding = jQuery('#wptb-table-padding-number').val() + 'px';\n\n        var innerBorderWidth = jQuery('#wptb-table-inner-border-number').val();\n\n        if (innerBorderWidth != '' && parseInt(innerBorderWidth) != 0) {\n            DOMElement.style.border = innerBorderWidth + 'px solid ' + jQuery('#wptb-table-border-color').val();\n        }\n\n        DOMElement.classList.add('wptb-droppable', 'wptb-cell');\n\n        // Add Auto text field in each block\n        let element = WPTB_Helper.newElementProxy( 'text' )\n        element = element.getDOMElement();\n\n        DOMElement.appendChild( element )\n    }\n\n    DOMElement.draggable = false;\n    if ( callback ) {\n        DOMElement.onclick = callback;\n    }\n\n    // Cell double click handler\n    DOMElement.ondblclick = function( event ) {\n        event.stopPropagation();\n        let wptbTableSetup = document.querySelector('.wptb-table-setup')\n        if(wptbTableSetup && !wptbTableSetup.classList.contains('wptb-preview-table-manage-cells') &&\n            (event.target.dataset.yIndex !== '0' || wptbTableSetup.dataset.wptbSortableTable !== '1') &&\n            event.target == event.currentTarget) {\n            WPTB_Helper.wptbDocumentEventGenerate( 'table:cell:dblclick', event.target )\n\n            let element = WPTB_Helper.newElementProxy( 'text' )\n            element = element.getDOMElement()\n\n            DOMElement.appendChild( element )\n\n            WPTB_innerElementSet( element );\n        }\n    }\n\n    WPTB_innerElementSet( DOMElement );\n\n    WPTB_Helper.elementStartScript( DOMElement, 'table_cell_setting' );\n\n    let wptbPhElement = DOMElement.getElementsByClassName( 'wptb-ph-element' );\n\n    if ( wptbPhElement.length > 0 ) {\n        for( let i = 0; i < wptbPhElement.length; i++ ) {\n            wptbPhElement[i].getDOMElement = function() {\n                return wptbPhElement[i];\n            }\n\n            WPTB_innerElementSet( wptbPhElement[i] );\n\n            let wptbElementTypeClass = wptbPhElement[i].className.match( /wptb-element-((.+-)\\d+)/i );\n            if( wptbElementTypeClass && Array.isArray( wptbElementTypeClass ) ) {\n                let wptbTypeElementArr = wptbElementTypeClass[1].split( '-' );\n                wptbPhElement[i].kind = wptbTypeElementArr[0];\n                applyGenericItemSettings( wptbPhElement[i], wptbElementTypeClass[1] );\n                let wptbInternalActiveElement = wptbPhElement[i].getElementsByClassName( 'wptb-in-element' );\n                if ( wptbInternalActiveElement.length > 0 ) {\n                    for ( let j = 0; j < wptbInternalActiveElement.length; j++ ) {\n                        let wptbInternalActiveElementObj = {};\n                        wptbInternalActiveElementObj.getDOMElement = function() {\n                            return wptbInternalActiveElement[j];\n                        }\n\n                        applyGenericItemSettings( wptbInternalActiveElementObj );\n                    }\n                }\n            }\n        }\n    }\n\n    this.getDOMElement = function () {\n        return DOMElement;\n    };\n\n    this.setCoords = function (y, x) {\n        var el = this.getDOMElement();\n        el.dataset.yIndex = y;\n        el.dataset.xIndex = x;\n    };\n\n    this.getCoords = function () {\n        var coords,\n            el = this.getDOMElement();\n        coords.x = el.dataset.xIndex;\n        coords.y = el.dataset.yIndex;\n        return coords;\n    };\n\n    this.appendElement = function (node) {\n        getDOMElement().appendChild(node);\n    };\n\n    DOMElement.getCellDimensions = function() {\n\n        let tdStyleObj = window.getComputedStyle( this, null );\n\n        let tdPaddingLeft = tdStyleObj.getPropertyValue( 'padding-left' );\n        let tdPaddingRight = tdStyleObj.getPropertyValue( 'padding-right' );\n\n        let tdBorderLeftWidth = tdStyleObj.getPropertyValue( 'border-left-width' );\n        let tdBorderRightWidth = tdStyleObj.getPropertyValue( 'border-right-width' );\n\n        let tdPaddingTop = tdStyleObj.getPropertyValue( 'padding-top' );\n        let tdPaddingBottom = tdStyleObj.getPropertyValue( 'padding-bottom' );\n\n        let tdBorderTopWidth = tdStyleObj.getPropertyValue( 'border-top-width' );\n        let tdBorderBottomWidth = tdStyleObj.getPropertyValue( 'border-bottom-width' );\n\n        let width = parseInt( this.offsetWidth, 10 ) -\n            parseInt( tdPaddingLeft, 10 ) -\n            parseInt( tdPaddingRight, 10 );\n\n        let height = parseInt( this.offsetHeight, 10 ) -\n            parseInt( tdPaddingTop, 10 ) -\n            parseInt( tdPaddingBottom, 10 );\n        let table = WPTB_Helper.findAncestor( this, 'wptb-preview-table' );\n        if(table) {\n            if(table.style.borderCollapse === 'collapse') {\n                width = width - ( parseInt( tdBorderLeftWidth, 10 ) / 2 ) -\n                    ( parseInt( tdBorderRightWidth, 10 ) / 2 );\n                height = height - ( parseInt( tdBorderTopWidth, 10 ) / 2 ) -\n                    ( parseInt( tdBorderBottomWidth, 10 ) / 2 );\n                let tableFullStyleObj = window.getComputedStyle( table, null );\n                let tableBorderLeft = tableFullStyleObj.getPropertyValue( 'border-left-width' );\n                let tableBorderRight = tableFullStyleObj.getPropertyValue( 'border-right-width' );\n                let tableBorderTop = tableFullStyleObj.getPropertyValue( 'border-top-width' );\n                let tableBorderBottom = tableFullStyleObj.getPropertyValue( 'border-bottom-width' );\n\n                let tr = this.parentNode;\n                if( tr && tr.nodeName.toLowerCase() === 'tr' ) {\n                    if( tr.firstChild && tr.firstChild.dataset.xIndex === this.dataset.xIndex ) {\n                        if( parseInt( tableBorderLeft, 10 ) > parseInt( tdBorderLeftWidth, 10 ) ) {\n                            width += -( parseInt( tableBorderLeft, 10 ) - parseInt( tdBorderLeftWidth, 10 ) ) / 2;\n                        }\n                    }\n\n                    if( tr.lastChild && tr.lastChild.dataset.xIndex === this.dataset.xIndex ) {\n                        if( parseInt( tableBorderRight, 10 ) > parseInt( tdBorderRightWidth, 10 ) ) {\n                            width += -( parseInt( tableBorderRight, 10 ) - parseInt( tdBorderRightWidth, 10 ) ) / 2;\n                        }\n                    }\n\n                    let body = tr.parentNode;\n                    if( body && body.nodeName.toLowerCase() === 'body' ) {\n                        if( body.firstChild && body.firstChild.firstChild.dataset.yIndex === this.dataset.yIndex ) {\n                            if( parseInt( tableBorderTop, 10 ) > parseInt( tdBorderTopWidth, 10 ) ) {\n                                height += ( parseInt( tableBorderTop, 10 ) - parseInt( tdBorderTopWidth, 10 ) ) / 2;\n                            }\n                        }\n\n                        if( body.lastChild && body.lastChild.firstChild.dataset.yIndex === this.dataset.yIndex ) {\n                            if( parseInt( tableBorderBottom, 10 ) > parseInt( tdBorderBottomWidth, 10 ) ) {\n                                height += ( parseInt( tableBorderBottom, 10 ) - parseInt( tdBorderBottomWidth, 10 ) ) / 2;\n                            }\n                        }\n                    }\n                }\n            } else if(table.style.borderCollapse === 'separate') {\n                width = width - parseInt( tdBorderLeftWidth, 10 ) -\n                    parseInt( tdBorderRightWidth, 10 );\n                height = height - parseInt( tdBorderTopWidth, 10 ) -\n                    parseInt( tdBorderBottomWidth, 10 );\n            }\n        }\n\n        return {\n            width: parseInt( width ),\n            height: parseInt( height )\n        };\n    }\n\n    return this;\n};\n","let WPTB_CutGlueTable = {\n    cutTableHorizontally: function (rowBefore, table) {\n        if( table && table.rows[rowBefore] ) {\n            for( let i = 0; i < rowBefore; i++ ) {\n                let tableRowsIChildren = table.rows[i].children;\n\n                for( let j = 0; j < tableRowsIChildren.length; j++ ) {\n                    if ( tableRowsIChildren[j].rowSpan > 1 && tableRowsIChildren[j].rowSpan > rowBefore - i ) {\n                        let newTdRowspan = tableRowsIChildren[j].rowSpan - rowBefore + i;\n                        tableRowsIChildren[j].rowSpan = rowBefore - i;\n                        if( ! tableRowsIChildren[j].dataset.sameCellBeforeDivision ) {\n                            tableRowsIChildren[j].dataset.sameCellBeforeDivision = 'r' + i + 'c' + j;\n                        }\n\n                        let td;\n                        if(table.hasOwnProperty('wptbCell')) {\n                            td = new table.wptbCell( table.mark );\n                            td = td.getDOMElement();\n                        } else {\n                            td = document.createElement('td');\n                        }\n\n                        let tdTopStyle = tableRowsIChildren[j].getAttribute( 'style' );\n                        td.setAttribute( 'style', tdTopStyle );\n                        td.colSpan = tableRowsIChildren[j].colSpan;\n                        td.rowSpan = newTdRowspan;\n                        td.dataset.sameCellBeforeDivision = tableRowsIChildren[j].dataset.sameCellBeforeDivision;\n\n                        let dataXIndex = tableRowsIChildren[j].dataset.xIndex;\n                        let dataXIndexNext = parseInt( dataXIndex ) + parseInt( tableRowsIChildren[j].colSpan );\n                        let beforeTd;\n                        while( ! beforeTd && dataXIndexNext < table.maxCols ) {\n                            beforeTd = table.rows[rowBefore].querySelector( '[data-x-index=\"' + dataXIndexNext + '\"]' );\n                            dataXIndexNext++;\n                        }\n                        table.rows[rowBefore].insertBefore( td, beforeTd );\n\n                        WPTB_RecalculateIndexes(table);\n                    }\n                }\n            }\n        }\n    },\n    glueTableHorizontally: function (table) {\n        if(table) {\n            let tds = [...table.getElementsByTagName( 'td' )];\n            for( let i = 0; i < tds.length; i++ ) {\n                if( tds[i].hasAttribute( 'data-same-cell-before-division' ) ) {\n                    let dataSameCellBeforeDivision = tds[i].dataset.sameCellBeforeDivision;\n                    let tdsSameBeforeDivision = table.querySelectorAll( '[data-same-cell-before-division=\"' + dataSameCellBeforeDivision + '\"]' );\n                    for( let j = 0; j < tdsSameBeforeDivision.length; j++ ) {\n                        if( tdsSameBeforeDivision[j] && tdsSameBeforeDivision[j + 1] ) {\n                            if( tdsSameBeforeDivision[j].parentNode && tdsSameBeforeDivision[j + 1].parentNode &&\n                                ! tdsSameBeforeDivision[j].parentNode.classList.contains( 'wptb-row-moving' ) &&\n                                ! tdsSameBeforeDivision[j + 1].parentNode.classList.contains( 'wptb-row-moving' ) ) {\n                                if( ( tdsSameBeforeDivision[j + 1].dataset.yIndex == parseInt( tdsSameBeforeDivision[j].dataset.yIndex ) +\n                                    parseInt( tdsSameBeforeDivision[j].rowSpan ) ) ) {\n                                    tdsSameBeforeDivision[j].rowSpan += tdsSameBeforeDivision[j + 1].rowSpan;\n\n                                    let tdsSameBeforeDivisionJPlusChildren = [...tdsSameBeforeDivision[j + 1].children];\n\n                                    for( let k = 0; k < tdsSameBeforeDivisionJPlusChildren.length; k++ ) {\n                                        tdsSameBeforeDivision[j].appendChild( tdsSameBeforeDivisionJPlusChildren[k] );\n                                    }\n\n                                    let nextRow = tdsSameBeforeDivision[j + 1].parentNode;\n                                    nextRow.removeChild( tdsSameBeforeDivision[j + 1] );\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n            WPTB_RecalculateIndexes(table);\n        }\n    },\n    cutTableVertically: function (col, table) {\n        for ( let i = 0; i < table.rows.length; i++ ) {\n            if( col < table.maxCols ) {\n                if( col != 0 && ( ! table.rows[i].querySelector( '[data-x-index=\"' + col + '\"]' ) ) ) {\n                    let rowChildren = table.rows[i].children;\n\n                    let td,\n                        rowChildrenLength = rowChildren.length,\n                        afterTd,\n                        rowSpanNewTd,\n                        colSpanOld,\n                        colSpanNewTd;\n                    for( let j = 0; j < rowChildrenLength; j++ ) {\n                        if( rowChildren[j].colSpan > 1 && parseInt( rowChildren[j].dataset.xIndex ) < col &&\n                            parseInt( rowChildren[j].dataset.xIndex ) + parseInt( rowChildren[j].colSpan ) > col ) {\n                            if(table.hasOwnProperty('wptbCell')) {\n                                td = new table.wptbCell( table.mark );\n                                td = td.getDOMElement();\n                            } else {\n                                td = document.createElement('td');\n                            }\n\n                            rowSpanNewTd = rowChildren[j].rowSpan;\n                            colSpanOld = rowChildren[j].colSpan;\n                            rowChildren[j].colSpan = col - rowChildren[j].dataset.xIndex;\n                            colSpanNewTd = colSpanOld - rowChildren[j].colSpan;\n\n                            if( ! rowChildren[j].dataset.sameCellBeforeDivision ) {\n                                rowChildren[j].dataset.sameCellBeforeDivision = 'r' + i + 'c' + j;\n                            }\n\n                            let tdLeftStyle = rowChildren[j].getAttribute( 'style' );\n                            td.setAttribute( 'style', tdLeftStyle );\n\n                            let tdAnalogThisX = table.querySelector( '[data-x-index=\"' + col + '\"]' );\n                            if( tdAnalogThisX ) {\n                                td.style.width = tdAnalogThisX.style.width;\n                            }\n\n                            let tdAnalogThisY = table.querySelector( '[data-y-index=\"' + i + '\"]' );\n                            if( tdAnalogThisY ) {\n                                td.style.height = tdAnalogThisY.style.height;\n                            }\n                            if( rowChildren[j + 1] ) {\n                                afterTd = rowChildren[j + 1];\n                            } else {\n                                afterTd = null;\n                            }\n\n                            table.rows[i].insertBefore( td, afterTd );\n                            td.colSpan = colSpanNewTd;\n                            td.rowSpan = rowSpanNewTd;\n                            td.dataset.sameCellBeforeDivision = rowChildren[j].dataset.sameCellBeforeDivision;\n                            i += rowSpanNewTd - 1;\n                            break\n                        }\n                    }\n                }\n            }\n            WPTB_RecalculateIndexes(table);\n        }\n    },\n    glueTableVertically: function (table) {\n        if( table ) {\n            let tds = [...table.getElementsByTagName( 'td' )];\n            for( let i = 0; i < tds.length; i++ ) {\n                if( tds[i].hasAttribute( 'data-same-cell-before-division' ) ) {\n                    let dataSameCellBeforeDivision = tds[i].dataset.sameCellBeforeDivision;\n                    let tdsSameBeforeDivision = [...table.querySelectorAll( '[data-same-cell-before-division=\"' + dataSameCellBeforeDivision + '\"]' )];\n\n                    let jFirstTdGlue = null;\n                    for( let j = 0; j < tdsSameBeforeDivision.length; j++ ) {\n                        if( tdsSameBeforeDivision[j] && tdsSameBeforeDivision[j + 1] &&\n                            ! tdsSameBeforeDivision[j].classList.contains( 'wptb-column-moving' ) &&\n                            ! tdsSameBeforeDivision[j + 1].classList.contains( 'wptb-column-moving' ) ) {\n                            if( ( tdsSameBeforeDivision[j + 1].dataset.xIndex == parseInt( tdsSameBeforeDivision[j].dataset.xIndex ) +\n                                parseInt( tdsSameBeforeDivision[j].colSpan ) ) ) {\n                                if( jFirstTdGlue == null ) {\n                                    jFirstTdGlue = j;\n                                }\n                                tdsSameBeforeDivision[jFirstTdGlue].colSpan += tdsSameBeforeDivision[j + 1].colSpan;\n\n                                let tdsSameBeforeDivisionJPlusChildren = [...tdsSameBeforeDivision[j + 1].children];\n\n                                for( let k = 0; k < tdsSameBeforeDivisionJPlusChildren.length; k++ ) {\n                                    tdsSameBeforeDivision[jFirstTdGlue].appendChild( tdsSameBeforeDivisionJPlusChildren[k] );\n                                }\n\n                                let thisRow = tdsSameBeforeDivision[j + 1].parentNode;\n                                thisRow.removeChild( tdsSameBeforeDivision[j + 1] );\n                            }\n                        }\n                    }\n                }\n            }\n\n            WPTB_RecalculateIndexes(table);\n        }\n    }\n}\n","var WPTB_DropHandle = function (thisElem, e, hide = false) {\n\n    let wptbDropHandle,\n        wptbDropBorderMarker,\n        wptbDropBorderMarkerTop,\n        wptbDropBorderMarkerRight,\n        wptbDropBorderMarkerBottom,\n        wptbDropBorderMarkerLeft;\n\n    /**\n     * Add px suffix to a value\n     *\n     * @param {any} val value\n     * @returns {string} string value suffixed with px\n     */\n    function toPx(val){\n        return `${val}px`;\n    }\n\n    if(WPTB_Helper.getDragRelativeType() === 'td_relative'){\n        let cellRelatedDropHandle = document.querySelector('.wptb-cell-related-drop-handle');\n        if(hide && cellRelatedDropHandle ){\n            cellRelatedDropHandle.style.display = 'none';\n            return;\n        }\n       if(cellRelatedDropHandle === null){\n           const range = document.createRange();\n           range.setStart(document.body , 0);\n\n           const shadowRoot = range.createContextualFragment('<div class=\"wptb-cell-related-drop-handle\">Add to cell</div>').children[0];\n\n           document.body.appendChild(shadowRoot);\n           cellRelatedDropHandle = shadowRoot.children[0];\n       }\n\n       const parentTd = WPTB_Helper.getParentOfType('td', thisElem);\n       const {top,left,width,height} = parentTd.getBoundingClientRect();\n\n       if(!cellRelatedDropHandle){\n           return;\n       }\n\n        cellRelatedDropHandle.style.display = 'flex';\n        cellRelatedDropHandle.style.top = toPx(top);\n        cellRelatedDropHandle.style.width = toPx(width);\n        cellRelatedDropHandle.style.height = toPx(height);\n        cellRelatedDropHandle.style.left = toPx(left);\n\n       return;\n    }\n\n    if ( document.getElementsByClassName( 'wptb-drop-handle' ).length == 0 ) {\n        wptbDropHandle = document.createElement( 'div' );\n        wptbDropHandle.classList.add( 'wptb-drop-handle' );\n        \n        wptbDropBorderMarker = document.createElement( 'div' );\n        wptbDropBorderMarker.classList.add( 'wptb-drop-border-marker' );\n        \n        wptbDropBorderMarkerTop = document.createElement( 'div' ),\n        wptbDropBorderMarkerRight = document.createElement( 'div' ),\n        wptbDropBorderMarkerBottom = document.createElement( 'div' ),\n        wptbDropBorderMarkerLeft = document.createElement( 'div' );\n        \n        wptbDropBorderMarkerTop.classList.add( 'wptb-drop-border-marker-top' );\n        wptbDropBorderMarkerRight.classList.add( 'wptb-drop-border-marker-right' );\n        wptbDropBorderMarkerBottom.classList.add( 'wptb-drop-border-marker-bottom' );\n        wptbDropBorderMarkerLeft.classList.add( 'wptb-drop-border-marker-left' );\n        \n        wptbDropBorderMarker.appendChild( wptbDropBorderMarkerTop );\n        wptbDropBorderMarker.appendChild( wptbDropBorderMarkerRight );\n        wptbDropBorderMarker.appendChild( wptbDropBorderMarkerBottom );\n        wptbDropBorderMarker.appendChild( wptbDropBorderMarkerLeft );\n        \n        let body = document.getElementsByTagName( 'body' );\n        if ( body.length > 0 ) {\n            body[0].appendChild( wptbDropHandle );\n            body[0].appendChild( wptbDropBorderMarker );\n        }\n        \n        wptbDropHandle.ondragenter = function () {\n            if (e.target.classList.contains('wptb-empty')) {\n                e.preventDefault();\n                return false;\n            }\n        }\n\n        wptbDropHandle.ondragover = function (e) {\n            e.preventDefault();            \n        }\n\n        wptbDropHandle.ondragleave = function () {\n\n        }\n        wptbDropHandle.ondrop = function (e) {\n            e.preventDefault();\n            let element;\n            \n            if ( e.dataTransfer.getData('wptbElement') ) {\n                element = WPTB_Helper.newElementProxy( e.dataTransfer.getData('wptbElement') );\n                element = element.getDOMElement();\n            } else {\n                element = document.getElementsByClassName( e.dataTransfer.getData('node') )[0];\n                element.classList.remove( 'wptb-moving-mode' );\n                element.classList.remove( 'wptb-moving-into-same-elem' );\n                element.wptbMovingMode = 1;\n            }\n            \n            let td;\n            if( wptbDropHandle.dataset.text == 'Drop Here' ) {\n                thisElem = wptbDropHandle.getDOMParentElement();\n                if ( thisElem.nodeName.toLowerCase() == 'td' ) {\n                    td = wptbDropHandle.getDOMParentElement();\n                    td.appendChild( element );\n                    WPTB_Helper.wptbDocumentEventGenerate('element:mounted:dom', element);\n                }\n            } else {\n                let innerElement = wptbDropHandle.getDOMParentElement();\n                td = innerElement.parentNode;\n                \n                if( wptbDropHandle.dataset.text == 'Above Element' ) {\n                    td.insertBefore( element, innerElement );\n                    WPTB_Helper.wptbDocumentEventGenerate('element:mounted:dom', element);\n                } else if( wptbDropHandle.dataset.text == 'Below Element' ) {\n                    let innerElementNext = innerElement.nextSibling;\n                    td.insertBefore( element, innerElementNext );\n                    WPTB_Helper.wptbDocumentEventGenerate('element:mounted:dom', element);\n                }\n            }\n            \n            let thisRow = td.parentNode;\n            if( WPTB_Helper.rowIsTop( thisRow ) ) {\n                let table = WPTB_Helper.findAncestor( thisRow, 'wptb-preview-table' );\n\n                if( table.classList.contains( 'wptb-table-preview-head' ) ) {\n                    WPTB_Helper.dataTitleColumnSet( table );\n                }\n            }\n            \n            wptbDropHandle.style.display = 'none';\n            wptbDropBorderMarker.style.display = 'none';\n            \n            WPTB_innerElementSet( element );\n            if( ! element.classList.contains( 'wptb-image-container' ) || element.wptbMovingMode == 1 ) {\n                let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n                wptbTableStateSaveManager.tableStateSet();\n                element.wptbMovingMode == undefined;\n            }\n        }\n        let wptbContainer = document.querySelector( '.wptb-container' );\n        wptbContainer.onscroll = function() {\n            wptbDropHandle.style.display = 'none';\n            wptbDropBorderMarker.style.display = 'none';\n        }\n    } else {\n        wptbDropHandle = document.getElementsByClassName( 'wptb-drop-handle' )[0];\n        wptbDropBorderMarker = document.getElementsByClassName( 'wptb-drop-border-marker' )[0];\n    }\n    if( thisElem && thisElem.nodeName.toLowerCase() == 'td' && \n            thisElem.getElementsByClassName( 'wptb-ph-element' ).length != 0) {\n        return;\n    }\n\n    if( thisElem && thisElem.nodeName.toLowerCase() == 'td' && \n            thisElem.classList.contains('wptb-empty')) {\n        return;\n    }\n    \n    let thisRow;\n    if ( thisElem.localName == 'td' ) {\n        thisRow = thisElem.parentNode;\n    } else if ( thisElem.localName == 'div' && thisElem.classList.contains( 'wptb-ph-element' ) ) {\n        thisRow = thisElem.parentNode.parentNode;\n    }\n    \n    if( WPTB_Helper.rowIsTop( thisRow ) ) {\n        let table = WPTB_Helper.findAncestor( thisRow, 'wptb-preview-table' );\n        \n        if( table.classList.contains( 'wptb-table-preview-head' ) ) {\n            let indics = e.dataTransfer.types;\n            let notDragEnter = false;\n            for ( let i = 0; i < indics.length; i++ ) {\n                let infArr = indics[i].match( /wptbelindic-([a-z]+)/i );\n                if ( infArr && infArr[1] != 'text' ) {\n                    notDragEnter = true;\n                    break;\n                }\n            }\n            if( notDragEnter ) {\n                return;\n            }\n        }\n    }\n    \n    wptbDropHandle.style.width = thisElem.offsetWidth + 'px';\n    let height = thisElem.offsetHeight,\n        coordinatesElement = thisElem.getBoundingClientRect(),\n        left = parseFloat( coordinatesElement.left ),\n        top;\n    wptbDropHandle.style.left = left + 'px';\n    \n    if( e.dataTransfer.types.indexOf( 'wptb-moving-mode' ) != -1 ) {\n        let elementDrag = document.getElementsByClassName( 'wptb-moving-mode' )[0];\n        if( thisElem == elementDrag ) {\n            wptbDropHandle.classList.add('wptb-moving-into-same-elem');\n            wptbDropBorderMarker.classList.add('wptb-moving-into-same-elem');\n        } else {\n            wptbDropHandle.classList.remove('wptb-moving-into-same-elem');\n            wptbDropBorderMarker.classList.remove('wptb-moving-into-same-elem');\n        }\n    }\n    \n    wptbDropHandle.getDOMParentElement = function() {\n        return thisElem;\n    }\n    \n    wptbDropHandle.style.display = 'block';\n    wptbDropBorderMarker.style.display = 'block';\n    if( thisElem.nodeName.toLowerCase() != 'td' ) {\n        let y = e.offsetY==undefined?e.layerY:e.offsetY;\n        top = parseFloat( coordinatesElement.top ) - parseFloat( 11 );\n        wptbDropHandle.dataset.text = 'Above Element';\n        if ( y > height/2 ) {\n            top = parseFloat( coordinatesElement.top ) + height - 1;\n            wptbDropHandle.dataset.text = 'Below Element';\n        }\n    } else {\n        wptbDropHandle.dataset.text = 'Drop Here';\n        top = parseFloat( coordinatesElement.top ) + height/2 - 5;\n    }\n    wptbDropHandle.style.top = top + 'px';\n\n    wptbDropBorderMarker.style.top = coordinatesElement.top + 'px';\n    wptbDropBorderMarker.style.left = coordinatesElement.left + 'px';\n\n    wptbDropBorderMarkerTop = wptbDropBorderMarker.querySelector( '.wptb-drop-border-marker-top' );\n    wptbDropBorderMarkerTop.style.width = ( parseFloat( thisElem.offsetWidth ) - parseFloat( 1 ) ) + 'px';\n\n    wptbDropBorderMarkerRight = wptbDropBorderMarker.querySelector( '.wptb-drop-border-marker-right' );\n    wptbDropBorderMarkerRight.style.height = ( parseFloat( coordinatesElement.bottom ) - parseFloat( coordinatesElement.top ) - 1 ) + 'px';\n    wptbDropBorderMarkerRight.style.left = wptbDropBorderMarkerTop.style.width;\n\n    wptbDropBorderMarkerBottom = wptbDropBorderMarker.querySelector( '.wptb-drop-border-marker-bottom' );\n    wptbDropBorderMarkerBottom.style.width = wptbDropBorderMarkerTop.style.width;\n    wptbDropBorderMarkerBottom.style.top = wptbDropBorderMarkerRight.style.height;\n\n    wptbDropBorderMarkerLeft = wptbDropBorderMarker.querySelector( '.wptb-drop-border-marker-left' );\n    wptbDropBorderMarkerLeft.style.height = wptbDropBorderMarkerRight.style.height;\n}","var ElementCounters = function () {\n\n\tvar priv = [];\n\tpriv['text'] = 0;\n\tpriv['image'] = 0;\n\tpriv['list'] = 0;\n\tpriv['button'] = 0;\n\n\tthis.increment = function (key) {\n\t\tif (!(key in priv)) {\n\t\t\treturn;\n\t\t}\n\t\tpriv[key]++;\n\t}\n\n\tthis.nextIndex = function (key) {\n\t\tif (!(key in priv)) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn priv[key] + 1;\n\t}\n\n\treturn this;\n\n};","var WPTB_ElementObject = function ( data ) {\n    let DOMElement, kindIndexProt, copy;\n    if( ! data.elemProt ) {\n        DOMElement = document.createElement('div'),\n        kindIndexProt = undefined,\n        copy = false;\n        DOMElement.classList.add( 'wptb-' + data.kind + '-container', 'wptb-ph-element' );\n    \n        let wpTemplateId = 'wptb-' + data.kind + '-content';\n        let template = wp.template( wpTemplateId );\n        data.node = DOMElement;\n\n        let itemHtml = template( data );\n        \n        itemHtml = itemHtml.replace(/\\r|\\n|\\t/g, '').trim();\n        DOMElement.innerHTML = itemHtml;\n    } else {\n        DOMElement = data.elemProt.cloneNode( true );\n        DOMElement.classList.remove( 'wptb-directlyhovered' );\n        let wptbElementMutch = data.elemProt.className.match( /wptb-element-((.+-)\\d+)/i );\n        if ( wptbElementMutch && Array.isArray( wptbElementMutch ) ) {\n            kindIndexProt = wptbElementMutch[1];\n        };\n        copy = true;\n        \n        if( data.tinyMceClear ) {\n            DOMElement = WPTB_Helper.elementClearFromTinyMce( DOMElement );\n        }\n    }\n    \n    let inElems = DOMElement.querySelectorAll( '.wptb-in-element' );\n    if( inElems.length > 0 ) {\n        for ( let i = 0; i < inElems.length; i++ ) {\n            let inElemObj = {};\n            inElemObj.getDOMElement = function() {\n                return inElems[i];\n            }\n            \n            applyGenericItemSettings( inElemObj );\n        }\n    }\n     \n    window.addEventListener( 'item:onmouseenter', function( event ) {\n        //console.log( event );\n    }, false);\n    \n    \n    this.kind = data.kind;\n    this.getDOMElement = function () {\n        return DOMElement;\n    };\n    \n    applyGenericItemSettings( this, kindIndexProt, copy );\n    return this;\n}\n","/**\n * UMD module for element id provider component.\n *\n * @param {string} key context key\n * @param {Object} context container context\n * @param {Function} factory factory function\n */\n(function umd(key, context, factory) {\n\t// eslint-disable-next-line no-param-reassign\n\tcontext[key] = factory();\n\t// eslint-disable-next-line no-restricted-globals\n})('WPTB_ElementIdProvider', self || global, () => {\n\t/**\n\t * Element id provider.\n\t *\n\t * @class\n\t */\n\tfunction ElementIdProvider() {\n\t\t// stored element ids per table element type\n\t\tconst elementIds = {};\n\n\t\t/**\n\t\t * First time id startup for given element type.\n\t\t * This function will check all same element types and use highest id as starting point.\n\t\t *\n\t\t * @param {string} elementType element type\n\t\t */\n\t\tconst initializeElementIdForType = (elementType) => {\n\t\t\tconst elements = Array.from(document.querySelectorAll('.wptb-ph-element'));\n\n\t\t\tconst regex = new RegExp(`wptb-element-${elementType}-(\\\\d+)`, 'i');\n\n\t\t\treturn elements.reduce((carry, current) => {\n\t\t\t\tconst matchArray = regex.exec(current.className);\n\n\t\t\t\treturn matchArray !== null && matchArray[1] !== undefined\n\t\t\t\t\t? Math.max(carry, Number.parseInt(matchArray[1], 10))\n\t\t\t\t\t: carry;\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Get a new id for given element type.\n\t\t *\n\t\t * @param {string} elementType element type\n\t\t * @return {number} new if for element\n\t\t */\n\t\tthis.getNewId = (elementType) => {\n\t\t\tif (elementIds[elementType] === undefined) {\n\t\t\t\telementIds[elementType] = initializeElementIdForType(elementType);\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-plusplus\n\t\t\treturn ++elementIds[elementType];\n\t\t};\n\t}\n\n\t// singleton component for element id provider\n\treturn new ElementIdProvider();\n});\n","var WPTB_ElementOptions = function ( element, index, kindIndexProt ) {\n\n    var node = element.getDOMElement();\n    node.addEventListener( 'click', function() {\n        WPTB_Helper.elementOptionsSet( element.kind, this );\n    }, {capture: true} );\n};","/**\n * Disable emoji->image conversion.\n *\n * @param {boolean} status whether conversion is disabled or not\n */\nfunction EmojiConversionDisabler(status) {\n\tconst targetTable = WPTB_Helper.getPluginTables();\n\tif (status && targetTable && !Array.isArray(targetTable)) {\n\t\tconst options = { childList: true, subtree: true };\n\n\t\t/**\n\t\t * Observer callback.\n\t\t *\n\t\t * @param {Array<MutationRecord>} mutationList mutation list\n\t\t */\n\t\tconst observeCallback = (mutationList) => {\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tmutationList.map(({ addedNodes }) => {\n\t\t\t\tArray.from(addedNodes).map((addedElement) => {\n\t\t\t\t\tif (addedElement.nodeName.toLowerCase() === 'p') {\n\t\t\t\t\t\taddedElement.classList.add('wp-exclude-emoji');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\t\tconst observer = new MutationObserver(observeCallback);\n\n\t\tobserver.observe(targetTable, options);\n\t}\n}\n\n// eslint-disable-next-line @wordpress/no-global-event-listener\ndocument.addEventListener('wptb:table:generated', () => {\n\tEmojiConversionDisabler(WPTB_Store.getters.getSetting('emojiConversionDisablerStatus'));\n});\n","/**\n * Extra styles module to add custom css rules defined for individual tables.\n */\n(function UMD(key, context, factory) {\n    if (typeof module !== \"undefined\" && typeof exports === \"object\") {\n        module.exports = factory();\n    } else {\n        // eslint-disable-next-line no-param-reassign\n        context[key] = factory();\n    }\n    // eslint-disable-next-line no-restricted-globals\n})(\"WPTB_ExtraStyles\", self || global, () => {\n    /**\n     * Extra styles frontend manager.\n     *\n     * This component will be responsible for adding and maintaining extra styles defined for tables.\n     *\n     * @class\n     */\n    // eslint-disable-next-line camelcase\n    function WPTB_ExtraStyles() {\n        /**\n         * Extra styles operation modes\n         *\n         * @type {Object}\n         */\n        this.modes = {\n            builder: \"builder\",\n            frontEnd: \"frontEnd\",\n            block: \"block\",\n        };\n\n        /**\n         * Base document for DOM operations.\n         *\n         * @type {Document}\n         */\n        this.baseDocument = document;\n\n        /**\n         * Current mode extra styles are operating on.\n         *\n         * @type {string}\n         */\n        this.currentMode = this.modes.builder;\n\n        /**\n         * General table styles.\n         *\n         * @type {string}\n         */\n        this.generalStyles = \"\";\n\n        /**\n         * HTML queries for table element in different plugin modes\n         *\n         * @type {Object}\n         */\n        const tableQueries = {\n            [this.modes.builder]: \".wptb-table-setup .wptb-preview-table\",\n            [this.modes.block]: \".wptb-block-table-setup .wptb-preview-table\",\n            [this.modes.frontEnd]: \".wptb-table-container .wptb-preview-table\",\n        };\n\n        /**\n         * Format styles.\n         *\n         * @param {string} styles styles\n         * @return {string} formatted styles\n         */\n        const formatStyles = (styles) => {\n            // remove all newlines, comments and '!important' from style string to make it a one liner\n            const cleaned = styles.replaceAll(\n                /(\\r?\\n)|(\\/\\*.+?\\*\\/)|(\\s*!important)/g,\n                \"\"\n            );\n\n            // add '!important' to all rules to override default style rules\n            return cleaned.replaceAll(\";\", \" !important;\");\n        };\n\n        /**\n         * Reform style rules so they will only affect given table id.\n         *\n         * @param {number} prefix prefix string that will be added to all rules\n         * @param {string} extraStyles extra styles\n         * @return {string} new style properties prefixed with table id class\n         */\n        const prefixStyleRules = (prefix, extraStyles) => {\n            // reformat styles into a suitable form for our regexp operations\n            const formattedStyles = formatStyles(extraStyles);\n\n            const splitStyles = formattedStyles.split(\"}\");\n            const prefixedStylesArray = [];\n\n            // eslint-disable-next-line array-callback-return\n            splitStyles.map((split) => {\n                const regExp = new RegExp(/(.+?)\\{/g);\n                const matches = regExp.exec(split);\n\n                if (matches) {\n                    if (prefix === matches[1].trim()) {\n                        prefixedStylesArray.push(split);\n                    } else {\n                        prefixedStylesArray.push(\n                            split.replace(matches[1], `${prefix} ${matches[1]}`)\n                        );\n                    }\n                }\n            });\n\n            return `${prefixedStylesArray.join(\"}\")}}`;\n        };\n\n        /**\n         * Apply general styles to document.\n         *\n         * @param {string} generalStyles general style rules\n         * @param {Node} baseElement element to use as base\n         */\n        const applyGeneralStyles = (generalStyles, baseElement = null) => {\n            const generalStylesheet = document.createElement(\"style\");\n            generalStylesheet.type = \"text/css\";\n            generalStylesheet.id = \"wptb-general-styles\";\n\n            if (!baseElement) {\n                const head =\n                    this.currentMode === this.modes.block\n                        ? this.baseDocument\n                        : this.baseDocument.querySelector(\"head\");\n\n                head.appendChild(generalStylesheet);\n            } else {\n                baseElement.insertAdjacentElement(\n                    \"beforebegin\",\n                    generalStylesheet\n                );\n            }\n            const prefixedStyleRules = prefixStyleRules(\n                generalStyles.parentPrefix,\n                generalStyles.styles\n            );\n            generalStylesheet.appendChild(\n                document.createTextNode(prefixedStyleRules)\n            );\n        };\n\n        /**\n         * Apply defined extra styles for given table element.\n         *\n         * @param {Element} tableElement table element\n         */\n        const applyExtraStyle = (tableElement) => {\n            const extraStylesRaw = tableElement.dataset.wptbExtraStyles;\n            const styleIdPrefix = \"wptb-extra-styles-\";\n\n            if (extraStylesRaw) {\n                const extraStyles = atob(extraStylesRaw);\n\n                const [, tableId] = tableElement\n                    .getAttribute(\"class\")\n                    .match(\n                        /wptb-element-main-table_setting-(?:startedid-)?(\\d+)/\n                    );\n\n                const styleId = styleIdPrefix + tableId;\n\n                const head = this.baseDocument.querySelector(\"head\");\n\n                // since stylesheets are created for frontend only once at startup, checking document head for any created style object will work even with theme disabled tables which at builder, they are not inside a shadow-root\n                let styleElement = head?.querySelector(`#${styleId}`);\n\n                // if no style element is found, create one\n                if (!styleElement) {\n                    styleElement = document.createElement(\"style\");\n                    styleElement.type = \"text/css\";\n                    styleElement.id = styleId;\n\n                    const isThemeStylesDisabled =\n                        tableElement.dataset.disableThemeStyles;\n\n                    // if theme styles are disabled, it means our table is residing inside a shadow-root, place style element inside shadow-root instead of document head\n                    if (\n                        (isThemeStylesDisabled &&\n                            this.currentMode === this.modes.frontEnd) ||\n                        this.currentMode === this.modes.block\n                    ) {\n                        tableElement.insertAdjacentElement(\n                            \"beforebegin\",\n                            styleElement\n                        );\n                        if (\n                            this.currentMode === this.modes.frontEnd &&\n                            this.generalStyles\n                        ) {\n                            applyGeneralStyles(\n                                this.generalStyles,\n                                tableElement\n                            );\n                        }\n                    } else {\n                        head.appendChild(styleElement);\n                    }\n                }\n                const uniqueClass = `.wptb-element-main-table_setting-${tableId}`;\n                // reform style rules so they will only affect the table they are assigned to\n                const prefixedStyles = prefixStyleRules(\n                    uniqueClass,\n                    extraStyles\n                );\n\n                // remove previous styles with updated ones\n                styleElement.innerHTML = \"\";\n                styleElement.appendChild(\n                    document.createTextNode(prefixedStyles)\n                );\n            }\n        };\n\n        /**\n         * Apply extra styles to all available tables on DOM.\n         *\n         * @param {string} mode operation mode to apply styles\n         * @param {string} generalStyles general style rules\n         * @param {Object} baseDocument base document for DOM operations\n         */\n        this.applyStyles = (\n            mode = this.modes.frontEnd,\n            generalStyles = null,\n            baseDocument = document\n        ) => {\n            this.baseDocument = baseDocument;\n            this.currentMode = mode;\n            this.generalStyles = generalStyles;\n\n            const allTables = Array.from(\n                this.baseDocument.querySelectorAll(tableQueries[mode])\n            );\n\n            if (allTables) {\n                allTables.map(applyExtraStyle);\n            }\n\n            // only apply general styles on client frontend if any general styles are defined\n            if (\n                (mode === this.modes.frontEnd || mode === this.modes.block) &&\n                generalStyles\n            ) {\n                applyGeneralStyles(generalStyles);\n            }\n        };\n    }\n\n    // send a singleton instance of manager\n    return new WPTB_ExtraStyles();\n});\n","/**\n *\n * @param {HTMLElement} table\n * @param {string} typeFirst\n * @param {strinig} typeSecond\n * @param {func} workFunction\n * @param {object} responsiveFront\n */\nvar WPTB_GetDirectionAfterReconstruction = function (table, typeFirst, typeSecond, verticalProp, responsiveFront) {\n\n    let itemsPerHeader = 0;\n    let tableMaxCols = table.maxCols;\n    const switchMode = {};\n    let type = [];\n    if (responsiveFront && responsiveFront.getDirective(table)) {\n        switchMode.switch = function (e) {\n            const directives = responsiveFront.getDirective(table)\n\n            let sizeRangeId = 'desktop';\n            if (e && e.detail) {\n                sizeRangeId = e.detail.sizeRangeId;\n            }\n            type = [typeFirst, 1];\n            if (sizeRangeId !== 'desktop') {\n                if (directives.hasOwnProperty('modeOptions')) {\n                    const mode = directives.responsiveMode;\n                    const modeOptions = directives.modeOptions[mode];\n\n                    if (\n                        modeOptions.hasOwnProperty('topRowAsHeader') &&\n                        modeOptions.topRowAsHeader.hasOwnProperty(sizeRangeId) &&\n                        modeOptions.topRowAsHeader[sizeRangeId]\n                    ) {\n                        if (\n                            modeOptions.hasOwnProperty('cellStackDirection') &&\n                            modeOptions.cellStackDirection.hasOwnProperty(sizeRangeId)\n                        ) {\n                            if (modeOptions.cellStackDirection[sizeRangeId] === 'row') {\n                                type = [typeSecond, 2];\n                                itemsPerHeader = tableMaxCols - 1;\n                            } else if (modeOptions.cellStackDirection[sizeRangeId] === 'column') {\n                                if (modeOptions.hasOwnProperty('cellsPerRow')) {\n                                    itemsPerHeader = modeOptions.cellsPerRow[sizeRangeId];\n                                }\n                            }\n                        }\n                    } else {\n                        itemsPerHeader = 0;\n                    }\n                }\n            } else {\n                itemsPerHeader = 0;\n            }\n            return { type, itemsPerHeader }\n        };\n    } else {\n        switchMode.switch = function (e) {\n            type = [typeFirst, 1];\n            if (table.classList.contains('wptb-mobile-view-active')) {\n                if (table.classList.contains('wptb-table-preview-head')) {\n                    type = [typeSecond, 2];\n                    if (type === verticalProp) {\n                        itemsPerHeader = tableMaxCols - 1;\n                    }\n                }\n                let newTable = table.parentNode.parentNode.querySelector('.wptb-preview-table-mobile');\n                return { type, itemsPerHeader, newTable };\n            }\n\n            return { type, itemsPerHeader }\n        };\n    }\n\n    return switchMode;\n}\n","/**\n * WPTB_HeaderToolbox\n *\n * @param {string} wrapperQuery wrapper query for toolbox items\n * @return {Object} header toolbox object\n * @class\n */\n// eslint-disable-next-line camelcase,no-unused-vars\nconst WPTB_HeaderToolbox = function (wrapperQuery) {\n\tthis.wrapperQuery = wrapperQuery;\n\tthis.element = document.querySelector(wrapperQuery);\n\tthis.topMargin = 2;\n\n\t/**\n\t * Assign events to toolbox buttons.\n\t */\n\tconst assignButtons = () => {\n\t\t// use data-button-type dataset property to call related section\n\t\tconst headerButtons = Array.from(this.element.querySelectorAll('[data-button-type]'));\n\n\t\t// eslint-disable-next-line array-callback-return\n\t\theaderButtons.map((button) => {\n\t\t\tbutton.addEventListener('click', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t\tWPTB_Helper.activateSection(e.target.dataset.buttonType);\n\t\t\t});\n\t\t});\n\t};\n\n\t/**\n\t * Toggle visibility of toolbox with the given argument.\n\t *\n\t * @param {boolean} show show toolbox\n\t */\n\tconst toggleToolboxVisibility = (show = false) => {\n\t\tlet { height } = this.element.getBoundingClientRect();\n\n\t\tif (show) {\n\t\t\theight = 0;\n\t\t}\n\n\t\tthis.element.style.top = `calc( 100% - ${height + this.topMargin}px)`;\n\t};\n\n\t/**\n\t * Initialize header toolbox.\n\t */\n\tconst init = () => {\n\t\tassignButtons();\n\t\t// bind toolbox to table generated event\n\t\tdocument.addEventListener('wptb:table:generated', () => {\n\t\t\tthis.element.style.display = 'flex';\n\t\t\tconst { width } = this.element.getBoundingClientRect();\n\t\t\tthis.element.style.left = `calc( 50% - ${width / 2}px)`;\n\n\t\t\tconst hideList = ['table_responsive_menu', 'manage_cells', 'cell_settings'];\n\n\t\t\t// hide toolbox at manage cells and responsive menus\n\t\t\tdocument.addEventListener('wptbSectionChanged', ({ detail }) => {\n\t\t\t\ttoggleToolboxVisibility(!hideList.includes(detail));\n\t\t\t});\n\n\t\t\t// toggle visibility on startup\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\tconst { currentSection } = WPTB_Helper;\n\t\t\ttoggleToolboxVisibility(!hideList.includes(currentSection));\n\t\t});\n\t};\n\n\treturn { init };\n};\n","/* eslint-disable */\nvar WPTB_Helper = {\n  hexToRgb(hex) {\n    const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result\n      ? `rgb(${parseInt(result[1], 16)},${parseInt(result[2], 16)},${parseInt(\n          result[3],\n          16\n        )})`\n      : null;\n  },\n  rgbToHex(rgb) {\n    if (rgb) {\n      if (WPTB_Helper.isHex(rgb)) return rgb;\n\n      let rgbm = rgb.match(\n        /^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?((?:[0-9]*[.])?[0-9]+)[\\s+]?\\)/i\n      );\n      if (rgbm && rgbm.length === 5) {\n        return `#${`0${parseInt(rgbm[1], 10).toString(16).toUpperCase()}`.slice(\n          -2\n        )}${`0${parseInt(rgbm[2], 10).toString(16).toUpperCase()}`.slice(\n          -2\n        )}${`0${parseInt(rgbm[3], 10).toString(16).toUpperCase()}`.slice(\n          -2\n        )}${`0${Math.round(parseFloat(rgbm[4], 10) * 255)\n          .toString(16)\n          .toUpperCase()}`.slice(-2)}`;\n      }\n      rgbm = rgb.match(\n        /^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i\n      );\n      if (rgbm && rgbm.length === 4) {\n        return `#${`0${parseInt(rgbm[1], 10).toString(16).toUpperCase()}`.slice(\n          -2\n        )}${`0${parseInt(rgbm[2], 10).toString(16).toUpperCase()}`.slice(\n          -2\n        )}${`0${parseInt(rgbm[3], 10).toString(16).toUpperCase()}`.slice(-2)}`;\n      }\n      return \"\";\n    }\n    return \"\";\n  },\n  isHex(hex) {\n    const regex = new RegExp(\"^#(?:[A-Fa-f0-9]{3}){1,2}(?:[0-9]?){1,2}$\");\n    return regex.test(hex);\n  },\n  getElementIcon(icon_directory) {\n    const hostName = `${location.protocol}//${location.hostname}`;\n    const img = document.createElement(\"img\");\n    img.src = icon_directory;\n    return img;\n  },\n  elementDragEndClear() {\n    const wptbMovingMode = document.getElementsByClassName(\"wptb-moving-mode\");\n    if (wptbMovingMode.length > 0) {\n      for (let i = 0; i < wptbMovingMode.length; i++) {\n        wptbMovingMode[i].classList.remove(\"wptb-moving-mode\");\n      }\n    }\n\n    const wptbDropHandles = document.getElementsByClassName(\"wptb-drop-handle\");\n    if (wptbDropHandles.length > 0) {\n      for (let i = 0; i < wptbDropHandles.length; i++) {\n        wptbDropHandles[i].style.display = \"none\";\n      }\n    }\n\n    const wptbDropBorderMarkers = document.getElementsByClassName(\n      \"wptb-drop-border-marker\"\n    );\n    if (wptbDropBorderMarkers.length > 0) {\n      for (let i = 0; i < wptbDropBorderMarkers.length; i++) {\n        wptbDropBorderMarkers[i].style.display = \"none\";\n      }\n    }\n  },\n  linkHttpCheckChange(link, convertToAbs = false) {\n    if (link) {\n      // even though it is not a best practice and a huge security risk, sometimes our users use javascript tag at href attributes, this check will make sure those tags will not be modified and returned as they are\n      if (link.match(/^(javascript:)(.+)$/)) {\n        return link;\n      }\n      // relative link checking\n      // if link starts with '/', assume it is a relative link to the origin of the current site\n      if (link.match(/^\\/([\\S]+)$/)) {\n        if (convertToAbs) {\n          const currentLocation = document.location;\n          let { origin } = currentLocation;\n\n          // strip out the '/' at the end of the origin name if there is any\n          if (origin.match(/^(.+)\\/$/)) {\n            origin = origin.slice(-1);\n          }\n\n          return `${origin}${link}`;\n        }\n        return link;\n      }\n      if (link.indexOf(\"http://\") == -1 && link.indexOf(\"https://\") == -1) {\n        const linkArr = link.split(\"/\");\n        let linkClean;\n        if (Array.isArray(linkArr) && linkArr.length > 0) {\n          linkClean = linkArr[linkArr.length - 1];\n        }\n        return `${document.location.protocol}//${linkClean}`;\n      }\n      return link;\n    }\n    return \"\";\n  },\n  dataTitleColumnSet(table) {\n    // TODO dataTitleColumnSet\n    // let rows = table.rows,\n    //     rowHead = rows[0];\n    // let computedStyleRowHead = getComputedStyle( rowHead );\n    //\n    // let rowHeadChildren = rowHead.children;\n    // let contentsForHeader = {};\n    // for( let i = 0; i < rowHeadChildren.length; i++ ) {\n    //     let tdElements = rowHeadChildren[i].children;\n    //\n    //     for( let j = 0; j < tdElements.length; j++ ) {\n    //         let element = tdElements[j];\n    //         if( element.classList.contains( 'wptb-ph-element' ) ) {\n    //             let infArr = element.className.match( /wptb-element-(.+)-(\\d+)/i );\n    //             if( infArr[1] == 'text' ) {\n    //                 let p = element.querySelector( 'p' ),\n    //                     textContent = p.textContent,\n    //                     textAlign = p.style.textAlign;\n    //                     contentsForHeader[rowHeadChildren[i].dataset.xIndex] = [textContent, element.style.fontSize,\n    //                         element.style.color, computedStyleRowHead.backgroundColor, textAlign];\n    //                 break;\n    //             }\n    //         }\n    //     }\n    //     if( ! contentsForHeader[rowHeadChildren[i].dataset.xIndex] ) {\n    //         contentsForHeader[rowHeadChildren[i].dataset.xIndex] = ['', '',\n    //                     '', computedStyleRowHead.backgroundColor, ''];\n    //     }\n    // }\n    // for ( let i = 1; i < rows.length; i++ ) {\n    //     let thisRow = rows[i],\n    //         thisRowChildren = thisRow.children;\n    //     for( let j = 0; j < thisRowChildren.length; j++ ) {\n    //         if ( contentsForHeader[thisRowChildren[j].dataset.xIndex] ) {\n    //             thisRowChildren[j].dataset.wptbTitleColumn = contentsForHeader[thisRowChildren[j].dataset.xIndex][0];\n    //             thisRowChildren[j].dataset.wptbTitleColumnFontSize = contentsForHeader[thisRowChildren[j].dataset.xIndex][1];\n    //             thisRowChildren[j].dataset.wptbTitleColumnColor = contentsForHeader[thisRowChildren[j].dataset.xIndex][2];\n    //             thisRowChildren[j].dataset.wptbTitleBackgroundColor = contentsForHeader[thisRowChildren[j].dataset.xIndex][3];\n    //             thisRowChildren[j].dataset.wptbTitleAlign = contentsForHeader[thisRowChildren[j].dataset.xIndex][4];\n    //         } else {\n    //             thisRowChildren[j].dataset.wptbTitleColumn = null;\n    //             thisRowChildren[j].dataset.wptbTitleColumnFontSize = null;\n    //             thisRowChildren[j].dataset.wptbTitleColumnColor = null;\n    //             thisRowChildren[j].dataset.wptbTitleBackgroundColor = null;\n    //             thisRowChildren[j].dataset.wptbTitleAlign = null;\n    //         }\n    //     }\n    // }\n  },\n  findAncestor(el, cls) {\n    while ((el = el.parentElement) && !el.classList.contains(cls));\n    return el;\n  },\n  rowIsTop(row) {\n    const parent = row.parentNode;\n    if (parent.children[0] == row) {\n      return true;\n    }\n    return false;\n  },\n  getSelectionText() {\n    let txt = \"\";\n    if ((txt = window.getSelection)) {\n      txt = window.getSelection().toString();\n    } else {\n      txt = document.selection.createRange().text;\n    }\n    return txt;\n  },\n  elementOptionsPanelClear() {\n    const elementOptionsGroup = document.getElementById(\n      \"element-options-group\"\n    );\n    if (elementOptionsGroup) {\n      elementOptionsGroup.innerHTML = \"\";\n    }\n  },\n  wpColorPickerCheckChangeForTableStateSaving(event) {\n    if (event.originalEvent.type == \"external\") {\n      const wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n      wptbTableStateSaveManager.tableStateSet();\n    } else {\n      const wpPickerContainer = WPTB_Helper.findAncestor(\n        event.target,\n        \"wp-picker-container\"\n      );\n      if (wpPickerContainer) {\n        if (\n          event.originalEvent.type == \"square\" ||\n          event.originalEvent.type == \"strip\"\n        ) {\n          const body = document.getElementsByTagName(\"body\")[0];\n          body.removeEventListener(\n            \"mouseup\",\n            WPTB_Helper.irisStripMouseUpStateSaveManager,\n            false\n          );\n          body.addEventListener(\n            \"mouseup\",\n            WPTB_Helper.irisStripMouseUpStateSaveManager,\n            false\n          );\n        }\n      }\n    }\n  },\n  irisStripMouseUpStateSaveManager() {\n    const wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n    wptbTableStateSaveManager.tableStateSet();\n\n    const body = document.getElementsByTagName(\"body\")[0];\n    body.removeEventListener(\n      \"mouseup\",\n      WPTB_Helper.irisStripMouseUpStateSaveManager,\n      false\n    );\n  },\n  wpColorPickerClear(attribute, isId) {\n    let input;\n    if (isId) {\n      input = [document.getElementById(attribute)];\n      input.length = 1;\n    } else {\n      input = document.getElementsByClassName(attribute);\n    }\n    for (let i = 0; i < input.length; i++) {\n      const wpPickerContainer = WPTB_Helper.findAncestor(\n        input[i],\n        \"wp-picker-container\"\n      );\n      if (wpPickerContainer) {\n        const parent = wpPickerContainer.parentNode;\n        parent.removeChild(wpPickerContainer);\n        const newInput = document.createElement(\"input\");\n        if (isId) {\n          newInput.setAttribute(\"id\", attribute);\n        } else {\n          newInput.classList.add(\"wptb-element-property\", attribute);\n        }\n        newInput.value = \"\";\n        parent.appendChild(newInput);\n      }\n    }\n  },\n  detectMode() {\n    const url = window.location.href;\n    const regex = new RegExp(\"[?&]table(=([^&#]*)|&|#|$)\");\n    const results = regex.exec(url);\n    if (!results) return false;\n    if (!results[2]) return \"\";\n    return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n  },\n  getTableId() {\n    let tableId = WPTB_Helper.detectMode();\n    if (!tableId) {\n      tableId = \"startedid-0\";\n    }\n\n    return tableId;\n  },\n  getColumnWidth(table, cell) {\n    const { xIndex } = cell.dataset;\n    const xIndexes = table.querySelectorAll(`[data-x-index=\"${xIndex}\"]`);\n    let cellWidth = cell.getCellDimensions().width;\n    for (let i = 0; i < xIndexes.length; i++) {\n      if (cellWidth > xIndexes[i].getCellDimensions().width) {\n        cellWidth = xIndexes[i].getCellDimensions().width;\n      }\n    }\n    return cellWidth;\n  },\n  getRowHeight(table, cell) {\n    const { yIndex } = cell.dataset;\n    const yIndexes = table.querySelectorAll(`[data-y-index=\"${yIndex}\"]`);\n    let cellHeight = cell.getCellDimensions().height;\n    for (let i = 0; i < yIndexes.length; i++) {\n      if (cellHeight > yIndexes[i].getCellDimensions().height) {\n        cellHeight = yIndexes[i].getCellDimensions().height;\n      }\n    }\n    return cellHeight;\n  },\n  newElementProxy(el) {\n    if (el) {\n      const data = { kind: el };\n      return new WPTB_ElementObject(data);\n    }\n  },\n  wpColorPickerChange(event, ui) {\n    let uiColor;\n    if (ui) {\n      uiColor = ui.color.toString();\n    } else {\n      uiColor = \"\";\n    }\n\n    const parent = WPTB_Helper.findAncestor(\n      event.target,\n      \"wp-picker-input-wrap\"\n    ).getElementsByClassName(\"wptb-color-picker\")[0];\n    let classe;\n    let type;\n    let ps;\n    let number;\n    classe = parent.dataset.element.match(/wptb-options-(.+)-(\\d+)/i);\n    type = classe[1];\n    number = classe[2];\n    const affectedEl = document.getElementsByClassName(\n      `wptb-element-${type}-${number}`\n    )[0];\n    if (type == \"button\") {\n      if (parent.dataset.type == \"button-text-color\") {\n        affectedEl.getElementsByClassName(\"wptb-button\")[0].style.color =\n          uiColor;\n      } else {\n        affectedEl.getElementsByClassName(\n          \"wptb-button\"\n        )[0].style.backgroundColor = uiColor;\n      }\n    } else if (type == \"list\") {\n      const ps = affectedEl.querySelectorAll(\"p\");\n      if (ps.length > 0) {\n        for (let i = 0; i < ps.length; i++) {\n          ps[i].style.color = uiColor;\n        }\n      }\n    } else if (type == \"star_rating\") {\n      if (parent.dataset.type == \"star-color\") {\n        const ratingStar = affectedEl.querySelectorAll(\"li\");\n        for (let i = 0; i < ratingStar.length; i++) {\n          const span = ratingStar[i].getElementsByTagName(\"span\");\n          for (let j = 0; j < span.length; j++) {\n            span[j].style.fill = uiColor;\n          }\n        }\n      } else if (parent.dataset.type == \"numeral-rating-color\") {\n        const wptbTextMessageSize = affectedEl.querySelector(\n          \".wptb-number-rating\"\n        );\n        wptbTextMessageSize.style.color = uiColor;\n      }\n    } else {\n      affectedEl.style.color = uiColor;\n    }\n  },\n  numberImputSize(wptbNumberInputs, maxCount, maxValue) {\n    wptbNumberInputs.onkeydown = function () {\n      let thisValue = this.value;\n      thisValue = String(thisValue);\n      if (thisValue[0] == 0) {\n        this.value = \"\";\n      } else {\n        thisValue = thisValue.substring(0, maxCount);\n        this.value = thisValue;\n      }\n    };\n    wptbNumberInputs.onkeyup = function () {\n      const thisValue = this.value;\n      if (parseInt(thisValue, 10) > parseInt(maxValue, 10)) {\n        this.value = maxValue;\n      }\n\n      const wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n      wptbTableStateSaveManager.tableStateSet();\n    };\n  },\n  ucfirst(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n  },\n  wptbDocumentEventGenerate(eventName, element, details) {\n    if (eventName && element) {\n      if (!details) {\n        details = true;\n      }\n      const event = new CustomEvent(eventName, {\n        detail: details,\n        bubbles: true,\n      });\n      element.dispatchEvent(event);\n    }\n  },\n  // run script for the pointed element\n  elementStartScript(element, kind) {\n    // let script = element.getElementsByTagName( 'script' );\n    if (!kind) {\n      const infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n      if (infArr && Array.isArray(infArr)) {\n        kind = infArr[1];\n      }\n    }\n\n    if (kind) {\n      //                let wpTemplateId = 'wptb-' + kind + '-script';\n      //                let template = wp.template( wpTemplateId );\n      //                let data  = {elemClass: infArr[0]};\n      //                let elementScriptText = template( data );\n      //                elementScriptText = elementScriptText.replace(/\\r|\\n|\\t/g, '').trim();\n      //\n      //                let scriptNew = document.createElement( 'script' );\n      //                scriptNew.setAttribute( 'type', 'text/javascript' );\n      //                scriptNew.innerHTML = elementScriptText;\n      //                element.parentNode.appendChild( scriptNew );\n\n      //                element.parentNode.removeChild( scriptNew );\n      if (kind in WPTB_ElementsScriptsLauncher) {\n        const elementIdMatch = element\n          .getAttribute(\"class\")\n          .match(/(wptb-element-\\D+-\\d+\\b)/);\n        const elementId = elementIdMatch ? elementIdMatch[0] : null;\n        WPTB_ElementsScriptsLauncher[kind](element, elementId);\n      }\n    }\n  },\n  // deletes event handlers from the pointed option element and from all his daughter elements\n  deleteEventHandlers(element) {\n    if (element) {\n      jQuery(element).off();\n      const elementChildren = element.children;\n      if (elementChildren) {\n        for (let i = 0; i < elementChildren.length; i++) {\n          WPTB_Helper.deleteEventHandlers(elementChildren[i]);\n        }\n      }\n    } else {\n    }\n  },\n  // replace all occurrences in a string\n  replaceAll(string, search, replace) {\n    return string.split(search).join(replace);\n  },\n  // clears code from TinyMCE attributes\n  elementClearFromTinyMce(element) {\n    const mceContentBodys = element.querySelectorAll(\".mce-content-body\");\n    if (mceContentBodys.length > 0) {\n      for (let k = 0; k < mceContentBodys.length; k++) {\n        mceContentBodys[k].classList.remove(\"mce-content-body\");\n      }\n    }\n\n    const dataMceStyle = element.querySelectorAll(\"[data-mce-style]\");\n    if (dataMceStyle.length > 0) {\n      for (let k = 0; k < dataMceStyle.length; k++) {\n        dataMceStyle[k].removeAttribute(\"data-mce-style\");\n      }\n    }\n\n    const mceEditFocus = element.querySelectorAll(\".mce-edit-focus\");\n    if (mceEditFocus.length > 0) {\n      for (let k = 0; k < mceEditFocus.length; k++) {\n        mceEditFocus[k].classList.remove(\"mce-edit-focus\");\n      }\n    }\n\n    const contentEditable = element.querySelectorAll(\"[contenteditable]\");\n    if (contentEditable.length > 0) {\n      for (let k = 0; k < contentEditable.length; k++) {\n        contentEditable[k].removeAttribute(\"contenteditable\");\n      }\n    }\n\n    const spellCheck = element.querySelectorAll(\"[spellcheck]\");\n    if (spellCheck.length > 0) {\n      for (let k = 0; k < spellCheck.length; k++) {\n        spellCheck[k].removeAttribute(\"spellcheck\");\n      }\n    }\n\n    const mceIds = element.querySelectorAll(\"[id^=mce_]\");\n    if (mceIds.length > 0) {\n      for (let k = 0; k < mceIds.length; k++) {\n        mceIds[k].removeAttribute(\"id\");\n      }\n    }\n\n    return element;\n  },\n  elementOptionContainerCustomClassSet(targetInput, customClassForContainer) {\n    if (targetInput && customClassForContainer) {\n      const containerElement = WPTB_Helper.findAncestor(\n        targetInput,\n        \"wptb-element-option\"\n      );\n      if (containerElement) {\n        containerElement.classList.add(customClassForContainer);\n      }\n    }\n  },\n  elementOptionContainerAdditionalStyles(\n    targetInput,\n    containerAdditionalStyles\n  ) {\n    if (targetInput && containerAdditionalStyles) {\n      const containerElement = WPTB_Helper.findAncestor(\n        targetInput,\n        \"wptb-element-option\"\n      );\n      const containerStylesArrOne = containerAdditionalStyles.split(\";\");\n\n      if (containerElement && containerStylesArrOne) {\n        function containerStylesSet(containerStyleStr, containerElement) {\n          if (containerStyleStr) {\n            containerStyleStrArr = containerStyleStr.split(\":\");\n\n            if (containerStyleStrArr && Array.isArray(containerStyleStrArr)) {\n              containerElement.style[containerStyleStrArr[0]] =\n                containerStyleStrArr[1];\n            }\n          }\n        }\n        if (containerStylesArrOne && Array.isArray(containerStylesArrOne)) {\n          for (let i = 0; i < containerStylesArrOne.length; i++) {\n            if (containerStylesArrOne[i]) {\n              containerStylesSet(containerStylesArrOne[i], containerElement);\n            }\n          }\n        } else {\n          containerStylesSet(containerStylesArrOne, containerElement);\n        }\n      }\n    }\n  },\n  // function which set handler for event of changes of control\n  controlsInclude(element, functionHandler, acceptEventValues = false) {\n    if (\n      element &&\n      typeof element === \"object\" &&\n      typeof functionHandler === \"function\"\n    ) {\n      element.addEventListener(\n        \"element:controls:active\",\n        function () {\n          if (\n            !element.hasOwnProperty(\"controlConnectFunctionsName\") ||\n            !Array.isArray(element.controlConnectFunctionsName) ||\n            element.controlConnectFunctionsName.indexOf(functionHandler.name) ==\n              -1\n          ) {\n            const infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n            let elementKind;\n\n            if (infArr && Array.isArray(infArr)) {\n              elementKind = infArr[1];\n            }\n\n            //                if( ! element.hasOwnProperty( 'сontrolsConnectIndic' ) || element.сontrolsConnectIndic !== true && elementKind  ) {\n            //                    let elementsSettingsTemplateJs = document.getElementsByClassName( 'wptb-element-datas' );\n            //                    if( elementsSettingsTemplateJs.length > 0 ) {\n            //                        elementsSettingsTemplateJs = elementsSettingsTemplateJs[0];\n            //\n            //                        let elementsSettings = elementsSettingsTemplateJs.innerHTML;\n            //                        let controlClassesNames = [];\n            //                        if( elementsSettings ) {\n            //                            elementsSettings = elementsSettings.trim();\n            //                            elementsSettings = JSON.parse( elementsSettings );\n            //                            if( elementsSettings && typeof elementsSettings === 'object' ) {\n            //                                if( 'tmpl-wptb-el-datas-' + infArr[1] + '-' + infArr[2] in elementsSettings ) {\n            //                                    let elementSettings = elementsSettings['tmpl-wptb-el-datas-' + infArr[1] + '-' + infArr[2]];\n            //                                    if( elementSettings && typeof elementSettings === 'object' ) {\n            //                                        Object.keys( elementSettings ).forEach( function( key ) {\n            //                                            let regularText = new RegExp( 'data-wptb-el-' + elementKind + '-(\\\\d+)-([a-zA-Z0-9_-]+)', \"i\" );\n            //                                            let keyInfArr = key.match( regularText );\n            //                                            if( keyInfArr && Array.isArray( keyInfArr ) ) {\n            //                                                let controlClass = key.replace( 'data-', '' );\n            //                                                controlClassesNames.push( [controlClass, keyInfArr[2]] );\n            //                                            }\n            //                                        });\n            //                                    }\n            //                                }\n            //                            }\n            //                        }\n            //                    }\n            //                }\n            if (elementKind) {\n              const elementOptionsGroupIds = element.optionsGroupIds;\n              if (\n                elementOptionsGroupIds &&\n                Array.isArray(elementOptionsGroupIds)\n              ) {\n                for (let i = 0; i < elementOptionsGroupIds.length; i++) {\n                  const elementOptionsGroupId = elementOptionsGroupIds[i];\n\n                  const elementOptionsGroup = document.getElementById(\n                    elementOptionsGroupId\n                  );\n\n                  let controlActiveElements =\n                    elementOptionsGroup.querySelectorAll(\n                      \".wptb-element-property\"\n                    );\n                  controlActiveElements = [...controlActiveElements];\n\n                  controlActiveElements.map((controlActiveElement) => {\n                    const regularText = new RegExp(\n                      `wptb-el-${elementKind}-(\\\\d+)-([a-zA-Z0-9_-]+)`,\n                      \"i\"\n                    );\n                    const controlInfArr =\n                      controlActiveElement.className.match(regularText);\n                    if (controlInfArr && Array.isArray(controlInfArr)) {\n                      const controlUnicClassName = controlInfArr[0];\n\n                      element.addEventListener(\n                        `wptb-control:${controlUnicClassName}`,\n                        function (e) {\n                          const controls = {};\n                          const controlName = controlInfArr[2];\n                          const control =\n                            document.getElementsByClassName(\n                              controlUnicClassName\n                            );\n                          if (control.length > 0 && controlName) {\n                            const targetControlValue =\n                              WPTB_Helper.targetControlValueGet(control);\n\n                            if (acceptEventValues) {\n                              controls[controlName] = {\n                                targetValue: targetControlValue,\n                                eventValue: e.detail.value,\n                              };\n                            } else {\n                              controls[controlName] = targetControlValue;\n                            }\n                          }\n                          functionHandler(controls, element);\n                        },\n                        false\n                      );\n                    }\n                  });\n                }\n              }\n              // let elementOptionsContainer = document.querySelector( '.wptb-element-options.wptb-options-' + infArr[1] + '-' + infArr[2] );\n\n              // from time to time depend on table cells hierarchy, cell td items may catch mouse clicks which are intended for elements. since the active section is not cell management, this will gives and unharmfull error of not found element, simple check for null equality will be sufficient for now.\n              // if(!elementOptionsContainer){\n              //     return;\n              // }\n\n              // let elementOptions = elementOptionsContainer.querySelectorAll( '.wptb-element-option' );\n              // let controlActiveElements = elementOptions[i].querySelector( '.wptb-element-property' );\n              //\n              //\n              // for( let i = 0; i < elementOptions.length; i++ ) {\n              //     let controlActiveElement = elementOptions[i].querySelector( '.wptb-element-property' );\n              //     if( controlActiveElement ) {\n              //\n              //     }\n              // }\n\n              if (\n                !element.controlConnectFunctionsName &&\n                !Array.isArray(element.controlConnectFunctionsName)\n              ) {\n                element.controlConnectFunctionsName = [];\n              }\n\n              element.controlConnectFunctionsName.push(functionHandler.name);\n            }\n          }\n        },\n        false\n      );\n    }\n  },\n  oneControlInclude(element, functionHandler, controlName) {\n    if (\n      element &&\n      typeof element === \"object\" &&\n      typeof functionHandler === \"function\" &&\n      typeof controlName === \"string\"\n    ) {\n      const infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n      let elementKind;\n\n      if (infArr && Array.isArray(infArr)) {\n        elementKind = infArr[1].split(\"-\")[0];\n\n        const wptbContrlStacksConfigId = `wptb-${elementKind}-control-stack`;\n        const tmplControlsConfig = wp.template(wptbContrlStacksConfigId);\n        const data = {\n          container: `.${infArr[0]}`,\n        };\n        const jsonControlsConfigJson = tmplControlsConfig(data);\n        const jsonControlsConfig = JSON.parse(jsonControlsConfigJson);\n\n        if (\n          jsonControlsConfig &&\n          typeof jsonControlsConfig === \"object\" &&\n          jsonControlsConfig.hasOwnProperty(controlName)\n        ) {\n          const controlClassName = `wptb-el-${infArr[1]}-${controlName}`;\n\n          element.addEventListener(\n            `wptb-control:${controlClassName}`,\n            function (event) {\n              const control = document.getElementsByClassName(controlClassName);\n              if (control.length > 0) {\n                const targetControlValue =\n                  WPTB_Helper.targetControlValueGet(control);\n\n                functionHandler(targetControlValue, element);\n              }\n            },\n            false\n          );\n        }\n      }\n    } else {\n      return false;\n    }\n  },\n  //\n  innerElementCopyIncludeHandler(element, functionHandler) {\n    if (\n      element &&\n      typeof element === \"object\" &&\n      typeof functionHandler === \"function\"\n    ) {\n      element.addEventListener(\n        \"wptb-inner-element:copy\",\n        function (event) {\n          const innerElement = event.detail;\n          if (innerElement) {\n            WPTB_Helper.elementClearFromTinyMce(innerElement);\n            functionHandler(innerElement, element);\n          }\n        },\n        false\n      );\n    }\n  },\n  /**\n   * Sets the control elements when changing which to will restart this control\n   *\n   * @param {Array} dependOnControlName\n   * @param {string} targetControlElementClass\n   * @param {Array} valueDependOnControlCorrect\n   * @param {string} kind\n   * @param {HTMLElement} element\n   */\n  valueDependOnControl(\n    dependOnControlName,\n    targetControlElementClass,\n    valueDependOnControlCorrect,\n    kind,\n    element\n  ) {\n    function dependOnControlDataGet(\n      dependOnControlName,\n      targetControlElementClass,\n      valueDependOnControlCorrect\n    ) {\n      if (typeof dependOnControlName === \"string\") {\n        dependOnControlName = [dependOnControlName];\n      }\n      const infArr = targetControlElementClass.match(\n        /wptb-el-((.+-)\\d+)-(.+)/i\n      );\n      const valueDependOnControl = {};\n      const dependOnControlElementsArr = [];\n      if (infArr && Array.isArray(infArr)) {\n        const controlName = infArr[3];\n        let dependOnControlElements;\n        const valueDependOnControlCorrectObj = {};\n        if (Array.isArray(valueDependOnControlCorrect)) {\n          if (Array.isArray(valueDependOnControlCorrect[0])) {\n            valueDependOnControlCorrect.map((s) => {\n              valueDependOnControlCorrectObj[s[0]] = [s[1], s[2]];\n            });\n          } else {\n            valueDependOnControlCorrectObj[valueDependOnControlCorrect[0]] = [\n              valueDependOnControlCorrect[1],\n              valueDependOnControlCorrect[2],\n            ];\n          }\n        }\n        dependOnControlName.map((s) => {\n          const dependOnControlElementClass = targetControlElementClass.replace(\n            controlName,\n            s\n          );\n          if (dependOnControlElementClass) {\n            dependOnControlElements = document.getElementsByClassName(\n              dependOnControlElementClass\n            );\n            if (\n              dependOnControlElements.length > 0 &&\n              dependOnControlElements[0].type\n            ) {\n              valueDependOnControl[s] = dependOnControlElements[0].value;\n              if (s in valueDependOnControlCorrectObj) {\n                if (valueDependOnControlCorrectObj[s][1] === \"integer\") {\n                  valueDependOnControl[s] =\n                    parseInt(valueDependOnControl[s]) +\n                    parseInt(valueDependOnControlCorrectObj[s][0]);\n                } else if (valueDependOnControlCorrectObj[s][1] === \"string\") {\n                  valueDependOnControl[s] =\n                    valueDependOnControl[s] +\n                    valueDependOnControlCorrectObj[s][0];\n                }\n              }\n              dependOnControlElementsArr.push(dependOnControlElements[0]);\n            }\n          }\n        });\n      }\n\n      return [valueDependOnControl, dependOnControlElementsArr];\n    }\n\n    const dependOnControlData = dependOnControlDataGet(\n      dependOnControlName,\n      targetControlElementClass,\n      valueDependOnControlCorrect\n    );\n    WPTB_Helper.elementOptionsSet(\n      kind,\n      element,\n      dependOnControlData[0],\n      targetControlElementClass\n    );\n\n    Object.keys(dependOnControlData[0]).forEach(function (key) {\n      const infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n      const unicClass = `wptb-el-${infArr[1]}-${[key]}`;\n      element.addEventListener(\n        `wptb-control:${unicClass}`,\n        function (event) {\n          const dependOnControlData = dependOnControlDataGet(\n            dependOnControlName,\n            targetControlElementClass,\n            valueDependOnControlCorrect\n          );\n          WPTB_Helper.elementOptionsSet(\n            kind,\n            element,\n            dependOnControlData[0],\n            targetControlElementClass\n          );\n        },\n        false\n      );\n    });\n  },\n  /**\n   * Sets the visibility of one control to depend on the state of other controls\n   *\n   * @param dependOnMain\n   * @param targetControlElementClass\n   */\n  appearDependOnControl(dependOnMain, targetControlElementClass) {\n    if (Array.isArray(dependOnMain)) {\n      if (typeof dependOnMain[0] === \"string\") {\n        dependOnMain = [dependOnMain];\n      } else if (!Array.isArray(dependOnMain[0])) {\n        return;\n      }\n      const dependOnControlElementsValue = {};\n      for (let i = 0; i < dependOnMain.length; i++) {\n        const dependOn = dependOnMain[i];\n        const dependOnControlName = dependOn[0];\n        const infArr = targetControlElementClass.match(\n          /wptb-el-((.+-)\\d+)-(.+)/i\n        );\n\n        if (infArr && Array.isArray(infArr)) {\n          const controlName = infArr[3];\n\n          const dependOnControlElementClass = targetControlElementClass.replace(\n            controlName,\n            dependOnControlName\n          );\n          if (dependOnControlElementClass) {\n            const dependOnControlElements = document.getElementsByClassName(\n              dependOnControlElementClass\n            );\n            if (dependOnControlElements.length > 0) {\n              dependOnControlElementsValue[dependOn[0]] = [\n                dependOnControlElementValue(dependOnControlElements, dependOn),\n                dependOnControlElements,\n                dependOn,\n              ];\n            }\n          }\n        }\n      }\n\n      const targetControlElements = document.getElementsByClassName(\n        targetControlElementClass\n      );\n      if (targetControlElements.length > 0) {\n        const targetControlElement = targetControlElements[0];\n        const controlContainerElem = WPTB_Helper.findAncestor(\n          targetControlElement,\n          \"wptb-element-option\"\n        );\n\n        if (controlContainerElem) {\n          showHideTargetControlElement(\n            controlContainerElem,\n            dependOnControlElementsValue\n          );\n\n          Object.keys(dependOnControlElementsValue).map((k) => {\n            if (\n              Object.prototype.hasOwnProperty.call(\n                dependOnControlElementsValue,\n                k\n              )\n            ) {\n              const dependOnControlElements =\n                dependOnControlElementsValue[k][1];\n              const dependOnControlElement = dependOnControlElements[0];\n              dependOnControlElement.addEventListener(\n                \"change\",\n                dependOnControlElementChangeHandler,\n                false\n              );\n            }\n\n            function dependOnControlElementChangeHandler(event) {\n              const dependOn = dependOnControlElementsValue[k][2];\n              const dependOnControlElements =\n                dependOnControlElementsValue[k][1];\n              dependOnControlElementsValue[dependOn[0]] = [\n                dependOnControlElementValue(dependOnControlElements, dependOn),\n                dependOnControlElements,\n                dependOn,\n              ];\n              showHideTargetControlElement(\n                controlContainerElem,\n                dependOnControlElementsValue\n              );\n            }\n          });\n        }\n      }\n\n      function showHideTargetControlElement(\n        controlContainerElem,\n        dependOnControlElementsValue\n      ) {\n        let display = \"block\";\n        let targetControlInactiveVal;\n        Object.keys(dependOnControlElementsValue).map((k) => {\n          if (\n            Object.prototype.hasOwnProperty.call(\n              dependOnControlElementsValue,\n              k\n            )\n          ) {\n            if (dependOnControlElementsValue[k][0] === false) {\n              display = \"none\";\n              if (dependOnControlElementsValue[k][2][3]) {\n                targetControlInactiveVal =\n                  dependOnControlElementsValue[k][2][3];\n              }\n            }\n          }\n        });\n\n        if (controlContainerElem.style.display !== display) {\n          controlContainerElem.style.display = display;\n\n          if (display === \"none\" && targetControlInactiveVal) {\n            targetControlElements[0].dataset.controlActiveVal =\n              WPTB_Helper.targetControlValueGet(targetControlElements);\n            WPTB_Helper.targetControlValueGet(\n              targetControlElements,\n              targetControlInactiveVal\n            );\n          } else if (\n            display === \"block\" &&\n            targetControlElements[0].dataset.controlActiveVal\n          ) {\n            WPTB_Helper.targetControlValueGet(\n              targetControlElements,\n              targetControlElements[0].dataset.controlActiveVal\n            );\n          }\n        }\n      }\n\n      function dependOnControlElementValue(dependOnControlElements, dependOn) {\n        const targetControlValue = WPTB_Helper.targetControlValueGet(\n          dependOnControlElements\n        );\n\n        let returnBool = false;\n        for (let i = 1; i <= 2; i++) {\n          if (dependOn[i] && Array.isArray(dependOn[i])) {\n            let coincided;\n            let hasNumberAnyParams = false;\n            for (let j = 0; j < dependOn[i].length; j++) {\n              if (\n                typeof dependOn[i][j] === \"string\" &&\n                dependOn[i][j].indexOf(\"numberAny >\") !== -1\n              ) {\n                hasNumberAnyParams = true;\n                const xNum = parseInt(dependOn[i][j].match(/\\d+/));\n                if (targetControlValue > xNum) {\n                  coincided = true;\n                } else {\n                  coincided = false;\n                  break;\n                }\n              } else if (\n                typeof dependOn[i][j] === \"string\" &&\n                dependOn[i][j].indexOf(\"numberAny <\") !== -1\n              ) {\n                hasNumberAnyParams = true;\n                const xNum = parseInt(dependOn[i][j].match(/\\d+/));\n                if (targetControlValue < xNum) {\n                  coincided = true;\n                } else {\n                  coincided = false;\n                  break;\n                }\n              } else if (dependOn[i][j] === targetControlValue) {\n                coincided = true;\n                if (!hasNumberAnyParams) {\n                  break;\n                }\n              }\n            }\n\n            if (coincided && i === 1) {\n              returnBool = true;\n              break;\n            } else if (coincided && i === 2) {\n              returnBool = false;\n              break;\n            }\n          }\n        }\n\n        return returnBool;\n      }\n    }\n  },\n  //\n\n  /**\n   * Switch toggle\n   *\n   * @param dataToggleSwitch\n   * @param targetControlElementClass\n   */\n  toggleSwitch(dataToggleSwitch, targetControlElementClass) {\n    if (Array.isArray(dataToggleSwitch)) {\n      if (dataToggleSwitch[1] && typeof dataToggleSwitch[1] === \"object\") {\n        const dependOnParams = dataToggleSwitch[1];\n        const toggleSwitchExec = false;\n        Object.keys(dependOnParams).map((k) => {\n          const dependOnValue = dependOnParams[k];\n\n          const infArr = targetControlElementClass.match(\n            /wptb-el-((.+-)\\d+)-(.+)/i\n          );\n\n          if (infArr && Array.isArray(infArr)) {\n            const controlName = infArr[3];\n\n            const dependOnControlElementClass =\n              targetControlElementClass.replace(controlName, k);\n            if (dependOnControlElementClass) {\n              const dependOnControlElements = document.getElementsByClassName(\n                dependOnControlElementClass\n              );\n              if (dependOnControlElements.length > 0) {\n                const dependOnControlElement = dependOnControlElements[0];\n                dependOnControlElement.addEventListener(\n                  \"change\",\n                  toggleSwitchExecuteCheckRun.bind(\n                    null,\n                    dependOnControlElementClass,\n                    dependOnValue\n                  ),\n                  false\n                );\n              }\n            }\n          }\n        });\n\n        if (toggleSwitchExec) {\n          toggleSwitchExecute();\n        }\n        function toggleSwitchExecuteCheckRun(\n          dependOnControlElementClass,\n          dependOnValue\n        ) {\n          if (dependOnControlElementClass) {\n            const dependOnControlElements = document.getElementsByClassName(\n              dependOnControlElementClass\n            );\n            if (dependOnControlElements.length > 0) {\n              const targetControlValue = WPTB_Helper.targetControlValueGet(\n                dependOnControlElements\n              );\n\n              if (targetControlValue === dependOnValue) {\n                toggleSwitchExecute();\n              }\n            }\n          }\n        }\n        function toggleSwitchExecute() {\n          const elems = document.getElementsByClassName(\n            targetControlElementClass\n          );\n          if (\n            elems.length &&\n            WPTB_Helper.targetControlValueGet(elems) !== dataToggleSwitch[0]\n          ) {\n            if (dataToggleSwitch[0] === \"unchecked\") {\n              elems[0].checked = false;\n            } else if (dataToggleSwitch[0] === \"checked\") {\n              elems[0].checked = true;\n            }\n            if (\n              dataToggleSwitch[2] === undefined ||\n              dataToggleSwitch[2] === true\n            ) {\n              WPTB_Helper.wptbDocumentEventGenerate(\"change\", elems[0], {\n                eventType: \"toggleSwitch\",\n              });\n            }\n          }\n        }\n      }\n    }\n  },\n  // TODO switchThirdToggleIf\n  switchThirdToggleIf(dataSwitchThirdToggleIf, dependencyElemClass) {\n    if (Array.isArray(dataSwitchThirdToggleIf)) {\n      const dependencyElemVal = dataSwitchThirdToggleIf[0];\n      const dependencyElem = document.querySelector(`.${dependencyElemClass}`);\n      if (\n        dataSwitchThirdToggleIf[1] &&\n        typeof dataSwitchThirdToggleIf[1] === \"object\"\n      ) {\n        const dependencyParameters = dataSwitchThirdToggleIf[1];\n        Object.keys(dependencyParameters).map((k) => {\n          const dependentElemVal = dependencyParameters[k];\n          const infArr = dependencyElemClass.match(/wptb-el-((.+-)\\d+)-(.+)/i);\n          if (infArr && Array.isArray(infArr)) {\n            const controlName = infArr[3];\n            const dependentElemClass = dependencyElemClass.replace(\n              controlName,\n              k\n            );\n            if (dependentElemClass) {\n              const dependentElems =\n                document.getElementsByClassName(dependentElemClass);\n              if (dependentElems.length > 0) {\n                const dependentElem = dependentElems[0];\n                console.log(dependentElem);\n                dependencyElem.addEventListener(\n                  \"change\",\n                  switchThirdToggleExecute.bind(\n                    null,\n                    dependencyElem,\n                    dependencyElemVal,\n                    dependentElem,\n                    dependentElemVal\n                  ),\n                  false\n                );\n              }\n            }\n          }\n        });\n\n        function switchThirdToggleExecute(\n          dependencyElem,\n          dependencyElemVal,\n          dependentElem,\n          dependentElemVal\n        ) {\n          if (\"checked\" in dependentElem) {\n            if (\n              (dependencyElem.checked === true &&\n                dependencyElemVal === \"checked\") ||\n              (dependencyElem.checked === false &&\n                dependencyElemVal === \"unchecked\")\n            ) {\n              if (dependentElemVal === \"checked\") {\n                dependentElem.checked = true;\n              } else if (dependentElemVal === \"unchecked\") {\n                dependentElem.checked = false;\n              }\n\n              if (\n                dataSwitchThirdToggleIf[2] === undefined ||\n                dataSwitchThirdToggleIf[2] === true\n              ) {\n                WPTB_Helper.wptbDocumentEventGenerate(\"change\", dependentElem, {\n                  eventType: \"switchThirdToggleIf\",\n                });\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n\n  controlsStateManager(targetControlClass, controlChangeIndic) {\n    const targetControls = document.getElementsByClassName(targetControlClass);\n    if (targetControls.length > 0) {\n      // targetControls = targetControls[0];\n\n      const infArr = targetControlClass.match(/wptb-el-((.+-)\\d+)-(.+)/i);\n\n      if (infArr && Array.isArray(infArr)) {\n        let selectorElement;\n        selectorElement = document.querySelector(`.wptb-element-${infArr[1]}`);\n\n        if (selectorElement) {\n          let elementsSettingsTemplatesJs;\n          const elementSettings = {};\n          let elementsSettings;\n          elementsSettingsTemplatesJs =\n            document.getElementsByClassName(\"wptb-element-datas\");\n          if (\n            elementsSettingsTemplatesJs.length == 0 ||\n            elementsSettingsTemplatesJs[0].innerHTML == \"\"\n          ) {\n            const targetControlValue =\n              WPTB_Helper.targetControlValueGet(targetControls);\n            elementSettings[`data-${targetControlClass}`] = targetControlValue;\n\n            elementsSettings = {};\n            elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] =\n              elementSettings;\n            elementsSettings = JSON.stringify(elementsSettings);\n\n            if (elementsSettingsTemplatesJs.length == 0) {\n              elementsSettingsTemplatesJs = document.createElement(\"script\");\n              elementsSettingsTemplatesJs.setAttribute(\"type\", \"text/html\");\n              elementsSettingsTemplatesJs.setAttribute(\n                \"class\",\n                \"wptb-element-datas\"\n              );\n            } else {\n              elementsSettingsTemplatesJs = elementsSettingsTemplatesJs[0];\n            }\n\n            elementsSettingsTemplatesJs.innerHTML = elementsSettings;\n\n            const body = document.getElementsByTagName(\"body\")[0];\n            body.appendChild(elementsSettingsTemplatesJs);\n          } else {\n            elementsSettingsTemplatesJs = elementsSettingsTemplatesJs[0];\n            elementsSettings = elementsSettingsTemplatesJs.innerHTML;\n            if (elementsSettings) {\n              elementsSettings = elementsSettings.trim();\n              elementsSettings = JSON.parse(elementsSettings);\n\n              if (elementsSettings && typeof elementsSettings === \"object\") {\n                if (controlChangeIndic) {\n                  const targetControlValue =\n                    WPTB_Helper.targetControlValueGet(targetControls);\n                  if (\n                    !(`tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings) ||\n                    typeof elementsSettings[\n                      `tmpl-wptb-el-datas-${infArr[1]}`\n                    ] !== \"object\"\n                  ) {\n                    elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] = {};\n                  }\n                  elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n                    `data-${targetControlClass}`\n                  ] = targetControlValue;\n                  elementsSettingsTemplatesJs.innerHTML =\n                    JSON.stringify(elementsSettings);\n                } else if (\n                  !(\n                    `tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings &&\n                    typeof elementsSettings[\n                      `tmpl-wptb-el-datas-${infArr[1]}`\n                    ] === \"object\" &&\n                    `data-${targetControlClass}` in\n                      elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`]\n                  )\n                ) {\n                  const targetControlValue =\n                    WPTB_Helper.targetControlValueGet(targetControls);\n                  if (\n                    !(`tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings) ||\n                    typeof elementsSettings[\n                      `tmpl-wptb-el-datas-${infArr[1]}`\n                    ] !== \"object\"\n                  ) {\n                    elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] = {};\n                  }\n                  elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n                    `data-${targetControlClass}`\n                  ] = targetControlValue;\n                  elementsSettingsTemplatesJs.innerHTML =\n                    JSON.stringify(elementsSettings);\n                } else if (\n                  `tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings &&\n                  typeof elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] ===\n                    \"object\" &&\n                  `data-${targetControlClass}` in\n                    elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`]\n                ) {\n                  for (let i = 0; i < targetControls.length; i++) {\n                    if (targetControls[i].type == \"checkbox\") {\n                      let targetControlValue;\n                      if (targetControls[i].name) {\n                        targetControlValue =\n                          elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n                            `data-${targetControlClass}`\n                          ][targetControls[i].name];\n                      } else {\n                        targetControlValue =\n                          elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n                            `data-${targetControlClass}`\n                          ];\n                      }\n\n                      if (targetControlValue == \"checked\") {\n                        targetControls[i].checked = true;\n                      } else if (targetControlValue == \"unchecked\") {\n                        targetControls[i].checked = false;\n                      }\n                    } else {\n                      targetControls[i].value =\n                        elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n                          `data-${targetControlClass}`\n                        ];\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  //\n  targetControlValueGet(targetControls, val) {\n    let targetControlValue;\n    for (let i = 0; i < targetControls.length; i++) {\n      if (targetControls[i].type == \"checkbox\" && targetControls[i].name) {\n        if (val) {\n          if (val === \"checked\") {\n            targetControls[i].checked = true;\n          } else if (val === \"unchecked\") {\n            targetControls[i].checked = false;\n          }\n        } else {\n          if (!targetControlValue) targetControlValue = {};\n          if (targetControls[i].checked == true) {\n            targetControlValue[targetControls[i].name] = \"checked\";\n          } else {\n            targetControlValue[targetControls[i].name] = \"unchecked\";\n          }\n        }\n      } else if (targetControls[i].type == \"checkbox\") {\n        if (val) {\n          if (val === \"checked\") {\n            targetControls[i].checked = true;\n          } else if (val === \"unchecked\") {\n            targetControls[i].checked = false;\n          }\n        } else if (targetControls[i].checked == true) {\n          targetControlValue = \"checked\";\n        } else {\n          targetControlValue = \"unchecked\";\n        }\n      } else if (targetControls[i].type) {\n        if (val) {\n          targetControls[i].value = val;\n        } else {\n          targetControlValue = targetControls[i].value;\n        }\n      } else if (\n        targetControls[i].dataset.alignmentValue &&\n        targetControls[i].classList.contains(\"selected\")\n      ) {\n        if (val) {\n          targetControls[i].dataset.alignmentValue = val;\n        } else {\n          targetControlValue = targetControls[i].dataset.alignmentValue;\n        }\n      }\n    }\n    return targetControlValue;\n  },\n  //\n  elementControlsStateCopy(elementProt, copyElem) {\n    if (elementProt && copyElem) {\n      const infArrProt = elementProt.className.match(\n        /wptb-element-((.+-)\\d+)/i\n      );\n      const infArrCopy = copyElem.className.match(/wptb-element-((.+-)\\d+)/i);\n      if (\n        infArrProt &&\n        Array.isArray(infArrProt) &&\n        infArrCopy &&\n        Array.isArray(infArrCopy)\n      ) {\n        const elemProtKind = infArrProt[1];\n        const elemCopyKind = infArrCopy[1];\n        let elementsSettingsTemplateJs =\n          document.getElementsByClassName(\"wptb-element-datas\");\n        if (elementsSettingsTemplateJs.length > 0) {\n          elementsSettingsTemplateJs = elementsSettingsTemplateJs[0];\n\n          let elementsSettings = elementsSettingsTemplateJs.innerHTML;\n          if (elementsSettings) {\n            elementsSettings = elementsSettings.trim();\n            elementsSettings = JSON.parse(elementsSettings);\n\n            if (elementsSettings && typeof elementsSettings === \"object\") {\n              const elementSettingsProt =\n                elementsSettings[`tmpl-wptb-el-datas-${elemProtKind}`];\n              if (\n                elementSettingsProt &&\n                typeof elementSettingsProt === \"object\"\n              ) {\n                const elementSettingsCopy = {};\n\n                Object.keys(elementSettingsProt).forEach(function (key) {\n                  const elementSettingValue = elementSettingsProt[key];\n                  const elementSettingKeyCopy = key.replace(\n                    elemProtKind,\n                    elemCopyKind\n                  );\n                  elementSettingsCopy[elementSettingKeyCopy] =\n                    elementSettingValue;\n                });\n\n                if (Object.keys(elementSettingsCopy).length > 0) {\n                  elementsSettings[`tmpl-wptb-el-datas-${elemCopyKind}`] =\n                    elementSettingsCopy;\n\n                  elementsSettings = JSON.stringify(elementsSettings);\n                  elementsSettingsTemplateJs.innerHTML = elementsSettings;\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  },\n  //\n  elementControlsStateDelete(element, nameControl) {\n    const infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n    const body = document.getElementsByTagName(\"body\")[0];\n    let wptbElementDatas = body.getElementsByClassName(\"wptb-element-datas\");\n    if (infArr && Array.isArray(infArr) && wptbElementDatas.length > 0) {\n      wptbElementDatas = wptbElementDatas[0];\n      let elementsSettings = wptbElementDatas.innerHTML;\n      if (elementsSettings) {\n        elementsSettings = elementsSettings.trim();\n        elementsSettings = JSON.parse(elementsSettings);\n        if (\n          elementsSettings &&\n          typeof elementsSettings === \"object\" &&\n          `tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}` in elementsSettings\n        ) {\n          if (!nameControl) {\n            delete elementsSettings[\n              `tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`\n            ];\n          } else if (\n            elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`] &&\n            typeof elementsSettings[\n              `tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`\n            ] === \"object\" &&\n            `data-wptb-el-${infArr[1]}-${infArr[2]}-${nameControl}` in\n              elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`]\n          ) {\n            delete elementsSettings[\n              `tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`\n            ][`data-wptb-el-${infArr[1]}-${infArr[2]}-${nameControl}`];\n          }\n\n          if (Object.keys(elementsSettings).length == 0) {\n            body.removeChild(wptbElementDatas);\n          } else {\n            elementsSettings = JSON.stringify(elementsSettings);\n            wptbElementDatas.innerHTML = elementsSettings;\n          }\n        }\n      }\n    }\n  },\n  activeElement: null,\n  elementOptionsSet(\n    kind,\n    element,\n    valueDependOnControl,\n    targetControlElementClass\n  ) {\n    const elementIdClassMatch = element\n      .getAttribute(\"class\")\n      .match(/(?<elementId>wptb-element-.+-\\d+)/);\n    const id = element.getAttribute(\"id\");\n    let cellId = null;\n\n    // prepare cell id if element is a table cell\n    if (element.getAttribute(\"class\").includes(\"wptb-cell\")) {\n      const { xIndex, yIndex } = element.dataset;\n      cellId = `cell_${xIndex}-${yIndex}`;\n    }\n\n    const elementIdClass = elementIdClassMatch\n      ? elementIdClassMatch.groups.elementId\n      : null;\n\n    // use class match or id of target element for option set identification\n    const decisiveAttr = elementIdClass || id || cellId || null;\n\n    if (decisiveAttr && this.activeElement !== decisiveAttr) {\n      this.activeElement = decisiveAttr;\n\n      WPTB_Helper.wptbDocumentEventGenerate(\n        \"element:controls:prepare\",\n        element\n      );\n\n      // get controls config for this element\n      const wptbContrlStacksConfigId = `wptb-${kind}-control-stack`;\n      const tmplControlsConfig = wp.template(wptbContrlStacksConfigId);\n      let data;\n      let elementContainerClass;\n      let elementOptionClassIndic;\n      let elementOptionsGroup;\n\n      let controlElementParent;\n      let elementOptionsScriptsContainer;\n\n      let infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n      if (!infArr) {\n        let table_id = WPTB_Helper.detectMode();\n        if (!table_id) {\n          table_id = \"startedid-0\";\n        }\n        if (element.classList.contains(\"wptb-preview-table\")) {\n          element.classList.add(`wptb-element-main-table_setting-${table_id}`);\n        } else if (element.classList.contains(\"wptb-cell\")) {\n          const cellEditActiveClass = document.querySelector(\n            `.wptb-element-table_cell_setting-${element.dataset.xIndex}-${element.dataset.yIndex}`\n          );\n          if (!cellEditActiveClass)\n            element.classList.add(\n              `wptb-element-table_cell_setting-${element.dataset.xIndex}-${element.dataset.yIndex}`\n            );\n        } else if (element.classList.contains(\"wptb-responsive\")) {\n          // if table id parsed from url is starting with 'wptb-team', it means it is team built prebuilt table with a unique id that doesn't fit infArr match regex, in that case, use default id for elements options\n          if (table_id.startsWith(\"wptb_team\")) {\n            table_id = \"startedid-0\";\n          }\n          element.classList.add(\n            `wptb-element-table_responsive_setting-${table_id}`\n          );\n        }\n\n        infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n      } else {\n        WPTB_Helper.editActionClassRemove();\n        element.classList.add(\"edit-active\");\n      }\n\n      data = {\n        container: `.${infArr[0]}`,\n      };\n      let controlName;\n      data.valueDependOnControl = {};\n      if (valueDependOnControl) {\n        Object.keys(valueDependOnControl).forEach(function (key) {\n          data.valueDependOnControl[key] = valueDependOnControl[key];\n        });\n      }\n      if (targetControlElementClass) {\n        const infArr = targetControlElementClass.match(\n          /wptb-el-((.+-)\\d+)-(.+)/i\n        );\n\n        if (infArr && Array.isArray(infArr)) {\n          controlName = infArr[3];\n        }\n      }\n\n      elementContainerClass = infArr[0];\n      elementOptionClassIndic = infArr[1];\n\n      if (element.classList.contains(\"wptb-preview-table\")) {\n      } else if (element.classList.contains(\"wptb-cell\")) {\n        this.activateSection(\"cell_settings\");\n      } else if (element.classList.contains(\"wptb-responsive\")) {\n        elementOptionsGroupId = \"table-responsive-group\";\n        wptbelementOptionClass = \"wptb-element-option\";\n      } else {\n        const children = document.getElementById(\n          \"element-options-group\"\n        ).childNodes;\n        for (let i = 0; i < children.length; i++) {\n          if (children[i].style) children[i].style.display = \"none\";\n        }\n        this.activateSection(\"options_group\");\n      }\n\n      const controlsConfigJson = tmplControlsConfig(data);\n      let controlsConfig = JSON.parse(controlsConfigJson);\n\n      const elementOptionsGroupIdsInvolved = [];\n      const elementOptionsGroupInvolved = {};\n      const elementOptionsContainerInvolved = {};\n\n      // object for save all scrips for each controls\n      const controlScriptsObj = {};\n\n      // array for keep \"appear depend on\" params\n      const controlappearDependOnControl = [];\n\n      // array for keep \"toggle switch\" params\n      const controltoggleSwitch = [];\n\n      // array for keep \"toggle switch\" params\n      const controlSwitchThirdToggleIf = [];\n\n      // array for keep \"value depend on\" params\n      const controlValueDependOnControl = [];\n\n      // create controls\n      const elementOptionsScriptsContainerIndic = false;\n      if (controlName) {\n        const controlsConfigNew = {};\n        controlsConfigNew[controlName] = controlsConfig[controlName];\n        controlsConfig = controlsConfigNew;\n      }\n      let i = 0;\n      Object.keys(controlsConfig).forEach(function (key) {\n        const data = controlsConfig[key];\n        data.controlKey = key;\n\n        // get necessary wp js template\n        const tmplControlTemplate = wp.template(`wptb-${data.type}-control`);\n\n        data.elemContainer = elementContainerClass;\n        data.elementControlTargetUnicClass = `wptb-el-${elementOptionClassIndic}-${data.controlKey}`;\n        Object.keys(data).map((k) => {\n          if (\n            Object.prototype.hasOwnProperty.call(data, k) &&\n            data[k] === \"control_param_calculate_value\"\n          ) {\n            data[k] = WPTB_Helper.controlParamCalculateValue(\n              data.elementControlTargetUnicClass,\n              k\n            );\n          }\n        });\n        const controlTemplate = tmplControlTemplate(data);\n        if (\"appearDependOnControl\" in data) {\n          if (Array.isArray(data.appearDependOnControl)) {\n            controlappearDependOnControl.push([\n              data.appearDependOnControl,\n              data.elementControlTargetUnicClass,\n            ]);\n          }\n        }\n\n        if (\"toggleSwitch\" in data) {\n          if (Array.isArray(data.toggleSwitch)) {\n            controltoggleSwitch.push([\n              data.toggleSwitch,\n              data.elementControlTargetUnicClass,\n            ]);\n          }\n        }\n\n        if (\"switchThirdToggleIf\" in data) {\n          if (Array.isArray(data.switchThirdToggleIf)) {\n            controlSwitchThirdToggleIf.push([\n              data.switchThirdToggleIf,\n              data.elementControlTargetUnicClass,\n            ]);\n          }\n        }\n\n        if (\n          \"valueDependOnControl\" in data &&\n          !valueDependOnControl &&\n          !targetControlElementClass\n        ) {\n          let valueDependOnControlCorrect = \"\";\n          if (data.valueDependOnControlCorrect)\n            valueDependOnControlCorrect = data.valueDependOnControlCorrect;\n          controlValueDependOnControl.push([\n            data.valueDependOnControl,\n            data.elementControlTargetUnicClass,\n            valueDependOnControlCorrect,\n          ]);\n        }\n\n        function elementOptionsContainerInvolvedGet(\n          elementOptionsGroupId,\n          elementOptionsContainerInvolved\n        ) {\n          if (!elementOptionsContainerInvolved[elementOptionsGroupId]) {\n            const elementOptionsContainer = document.createElement(\"div\");\n            elementOptionsContainer.classList.add(\n              \"wptb-element-options\",\n              `wptb-options-${infArr[1]}`\n            );\n            document\n              .getElementById(elementOptionsGroupId)\n              .appendChild(elementOptionsContainer);\n            elementOptionsContainerInvolved[elementOptionsGroupId] =\n              elementOptionsContainer;\n          }\n\n          return elementOptionsContainerInvolved[elementOptionsGroupId];\n        }\n\n        if (\n          elementOptionsGroupIdsInvolved.indexOf(data.elementOptionsGroupId) ==\n            -1 &&\n          !controlName\n        ) {\n          elementOptionsGroupIdsInvolved.push(data.elementOptionsGroupId);\n          // clear elements from options group\n          // document.getElementById( 'element-options-group' ).innerHTML = '';\n          elementOptionsGroup = document.getElementById(\n            data.elementOptionsGroupId\n          );\n          const elementOptionsGroupChildren = [...elementOptionsGroup.children];\n          for (let i = 0; i < elementOptionsGroupChildren.length; i++) {\n            elementOptionsGroup.removeChild(elementOptionsGroupChildren[i]);\n          }\n          elementOptionsGroupInvolved[data.elementOptionsGroupId] =\n            elementOptionsGroup;\n        }\n\n        controlElementParent =\n          elementOptionsGroupInvolved[data.elementOptionsGroupId];\n\n        if (data.elementOptionsContainerOn === \"true\" && !controlName) {\n          controlElementParent = elementOptionsContainerInvolvedGet(\n            data.elementOptionsGroupId,\n            elementOptionsContainerInvolved\n          );\n        }\n\n        if (data.elementOptionContainerOn === \"true\") {\n          const elementOptionContainer = document.createElement(\"div\");\n          elementOptionContainer.classList.add(\n            data.elementOptionClass,\n            \"wptb-settings-items\"\n          );\n\n          if (data.customClassForContainer) {\n            elementOptionContainer.classList.add(data.customClassForContainer);\n          }\n\n          if (data.containerAdditionalStyles) {\n            elementOptionContainer.setAttribute(\n              \"style\",\n              data.containerAdditionalStyles\n            );\n          }\n\n          if (targetControlElementClass) {\n            let targetControlElement = document.getElementsByClassName(\n              targetControlElementClass\n            );\n            if (targetControlElement.length > 0) {\n              targetControlElement = targetControlElement[0];\n              const controlContainerElem = WPTB_Helper.findAncestor(\n                targetControlElement,\n                \"wptb-element-option\"\n              );\n\n              if (controlContainerElem) {\n                const controlContainerElemParent =\n                  controlContainerElem.parentNode;\n                controlContainerElemParent.insertBefore(\n                  elementOptionContainer,\n                  controlContainerElem\n                );\n                controlContainerElemParent.removeChild(controlContainerElem);\n              }\n            }\n          } else {\n            controlElementParent.appendChild(elementOptionContainer);\n          }\n          controlElementParent = elementOptionContainer;\n        }\n        controlElementParent.innerHTML += controlTemplate;\n\n        let helperJavascriptElem = controlElementParent.getElementsByTagName(\n          \"wptb-template-script\"\n        );\n        if (helperJavascriptElem.length > 0) {\n          helperJavascriptElem = helperJavascriptElem[0];\n          const helperJavascriptCode = helperJavascriptElem.innerText;\n          controlElementParent.removeChild(helperJavascriptElem);\n          const script = document.createElement(\"script\");\n          script.setAttribute(\"type\", \"text/javascript\");\n          script.setAttribute(\"id\", `${kind}-${data.controlKey}`);\n          script.innerHTML = helperJavascriptCode\n            .replace(/\\r|\\n|\\t/g, \"\")\n            .trim();\n          if (\n            !controlScriptsObj[data.elementOptionsGroupId] ||\n            !Array.isArray(controlScriptsObj[data.elementOptionsGroupId])\n          ) {\n            controlScriptsObj[data.elementOptionsGroupId] = [];\n          }\n          controlScriptsObj[data.elementOptionsGroupId].push(script);\n        }\n\n        i++;\n      });\n\n      element.optionsGroupIds = elementOptionsGroupIdsInvolved;\n\n      // run the scripts of controls\n      Object.keys(controlScriptsObj).forEach(function (elementOptionsGroupId) {\n        if (!targetControlElementClass) {\n          elementOptionsScriptsContainer = document.createElement(\"div\");\n          elementOptionsScriptsContainer.classList.add(\n            \"wptb-element-options-scripts\",\n            `wptb-options-${infArr[1]}`\n          );\n          elementOptionsGroupInvolved[elementOptionsGroupId].appendChild(\n            elementOptionsScriptsContainer\n          );\n        }\n\n        const controlScriptsArr = controlScriptsObj[elementOptionsGroupId];\n        if (controlScriptsArr.length > 0) {\n          for (let i = 0; i < controlScriptsArr.length; i++) {\n            if (targetControlElementClass) {\n              const id = `${kind}-${controlName}`;\n              const script = document.getElementById(id);\n              elementOptionsScriptsContainer = script.parentNode;\n              elementOptionsScriptsContainer.insertBefore(\n                controlScriptsArr[i],\n                script\n              );\n              elementOptionsScriptsContainer.removeChild(script);\n            } else {\n              elementOptionsScriptsContainer.appendChild(controlScriptsArr[i]);\n            }\n          }\n        }\n      });\n\n      // run toggleSwitch function\n      for (let i = 0; i < controltoggleSwitch.length; i++) {\n        WPTB_Helper.toggleSwitch(\n          controltoggleSwitch[i][0],\n          controltoggleSwitch[i][1]\n        );\n      }\n\n      // run switchThirdToggleIf function\n      for (let i = 0; i < controlSwitchThirdToggleIf.length; i++) {\n        WPTB_Helper.switchThirdToggleIf(\n          controlSwitchThirdToggleIf[i][0],\n          controlSwitchThirdToggleIf[i][1]\n        );\n      }\n\n      // run appearDependOnControl function\n      for (let i = 0; i < controlappearDependOnControl.length; i++) {\n        WPTB_Helper.appearDependOnControl(\n          controlappearDependOnControl[i][0],\n          controlappearDependOnControl[i][1]\n        );\n      }\n\n      WPTB_Helper.wptbDocumentEventGenerate(\"element:controls:active\", element);\n      // run valueDependOnControl function\n      for (let i = 0; i < controlValueDependOnControl.length; i++) {\n        WPTB_Helper.valueDependOnControl(\n          controlValueDependOnControl[i][0],\n          controlValueDependOnControl[i][1],\n          controlValueDependOnControl[i][2],\n          kind,\n          element\n        );\n      }\n    }\n  },\n\n  /**\n   * remove edit-action classes from wptb-ph-element elements\n   */\n  editActionClassRemove() {\n    const editActiveElems = document.querySelectorAll(\".edit-active\");\n    for (let i = 0; i < editActiveElems.length; i++) {\n      editActiveElems[i].classList.remove(\"edit-active\");\n    }\n  },\n\n  /**\n   *\n   * @param unicClass\n   * @param controlKey\n   * @param key\n   * @return {*}\n   */\n  controlParamCalculateValue(unicClass, key) {\n    const unicClassP = WPTB_Helper.replaceAll(unicClass, \"-\", \"_\");\n    if (\n      window[`paramCalculateValue_${unicClassP}_${key}`] &&\n      typeof window[`paramCalculateValue_${unicClassP}_${key}`] === \"function\"\n    ) {\n      return window[`paramCalculateValue_${unicClassP}_${key}`]();\n    }\n  },\n\n  controlParamCalculateValueCreateFunction(\n    element,\n    controlKey,\n    key,\n    handlerFunction\n  ) {\n    const infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n    const unicClass = `wptb-el-${infArr[1]}-${controlKey}`;\n    const unicClassP = WPTB_Helper.replaceAll(unicClass, \"-\", \"_\");\n    window[`paramCalculateValue_${unicClassP}_${key}`] = function () {\n      return handlerFunction(element);\n    };\n  },\n\n  /**\n   * function for create, update css for element\n   *\n   * @param elementContainer\n   * @param selector\n   * @param cssName\n   * @param cssValue\n   */\n  managerExternalCssStyles(elementContainer, selector, cssName, cssValue) {\n    const infArr = elementContainer.match(/wptb-element-main(.+)-(\\d+)/i);\n    if (!infArr || !Array.isArray(infArr)) {\n      let table = document.getElementsByClassName(\"wptb-preview-table\");\n\n      if (table.length > 0) {\n        table = table[0];\n\n        const infArr = table.className.match(/wptb-element-main(.+)-(\\d+)/i);\n        if (infArr && Array.isArray(infArr)) {\n          selector = `.${infArr[0]} ${selector}`;\n        }\n      }\n    }\n\n    const { head } = document;\n    if (head) {\n      const cssForThisElement = head.querySelector(\n        `#styles-${elementContainer}`\n      );\n      if (cssForThisElement) {\n        const cssText = cssForThisElement.innerHTML;\n        if (cssText) {\n          const cssTextArrFirst = cssText.split(\"}\");\n          cssTextArrFirst.pop();\n          let selectorExists = false;\n          for (let i = 0; i < cssTextArrFirst.length; i++) {\n            const cssTextArrSecond = cssTextArrFirst[i].split(\"{\");\n            if (cssTextArrSecond[0] === selector) {\n              const cssTextArrThird = cssTextArrSecond[1].split(\";\");\n              cssTextArrThird.pop();\n              let cssNameExists = false;\n              for (let j = 0; j < cssTextArrThird.length; j++) {\n                const cssTextArrFourth = cssTextArrThird[j].split(\":\");\n                if (cssTextArrFourth[0] === cssName) {\n                  if (cssValue) {\n                    cssTextArrThird[j] = `${cssName}:${cssValue}`;\n                  } else {\n                    cssTextArrThird.splice(j, 1);\n                  }\n\n                  cssTextArrSecond[1] = cssTextArrThird.join(\";\")\n                    ? `${cssTextArrThird.join(\";\")};`\n                    : \"\";\n                  cssNameExists = true;\n                  break;\n                }\n              }\n              if (!cssNameExists) {\n                if (cssValue) {\n                  cssTextArrSecond[1] += `${cssName}:${cssValue};`;\n                }\n              }\n              if (cssTextArrSecond[1]) {\n                cssTextArrFirst[\n                  i\n                ] = `${cssTextArrSecond[0]}{${cssTextArrSecond[1]}`;\n              } else {\n                cssTextArrFirst.splice(i, 1);\n              }\n              if (cssTextArrFirst.join(\"}\")) {\n                cssForThisElement.innerHTML = `${cssTextArrFirst.join(\"}\")}}`;\n              } else {\n                head.removeChild(cssForThisElement);\n              }\n\n              selectorExists = true;\n              break;\n            }\n          }\n\n          if (!selectorExists) {\n            if (cssValue) {\n              cssForThisElement.innerHTML = `${\n                cssText + selector\n              }{${cssName}:${cssValue};}`;\n            } else {\n              cssForThisElement.innerHTML = cssText;\n            }\n          }\n        } else if (cssValue) {\n          cssForThisElement.innerHTML = `${selector}{${cssName}:${cssValue};}`;\n        } else {\n          head.removeChild(cssForThisElement);\n        }\n      } else if (cssValue) {\n        const cssForThisElement = document.createElement(\"style\");\n        cssForThisElement.setAttribute(\"id\", `styles-${elementContainer}`);\n        cssForThisElement.classList.add(\"styles-wptb-elements\");\n        cssForThisElement.innerHTML = `${selector}{${cssName}:${cssValue};}`;\n        head.appendChild(cssForThisElement);\n      }\n    }\n  },\n  /**\n   *\n   * Register section parts for sidebar\n   *\n   * @param {Array} sections an array of section names\n   */\n  registerSections(sections) {\n    this.sections = {};\n    this.previousSection = null;\n    this.currentSection = null;\n    if (!Array.isArray(sections)) {\n      // eslint-disable-next-line no-param-reassign\n      sections = [sections];\n    }\n\n    // eslint-disable-next-line array-callback-return\n    sections.map((s) => {\n      const sectionElement = document.querySelector(`[data-wptb-section=${s}]`);\n      if (sectionElement) {\n        this.sections[s] = sectionElement;\n      }\n    });\n  },\n  /**\n   * Activate a registered section and deactivates others\n   *\n   * @param {string} sectionDataId section name to be activated\n   * @param {string} displayType display type override for section to be used in its display style property\n   */\n  activateSection(sectionDataId, displayType = \"block\") {\n    this.previousSection = this.currentSection;\n    this.currentSection = sectionDataId;\n    this.triggerSectionEvent(sectionDataId);\n\n    const builderAdminContainer = document.querySelector(\"#wptb_builder\");\n\n    if (builderAdminContainer) {\n      builderAdminContainer.dataset.wptbActiveSection = this.currentSection;\n    }\n\n    // eslint-disable-next-line array-callback-return\n    Object.keys(this.sections).map((k) => {\n      if (Object.prototype.hasOwnProperty.call(this.sections, k)) {\n        const visibility = sectionDataId === k ? displayType : \"none\";\n        this.sections[k].style = `display: ${visibility} !important`;\n      }\n    });\n  },\n  /**\n   * Get id of current active section.\n   *\n   * @return {string} active section id\n   */\n  getCurrentSection() {\n    return this.currentSection;\n  },\n  /**\n   * Get id of previous section.\n   *\n   * @return {string} previous section id\n   */\n  getPreviousSection() {\n    return this.previousSection;\n  },\n  /**\n   * Get current section from search parameter 'wptb-builder-section' of window location\n   */\n  getSectionFromUrl() {\n    const parsedUrl = new URL(window.location.href);\n    const urlSection = parsedUrl.searchParams.get(\"wptb-builder-section\");\n    if (urlSection) {\n      if (Object.keys(this.sections).some((key) => key === urlSection)) {\n        this.activateSection(urlSection);\n      }\n    }\n  },\n  /**\n   * Set up related buttons and links to trigger certain elements\n   */\n  setupSectionButtons() {\n    const sectionButtons = Array.from(\n      document.querySelectorAll(\"[data-wptb-section-button]\")\n    );\n    const vm = this;\n\n    sectionButtons.map((s) => {\n      const sectionName = s.dataset.wptbSectionButton;\n      s.addEventListener(\"click\", function () {\n        const displayType = s.dataset.wptbSectionDisplayType;\n        vm.activateSection(sectionName, displayType);\n        WPTB_Helper.editActionClassRemove();\n      });\n\n      document.addEventListener(\"wptbSectionChanged\", (e) => {\n        if (e.detail === sectionName) {\n          s.classList.remove(\"disabled\");\n          s.classList.add(\"active\");\n        } else {\n          s.classList.remove(\"active\");\n          s.classList.add(\"disabled\");\n        }\n      });\n    });\n  },\n  setupPanelToggleButtons() {\n    const $ = jQuery;\n\n    $(\".wptb-panel-toggle-group\").each(function () {\n      const vm = $(this);\n      $(this)\n        .find(\".toggle-icon\")\n        .click(() => {\n          vm.find(\".wptb-panel-toggle-target\").slideToggle();\n          vm.toggleClass(\"wptb-panel-toggle-content\");\n        });\n    });\n  },\n  /**\n   * Trigger a section change event\n   *\n   * @param {string} sectionName section name\n   */\n  triggerSectionEvent(sectionName) {\n    const sectionEvent = new CustomEvent(\"wptbSectionChanged\", {\n      detail: sectionName,\n    });\n\n    document.dispatchEvent(sectionEvent);\n  },\n  /**\n   * Setup sidebar toggle element\n   *\n   * @param {string} toggleSelector query selector for drawer toggle element\n   */\n  setupSidebarToggle(toggleSelector) {\n    const toggleButton = document.querySelector(toggleSelector);\n    if (toggleButton) {\n      toggleButton.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        document.body.classList.toggle(\"collapsed\");\n      });\n    }\n  },\n  // function for deleting all external CSS for the element\n  externalCssStylesDelete(elementContainerClass) {\n    const { head } = document;\n    if (head) {\n      const cssForThisElement = head.querySelector(\n        `#styles-${elementContainerClass}`\n      );\n\n      if (cssForThisElement) {\n        head.removeChild(cssForThisElement);\n      }\n    }\n  },\n  // function for copy all external CSS for the element\n  externalCssStylesCopy(activeElement, copyElement) {\n    if (activeElement) {\n      const infArr = activeElement.className.match(/wptb-element-(.+)-(\\d+)/i);\n      if (infArr && Array.isArray(infArr)) {\n        const activeElemClass = infArr[0];\n\n        const { head } = document;\n        if (head) {\n          const cssForActiveElement = head.querySelector(\n            `#styles-${activeElemClass}`\n          );\n\n          if (cssForActiveElement) {\n            const cssForNewElement = cssForActiveElement.cloneNode(true);\n\n            cssForNewElement.removeAttribute(\"id\", `styles-${activeElemClass}`);\n\n            const infArrCopyEl = copyElement.className.match(\n              /wptb-element-(.+)-(\\d+)/i\n            );\n            if (infArrCopyEl && Array.isArray(infArrCopyEl)) {\n              cssForNewElement.setAttribute(\"id\", `styles-${infArrCopyEl[0]}`);\n              const cssForActiveElementInnerHTML =\n                cssForActiveElement.innerHTML;\n              const cssForNewElementInnerHTML = WPTB_Helper.replaceAll(\n                cssForActiveElementInnerHTML,\n                activeElemClass,\n                infArrCopyEl[0]\n              );\n              cssForNewElement.innerHTML = cssForNewElementInnerHTML;\n              head.appendChild(cssForNewElement);\n            }\n          }\n        }\n      }\n    }\n  },\n  // function for convertation elements stiles in json\n  elementsStylesConvertToObject() {\n    const { head } = document;\n    const stylesElements = head.querySelectorAll(\".styles-wptb-elements\");\n    const stylesObj = {};\n    for (let i = 0; i < stylesElements.length; i++) {\n      const styleElemId = stylesElements[i].getAttribute(\"id\");\n      if (styleElemId && stylesElements[i].innerHTML) {\n        stylesObj[styleElemId] = stylesElements[i].innerHTML;\n      }\n    }\n\n    if (Object.keys(stylesObj).length != 0) {\n      return JSON.stringify(stylesObj);\n    }\n    return \"\";\n  },\n  // function for set scc styles tags to head\n  elementsStylesSetFromObject(jsonObject) {\n    const { head } = document;\n    if (head) {\n      let stylesElements = head.querySelectorAll(\".styles-wptb-elements\");\n      if (stylesElements.length > 0) {\n        stylesElements = [...stylesElements];\n        for (let i = 0; i < stylesElements.length; i++) {\n          head.removeChild(stylesElements[i]);\n        }\n      }\n      if (jsonObject) {\n        const stylesObj = JSON.parse(jsonObject);\n        if (Object.keys(stylesObj).length != 0) {\n          Object.keys(stylesObj).forEach(function (key) {\n            const cssText = stylesObj[key];\n            const styleCss = document.createElement(\"style\");\n            styleCss.setAttribute(\"id\", key);\n            styleCss.classList.add(\"styles-wptb-elements\");\n            styleCss.innerHTML = cssText;\n            head.appendChild(styleCss);\n          });\n        }\n      }\n    }\n  },\n\n  getSanitizedHtml(html) {\n    return DOMPurify.sanitize(html, {\n      ADD_TAGS: [\"iframe\"],\n      ADD_ATTR: [\"allow\", \"allowfullscreen\", \"frameborder\", \"src\"],\n      FORBID_ATTR: [\"on*\"],\n      FORBID_TAGS: [\"script\", \"style\", \"object\", \"embed\", \"link\"],\n    })\n  },\n\n  sanitizeXSS() {\n    document.querySelectorAll(\".wptb-custom-html-wrapper\").forEach((el) => {\n      el.innerHTML = WPTB_Helper.getSanitizedHtml(el.innerHTML);\n    });\n  },\n  // function for table saving\n  saveTable(event, startSaving, previewSaving) {\n    // show save indicator\n    WPTB_Helper.tableSaveIndicator(true);\n\n    if (!previewSaving && !startSaving) {\n      if (\n        (!event.target.dataset.wptbTableStateNumberSave &&\n          window.wptbTableStateNumberShow == 0) ||\n        window.wptbTableStateNumberShow ==\n          event.target.dataset.wptbTableStateNumberSave\n      ) {\n        // return;\n      }\n    }\n\n    if (!previewSaving) {\n      const bar = document.querySelector(\".wptb-edit-bar\");\n      if (bar && bar.classList.contains(\"visible\")) {\n        const table = document.getElementsByClassName(\"wptb-preview-table\")[0];\n        WPTB_Helper.toggleTableEditMode();\n      }\n    }\n\n    // before save event trigger\n    WPTB_Helper.wptbDocumentEventGenerate(\"wptb:save:before\", document);\n\n    WPTB_Helper.sanitizeXSS();\n    // clean any left over artifacts related to builder\n    WPTB_Helper.tableClean();\n\n    const http = new XMLHttpRequest();\n    const url = `${\n      wptb_admin_object ? wptb_admin_object.ajaxurl : ajaxurl\n    }?action=save_table`;\n    const t = document.getElementById(\"wptb-setup-name\").value.trim();\n    let messagingArea;\n    let code;\n    let datas;\n\n    code = document.getElementsByClassName(\"wptb-preview-table\");\n\n    let postId;\n    if ((rs = WPTB_Helper.detectMode()) || (rs = document.wptbId)) {\n      postId = rs;\n    }\n    let paramIdsNecessaryChange = false;\n    if (code.length > 0) {\n      code = code[0];\n      const codeClone = code.cloneNode(true);\n      if (postId) {\n        if (\n          codeClone.classList.contains(\n            \"wptb-element-main-table_setting-startedid-0\"\n          )\n        ) {\n          codeClone.classList.remove(\n            \"wptb-element-main-table_setting-startedid-0\"\n          );\n          codeClone.classList.add(`wptb-element-main-table_setting-${postId}`);\n          const wptbTableSetup = document.querySelector(\".wptb-table-setup\");\n          if (wptbTableSetup) {\n            wptbTableSetup.innerHTML = \"\";\n            wptbTableSetup.appendChild(codeClone);\n            WPTB_Table();\n          }\n          paramIdsNecessaryChange = true;\n        }\n      }\n      codeClone.columns = code.columns;\n      code = WPTB_Stringifier(codeClone);\n    } else {\n      code = \"\";\n    }\n\n    if (!previewSaving) {\n      datas = \"\";\n      const datas_containers =\n        document.getElementsByClassName(\"wptb-element-datas\");\n\n      if (datas_containers.length > 0) {\n        if (datas_containers[0].innerHTML) {\n          datas = datas_containers[0].innerHTML;\n\n          if (paramIdsNecessaryChange) {\n            datas = WPTB_Helper.replaceAll(\n              datas,\n              \"tmpl-wptb-el-datas-main-table_setting-startedid-0\",\n              `tmpl-wptb-el-datas-main-table_setting-${postId}`\n            );\n\n            datas = WPTB_Helper.replaceAll(\n              datas,\n              \"data-wptb-el-main-table_setting-startedid-0\",\n              `data-wptb-el-main-table_setting-${postId}`\n            );\n          }\n        }\n      }\n    }\n\n    let styleObjJson = WPTB_Helper.elementsStylesConvertToObject();\n    if (paramIdsNecessaryChange) {\n      styleObjJson = WPTB_Helper.replaceAll(\n        styleObjJson,\n        \".wptb-element-main-table_setting-startedid-0\",\n        `.wptb-element-main-table_setting-${postId}`\n      );\n    }\n\n    if (t === \"\" && code === \"\") {\n      let messagingAreaText = \"\";\n      if (t === \"\")\n        messagingAreaText +=\n          \"You must assign a name to the table before saving it.</br>\";\n      if (code === \"\") messagingAreaText += \"Table wasn't created\";\n      messagingArea = document.getElementById(\"wptb-messaging-area\");\n      messagingArea.innerHTML = `<div class=\"wptb-error wptb-message\">Error: ${messagingAreaText}</div>`;\n      messagingArea.classList.add(\"wptb-warning\");\n      setTimeout(function () {\n        messagingArea.removeChild(messagingArea.firstChild);\n      }, 4000);\n      return;\n    }\n\n    let params = {\n      title: t,\n      content: code,\n      elements_datas: datas,\n      elements_styles: styleObjJson,\n      security_code: wptb_admin_object.security_code,\n    };\n\n    if (previewSaving) {\n      params.preview_saving = previewSaving;\n    }\n\n    if (postId) {\n      params.id = postId;\n    }\n\n    // wptb save before event\n    WPTB_Helper.wptbDocumentEventGenerate(\"wptb:save:before\", document, params);\n\n    params = JSON.stringify(params);\n\n    http.open(\"POST\", url, true);\n\n    http.setRequestHeader(\"Content-type\", \"application/json; charset=utf-8\");\n\n    http.onreadystatechange = function (action) {\n      if (this.readyState == 4) {\n        // hide save indicator\n        WPTB_Helper.tableSaveIndicator(false);\n\n        if (this.status == 200) {\n          const data = JSON.parse(http.responseText);\n          messagingArea = document.getElementById(\"wptb-messaging-area\");\n\n          if (data[0] == \"saved\") {\n            let builderPageUrl = document.location.href.replace(\"#\", \"\");\n            const regex = new RegExp(\"&table=(.+)\", \"i\");\n            builderPageUrl = builderPageUrl.replace(regex, \"\");\n            window.history.pushState(\n              null,\n              null,\n              `${builderPageUrl}&table=${data[1]}`\n            );\n\n            document.wptbId = data[1];\n            messagingArea.innerHTML = `<div class=\"wptb-success wptb-message\">Table \"${t}\" was successfully saved.</div>`;\n\n            WPTB_NotificationManager.sendNotification({\n              message: `Table ${t} was successfully saved.`,\n            });\n            document\n              .getElementsByClassName(\"wptb-embed-btn\")[0]\n              .classList.remove(\"wptb-button-disable\");\n\n            // update centralized data registry with new table id\n            WPTB_Store.commit(\"setTableId\", data[1]);\n\n            // clear table dirty status\n            new WPTB_TableStateSaveManager().tableStateClear();\n\n            const wptbPreviewTable = document.querySelector(\n              \".wptb-preview-table\"\n            );\n            let wptbPreviewBtn =\n              document.getElementsByClassName(\"wptb-preview-btn\");\n            if (wptbPreviewBtn.length > 0) {\n              wptbPreviewBtn = wptbPreviewBtn[0];\n              wptbPreviewBtn.classList.remove(\"wptb-button-disable\");\n              let wptbPreviewBtnHref = wptbPreviewBtn.dataset.previewHref;\n              wptbPreviewBtnHref = wptbPreviewBtnHref.replace(\"empty\", data[1]);\n              wptbPreviewBtn.setAttribute(\"href\", wptbPreviewBtnHref);\n            }\n\n            event.target.dataset.wptbTableStateNumberSave =\n              window.wptbTableStateNumberShow;\n            let wptbSaveBtn = document.getElementsByClassName(\"wptb-save-btn\");\n            if (wptbSaveBtn.length > 0) {\n              wptbSaveBtn = wptbSaveBtn[0];\n              wptbSaveBtn.classList.add(\"wptb-save-disabled\");\n              wptbSaveBtn.classList.remove(\"active\");\n            }\n            // WPTB_Helper.saveTable( event, true );\n            return;\n          }\n          if (data[0] == \"edited\" && startSaving) {\n            document.wptbId = data[1];\n            messagingArea.innerHTML = `<div class=\"wptb-success wptb-message\">Table \"${t}\" was successfully saved.</div>`;\n\n            WPTB_NotificationManager.sendNotification({\n              message: `Table ${t} was successfully saved.`,\n            });\n            document\n              .getElementsByClassName(\"wptb-embed-btn\")[0]\n              .classList.remove(\"wptb-button-disable\");\n            document.getElementById(\n              \"wptb-embed-shortcode\"\n            ).value = `[wptb id=${data[1]}]`;\n            const wptbPreviewTable = document.querySelector(\n              \".wptb-preview-table\"\n            );\n            let wptbPreviewBtn =\n              document.getElementsByClassName(\"wptb-preview-btn\");\n            if (wptbPreviewBtn.length > 0) {\n              wptbPreviewBtn = wptbPreviewBtn[0];\n              wptbPreviewBtn.classList.remove(\"wptb-button-disable\");\n              let wptbPreviewBtnHref = wptbPreviewBtn.dataset.previewHref;\n              wptbPreviewBtnHref = wptbPreviewBtnHref.replace(\"empty\", data[1]);\n              wptbPreviewBtn.setAttribute(\"href\", wptbPreviewBtnHref);\n            }\n\n            event.target.dataset.wptbTableStateNumberSave =\n              window.wptbTableStateNumberShow;\n            let wptbSaveBtn = document.getElementsByClassName(\"wptb-save-btn\");\n            if (wptbSaveBtn.length > 0) {\n              wptbSaveBtn = wptbSaveBtn[0];\n              wptbSaveBtn.classList.add(\"wptb-save-disabled\");\n              wptbSaveBtn.classList.remove(\"active\");\n            }\n          } else if (data[0] == \"edited\") {\n            messagingArea.innerHTML = `<div class=\"wptb-success wptb-message\">Table \"${t}\" was successfully updated.</div>`;\n\n            WPTB_NotificationManager.sendNotification({\n              message: `Table ${t} was successfully updated.`,\n            });\n            event.target.dataset.wptbTableStateNumberSave =\n              window.wptbTableStateNumberShow;\n\n            new WPTB_TableStateSaveManager().tableStateClear();\n            // @deprecated\n            // let wptbSaveBtn = document.getElementsByClassName('wptb-save-btn');\n            // if (wptbSaveBtn.length > 0) {\n            // \twptbSaveBtn = wptbSaveBtn[0];\n            // \twptbSaveBtn.classList.add('wptb-save-disabled');\n            // \twptbSaveBtn.classList.remove('active');\n            // }\n          } else if (data[0] == \"preview_edited\") {\n            return;\n          } else {\n            messagingArea.innerHTML =\n              '<div class=\"wptb-error wptb-message\">Safety problems</div>';\n          }\n          messagingArea.classList.add(\"wptb-success\");\n          setTimeout(function () {\n            messagingArea.removeChild(messagingArea.firstChild);\n          }, 4000);\n        }\n      }\n    };\n\n    http.send(params);\n  },\n  //\n  clickOnFreeSpace() {\n    WPTB_Helper.editActionClassRemove();\n    // if current active section is responsive menu, ignore this functionality\n    if (this.getCurrentSection() === \"table_responsive_menu\") {\n      return;\n    }\n\n    const cellModeBackground = document.querySelector(\n      \"#wptb-cell_mode_background\"\n    );\n    if (\n      cellModeBackground &&\n      cellModeBackground.classList.contains(\"visible\")\n    ) {\n      return;\n    }\n    // document.getElementsByClassName( 'wptb-elements-container' )[0].style.display = 'table';\n    // document.getElementsByClassName( 'wptb-settings-section' )[0].style.display = 'block';\n    // document.getElementById( 'element-options-group' ).style.display = 'none';\n    this.activateSection(\"elements\");\n\n    const wpcdFixedToolbar = document.getElementById(\"wpcd_fixed_toolbar\");\n    if (wpcdFixedToolbar.hasAttribute(\"data-toolbar-active-id\")) {\n      document\n        .getElementById(wpcdFixedToolbar.getAttribute(\"data-toolbar-active-id\"))\n        .classList.remove(\"toolbar-active\");\n    }\n    const element = document.querySelector(\".wptb-preview-table\");\n    if (element) {\n      WPTB_Helper.elementOptionsSet(\"table_setting\", element);\n    }\n  },\n\n  /*\n   * function for sending of element ajax request\n   */\n  elementAjax(dataAjaxData, element) {\n    const http = new XMLHttpRequest();\n    const url = `${\n      wptb_admin_object ? wptb_admin_object.ajaxurl : ajaxurl\n    }?action=wptb_element_ajax`;\n    let element_name;\n    const infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n    if (infArr && Array.isArray(infArr)) {\n      element_name = infArr[1];\n    }\n\n    let params = {\n      element_ajax_data: dataAjaxData,\n      element_name,\n      security_code: wptb_admin_object.security_code,\n    };\n    params = JSON.stringify(params);\n\n    http.open(\"POST\", url, true);\n    http.setRequestHeader(\"Content-type\", \"application/json; charset=utf-8\");\n\n    http.onreadystatechange = function (action) {\n      if (this.readyState == 4 && this.status == 200) {\n        const data = JSON.parse(http.responseText);\n        let detail;\n        if (data && Array.isArray(data) && data[0] == \"element_ajax_responce\") {\n          detail = { value: data[1] };\n        } else {\n          detail = \"\";\n        }\n        WPTB_Helper.wptbDocumentEventGenerate(\n          \"wptb-element:ajax-response\",\n          element,\n          detail\n        );\n      }\n    };\n    http.send(params);\n  },\n\n  /*\n   * This just toggles visibility of cell edit bar, and toggles\n   * cell selecting mode.\n   */\n  toggleTableEditMode(close = false) {\n    const bar = document.getElementsByClassName(\"wptb-edit-bar\");\n    const cellModeBackground = document.getElementById(\n      \"wptb-cell_mode_background\"\n    );\n    const leftScrollPanelCurtain = document.getElementById(\n      \"wptb-left-scroll-panel-curtain\"\n    );\n    const leftScrollPanelCellSettings = document.getElementById(\n      \"wptb-left-scroll-panel-cell-settings\"\n    );\n    let wptbPreviewTable =\n      document.getElementsByClassName(\"wptb-preview-table\");\n    if (wptbPreviewTable.length > 0) {\n      wptbPreviewTable = wptbPreviewTable[0];\n    }\n\n    const builderPanel = document.querySelector(\".wptb-builder-panel\");\n\n    if (bar.length > 0) {\n      let toggleEditMode = \"\";\n      for (let i = 0; i < bar.length; i++) {\n        if (close) {\n          document.select.deactivateMultipleSelectMode();\n          bar[i].classList.remove(\"visible\");\n          cellModeBackground.classList.remove(\"visible\");\n          leftScrollPanelCurtain.classList.remove(\"visible\");\n          leftScrollPanelCellSettings.classList.remove(\"visible\");\n          wptbPreviewTable.parentNode.classList.remove(\n            \"wptb-preview-table-manage-cells\"\n          );\n          const wptbPreviewTableTds =\n            wptbPreviewTable.getElementsByTagName(\"td\");\n          if (wptbPreviewTableTds.length > 0) {\n            for (let i = 0; i < wptbPreviewTableTds.length; i++) {\n              wptbPreviewTableTds[i].classList.remove(\"wptb-highlighted\");\n            }\n          }\n          toggleEditMode = \"closed\";\n\n          builderPanel.dataset.manageCellsActive = false;\n\n          // @deprecated\n          // WPTB_Helper.activateSection('elements');\n        } else if (!close) {\n          document.select.activateMultipleSelectMode();\n          bar[i].classList.add(\"visible\");\n          cellModeBackground.classList.add(\"visible\");\n          leftScrollPanelCurtain.classList.add(\"visible\");\n          wptbPreviewTable.parentNode.classList.add(\n            \"wptb-preview-table-manage-cells\"\n          );\n\n          toggleEditMode = \"opened\";\n\n          builderPanel.dataset.manageCellsActive = true;\n        }\n      }\n\n      WPTB_Helper.wptbDocumentEventGenerate(\n        `wp-table-builder/table-edit-mode/${toggleEditMode}`,\n        wptbPreviewTable\n      );\n    }\n  },\n\n  /*\n   * checking of dimension of value\n   */\n  checkingDimensionValue(value, dimension) {\n    value = String(value);\n    dimension = String(dimension);\n    if (value && dimension) {\n      const searchIndex = value.indexOf(dimension);\n      if (searchIndex != -1 && searchIndex == value.length - dimension.length) {\n        return true;\n      }\n      return false;\n    }\n    return false;\n  },\n\n  /*\n   * if dimension is included - checking and if it necessary setting value\n   * without dimension - return value\n   */\n  checkSetGetStyleSizeValue(element, styleName, computedStyleName, dimension) {\n    let elemStyleValue = element.style[styleName];\n    elemStyleValue = String(elemStyleValue);\n\n    if (\n      !elemStyleValue || dimension\n        ? !WPTB_Helper.checkingDimensionValue(elemStyleValue, dimension)\n        : false\n    ) {\n      const elementStyles = window.getComputedStyle(element);\n      if (\n        computedStyleName &&\n        elementStyles.getPropertyValue(computedStyleName) &&\n        dimension\n          ? WPTB_Helper.checkingDimensionValue(\n              elementStyles.getPropertyValue(computedStyleName),\n              dimension\n            )\n          : true\n      ) {\n        if (!dimension) {\n          return elementStyles.getPropertyValue(computedStyleName);\n        }\n        element.style[styleName] =\n          elementStyles.getPropertyValue(computedStyleName);\n      } else if (!dimension) {\n        return false;\n      } else {\n        element.style[styleName] = null;\n      }\n    } else if (!dimension) {\n      return elemStyleValue;\n    }\n\n    return element.style[styleName];\n  },\n\n  /*\n   * function checking that element has the style\n   * if this style is present - checking the format color\n   * if param set is true - setting style for element (consider hex format of color)\n   * if param set is false - getting style from element\n   */\n  checkSetGetStyleColorValue(\n    element,\n    styleName,\n    computedStyleName,\n    set = false\n  ) {\n    let elemStyleColorValue = element.style[styleName];\n\n    if (!elemStyleColorValue) {\n      const elementStyles = window.getComputedStyle(element, null);\n\n      if (elementStyles && elementStyles.getPropertyValue(computedStyleName)) {\n        if (set) {\n          elemStyleColorValue = WPTB_Helper.rgbToHex(\n            elementStyles.getPropertyValue(computedStyleName)\n          );\n          if (WPTB_Helper.isHex(elemStyleColorValue)) {\n            element.style[styleName] = elemStyleColorValue;\n          } else {\n            element.style[styleName] = \"\";\n          }\n        } else {\n          return elementStyles.getPropertyValue(computedStyleName);\n        }\n      } else if (set) {\n        element.style[styleName] = \"\";\n      } else {\n        return \"\";\n      }\n    } else if (!set) {\n      return elemStyleColorValue;\n    }\n  },\n\n  /*\n   * function checking that element has the style\n   * if this style is present - checking the format color\n   * if param set is true - setting style for element (consider hex format of color)\n   * if param set is false - getting style from element\n   */\n  checkSetGetStyleValue(element, styleName, computedStyleName, set = false) {\n    const elemStyleColorValue = element.style[styleName];\n\n    if (!elemStyleColorValue) {\n      const elementStyles = window.getComputedStyle(element, null);\n\n      if (elementStyles && elementStyles.getPropertyValue(computedStyleName)) {\n        if (set) {\n          element.style[styleName] =\n            elementStyles.getPropertyValue(computedStyleName);\n        } else {\n          return elementStyles.getPropertyValue(computedStyleName);\n        }\n      } else if (!set) {\n        return \"\";\n      }\n    } else if (!set) {\n      return elemStyleColorValue;\n    }\n  },\n\n  /*\n   * get the value of the same elements that have the most count\n   */\n  getValueMaxCountSameElementsInArray(arr) {\n    if (arr && Array.isArray(arr)) {\n      const check = {};\n      let countEmpty = 0;\n      for (let i = 0; i < arr.length; i++) {\n        if (arr[i]) {\n          if (check[arr[i]]) {\n            check[arr[i]]++;\n          } else {\n            check[arr[i]] = 1;\n          }\n        } else {\n          countEmpty++;\n        }\n      }\n\n      let maxPropName;\n      for (const key in check) {\n        if (!maxPropName) {\n          maxPropName = key;\n          continue;\n        } else if (check[maxPropName] < check[key]) {\n          maxPropName = key;\n        }\n      }\n\n      return check[maxPropName] >= countEmpty ? maxPropName : \"\";\n    }\n  },\n\n  /*\n   * For assigning to each cell xIndex and y Index attributes,\n   * these are the column number and row number of cell in table.\n   */\n  recalculateIndexes(table) {\n    WPTB_RecalculateIndexes(table);\n  },\n\n  /**\n   * Table Rows colors reinstall\n   *\n   * @param table\n   */\n  tableRowsColorsReinstall(table) {\n    if (table.rows.length) {\n      const infArr = table.className.match(/wptb-element-main(.+)-(\\d+)/i);\n      if (infArr && Array.isArray(infArr)) {\n        let tableIndex = \"\";\n        if (infArr[infArr.length - 1] == \"0\") {\n          tableIndex = \"startedid-0\";\n        } else {\n          tableIndex = infArr[infArr.length - 1];\n        }\n\n        const tableHeaderBackground = document.querySelector(\n          `.wptb-el-main-table_setting-${tableIndex}-tableHeaderBackground`\n        );\n        if (tableHeaderBackground) {\n          const details = { value: tableHeaderBackground.value };\n          WPTB_Helper.wptbDocumentEventGenerate(\n            \"controlColor:change\",\n            tableHeaderBackground,\n            details\n          );\n        }\n\n        const tableEvenRowBackground = document.querySelector(\n          `.wptb-el-main-table_setting-${tableIndex}-tableEvenRowBackground`\n        );\n        if (tableEvenRowBackground) {\n          const details = { value: tableEvenRowBackground.value };\n          WPTB_Helper.wptbDocumentEventGenerate(\n            \"controlColor:change\",\n            tableEvenRowBackground,\n            details\n          );\n        }\n\n        const tableOddRowBackground = document.querySelector(\n          `.wptb-el-main-table_setting-${tableIndex}-tableOddRowBackground`\n        );\n        if (tableOddRowBackground) {\n          const details = { value: tableOddRowBackground.value };\n          WPTB_Helper.wptbDocumentEventGenerate(\n            \"controlColor:change\",\n            tableOddRowBackground,\n            details\n          );\n        }\n      }\n    }\n  },\n  /**\n   * Get parent html element of given type\n   *\n   * @param {string} parentType type of parent element\n   * @param {HTMLElement} el current element\n   * @return {*} html element of type\n   */\n  getParentOfType: (parentType, el) => {\n    if (el.nodeName === parentType.toUpperCase()) {\n      return el;\n    }\n\n    return WPTB_Helper.getParentOfType(parentType, el.parentElement);\n  },\n  // current relative type of drag element\n  // this type is used on differentiating certain elements based on their positioning on table\n  dragRelativeType: \"\",\n  /**\n   *\n   * @param {string} val drag relative type\n   */\n  setDragRelativeType(val) {\n    this.dragRelativeType = val;\n  },\n  // get drag relative type\n  getDragRelativeType() {\n    return this.dragRelativeType;\n  },\n  /**\n   *\n   * @param {HTMLElement} element\n   * @param {string} styleName\n   */\n  getElementColorStylesHex(element, styleName) {\n    let color = element.style[styleName];\n    color = WPTB_Helper.rgbToHex(color);\n    if (!WPTB_Helper.isHex(color)) {\n      color = \"\";\n    }\n    return color;\n  },\n  /**\n   * Show element controls on adding them to table.\n   */\n  showControlsOnElementMount() {\n    document.addEventListener(\"element:mounted:dom\", function (e) {\n      e.target.click();\n    });\n  },\n  /**\n   * Show elements list menu on left panel on removing element from table\n   */\n  showElementsListOnRemove() {\n    document.addEventListener(\"element:removed:dom\", function () {\n      WPTB_Helper.activateSection(\"elements\");\n    });\n  },\n  /**\n   * Block tiny MCE initialization and element selected activation for data cells for specific active sections.\n   * Sections: Manage cells, background menu\n   */\n  blockTinyMCE() {\n    const addBlocker = (parent) => {\n      const blockerElement = document.createElement(\"div\");\n      blockerElement.classList.add(\"wptb-plugin-blocker-element\");\n\n      const haveChild = parent.childNodes.length > 0;\n      parent.appendChild(blockerElement);\n\n      // if don't have any children, then add before/after css element states to blocker in order to reflect table builder menu visuals\n      if (!haveChild) {\n        parent.classList.add(\"wptb-plugin-blocker-element-empty\");\n      }\n    };\n\n    const removeBlocker = (parent) => {\n      const blockerElement = parent.querySelector(\n        \".wptb-plugin-blocker-element\"\n      );\n      if (blockerElement) {\n        blockerElement.remove();\n      }\n\n      parent.classList.remove(\"wptb-plugin-blocker-element-empty\");\n    };\n    document.addEventListener(\"wptbSectionChanged\", ({ detail }) => {\n      const table = document.querySelector(\n        \".wptb-table-setup table.wptb-preview-table\"\n      );\n      if (table) {\n        const cells = Array.from(table.querySelectorAll(\"td\"));\n\n        cells.map(removeBlocker);\n\n        const allowedSections = [\n          \"manage_cells\",\n          \"cell_settings\",\n          \"background_menu\",\n        ];\n        if (allowedSections.includes(detail)) {\n          cells.map(addBlocker);\n        }\n      }\n    });\n\n    document.addEventListener(\"wptb:save:before\", () => {\n      const table = document.querySelector(\n        \".wptb-table-setup table.wptb-preview-table\"\n      );\n      const cells = Array.from(table.querySelectorAll(\"td\"));\n\n      cells.map(removeBlocker);\n    });\n  },\n  /**\n   * Setup for builder if called by gutenberg block.\n   */\n  calledByBlock() {\n    const parsedUrl = new URL(window.location.href);\n    const isCalledByBlock = parsedUrl.searchParams.get(\"gutenberg\");\n    if (isCalledByBlock) {\n      const closeButton = document.querySelector(\".wptb-plugin-header-close a\");\n\n      closeButton.addEventListener(\n        \"click\",\n        (e) => {\n          e.preventDefault();\n          e.stopPropagation();\n\n          const isTableClean = !WPTB_Store.getters.getTableDirtyStatus;\n\n          const tableId = new URL(window.location.href).searchParams.get(\n            \"table\"\n          );\n\n          if (!isTableClean) {\n            const confirmResult = window.confirm(\n              WPTB_Store.getTranslation(\"dirtyConfirmation\")\n            );\n            if (confirmResult) {\n              WPTB_Helper.wptbDocumentEventGenerate(\n                \"gutenbergClose\",\n                document,\n                tableId\n              );\n            }\n          } else {\n            WPTB_Helper.wptbDocumentEventGenerate(\n              \"gutenbergClose\",\n              document,\n              tableId\n            );\n          }\n        },\n        { capture: true }\n      );\n    }\n  },\n  /**\n   * Clean any builder related artifacts from table.\n   */\n  tableClean() {\n    // remove any hover artifacts from table\n    Array.from(document.querySelectorAll(\".wptb-directlyhovered\")).map((el) => {\n      el.classList.remove(\"wptb-directlyhovered\");\n    });\n\n    // remove all data-placeholder from table\n    // eslint-disable-next-line array-callback-return\n    Array.from(document.querySelectorAll(\".wptb-text-container p\")).map(\n      (el) => {\n        el.removeAttribute(\"data-placeholder\");\n      }\n    );\n  },\n  /**\n   * Setup table save related visual styles and elements.\n   *\n   * @param {boolean} saveStatus whether saving or not\n   */\n  tableSaveIndicator(saveStatus) {\n    const builder = document.querySelector(\"#wptb_builder\");\n    if (builder) {\n      if (saveStatus) {\n        builder.dataset.wptbSaving = true;\n      } else {\n        delete builder.dataset.wptbSaving;\n      }\n    }\n  },\n  /**\n   * Get all plugin related tables on current document.\n   *\n   * @return {Array | HTMLTableElement | null } plugin tables, if there is only one a plugin table and null if none found\n   */\n  getPluginTables() {\n    const availablePluginTables = Array.from(\n      document.querySelectorAll(\"table.wptb-preview-table\")\n    );\n\n    if (availablePluginTables.length === 1) {\n      return availablePluginTables[0];\n    }\n    if (availablePluginTables.length === 0) {\n      return null;\n    }\n\n    return availablePluginTables;\n  },\n};\n\nDOMPurify.addHook(\"uponSanitizeElement\", (node, data) => {\n  if (node.tagName === \"IFRAME\") {\n    const src = node.getAttribute(\"src\") || \"\";\n    if (!/^https:\\/\\/(www\\.)?youtube\\.com\\/embed\\/[\\w-]+$/.test(src)) {\n      node.parentNode.removeChild(node);\n    }\n  }\n});\n","var WPTB_Initializer = function () {\n\n    const MIN_COLUMNS = 1,\n        MIN_ROWS = 1,\n        MAX_COLUMNS = 30,\n        MAX_ROWS = 30;\n\n    var tableGenerator = document.body;\n    columnsDecrementButton = tableGenerator.getElementsByClassName('wptb-input-number-decrement')[0],\n            columnsIncrementButton = tableGenerator.getElementsByClassName('wptb-input-number-increment')[0],\n            rowsDecrementButton = tableGenerator.getElementsByClassName('wptb-input-number-decrement')[1],\n            rowsIncrementButton = tableGenerator.getElementsByClassName('wptb-input-number-increment')[1],\n            columnsInput = document.getElementById('wptb-columns-number'),\n            rowsInput = document.getElementById('wptb-rows-number');\n\n    // columnsDecrementButton.onclick = function () {\n    //         if (columnsInput.value > MIN_COLUMNS) {\n    //                 columnsInput.value--;\n    //         }\n    // };\n    //\n    // columnsIncrementButton.onclick = function () {\n    //         if (columnsInput.value < MAX_COLUMNS) {\n    //                 columnsInput.value++;\n    //         }\n    // };\n    //\n    // rowsDecrementButton.onclick = function () {\n    //         if (rowsInput.value > MIN_ROWS) {\n    //                 rowsInput.value--;\n    //         }\n    // };\n    //\n    // rowsIncrementButton.onclick = function () {\n    //         if (rowsInput.value < MAX_ROWS) {\n    //                 rowsInput.value++;\n    //         }\n    // };\n\n    // document.getElementById( 'wptb-generate-table' ).onclick = function (  ) {\n    //         var columns = document.getElementById('wptb-columns-number').value,\n    //             rows = document.getElementById('wptb-rows-number').value;\n    //\n    //         //wptbTableStateSaveManager.tableStateClear();\n    //\n    //         WPTB_Table(columns, rows);\n    //\n    //         let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n    //         wptbTableStateSaveManager.tableStateSet();\n    // }\n\n    // register and setup section buttons\n    WPTB_Helper.registerSections(['elements', 'table_settings', 'cell_settings', 'options_group' , 'table_responsive_menu', 'manage_cells', 'background_menu']);\n    WPTB_Helper.setupSectionButtons();\n\n    // activate elements section for startup\n    WPTB_Helper.activateSection('elements');\n\n    // side bar toggle setup\n    WPTB_Helper.setupSidebarToggle('.wptb-panel-toggle-section .wptb-panel-drawer-icon');\n\n    // setup panel sections that have the ability to be toggled on/off\n    WPTB_Helper.setupPanelToggleButtons();\n\n    // setup responsive menu both at left and builder panel\n    new WptbResponsive('table_responsive_menu', 'wptbResponsiveApp', '.wptb-builder-content');\n\n    // get builder section from url parameter for easy switch at page load\n    WPTB_Helper.getSectionFromUrl();\n\n    // automatically show element controls when dropped to table\n    WPTB_Helper.showControlsOnElementMount();\n\n    // show elements list menu on left panel on removing elements from table\n    WPTB_Helper.showElementsListOnRemove();\n\n    // block tinyMCE from activation at manage cells menu\n\tWPTB_Helper.blockTinyMCE();\n\n    // initialize header toolbox\n    new WPTB_HeaderToolbox('.wptb-plugin-header-toolbar').init();\n\n    // redirect active menu to elements after closing manage cells menu\n    document.addEventListener('wp-table-builder/table-edit-mode/closed', () => {\n        WPTB_Helper.activateSection('elements');\n    })\n\n    WPTB_Helper.calledByBlock();\n\n    // call what-is-new component\n    WPTB_ControlsManager.callControlScript('WhatIsNew');\n\n    // initialize notification manager\n    WPTB_NotificationManager.init();\n\n    // call table embed\n    WPTB_ControlsManager.callControlScript('TableEmbed', 'wptb-embed-modal');\n\n\t// start up extra styles for builder and make connections to necessary hooks\n\tdocument.addEventListener('wptb:table:generated', () => {\n\t\tWPTB_ExtraStyles.applyStyles(WPTB_ExtraStyles.modes.builder);\n\n\t\t// subscribe to table settings changes to update extra styles\n\t\tWPTB_ControlsManager.subscribeToControl(\n\t\t\t'extraStyles',\n\t\t\t'extraTableStyles',\n\t\t\t() => {\n\t\t\t\tWPTB_ExtraStyles.applyStyles(WPTB_ExtraStyles.modes.builder);\n\t\t\t},\n\t\t\ttrue\n\t\t);\n\t});\n\n    // call table embed\n    WPTB_ControlsManager.callControlScript('SaveButton', 'saveButton');\n    WPTB_ControlsManager.callControlScript('SwitchButton', 'switchButton');\n\n    // @deprecated\n    // // add scroll operation calculations to window\n    // new WPTB_RowMove().attachScrollOperationCalculations();\n};\n","var WPTB_LeftPanel = function () {\r\n\r\n    let table = document.getElementsByClassName('wptb-preview-table')[0],\r\n        wptbElementButtons = document.getElementsByClassName('wptb-element');\r\n\r\n    for (var i = 0; i < wptbElementButtons.length; i++) {\r\n        wptbElementButtons[i].ondragstart = function (e) {\r\n            e.dataTransfer.setData('wptbElement', this.dataset.wptbElement);\r\n            e.dataTransfer.setData( 'wptbElIndic-' + this.dataset.wptbElement, 'wptbElIndic-' + this.dataset.wptbElement );\r\n        }\r\n    };\r\n    \r\n    if( table ) {\r\n\r\n        document.querySelector('#wptb-left-scroll-panel-curtain .wptb-table-edit-mode-close').addEventListener('click', () => {\r\n            WPTB_Helper.toggleTableEditMode(true);\r\n        })\r\n\r\n        document.addEventListener('wptbSectionChanged', ({detail}) => {\r\n            if(detail === 'manage_cells'){\r\n                const wptbTablesEditModeCloseButtons = Array.from(document.querySelectorAll( '.wptb-management_table_container .wptb-table-edit-mode-close' ));\r\n                wptbTablesEditModeCloseButtons.map(closeButton => {\r\n                    closeButton.addEventListener('click', () => {\r\n                        WPTB_Helper.toggleTableEditMode(true);\r\n                    })\r\n                })\r\n            }\r\n        })\r\n    };\r\n\r\n    // this code hides the \"element parameters\" area\r\n    // when clicked outside this element and its \"tinymce\" toolbar \r\n    let wptbBuilderPanel = document.getElementsByClassName( 'wptb-builder-panel' )[0];\r\n    wptbBuilderPanel.onclick = function( e ) {\r\n        if( ! e.target.classList.contains( 'wptb-ph-element' ) && ! WPTB_Helper.findAncestor( e.target, 'wptb-ph-element' ) && \r\n               ! e.target.classList.contains( 'wptb-fixed-toolbar' ) && ! WPTB_Helper.findAncestor( e.target, 'wptb-fixed-toolbar' ) ) {\r\n            if(WPTB_Helper.currentSection !== 'manage_cells'){\r\n\r\n                WPTB_Helper.clickOnFreeSpace();\r\n            }\r\n        }\r\n    };\r\n   \r\n    let wptbHeader = document.getElementsByClassName( 'wptb-header' );\r\n    if( wptbHeader.length > 0 ) wptbHeader = wptbHeader[0];\r\n    wptbHeader.onclick = function() {\r\n        WPTB_Helper.clickOnFreeSpace();\r\n    };\r\n};","(function UMD(key, context, factory) {\n\tif (typeof module !== 'undefined' && typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tcontext[key] = factory();\n\t}\n\t// eslint-disable-next-line no-restricted-globals\n})('WPTB_Logger', self || global, () => {\n\tconst format = '%c WP Table Builder %c {message} ';\n\tconst brandStyle =\n\t\t'border-radius:5px 0 0 5px; background-color: #3299D1; padding: 3px; color: #FFF; font-weight: bold;';\n\tconst messageStyle = 'background-color: {bgColor} ; padding: 3px; color: #FFF; border-radius: 0 5px 5px 0;';\n\n\t/**\n\t * Background colors for message.\n\t *\n\t * Add color property keys keeping in mind that internal function to use that colors will select them based on type of message, ie 'normal' color property for normal messages and 'error' color property for error message types.\n\t *\n\t * @type {Object}\n\t */\n\tconst bgColors = {\n\t\tnormal: '#48BB78',\n\t};\n\n\treturn {\n\t\t/**\n\t\t * Prepare format for incoming message.\n\t\t *\n\t\t * @param {string} message message to be used\n\t\t * @return {string} prepared message\n\t\t */\n\t\tprepareMessage(message) {\n\t\t\treturn format.replace('{message}', message);\n\t\t},\n\t\t/**\n\t\t * Prepare style of message.\n\t\t *\n\t\t * @param {string} messageType message type\n\t\t * @return {string} prepared style\n\t\t */\n\t\tprepareMessageStyle(messageType = 'normal') {\n\t\t\tlet keyName = 'normal';\n\n\t\t\tif (bgColors[messageType]) {\n\t\t\t\tkeyName = messageType;\n\t\t\t}\n\n\t\t\treturn messageStyle.replace('{bgColor}', bgColors[keyName]);\n\t\t},\n\t\t/**\n\t\t * Normal log function.\n\t\t *\n\t\t * @param {string} message message string\n\t\t */\n\t\tlog(message) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(this.prepareMessage(message), brandStyle, this.prepareMessageStyle('normal'));\n\t\t},\n\t};\n});\n","var MultipleSelect = function () {\n\n\tvar selectedCells = [],\n\t\tmultipleCellMode = false;\n\n\tthis.activateMultipleSelectMode = function () {\n\t\tselectedCells = [];\n\t\tvar tds = document.getElementsByClassName('wptb-preview-table')[0].getElementsByTagName('td');\n\t\tfor (var i = 0; i < tds.length; i++) {\n\t\t\ttds[i].classList.remove('wptb-highlighted');\n\t\t}\n\t\tmultipleCellMode = true;\n\t}\n\n\tthis.deactivateMultipleSelectMode = function () {\n\t\tmultipleCellMode = false;\n\t}\n\n\tthis.isActivated = function () {\n\t\treturn multipleCellMode;\n\t}\n\n\tthis.pushSelectedCell = function (cell) {\n\t\tif (!multipleCellMode) {\n\t\t\treturn;\n\t\t}\n\t\tselectedCells.push(cell);\n\t\tcell.classList.add('wptb-highlighted');\n\t};\n\n\tthis.selectedCells = function () {\n\t\treturn selectedCells;\n\t}\n\n\tthis.flushSelectedCells = function () {\n\t\tselectedCells = [];\n\t}\n\n\tthis.getFirst = function () {\n\t\tvar minXIndex = 1000, minYIndex = 1000, first;\n\t\tfor (var i = selectedCells.length - 1; i >= 0; i--) {\n\t\t\tif (minXIndex >= selectedCells[i].dataset.xIndex\n\t\t\t\t&& minYIndex >= selectedCells[i].dataset.yIndex) {\n\t\t\t\tfirst = selectedCells[i];\n\t\t\t\tminXIndex = selectedCells[i].dataset.xIndex;\n\t\t\t\tminYIndex = selectedCells[i].dataset.yIndex;\n\t\t\t}\n\t\t}\n\t\treturn first;\n\t}\n\n\tthis.getLast = function () {\n\t\tvar maxXIndex = -1, maxYIndex = -1, last;\n\t\tfor (var i = selectedCells.length - 1; i >= 0; i--) {\n\t\t\tif (maxXIndex <= selectedCells[i].dataset.xIndex\n\t\t\t\t&& maxYIndex <= selectedCells[i].dataset.yIndex) {\n\t\t\t\tlast = selectedCells[i];\n\t\t\t\tmaxXIndex = selectedCells[i].dataset.xIndex;\n\t\t\t\tmaxYIndex = selectedCells[i].dataset.yIndex;\n\t\t\t}\n\t\t}\n\t\treturn last;\n\t}\n\n\tthis.removeAllButFirst = function () {\n\t\tvar td = this.getFirst();\n\t\tfor (var i = 1; i < selectedCells.length; i++) {\n\t\t\tselectedCells[i].classList.add('wptb-fused-cell-' + td.dataset.xIndex + '-' + td.dataset.yIndex);\n\t\t}\n\t}\n\n\treturn this;\n\n};","/**\n * Builder notification manager.\n */\n(function assignToGlobal(key, context, factory) {\n\t// eslint-disable-next-line no-param-reassign\n\tcontext[key] = factory();\n\t// eslint-disable-next-line no-restricted-globals\n})('WPTB_NotificationManager', self || global, () => {\n\t// key for making sure notification manager is initialized only once\n\tlet initialized = false;\n\n\t// store will be populated with flux store implementation by ui components\n\tthis.store = null;\n\n\t// mount id to mount our dev tool\n\tconst devToolMountId = 'wptbNotificationManagerDevTool';\n\n\t/**\n\t * Builder notification manager class.\n\t *\n\t * @class\n\t */\n\t// eslint-disable-next-line camelcase\n\tfunction WPTB_NotificationManager() {\n\t\t/**\n\t\t * Valid notification types.\n\t\t *\n\t\t * It will be populated on initialization with the values from notification manager flux store.\n\t\t *\n\t\t * @type {Object} notification types\n\t\t */\n\t\tthis.types = {};\n\n\t\t// eslint-disable-next-line no-restricted-globals\n\t\tconst context = self || global;\n\n\t\t// eslint-disable-next-line no-undef\n\t\tconst managerData = context.wptb_admin_object?.notificationManager;\n\n\t\t/**\n\t\t * Create single notification object.\n\t\t *\n\t\t * @param {Object} options notification options\n\t\t * @return {Object} notification object\n\t\t */\n\t\tconst createNotificationObject = (options) => {\n\t\t\tconst { defaults } = this.store.getters;\n\n\t\t\t// merge only keys that is available in defaults to prevent non notification related properties to be sent to component\n\t\t\tconst parsedOptions = Object.keys(options).reduce((carry, key) => {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(options, key)) {\n\t\t\t\t\tif (defaults[key]) {\n\t\t\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\t\t\tcarry[key] = options[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn carry;\n\t\t\t}, {});\n\n\t\t\treturn { ...defaults, ...parsedOptions };\n\t\t};\n\n\t\t/**\n\t\t * Send a notification to builder ui.\n\t\t *\n\t\t * Use a valid type that is defined inside types property of notification manager.\n\t\t *\n\t\t * @param {Object} notificationOptions notification options, available properties are message, type, queue, reveal,dismiss\n\t\t *\n\t\t */\n\t\tthis.sendNotification = (notificationOptions) => {\n\t\t\t// send action to store\n\t\t\tthis.store.dispatch('addNotification', createNotificationObject(notificationOptions));\n\t\t};\n\n\t\t// prepare mount point for dev tool\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tconst addDevToolsToDOM = () => {\n\t\t\tconst builderElement = document.querySelector('.wptb-builder-panel');\n\n\t\t\tif (builderElement) {\n\t\t\t\tconst devToolMountPoint = document.createElement('div');\n\t\t\t\tdevToolMountPoint.setAttribute('id', devToolMountId);\n\t\t\t\tbuilderElement.appendChild(devToolMountPoint);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Initialize and setup notification manager.\n\t\t */\n\t\tthis.init = () => {\n\t\t\tif (!initialized) {\n\t\t\t\t// assign server sent notification data to control manager so that our compiled vue code can read it\n\t\t\t\tWPTB_ControlsManager.setControlData('NotificationManager', managerData);\n\n\t\t\t\t// call notification related components\n\t\t\t\tWPTB_ControlsManager.callControlScript('NotificationManager', 'NotificationManager');\n\n\t\t\t\t// assign notification types from store\n\t\t\t\tthis.notificationTypes = this.store.getters.notificationTypes;\n\t\t\t\t// assign queue types from store\n\t\t\t\tthis.queueTypes = this.store.getters.queueTypes;\n\t\t\t\t// assign reveal types from store\n\t\t\t\tthis.revealTypes = this.store.getters.revealTypes;\n\t\t\t\t// assign dismiss types from store\n\t\t\t\tthis.dismissTypes = this.store.getters.dismissTypes;\n\n\t\t\t\t// // add dev tool mount point to DOM\n\t\t\t\t// addDevToolsToDOM();\n\t\t\t\t//\n\t\t\t\t// // data for dev tool\n\t\t\t\t// const devToolsData = {\n\t\t\t\t// \ttypes: this.notificationTypes,\n\t\t\t\t// \tqueue: this.queueTypes,\n\t\t\t\t// \treveal: this.revealTypes,\n\t\t\t\t// \tdismiss: this.dismissTypes,\n\t\t\t\t// \tsendNotification: this.sendNotification.bind(this),\n\t\t\t\t// \tmountId: devToolMountId,\n\t\t\t\t// };\n\t\t\t\t//\n\t\t\t\t// // assign dev tool data\n\t\t\t\t// WPTB_ControlsManager.setControlData('NotificationManagerDevTool', devToolsData);\n\t\t\t\t//\n\t\t\t\t// // call dev tool related components\n\t\t\t\t// WPTB_ControlsManager.callControlScript('NotificationManagerDevTool', 'NotificationManagerDevTool');\n\n\t\t\t\t// initialization process completed\n\t\t\t\tinitialized = true;\n\t\t\t}\n\t\t};\n\t}\n\n\t// return singleton manager instance to global context to assign\n\treturn new WPTB_NotificationManager();\n});\n","/* eslint-disable */\nvar WPTB_Parser = function (code) {\n  let div = document.createElement(\"div\");\n  div.innerHTML = code;\n\n  let table = div.children[0];\n  let columnTitleMobile = [\n    ...table.querySelectorAll(\".wptb-column-title-mobile-container\"),\n  ];\n\n  for (let i = 0; i < columnTitleMobile.length; i++) {\n    let parent = columnTitleMobile[i].parentNode;\n    parent.removeChild(columnTitleMobile[i]);\n  }\n\n  const LAST_ID = {\n    text: 597,\n    image: 1,\n    list: 1,\n    button: 1,\n    shortcode: 1,\n    starRating: 1,\n    customHTML: 1,\n    circleRating: 1,\n    icon: 1,\n    textIcon: 1,\n    ribbon: 1,\n    badge: 1,\n    styledList: 1,\n    progressBar: 1,\n  };\n\n  const WPTB_BlockFixer = {\n    text(el) {\n      if (!el.classList.contains(\"wptb-text-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-text-\" + LAST_ID.text++;\n      el.className = el.className?.replace(/\\s?wptb-element-text-([0-9]+)/, \"\");\n      el.classList.add(newClassName);\n    },\n\n    image(el) {\n      if (!el.classList.contains(\"wptb-image-container\")) {\n        return;\n      }\n      const newClassName = \"wptb-element-image-\" + LAST_ID.image++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-image-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    button(el) {\n      if (!el.classList.contains(\"wptb-button-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-button-\" + LAST_ID.button++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-button-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    list(el) {\n      if (!el.classList.contains(\"wptb-list-container\")) {\n        return;\n      }\n      const newClassName = \"wptb-element-list-\" + LAST_ID.list++;\n      el.className = el.className?.replace(/\\s?wptb-element-list-([0-9]+)/, \"\");\n      el.classList.add(newClassName);\n    },\n\n    starRating(el) {\n      if (!el.classList.contains(\"wptb-star_rating-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-star_rating-\" + LAST_ID.starRating++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-star_rating-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    html(el) {\n      if (!el.classList.contains(\"wptb-custom_html-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-custom_html-\" + LAST_ID.customHTML++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-custom_html-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    shortCode(el) {\n      if (!el.classList.contains(\"wptb-shortcode-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-shortcode-\" + LAST_ID.shortcode++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-shortcode-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    circleRating(el) {\n      if (!el.classList.contains(\"wptb-circle_rating-container\")) {\n        return;\n      }\n      const newClassName =\n        \"wptb-element-circle_rating-\" + LAST_ID.circleRating++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-circle_rating-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    icon(el) {\n      if (!el.classList.contains(\"wptb-icon-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-icon-\" + LAST_ID.icon++;\n      el.className = el.className?.replace(/\\s?wptb-element-icon-([0-9]+)/, \"\");\n      el.classList.add(newClassName);\n    },\n\n    ribbon(el) {\n      if (!el.classList.contains(\"wptb-ribbon_element-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-ribbon_element-\" + LAST_ID.ribbon++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-ribbon_element-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    styledList(el) {\n      if (!el.classList.contains(\"wptb-styled_list-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-styled_list-\" + LAST_ID.styledList++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-styled_list-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    textIcon(el) {\n      if (!el.classList.contains(\"wptb-text_icon_element-container\")) {\n        return;\n      }\n\n      const newClassName =\n        \"wptb-element-text_icon_element-\" + LAST_ID.textIcon++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-text_icon_element-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    progressBar(el) {\n      if (!el.classList.contains(\"wptb-progress_bar-container\")) {\n        return;\n      }\n\n      const newClassName = \"wptb-element-progress_bar-\" + LAST_ID.progressBar++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-progress_bar-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n\n    badge(el) {\n      if (!el.classList.contains(\"wptb-badge-container\")) {\n        return;\n      }\n      const newClassName = \"wptb-element-badge-\" + LAST_ID.badge++;\n      el.className = el.className?.replace(\n        /\\s?wptb-element-badge-([0-9]+)/,\n        \"\"\n      );\n      el.classList.add(newClassName);\n    },\n  };\n\n  let tds = table.querySelectorAll(\"td\");\n  for (let i = 0; i < tds.length; i++) {\n    tds[i].classList.add(\"wptb-droppable\");\n    tds[i].classList.remove(\"wptb-column-title-mobile-not-elements\");\n    const blocks = tds[i].children;\n    for (let j = 0; j < blocks.length; j++) {\n      WPTB_BlockFixer.text(blocks[j]);\n      WPTB_BlockFixer.button(blocks[j]);\n      WPTB_BlockFixer.image(blocks[j]);\n      WPTB_BlockFixer.list(blocks[j]);\n      WPTB_BlockFixer.starRating(blocks[j]);\n      WPTB_BlockFixer.html(blocks[j]);\n      WPTB_BlockFixer.shortCode(blocks[j]);\n      \n      WPTB_BlockFixer.circleRating(blocks[j]);\n      WPTB_BlockFixer.icon(blocks[j]);\n      WPTB_BlockFixer.ribbon(blocks[j]);\n      WPTB_BlockFixer.styledList(blocks[j]);\n      WPTB_BlockFixer.textIcon(blocks[j]);\n      WPTB_BlockFixer.progressBar(blocks[j]);\n      WPTB_BlockFixer.badge(blocks[j]);\n    }\n  }\n\n  return table;\n};\n","// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\nif (!Object.keys) {\n    Object.keys = (function () {\n        'use strict';\n        var hasOwnProperty = Object.prototype.hasOwnProperty,\n                hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),\n                dontEnums = [\n                    'toString',\n                    'toLocaleString',\n                    'valueOf',\n                    'hasOwnProperty',\n                    'isPrototypeOf',\n                    'propertyIsEnumerable',\n                    'constructor'\n                ],\n                dontEnumsLength = dontEnums.length;\n\n        return function (obj) {\n            if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {\n                throw new TypeError('Object.keys called on non-object');\n            }\n\n            var result = [], prop, i;\n\n            for (prop in obj) {\n                if (hasOwnProperty.call(obj, prop)) {\n                    result.push(prop);\n                }\n            }\n\n            if (hasDontEnumBug) {\n                for (i = 0; i < dontEnumsLength; i++) {\n                    if (hasOwnProperty.call(obj, dontEnums[i])) {\n                        result.push(dontEnums[i]);\n                    }\n                }\n            }\n            return result;\n        };\n    }());\n}","const WPTB_RecalculateIndexes = function (table) {\n    let trs = table.getElementsByTagName( 'tr' ),\n        tds, maxCols = 0, maxColsFull = 0, tdsArr = [];\n\n    for ( let i = 0; i < trs.length; i++ ) {\n        tds = trs[i].getElementsByTagName( 'td' );\n\n        if ( tdsArr[i] == undefined ) {\n            tdsArr[i] = [];\n        }\n\n        let jMainIter = 0;\n        for ( let j = 0; j < tds.length; j++ ) {\n            if ( tdsArr[i][j] != undefined ) {\n                for ( let y = 0; y < 100; y++ ) {\n                    if ( tdsArr[i][jMainIter] != undefined ) {\n                        jMainIter++;\n                        continue;\n                    }\n                    tdsArr[i][jMainIter] = tds[j];\n                    tds[j].dataset.xIndex = jMainIter;\n                    break;\n                }\n            } else {\n                tdsArr[i][j] = tds[j];\n                tds[j].dataset.xIndex = jMainIter;\n            }\n            tds[j].dataset.yIndex = i;\n\n            if ( tds[j].colSpan > 1 ) {\n                for ( let k = 1; k < tds[j].colSpan; k++ ) {\n                    jMainIter++;\n                    tdsArr[i][jMainIter] = 'tdDummy';\n                }\n            }\n\n            if ( tds[j].rowSpan > 1 ) {\n                for ( let x = 1; x < tds[j].rowSpan; x++ ) {\n                    if ( tdsArr[i + x] == undefined ) {\n                        tdsArr[i + x] = [];\n                    }\n                    for ( let z = 0; z < tds[j].colSpan; z++ ) {\n                        tdsArr[i + x][jMainIter - tds[j].colSpan + 1 + z ] = 'tdDummy';\n                    }\n                }\n            }\n            jMainIter++;\n        }\n\n        if ( tds.length > maxCols ) {\n            maxCols = tds.length;\n        }\n\n        if( i == 0 ) {\n            maxColsFull = jMainIter;\n        }\n    }\n    table.columns = maxCols;\n    table.maxCols = maxColsFull;\n}\n","/**\n * Responsive menu and options class.\n *\n * This class will be called and instanced at table builder menu to add it the responsive menu and its controls.\n *\n * @param {string} sectionName section name\n * @param {string} responsiveWrapperId id for mount point\n * @param {string} mainContainerQuery query to find parent container for responsive menu\n * @throws {Error} will throw an error if mainContainerQuery failed to find any element\n * @constructor\n */\n// eslint-disable-next-line no-unused-vars\nfunction WptbResponsive(sectionName, responsiveWrapperId, mainContainerQuery) {\n\tthis.sectionName = sectionName;\n\tthis.responsiveWrapperId = responsiveWrapperId;\n\tthis.responsiveTable = null;\n\tthis.loaded = false;\n\n\t/**\n\t * Add responsive container to dom.\n\t */\n\tthis.addContainerToDom = () => {\n\t\tconst responsiveContainer = document.querySelector(`#${this.responsiveWrapperId}`);\n\t\tif (!responsiveContainer) {\n\t\t\tconst mainContainer = document.querySelector(mainContainerQuery);\n\n\t\t\t// parent container not found, throw error\n\t\t\tif (!mainContainer) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`[WPTB_Responsive]: no parent container is found with the given query of [${mainContainerQuery}]`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst range = document.createRange();\n\t\t\trange.setStart(mainContainer, 0);\n\n\t\t\tconst responsiveElement = range.createContextualFragment(\n\t\t\t\t`<div class=\"wptb-responsive\" id=\"${this.responsiveWrapperId}\">responsive element</div>`\n\t\t\t);\n\t\t\tmainContainer.appendChild(responsiveElement);\n\t\t\tthis.loaded = true;\n\t\t}\n\n\t\tthis.responsiveTable = document.querySelector(`#${this.responsiveWrapperId}`);\n\t};\n\n\t/**\n\t * Load and make necessary mount preparations for component.\n\t */\n\tthis.load = () => {\n\t\tif (!this.loaded) {\n\t\t\tthis.addContainerToDom();\n\n\t\t\tWPTB_Helper.elementStartScript(this.responsiveTable, 'table_responsive_menu');\n\t\t\tWPTB_Helper.elementOptionsSet('table_responsive_menu', this.responsiveTable);\n\t\t\tWPTB_ControlsManager.callControlScript('ResponsiveTable', this.responsiveWrapperId);\n\t\t}\n\t};\n\n\t/**\n\t * Startup hook for the component.\n\t */\n\tthis.startUp = () => {\n\t\t// event listener for section change events\n\t\tdocument.addEventListener('wptbSectionChanged', (e) => {\n\t\t\tconst tablePreview = document.querySelector('.wptb-table-setup .wptb-preview-table');\n\n\t\t\t// check if activated section is related to responsive and there is a main table already in the view\n\t\t\tif (e.detail === this.sectionName && tablePreview) {\n\t\t\t\tthis.load();\n\t\t\t}\n\t\t});\n\n\t\t// event listener for table ready signal\n\t\tdocument.addEventListener('wptb:table:generated', () => {\n\t\t\t// check current section to be sure that responsive menu is the active one before calling load related scripts\n\t\t\tif (WPTB_Helper.getCurrentSection() === 'table_responsive_menu') {\n\t\t\t\tthis.load();\n\t\t\t}\n\t\t});\n\t};\n\n\tthis.startUp();\n}\n","var WPTB_Settings = function () {\n    var elems = document.getElementsByClassName('wptb-element');\n\n    for ( var i = 0; i < elems.length; i++ ) {\n        elems[i].ondragstart = function ( event ) {\n            event.dataTransfer.effectAllowed = 'move';\n            event.dataTransfer.setData( 'wptbElement', event.target.dataset.wptbElement );\n            event.dataTransfer.setData( 'wptbElIndic-' + event.target.dataset.wptbElement, 'wptbElIndic-' + event.target.dataset.wptbElement );\n\n            // set drag relative helper field for future use\n            WPTB_Helper.setDragRelativeType(this.dataset.wptbRelativeElements || '');\n        }\n        elems[i].ondragend = function () {\n            WPTB_Helper.elementDragEndClear();\n        }\n    };\n\n    let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n    let wptbUndo = document.getElementsByClassName( 'wptb-undo' );\n    if( wptbUndo.length > 0 ) {\n        wptbUndo = wptbUndo[0];\n\n        wptbUndo.onclick = function( event ) {\n            if( ! this.classList.contains( 'wptb-undoredo-disabled' ) ) {\n                wptbTableStateSaveManager.tableStateGet( this.dataset.wptbUndoredo );\n                let wptbUndoRedoContainer = document.getElementsByClassName( 'wptb-undo-redo-container' );\n                if(wptbUndoRedoContainer.length > 0) {\n                    wptbUndoRedoContainer = wptbUndoRedoContainer[0];\n                    wptbUndoRedoContainer.onmouseleave = function( event ) {\n                        event.target.onmouseleave = '';\n                        let table = document.querySelector( '.wptb-preview-table' );\n                        WPTB_Table();\n                    }\n                }\n            }\n        }\n    }\n\n    let wptbRedo = document.getElementsByClassName( 'wptb-redo' );\n    if( wptbRedo.length > 0 ) {\n        wptbRedo = wptbRedo[0];\n\n        wptbRedo.onclick = function( event ) {\n            if( ! this.classList.contains( 'wptb-undoredo-disabled' ) ) {\n                wptbTableStateSaveManager.tableStateGet( this.dataset.wptbUndoredo );\n                let wptbUndoRedoContainer = document.getElementsByClassName( 'wptb-undo-redo-container' );\n                if(wptbUndoRedoContainer.length > 0) {\n                    wptbUndoRedoContainer = wptbUndoRedoContainer[0];\n                    wptbUndoRedoContainer.onmouseleave = function( event ) {\n                        event.target.onmouseleave = '';\n                        let table = document.querySelector( '.wptb-preview-table' );\n                        WPTB_Table();\n                    }\n                }\n            }\n\n        }\n    }\n\n    // @deprecated\n    // let shortcodePopupWindow = document.getElementsByClassName( 'wptb-popup-window-modal' )[0];\n    document.getElementsByClassName( 'wptb-embed-btn' )[0].onclick = function () {\n        if( ! this.classList.contains( 'wptb-button-disable' ) ) {\n            // show modal window for shortcode embed\n            WPTB_Store.commit('embed/showModal');\n        }\n    }\n\n    // window beforeunload event callback\n    window.onbeforeunload = function(e) {\n        return WPTB_Store.getters.getTableDirtyStatus? true : null;\n    };\n\n\n    document.getElementsByClassName( 'wptb-popup-dark-area' )[0].onclick = function () {\n        shortcodePopupWindow.classList.remove( 'wptb-popup-show' );\n    }\n\n    // @deprecated\n    // document.getElementsByClassName( 'wptb-popup-window-close-icon' )[0].onclick = function () {\n    //     shortcodePopupWindow.classList.remove( 'wptb-popup-show' );\n    // }\n\n    document.getElementsByClassName( 'wptb-preview-btn' )[0].onclick = function ( event ) {\n        if( this.classList.contains( 'wptb-button-disable' ) ) {\n            return;\n        }\n\n        let previewId = Math.floor( Math.random() * 10000 );\n\n        var newHref = new URL( event.target.href );\n        newHref.searchParams.set( 'preview_id', previewId );\n        event.target.href = newHref.toString();\n        WPTB_Helper.saveTable( event, false, previewId );\n    }\n\n    // @deprecated\n    // document.getElementsByClassName( 'wptb-save-btn' )[0].onclick = function ( event ) {\n    //     if( ! this.classList.contains( 'wptb-save-disabled' ) ) {\n    //         WPTB_Helper.saveTable( event );\n    //     }\n    // }\n\n    let tableTitleField = document.querySelector( '#wptb-setup-name' );\n    if( tableTitleField ) {\n        tableTitleField.onchange = function () {\n            let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n            wptbTableStateSaveManager.tableStateSet();\n        }\n    }\n};\n","/**\n * Responsive class assignment for frontend operations.\n *\n * This file can be used as an UMD.\n */\n(function assignToGlobal(key, context, factory) {\n\tif (typeof exports === 'object' && typeof module !== 'undefined') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tcontext[key] = factory();\n\t}\n\t// eslint-disable-next-line no-restricted-globals\n})('WPTB_SortableTable', self || global, () => {\n\tfunction WPTB_SortTable(options = {}) {\n\t\tconst table = (this.table = options.table);\n\t\tWPTB_RecalculateIndexes(table);\n\t\tconst thisObject = this;\n\t\tthis.itemsPerHeader = 0;\n\t\tthis.tableMaxCols = table.maxCols;\n\t\tthis.cellsStylesScheme = {};\n\t\tthis.rowsStylesScheme = {};\n\n\t\t/**\n\t\t * sets the table to sort mode\n\t\t *\n\t\t * @param {string} type\n\t\t * @param {boolean} active\n\t\t * @param {number} number\n\t\t */\n\t\tthis.sortModeSwitcher = function (type, active) {\n\t\t\tif(active) {\n\t\t\t\tthis.sortModeSwitcher('horizontal', false);\n\t\t\t\tthis.sortModeSwitcher('vertical', false);\n\t\t\t}\n\n\t\t\tif (type === 'vertical') {\n\t\t\t\tthis.table.removeEventListener('click', this.sortableTableVerticalStart, false);\n\n\t\t\t\tif (active) {\n\t\t\t\t\tthis.sortingCellMouseMoveSwitcher('vertical', true);\n\t\t\t\t\tthis.table.addEventListener('click', this.sortableTableVerticalStart, false);\n\t\t\t\t\tthis.table.dataset.wptbSortableTableVertical = '1';\n\t\t\t\t\tthis.createTableElementsStylesScheme('td');\n\t\t\t\t\tthis.createTableElementsStylesScheme('tr');\n\t\t\t\t} else {\n\t\t\t\t\tthis.sortingCellMouseMoveSwitcher('vertical', false);\n\t\t\t\t\tdelete this.table.dataset.wptbSortableTableVertical;\n\t\t\t\t}\n\t\t\t} else if (type === 'horizontal') {\n\t\t\t\tthis.table.removeEventListener('click', this.sortableTableHorizontalStart, false);\n\n\t\t\t\tif (active) {\n\t\t\t\t\tthis.sortingCellMouseMoveSwitcher('horizontal', true);\n\t\t\t\t\tthis.table.addEventListener('click', this.sortableTableHorizontalStart, false);\n\t\t\t\t\tthis.table.dataset.wptbSortableTableHorizontal = '1';\n\t\t\t\t\tthis.createTableElementsStylesScheme('td');\n\t\t\t\t\tthis.createTableElementsStylesScheme('tr');\n\t\t\t\t} else {\n\t\t\t\t\tthis.sortingCellMouseMoveSwitcher('horizontal', false);\n\t\t\t\t\tdelete this.table.dataset.wptbSortableTableHorizontal;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * changes table object for old reconstruction table type\n\t\t *\n\t\t * @param {boolean}start\n\t\t * @returns {*}\n\t\t */\n\t\tthis.tableObjectChange = function (start = true) {\n\t\t\tif(this.table.classList.contains('wptb-mobile-view-active') && start) {\n\t\t\t\tthis.table = table.parentNode.parentNode.querySelector('.wptb-preview-table-mobile');\n\t\t\t} else if(this.table.classList.contains('wptb-preview-table-mobile') && !start) {\n\t\t\t\tthis.table = table.parentNode.querySelector('.wptb-preview-table');\n\t\t\t}\n\t\t\treturn this.table;\n\t\t}\n\n\t\t/**\n\t\t * fills the object with data about cell styles for all locations (create scheme)\n\t\t *\n\t\t * @param elemSelector\n\t\t */\n\t\tthis.createTableElementsStylesScheme = function (elemSelector) {\n\t\t\tthis.tableObjectChange();\n\t\t\tlet elements = this.table.querySelectorAll(elemSelector);\n\t\t\tif(elements.length) {\n\t\t\t\tfor(let i = 0; i < elements.length; i++) {\n\t\t\t\t\tlet elem = elements[i];\n\t\t\t\t\tlet cellFullStyleObj = window.getComputedStyle(elem, null);\n\t\t\t\t\tlet backgroundColor = cellFullStyleObj.getPropertyValue( 'background-color' );\n\t\t\t\t\tlet objectKey = '';\n\t\t\t\t\tif(elemSelector === 'td') {\n\t\t\t\t\t\tobjectKey = elem.dataset.xIndex + '-' + elem.dataset.yIndex;\n\t\t\t\t\t\tthis.cellsStylesScheme[objectKey] = {backgroundColor};\n\t\t\t\t\t} else if(elemSelector === 'tr') {\n\t\t\t\t\t\tobjectKey = String(i);\n\t\t\t\t\t\tthis.rowsStylesScheme[objectKey] = {backgroundColor};\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.tableObjectChange(false);\n\t\t}\n\n\t\t/**\n\t\t * applies saved cell styles data to all cells\n\t\t *\n\t\t * @param elemSelector\n\t\t */\n\t\tthis.reassignElementsStyles = function (elemSelector) {\n\t\t\tthis.tableObjectChange();\n\t\t\tlet elements = this.table.querySelectorAll(elemSelector);\n\t\t\tlet elementsStylesScheme;\n\t\t\tif(elemSelector === 'td') {\n\t\t\t\telementsStylesScheme = this.cellsStylesScheme;\n\t\t\t} else if(elemSelector === 'tr') {\n\t\t\t\telementsStylesScheme = this.rowsStylesScheme;\n\t\t\t}\n\t\t\tif(elements.length) {\n\t\t\t\tfor(let i = 0; i < elements.length; i++) {\n\t\t\t\t\tlet elem = elements[i];\n\t\t\t\t\tlet objectKey = '';\n\t\t\t\t\tif(elemSelector === 'td') {\n\t\t\t\t\t\tobjectKey = elem.dataset.xIndex + '-' + elem.dataset.yIndex;\n\t\t\t\t\t} else if(elemSelector === 'tr') {\n\t\t\t\t\t\tobjectKey = i;\n\t\t\t\t\t}\n\t\t\t\t\tif(elementsStylesScheme.hasOwnProperty(objectKey)) {\n\t\t\t\t\t\tlet elemStyles = elementsStylesScheme[objectKey];\n\t\t\t\t\t\tfor(let key in elemStyles) {\n\t\t\t\t\t\t\telem.style[key] = elemStyles[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.tableObjectChange(false);\n\t\t}\n\n\t\t/**\n\t\t * checks whether the table should be in the sort state\n\t\t * and connects the necessary handlers\n\t\t *\n\t\t * @param {object} responsiveFront\n\t\t */\n\t\tthis.sortableTableInitialization = function (responsiveFront) {\n\t\t\tlet typeFirst;\n\t\t\tlet typeSecond;\n\t\t\tif (this.table.dataset.wptbSortableTableVertical && this.table.dataset.wptbSortableTableVertical === '1') {\n\t\t\t\ttypeFirst = 'vertical';\n\t\t\t\ttypeSecond = 'horizontal';\n\t\t\t} else if (\n\t\t\t\tthis.table.dataset.wptbSortableTableHorizontal &&\n\t\t\t\tthis.table.dataset.wptbSortableTableHorizontal === '1'\n\t\t\t) {\n\t\t\t\ttypeFirst = 'horizontal';\n\t\t\t\ttypeSecond = 'vertical';\n\t\t\t}\n\n\t\t\tif(!typeFirst || typeof typeFirst !== 'string' || !typeSecond || typeof typeSecond !== 'string') return;\n\n\t\t\tlet switchMode = WPTB_GetDirectionAfterReconstruction(this.table, typeFirst, typeSecond, 'vertical', responsiveFront);\n\n\t\t\tif(typeof switchMode === 'object' && switchMode.hasOwnProperty('switch')) {\n\t\t\t\tfunction sortModeSwitcherRun (e) {\n\t\t\t\t\tlet switchModeObj = switchMode.switch(e);\n\t\t\t\t\tif(typeof switchModeObj === 'object') {\n\t\t\t\t\t\tthis.itemsPerHeader = switchModeObj.itemsPerHeader;\n\t\t\t\t\t\tif(switchModeObj.hasOwnProperty('newTable')) {\n\t\t\t\t\t\t\tlet tableOld = this.table;\n\t\t\t\t\t\t\tthis.table = switchModeObj.newTable;\n\t\t\t\t\t\t\tthis.sortModeSwitcher(switchModeObj.type[0], true);\n\t\t\t\t\t\t\tthis.table = tableOld;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.sortModeSwitcher(switchModeObj.type[0], true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsortModeSwitcherRun.call(thisObject);\n\t\t\t\tthis.table.addEventListener(\n\t\t\t\t\t'table:rebuilt',\n\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\tsortModeSwitcherRun.call(thisObject, e);\n\t\t\t\t\t},\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * adds and deletes mousemove and mouseleave events handlers when happens switch sorting mode\n\t\t * and also can add necessary attributes\n\t\t *\n\t\t * @param {string} type\n\t\t * @param {boolean} active\n\t\t */\n\t\tthis.sortingCellMouseMoveSwitcher = function (type, active) {\n\t\t\t/**\n\t\t\t * removes and adds mousemove and mouseleave events handlers\n\t\t\t *\n\t\t\t * @param {HTMLElement} td\n\t\t\t * @param {func} sCMM\n\t\t\t * @param {boolean} active\n\t\t\t */\n\t\t\tfunction s(td, sCMM, active) {\n\t\t\t\ttd.removeEventListener('mousemove', sCMM, false);\n\t\t\t\ttd.removeEventListener('mouseleave', tdMouseLeave, false);\n\t\t\t\tif (active) {\n\t\t\t\t\ttd.addEventListener('mousemove', sCMM, false);\n\t\t\t\t\ttd.addEventListener('mouseleave', tdMouseLeave, false);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * removes and adds data sorted attributes\n\t\t\t *\n\t\t\t * @param {HTMLElement} td\n\t\t\t * @param {string} dataAttr\n\t\t\t * @param {boolean} active\n\t\t\t */\n\t\t\tfunction dataAttrSortChange(td, dataAttr, active) {\n\t\t\t\tif (active) {\n\t\t\t\t\tif (!td.dataset[dataAttr] || td.dataset[dataAttr] !== 'desk-disabled') {\n\t\t\t\t\t\ttd.dataset[dataAttr] = 'ask';\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttd.dataset[dataAttr] = 'desk';\n\t\t\t\t\t}\n\t\t\t\t} else if (td.dataset[dataAttr] === 'ask') {\n\t\t\t\t\ttd.dataset[dataAttr] = 'ask-disabled';\n\t\t\t\t} else if (td.dataset[dataAttr] === 'desk') {\n\t\t\t\t\ttd.dataset[dataAttr] = 'desk-disabled';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// removes all mousemove and mouseleave events handlers\n\t\t\t// and also removes all data sorted attributes from all cells\n\t\t\tlet tds = this.table.querySelectorAll('td');\n\t\t\tif (tds.length) {\n\t\t\t\ttds = [...tds];\n\t\t\t\ttds.map((td) => {\n\t\t\t\t\ts(td, sortingCellMouseMoveVertical, false);\n\t\t\t\t\tdataAttrSortChange(td, 'sortedVertical', false);\n\t\t\t\t\ts(td, sortingCellMouseMoveHorizontal, false);\n\t\t\t\t\tdataAttrSortChange(td, 'sortedHorizontal', false);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// if active === true sets sorted events handlers\n\t\t\t// and data sorted attributes for all cells\n\t\t\tif (active) {\n\t\t\t\tif (type === 'vertical') {\n\t\t\t\t\tlet rowsLength = this.table.rows.length;\n\t\t\t\t\tlet dataYIndexStart = 0;\n\t\t\t\t\twhile (rowsLength > 0) {\n\t\t\t\t\t\tlet tds = this.table.querySelectorAll(`[data-y-index=\"${dataYIndexStart}\"]`);\n\t\t\t\t\t\ttds = [...tds];\n\t\t\t\t\t\ttds.map((td) => {\n\t\t\t\t\t\t\ts(td, sortingCellMouseMoveVertical, active);\n\t\t\t\t\t\t\tdataAttrSortChange(td, 'sortedVertical', active);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (this.itemsPerHeader) {\n\t\t\t\t\t\t\trowsLength -= this.itemsPerHeader + 1;\n\t\t\t\t\t\t\tdataYIndexStart += this.itemsPerHeader + 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trowsLength = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (type === 'horizontal') {\n\t\t\t\t\tlet tds = this.table.querySelectorAll('[data-x-index=\"0\"]');\n\t\t\t\t\ttds = [...tds];\n\t\t\t\t\ttds.map((td) => {\n\t\t\t\t\t\tlet tdsPerAfter = this.table.querySelectorAll(`[data-y-index=\"${td.dataset.yIndex}\"]`);\n\t\t\t\t\t\tif(tdsPerAfter.length > 2) {\n\t\t\t\t\t\t\ts(td, sortingCellMouseMoveHorizontal, active);\n\t\t\t\t\t\t\tdataAttrSortChange(td, 'sortedHorizontal', active);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * adds a sortable-hover class for a cell when the cursor is over the sort icon (arrow)\n\t\t *\n\t\t * @param {event} e\n\t\t * @param {string} type\n\t\t * @param {HTMLElement} element td\n\t\t */\n\t\tfunction sortingCellMouseMov(e, type, element) {\n\t\t\tif (e.target.tagName === 'TD') {\n\t\t\t\tconst x = e.offsetX == undefined ? e.layerX : e.offsetX;\n\t\t\t\tconst y = e.offsetY == undefined ? e.layerY : e.offsetY;\n\t\t\t\tlet xMatch = false;\n\t\t\t\tif ((type === 'vertical' && e.target.clientWidth - x <= 35) || (type === 'horizontal' && x <= 35)) {\n\t\t\t\t\txMatch = true;\n\t\t\t\t}\n\t\t\t\tif (xMatch && (e.target.clientHeight - 35) / 2 < y && (e.target.clientHeight + 35) / 2 > y) {\n\t\t\t\t\telement.classList.add('sortable-hover');\n\t\t\t\t} else {\n\t\t\t\t\telement.classList.remove('sortable-hover');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\telement.classList.remove('sortable-hover');\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * calls sortingCellMouseMov with the type parameter set to vertical\n\t\t *\n\t\t * @param {event} e\n\t\t */\n\t\tfunction sortingCellMouseMoveVertical(e) {\n\t\t\tsortingCellMouseMov(e, 'vertical', this);\n\t\t}\n\n\t\t/**\n\t\t * calls sortingCellMouseMov with the type parameter set to horizontal\n\t\t *\n\t\t * @param {event} e\n\t\t */\n\t\tfunction sortingCellMouseMoveHorizontal(e) {\n\t\t\tsortingCellMouseMov(e, 'horizontal', this);\n\t\t}\n\n\t\t/**\n\t\t * remove sortable-hover class from cell when cursor leave cell\n\t\t */\n\t\tfunction tdMouseLeave() {\n\t\t\tthis.classList.remove('sortable-hover');\n\t\t}\n\n\t\t/**\n\t\t * function for sorting the table vertically by the numeric content of cells\n\t\t *\n\t\t * @param {event} e\n\t\t * @param {HTMLElement} table\n\t\t * @param {string} type\n\t\t */\n\t\tfunction sortableTable(e, type) {\n\t\t\tif (\n\t\t\t\te.target &&\n\t\t\t\te.target.tagName === 'TD' &&\n\t\t\t\t!table.parentNode.classList.contains('wptb-preview-table-manage-cells')\n\t\t\t) {\n\t\t\t\tconst table = e.currentTarget;\n\t\t\t\tlet tableWasSorted = false;\n\t\t\t\tif (type === 'vertical' && e.target.dataset.hasOwnProperty('sortedVertical')) {\n\t\t\t\t\t/**\n\t\t\t\t\t * if table have enabled param topRowAsHeader and sellsStackDirection is column\n\t\t\t\t\t * the top and bottom rows that will not be sorted are temporarily removed from the table\n\t\t\t\t\t */\n\t\t\t\t\tconst tableRowsBefore = [];\n\t\t\t\t\tconst tableRowsAfter = [];\n\t\t\t\t\tif (this.itemsPerHeader && this.itemsPerHeader < table.rows.length) {\n\t\t\t\t\t\tWPTB_RecalculateIndexes(table);\n\t\t\t\t\t\tconst tableRowsArr = [...table.rows];\n\t\t\t\t\t\tconst tableLastCont = table.querySelector('tbody') ? table.querySelector('tbody') : table;\n\t\t\t\t\t\tfor (let i = 0; i < tableRowsArr.length; i++) {\n\t\t\t\t\t\t\tif (i < e.target.dataset.yIndex) {\n\t\t\t\t\t\t\t\ttableRowsBefore.push(tableRowsArr[i]);\n\t\t\t\t\t\t\t\ttableLastCont.removeChild(tableRowsArr[i]);\n\t\t\t\t\t\t\t} else if (i > parseInt(e.target.dataset.yIndex, 10) + this.itemsPerHeader) {\n\t\t\t\t\t\t\t\ttableRowsAfter.push(tableRowsArr[i]);\n\t\t\t\t\t\t\t\ttableLastCont.removeChild(tableRowsArr[i]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tWPTB_RecalculateIndexes(table);\n\t\t\t\t\t}\n\n\t\t\t\t\tlet tds = table.querySelectorAll(`[data-x-index=\"${e.target.dataset.xIndex}\"]`);\n\t\t\t\t\ttds = [...tds];\n\n\t\t\t\t\t/**\n\t\t\t\t\t * preparing table for sorting\n\t\t\t\t\t */\n\t\t\t\t\tlet rowspan;\n\t\t\t\t\tlet rowNum;\n\t\t\t\t\ttds.map((td) => {\n\t\t\t\t\t\tif (!(rowspan = parseInt(td.rowSpan, 10))) {\n\t\t\t\t\t\t\trowspan = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\trowNum = td.dataset.yIndex;\n\t\t\t\t\t\tWPTB_CutGlueTable.cutTableHorizontally(rowNum, table);\n\t\t\t\t\t\trowNum += rowspan;\n\t\t\t\t\t\tWPTB_CutGlueTable.cutTableHorizontally(rowNum, table);\n\t\t\t\t\t});\n\n\t\t\t\t\tconst rowsValuesArr = [];\n\t\t\t\t\tlet rowsTdFirst;\n\t\t\t\t\tlet tdYCoordsRowSpanPrevious = 0;\n\t\t\t\t\tconst tableRowsPushed = [];\n\t\t\t\t\tfor (let i = 0; i < tds.length; i++) {\n\t\t\t\t\t\tconst tdsChanged = changeSortingTdsCollection(\n\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\ttable,\n\t\t\t\t\t\t\ttds,\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\ttdYCoordsRowSpanPrevious,\n\t\t\t\t\t\t\t'vertical'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (tdsChanged && tdsChanged.hasOwnProperty('i')) {\n\t\t\t\t\t\t\ttds = tdsChanged.tds;\n\t\t\t\t\t\t\ti = tdsChanged.i;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (tdsChanged) {\n\t\t\t\t\t\t\ttds = tdsChanged.tds;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst td = tds[i];\n\n\t\t\t\t\t\tlet tdRowspan = parseInt(td.rowSpan, 10);\n\t\t\t\t\t\tif (!tdRowspan) tdRowspan = 1;\n\n\t\t\t\t\t\ttdYCoordsRowSpanPrevious = parseInt(td.dataset.yIndex, 10) + tdRowspan;\n\n\t\t\t\t\t\tconst textElementsValues = textElementsValuesGet(td);\n\n\t\t\t\t\t\tconst rowsTd = [];\n\t\t\t\t\t\tfor (let j = 0; j < tdRowspan; j++) {\n\t\t\t\t\t\t\trowsTd.push(table.rows[parseInt(td.dataset.yIndex, 10) + j]);\n\t\t\t\t\t\t\ttableRowsPushed.push(parseInt(td.dataset.yIndex, 10) + j);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (td.dataset.yIndex > 0) {\n\t\t\t\t\t\t\trowsValuesArr.push({\n\t\t\t\t\t\t\t\trowsTd,\n\t\t\t\t\t\t\t\tvalue: textElementsValues,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trowsTdFirst = rowsTd;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst orderBy = setSortedAscDataAttr(e, 'sortedVertical');\n\t\t\t\t\tif (!orderBy) return;\n\n\t\t\t\t\tif (rowsValuesArr.length) rowsValuesArr.sort((prev, next) => sortOrder(orderBy, prev, next));\n\n\t\t\t\t\trowsValuesArr.unshift({ rowsTd: rowsTdFirst });\n\n\t\t\t\t\tif (rowsValuesArr.length < table.rows.length) {\n\t\t\t\t\t\tfor (let i = 0; i < table.rows.length; i++) {\n\t\t\t\t\t\t\tif (tableRowsPushed.indexOf(i) > -1) continue;\n\t\t\t\t\t\t\tconst rowsTd = [];\n\t\t\t\t\t\t\trowsTd.push(table.rows[i]);\n\n\t\t\t\t\t\t\trowsValuesArr.push({\n\t\t\t\t\t\t\t\trowsTd,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tBody = table.querySelector('tbody');\n\t\t\t\t\ttBody.innerHTML = '';\n\n\t\t\t\t\trowsValuesArr.map((rowsValObj) => {\n\t\t\t\t\t\trowsValObj.rowsTd.map((row) => {\n\t\t\t\t\t\t\ttBody.appendChild(row);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\t/**\n\t\t\t\t\t * returning previously deleted rows\n\t\t\t\t\t */\n\t\t\t\t\tif (tableRowsBefore.length) {\n\t\t\t\t\t\tconst tableLastCont = table.querySelector('tbody') ? table.querySelector('tbody') : table;\n\t\t\t\t\t\tif (tableLastCont) {\n\t\t\t\t\t\t\tconst trRef = tableLastCont.querySelector('tr');\n\t\t\t\t\t\t\ttableRowsBefore.map((tr) => {\n\t\t\t\t\t\t\t\ttableLastCont.insertBefore(tr, trRef);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (tableRowsAfter.length) {\n\t\t\t\t\t\tconst tableLastCont = table.querySelector('tbody') ? table.querySelector('tbody') : table;\n\t\t\t\t\t\tif (tBody) {\n\t\t\t\t\t\t\ttableRowsAfter.map((tr) => {\n\t\t\t\t\t\t\t\ttableLastCont.appendChild(tr);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tWPTB_RecalculateIndexes(table);\n\n\t\t\t\t\tWPTB_CutGlueTable.glueTableHorizontally(table);\n\n\t\t\t\t\ttableWasSorted = true;\n\t\t\t\t} else if (type === 'horizontal' && e.target.dataset.xIndex === '0') {\n\t\t\t\t\tlet tds = table.querySelectorAll(`[data-y-index=\"${e.target.dataset.yIndex}\"]`);\n\t\t\t\t\ttds = [...tds];\n\n\t\t\t\t\t// preparing table for sorting\n\t\t\t\t\tlet colspan;\n\t\t\t\t\tlet colNum;\n\t\t\t\t\ttds.map((td) => {\n\t\t\t\t\t\tif (!(colspan = parseInt(td.colSpan, 10))) {\n\t\t\t\t\t\t\tcolspan = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolNum = td.dataset.xIndex;\n\t\t\t\t\t\tWPTB_CutGlueTable.cutTableVertically(colNum, table);\n\t\t\t\t\t\tcolNum += colspan;\n\t\t\t\t\t\tWPTB_CutGlueTable.cutTableVertically(colNum, table);\n\t\t\t\t\t});\n\n\t\t\t\t\tconst columnsValuesArr = [];\n\t\t\t\t\tlet columnsTdFirst;\n\n\t\t\t\t\tlet tdXCoordsColSpanPrevious = 0;\n\t\t\t\t\tfor (let i = 0; i < tds.length; i++) {\n\t\t\t\t\t\tconst tdsChanged = changeSortingTdsCollection(\n\t\t\t\t\t\t\te,\n\t\t\t\t\t\t\ttable,\n\t\t\t\t\t\t\ttds,\n\t\t\t\t\t\t\ti,\n\t\t\t\t\t\t\ttdXCoordsColSpanPrevious,\n\t\t\t\t\t\t\t'horizontal'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (tdsChanged && tdsChanged.hasOwnProperty('i')) {\n\t\t\t\t\t\t\ttds = tdsChanged.tds;\n\t\t\t\t\t\t\ti = tdsChanged.i;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else if (tdsChanged) {\n\t\t\t\t\t\t\ttds = tdsChanged.tds;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst td = tds[i];\n\t\t\t\t\t\tlet tdColspan = parseInt(td.colSpan, 10);\n\t\t\t\t\t\tif (!tdColspan) tdColspan = 1;\n\n\t\t\t\t\t\ttdXCoordsColSpanPrevious = parseInt(td.dataset.xIndex, 10) + tdColspan;\n\n\t\t\t\t\t\tconst textElementsValues = textElementsValuesGet(td);\n\t\t\t\t\t\tconst columnsTd = [];\n\t\t\t\t\t\tfor (let j = 0; j < tdColspan; j++) {\n\t\t\t\t\t\t\tconst tdsColumn = [\n\t\t\t\t\t\t\t\t...table.querySelectorAll(`[data-x-index=\"${parseInt(td.dataset.xIndex, 10) + j}\"]`),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tcolumnsTd.push(tdsColumn);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (td.dataset.xIndex > 0) {\n\t\t\t\t\t\t\tcolumnsValuesArr.push({\n\t\t\t\t\t\t\t\tcolumnsTd,\n\t\t\t\t\t\t\t\tvalue: textElementsValues,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcolumnsTdFirst = columnsTd;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst orderBy = setSortedAscDataAttr(e, 'sortedHorizontal');\n\t\t\t\t\tif (!orderBy) return;\n\n\t\t\t\t\tif (columnsValuesArr.length) columnsValuesArr.sort((prev, next) => sortOrder(orderBy, prev, next));\n\n\t\t\t\t\tcolumnsValuesArr.unshift({ columnsTd: columnsTdFirst });\n\n\t\t\t\t\tif (columnsValuesArr.length < table.maxCols) {\n\t\t\t\t\t\tconst difference = table.maxCols - columnsValuesArr.length;\n\t\t\t\t\t\tfor (let i = 0; i < difference; i++) {\n\t\t\t\t\t\t\tconst tdsColumn = [\n\t\t\t\t\t\t\t\t...table.querySelectorAll(\n\t\t\t\t\t\t\t\t\t`[data-x-index=\"${parseInt(table.maxCols, 10) - parseInt(difference, 10) + i}\"]`\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\tcolumnsValuesArr.push({\n\t\t\t\t\t\t\t\tcolumnsTd: [tdsColumn],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let i = 0; i < table.rows.length; i++) {\n\t\t\t\t\t\ttable.rows[i].innerHTML = '';\n\t\t\t\t\t}\n\n\t\t\t\t\tcolumnsValuesArr.map((columnsValObj) => {\n\t\t\t\t\t\tcolumnsValObj.columnsTd.map((tdsColumn) => {\n\t\t\t\t\t\t\ttdsColumn.map((td) => {\n\t\t\t\t\t\t\t\ttable.rows[td.dataset.yIndex].appendChild(td);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\n\t\t\t\t\tWPTB_RecalculateIndexes(table);\n\n\t\t\t\t\tWPTB_CutGlueTable.glueTableVertically(table);\n\n\t\t\t\t\ttableWasSorted = true;\n\t\t\t\t}\n\n\t\t\t\tif (tableWasSorted) {\n\t\t\t\t\tremoveCellsAttrAfterDivision(table);\n\n\t\t\t\t\tif (table.hasOwnProperty('tableSM')) {\n\t\t\t\t\t\tconst tableSM = table.tableSM();\n\t\t\t\t\t\tnew tableSM().tableStateSet();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.reassignElementsStyles('td');\n\t\t\t\t\tthis.reassignElementsStyles('tr');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Function that sets the data-attribute with the number of the row or column\n\t\t * that the table was sorted by. Returns the number of a row or column\n\t\t *\n\t\t * @param {event} e\n\t\t * @param {string} dataAttr\n\t\t * @returns {null|boolean}\n\t\t */\n\t\tfunction setSortedAscDataAttr(e, dataAttr) {\n\t\t\tif (\n\t\t\t\te.currentTarget &&\n\t\t\t\t(e.currentTarget.classList.contains('wptb-preview-table') ||\n\t\t\t\t\te.currentTarget.classList.contains('wptb-preview-table-mobile'))\n\t\t\t) {\n\t\t\t\tif (!e.target.dataset[dataAttr] || e.target.dataset[dataAttr] === 'ask') {\n\t\t\t\t\te.target.dataset[dataAttr] = 'desk';\n\t\t\t\t} else {\n\t\t\t\t\te.target.dataset[dataAttr] = 'ask';\n\t\t\t\t}\n\n\t\t\t\treturn e.target.dataset[dataAttr];\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * defines the sorting order\n\t\t *\n\t\t * @param {string} orderBy\n\t\t * @param prev\n\t\t * @param next\n\t\t * @returns {number}\n\t\t */\n\t\tfunction sortOrder(orderBy = 'ask', prev, next) {\n\t\t\tlet prevValue = prev.value;\n\t\t\tlet nextValue = next.value;\n\t\t\tif (parseInt(prevValue) && parseInt(nextValue)) {\n\t\t\t\tprevValue = parseInt(prevValue);\n\t\t\t\tnextValue = parseInt(nextValue);\n\t\t\t}\n\n\t\t\tif (orderBy === 'ask') {\n\t\t\t\tif (prevValue < nextValue) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif (prevValue === nextValue) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (prevValue < nextValue) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (prevValue === nextValue) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\t/**\n\t\t * return cell text elements values\n\t\t *\n\t\t * @param cell {HTMLElement}\n\t\t * @returns {string}\n\t\t */\n\t\tfunction textElementsValuesGet(cell) {\n\t\t\tlet textElements = cell.querySelectorAll('.wptb-text-container');\n\t\t\ttextElements = [...textElements];\n\t\t\tlet value = '';\n\t\t\tfor (let j = 0; j < textElements.length; j++) {\n\t\t\t\tvalue += textElements[j].innerText;\n\t\t\t\tif (j !== textElements.length - 1) value += ' ';\n\t\t\t}\n\n\t\t\treturn value;\n\t\t}\n\n\t\t/**\n\t\t * adds cells to the collection of cells in the row or column that the table is sorted by.\n\t\t * These added cells are not originally were added in the collection,\n\t\t * because they are combined with cells from higher rows or left-side columns\n\t\t *\n\t\t * @param {event} e\n\t\t * @param {HTMLElement} table\n\t\t * @param {array} tds\n\t\t * @param {number} i\n\t\t * @param {number} tdIndexSpanPrev\n\t\t * @param {string} type\n\t\t * @returns {{tds: *}|boolean|{tds: *, i: *}}\n\t\t */\n\t\tfunction changeSortingTdsCollection(e, table, tds, i, tdIndexSpanPrev, type) {\n\t\t\tconst td = tds[i];\n\t\t\tlet tdsCollectionChanged = false;\n\t\t\tlet collectionTds;\n\t\t\tlet collectionTdsJSpan;\n\t\t\tlet collectionTdsJSpanProperty;\n\t\t\tlet indexName;\n\t\t\tlet indexNameCamelCase;\n\t\t\tlet indexNamePerpendicularCamelCase;\n\t\t\tlet tdSpanProperty;\n\t\t\t// max rows or columns column\n\t\t\tlet tableGroupCount;\n\n\t\t\tif (type === 'vertical') {\n\t\t\t\tcollectionTdsJSpanProperty = 'colSpan';\n\t\t\t\tindexName = 'data-y-index';\n\t\t\t\tindexNameCamelCase = 'yIndex';\n\t\t\t\tindexNamePerpendicularCamelCase = 'xIndex';\n\t\t\t\ttdSpanProperty = 'rowSpan';\n\t\t\t\ttableGroupCount = table.rows.length;\n\t\t\t} else if (type === 'horizontal') {\n\t\t\t\tcollectionTdsJSpanProperty = 'rowSpan';\n\t\t\t\tindexName = 'data-x-index';\n\t\t\t\tindexNameCamelCase = 'xIndex';\n\t\t\t\tindexNamePerpendicularCamelCase = 'yIndex';\n\t\t\t\ttdSpanProperty = 'colSpan';\n\t\t\t\ttableGroupCount = table.maxCols;\n\t\t\t}\n\n\t\t\tif (td.dataset[indexNameCamelCase] - tdIndexSpanPrev > 0) {\n\t\t\t\tcollectionTds = table.querySelectorAll(`[${indexName}=\"${tdIndexSpanPrev}\"]`);\n\n\t\t\t\tfor (let j = 0; j < collectionTds.length; j++) {\n\t\t\t\t\tcollectionTdsJSpan = collectionTds[j][collectionTdsJSpanProperty];\n\t\t\t\t\tif (!collectionTdsJSpan) collectionTdsJSpan = 1;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcollectionTds[j].dataset[indexNamePerpendicularCamelCase] <\n\t\t\t\t\t\t\te.target.dataset[indexNamePerpendicularCamelCase] &&\n\t\t\t\t\t\tparseInt(collectionTds[j].dataset[indexNamePerpendicularCamelCase], 10) +\n\t\t\t\t\t\t\tparseInt(collectionTdsJSpan, 10) >\n\t\t\t\t\t\t\te.target.dataset[indexNamePerpendicularCamelCase]\n\t\t\t\t\t) {\n\t\t\t\t\t\ttds.splice(i, 0, collectionTds[j]);\n\t\t\t\t\t\ttdsCollectionChanged = true;\n\t\t\t\t\t\ti--;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tdsCollectionChanged) return { tds, i };\n\n\t\t\tlet tdSpan = parseInt(td[tdSpanProperty], 10);\n\t\t\tif (!tdSpan) tdSpan = 1;\n\t\t\tif (i == tds.length - 1 && parseInt(td.dataset[indexNameCamelCase], 10) + tdSpan < tableGroupCount) {\n\t\t\t\tcollectionTds = table.querySelectorAll(\n\t\t\t\t\t`[${indexName}=\"${parseInt(td.dataset[indexNameCamelCase], 10) + tdSpan}\"]`\n\t\t\t\t);\n\t\t\t\tfor (let j = 0; j < collectionTds.length; j++) {\n\t\t\t\t\tcollectionTdsJSpan = collectionTds[j][collectionTdsJSpanProperty];\n\t\t\t\t\tif (!collectionTdsJSpan) collectionTdsJSpan = 1;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tcollectionTds[j].dataset[indexNamePerpendicularCamelCase] <\n\t\t\t\t\t\t\te.target.dataset[indexNamePerpendicularCamelCase] &&\n\t\t\t\t\t\tparseInt(collectionTds[j].dataset[indexNamePerpendicularCamelCase], 10) +\n\t\t\t\t\t\t\tparseInt(collectionTdsJSpan, 10) >\n\t\t\t\t\t\t\te.target.dataset[indexNamePerpendicularCamelCase]\n\t\t\t\t\t) {\n\t\t\t\t\t\ttds.push(collectionTds[j]);\n\t\t\t\t\t\ttdsCollectionChanged = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tdsCollectionChanged) return { tds };\n\t\t\treturn false;\n\t\t}\n\n\t\t/**\n\t\t * remove cells attributes which were used for division table\n\t\t *\n\t\t * @param {HTMLElement} table\n\t\t */\n\t\tfunction removeCellsAttrAfterDivision(table) {\n\t\t\tconst tdsAll = [...table.getElementsByTagName('td')];\n\t\t\tfor (let i = 0; i < tdsAll.length; i++) {\n\t\t\t\tif (tdsAll[i].hasAttribute('data-same-cell-before-division')) {\n\t\t\t\t\ttdsAll[i].removeAttribute('data-same-cell-before-division');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * function for run sorting table vertically\n\t\t *\n\t\t * @param {event} e\n\t\t */\n\t\tthis.sortableTableVerticalStart = function (e) {\n\t\t\tsortableTable.call(thisObject, e, 'vertical');\n\t\t};\n\n\t\t/**\n\t\t * function for run sorting table horizontally\n\t\t *\n\t\t * @param {event} e\n\t\t */\n\t\tthis.sortableTableHorizontalStart = function (e) {\n\t\t\tsortableTable.call(thisObject, e, 'horizontal');\n\t\t};\n\n\t\treturn this;\n\t}\n\n\treturn WPTB_SortTable;\n});\n","/* eslint-disable */\nvar WPTB_Stringifier = function (codeMain) {\n  if (!codeMain) {\n    return;\n  }\n\n  const data = codeMain.dataset;\n  const tBodyData = codeMain.querySelector(\"tbody\")?.dataset || {};\n  const tableStyle = codeMain.style;\n\n  const firstTd = codeMain.querySelector(\"td\");\n  const allTr = codeMain.querySelectorAll(\"tr\");\n\n  const tableProps = {\n    alignment: data.wptbTableAlignment || \"center\",\n    enableMaxWidth: data.wptbApplyTableContainerMaxWidth ? 1 : false,\n    maxWidth: data.wptbTableContainerMaxWidth,\n    minWidth: tableStyle.minWidth,\n    cellMinWidth: data.wptbTdWidthAuto,\n    sortHorizontal: data.wptbSortableTableHorizontal == \"1\" ? 1 : false,\n    sortVertical: data.wptbSortableTableVertical == \"1\" ? 1 : false,\n    borderCollapse: `${tableStyle.borderCollapse} !important`,\n    tableSpacingX: data.borderSpacingColumns || \"3\",\n    tableSpacingY: data.borderSpacingRows || \"3\",\n    cols: data.tableColumns,\n    cellsWidthAutoCount: data.wptbCellsWidthAutoCount,\n    tdSumMaxWidth: data.wptbTableTdsSumMaxWidth,\n\n    // Global Font Style\n    fontColor: tBodyData.globalFontColor || \"#000000\",\n    linkColor: tBodyData.globalLinkColor || \"#000000\",\n    fontSize: tBodyData.globalFontSize || \"15\",\n\n    // Border\n    tableBorder: tableStyle.border,\n    borderWidth: tableStyle.borderWidth,\n    borderColor: tableStyle.borderColor,\n    borderStyle: tableStyle.borderStyle,\n    headerInnerBorder: firstTd?.style.border,\n    // rowBorderOnly: null, // It's in the directives\n    // columnBorderOnly: null, // It's in the directives\n\n    // Other\n    scrollX: data.wptbHorizontalScrollStatus,\n    disableThemeStyles: data.wptbDisableThemeStyles === \"1\" ? 1 : false,\n    extraStyles: data.wptbExtraStyles || \"\",\n    stickyFirstColumn: data.wptbFirstColumnSticky,\n    stickyTopRow:\n      codeMain.querySelector(\"tr\")?.dataset?.wptbStickyRow === \"true\"\n        ? true\n        : false,\n    paginationEnable: data.wptbPaginationEnable === \"true\" ? \"true\" : false,\n    paginationTopRowAsHeader: (\n      data.wptbProPaginationTopRowHeader === \"true\"\n    ).toString(),\n    rowsPerPage: data.wptbRowsPerPage || \"10\",\n    rowsChangeable: data.wptbRowsChangeable === \"true\" ? \"true\" : false,\n\n    searchEnable: data.wptbSearchEnable === \"true\" ? \"true\" : false,\n    searchKeepHeader: (data.wptbProSearchTopRowHeader === \"true\").toString(),\n    searchPosition: data.wptbSearchbarPosition || \"left\",\n    role: codeMain.getAttribute(\"role\") || \"table\",\n\n    directives: data.wptbTableDirectives,\n    responsiveDirectives: data.wptbResponsiveDirectives,\n\n    // Colors\n    headerBg: data.wptbHeaderBackgroundColor,\n    evenRowBg: data.wptbEvenRowBackgroundColor,\n    oddRowBg: data.wptbOddRowBackgroundColor,\n\n    hoverHeaderBg: data.wptbHeaderHoverBackgroundColor,\n    hoverEvenRowBg: data.wptbEvenRowHoverBackgroundColor,\n    hoverOddRowBg: data.wptbOddRowHoverBackgroundColor,\n  };\n\n  const rows = [];\n\n  Array.from(allTr).forEach((el) => {\n    const hMatch = el.className.match(/wptb-row-highlighted-([0-9]+)/);\n    const row = {\n      props: {\n        hightLighted: hMatch ? `wptb-row-highlighted-${hMatch[1]}` : undefined,\n        background: el.style.backgroundColor,\n      },\n      cells: [],\n    };\n    Array.from(el.children).forEach((td) => {\n      const tData = td.dataset;\n      const hMatch = td.className.match(/wptb-col-highlighted-([0-9]+)/);\n\n      const cell = {\n        props: {\n          width: td.style.width,\n          autoWidth: tData.wptbCssTdAutoWidth === \"true\" ? \"true\" : false,\n          height: td.style.height,\n          autoHeight: tData.wptbCssTdAutoHeight === \"true\" ? \"true\" : false,\n          padding: td.style.padding,\n          background: td.style.backgroundColor,\n          ownBgColor: tData.wptbOwnBgColor,\n          border: td.style.border,\n          borderWidth: td.style.borderWidth,\n          borderColor: td.style.borderColor,\n          borderStyle: td.style.borderStyle,\n          borderRadius: td.style.borderRadius,\n          borderTopLeftRadius: td.style.borderTopLeftRadius,\n          borderTopRightRadius: td.style.borderTopRightRadius,\n          borderBottomLeftRadius: td.style.borderBottomLeftRadius,\n          borderBottomRightRadius: td.style.borderBottomRightRadius,\n          vAlign: tData.wptbCellVerticalAlignment || \"center\",\n          isEmpty: td.classList.contains(\"wptb-empty\"),\n          highlighted: hMatch?.[1],\n          xIndex: tData.xIndex,\n          yIndex: tData.yIndex,\n          xSort: tData.sortedVertical,\n          ySort: tData.sortedHorizontal,\n          colspan: td.getAttribute(\"colspan\"),\n          rowspan: td.getAttribute(\"rowspan\"),\n          hideOnMobile: td.classList.contains(\"wptb-hide-on-mobile\"),\n        },\n        blocks: [],\n      };\n\n      Array.from(td.children).forEach((blockEl) => {\n        const block =\n          WPTB_BlockSerializer.text(blockEl) ||\n          WPTB_BlockSerializer.image(blockEl) ||\n          WPTB_BlockSerializer.button(blockEl) ||\n          WPTB_BlockSerializer.list(blockEl) ||\n          WPTB_BlockSerializer.starRating(blockEl) ||\n          WPTB_BlockSerializer.html(blockEl) ||\n          WPTB_BlockSerializer.shortCode(blockEl) ||\n          // Pro\n          WPTB_BlockSerializer.circleRating(blockEl) ||\n          WPTB_BlockSerializer.icon(blockEl) ||\n          WPTB_BlockSerializer.ribbon(blockEl) ||\n          WPTB_BlockSerializer.styledList(blockEl) ||\n          WPTB_BlockSerializer.textIcon(blockEl) ||\n          WPTB_BlockSerializer.progressBar(blockEl) ||\n          WPTB_BlockSerializer.badge(blockEl);\n        block && cell.blocks.push(block);\n      });\n\n      row.cells.push(cell);\n    });\n    rows.push(row);\n  });\n\n  return JSON.stringify({\n    props: tableProps,\n    rows,\n  });\n};\n\nvar WPTB_BlockSerializer = {\n  text(el) {\n    if (!el.classList.contains(\"wptb-text-container\")) {\n      return;\n    }\n\n    return {\n      type: \"text\",\n      props: {\n        text: el.firstElementChild?.innerHTML,\n        color: el.style.color,\n        fontSize: el.style.fontSize,\n        padding: el.style.padding,\n        margin: el.style.margin,\n        elementId: el.className.match(\"wptb-element-text-([0-9]+)\")?.[1],\n      },\n    };\n  },\n\n  image(el) {\n    if (!el.classList.contains(\"wptb-image-container\")) {\n      return;\n    }\n\n    const imgEl = el.querySelector(\"img\");\n    const lTarget = el.querySelector(\".wptb-link-target\");\n\n    return {\n      type: \"image\",\n      props: {\n        src: imgEl?.src,\n        alignment: el.dataset.wptbImageAlignment || \"center\",\n        alt: imgEl?.getAttribute(\"alt\"),\n        imgHeight: imgEl?.getAttribute(\"height\"),\n        imgWidth: imgEl?.getAttribute(\"width\"),\n\n        sizeRelativeTo: el.dataset.wptbImageSizeRelative || \"container\",\n        size: imgEl.dataset.wptbSize,\n        width: lTarget?.style.width,\n\n        url: lTarget?.href,\n        linkRel: lTarget?.getAttribute(\"rel\"),\n        linkTarget: lTarget?.getAttribute(\"target\"),\n        convertToAbsolute:\n          lTarget?.dataset.wptbLinkEnableConvertRelative === \"true\"\n            ? \"true\"\n            : false,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  button(el) {\n    if (!el.classList.contains(\"wptb-button-container\")) {\n      return;\n    }\n\n    const bWrap = el.querySelector(\".wptb-button-wrapper\");\n    const lTarget = el.querySelector(\".wptb-link-target\");\n    const btnDiv = el.querySelector(\".wptb-button\");\n    const iconEl = el.querySelector(\".wptb-button-icon\");\n    const labelEl = el.querySelector(\".wptb-button-label\");\n\n    const pEl = el.querySelector(\"p\");\n\n    return {\n      type: \"button\",\n      props: {\n        text: pEl?.innerHTML,\n        fontSize: pEl?.style.fontSize,\n        size: bWrap.className.match(/wptb-size-(s|m|l|xl)/)?.[1] || \"m\",\n        width: lTarget?.style.width,\n        borderRadius: btnDiv?.style.borderRadius,\n        background: btnDiv?.dataset.wptbElementBgColor,\n        color: btnDiv?.dataset.wptbElementColor,\n        buttonAlignment: bWrap?.style.justifyContent,\n        contentAlignment: btnDiv?.style.justifyContent,\n        id: lTarget?.id,\n        // Url\n        url: lTarget?.href,\n        linkRel: lTarget?.getAttribute(\"rel\"),\n        linkTarget: lTarget?.getAttribute(\"target\"),\n        convertToAbsolute:\n          lTarget?.dataset.wptbLinkEnableConvertRelative === \"true\"\n            ? true\n            : false,\n\n        // Hover\n        hoverBg: btnDiv?.dataset.wptbElementHoverBgColor,\n        hoverColor: btnDiv?.dataset.wptbElementHoverTextColor,\n        hoverScale: btnDiv?.dataset.wptbElementHoverScale,\n\n        // Icon\n        icon: iconEl?.dataset.wptbButtonIconSrc || \"\",\n        iconPosition: btnDiv?.classList.contains(\n          \"wptb-plugin-button-order-right\"\n        )\n          ? \"right\"\n          : \"left\",\n        iconSize: iconEl?.style.height,\n\n        // Label\n        hasLabel: bWrap.classList.contains(\"wptb-button-has-label\"),\n        labelBg: labelEl?.style.backgroundColor,\n        labelColor: labelEl?.style.color,\n        labelText: labelEl?.querySelector(\".wptb-button-label-text\")?.innerHTML,\n\n        // Spacing\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  list(el) {\n    if (!el.classList.contains(\"wptb-list-container\")) {\n      return;\n    }\n\n    const firstLi = el.querySelector(\"li\");\n    const firstP = firstLi?.querySelector(\"p\");\n    const icon = firstP.className.match(\n      /wptb-list-style-type-(none|circle|square|disc)/\n    )?.[0];\n\n    const items = [];\n\n    Array.from(el.querySelectorAll(\"li\")).forEach((child) => {\n      const toolTipEl = child.querySelector(\".wptb-m-tooltip\");\n      const tooltipPosision =\n        child.className.match(/wptb-tooltip-(top|bottom|left|right)/)?.[1] ||\n        \"top\";\n      const pEl = child.querySelector(\"p\");\n\n      const alignment = pEl?.style.textAlign || \"left\";\n\n      items.push({\n        text: pEl.innerHTML,\n        alignment,\n        toolTip: toolTipEl?.innerHTML || \"\",\n        tooltipPosision,\n        toolTipStyle: toolTipEl?.getAttribute(\"style\") || \"\",\n      });\n    });\n\n    return {\n      type: \"list\",\n      props: {\n        type: icon ? \"unordered\" : \"ordered\",\n        listIcon: icon || \"disc\",\n        color: firstP?.style.color,\n        fontSize: firstP?.style.fontSize,\n        itemSpacing: firstLi?.style.marginBottom,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n      items,\n    };\n  },\n\n  starRating(el) {\n    if (!el.classList.contains(\"wptb-star_rating-container\")) {\n      return;\n    }\n\n    const firstStar = el.querySelector(\"li\");\n    const ratingBox = el.querySelector(\".wptb-number-rating-box\");\n    const ratingEl = ratingBox?.firstElementChild;\n    return {\n      type: \"starRating\",\n      props: {\n        starSize: firstStar?.style.height,\n        starColor: firstStar?.querySelector(\"svg\")?.style.fill,\n        starCount: el.dataset.starCount,\n        alignment: el.style.textAlign,\n        showRating: ratingBox?.style.display !== \"none\",\n        fontSize: ratingEl?.style.fontSize,\n        color: ratingEl?.style.color,\n\n        value: Number(ratingEl?.textContent.split(\"/\")?.[0].trim() || 0),\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  html(el) {\n    if (!el.classList.contains(\"wptb-custom_html-container\")) {\n      return;\n    }\n    return {\n      type: \"customHtml\",\n      props: {\n        html: el.firstElementChild.innerHTML,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  shortCode(el) {\n    if (!el.classList.contains(\"wptb-shortcode-container\")) {\n      return;\n    }\n    const cDiv = el.querySelector(\"div\");\n\n    return {\n      type: \"shortcode\",\n      props: {\n        shortcode: cDiv?.innerHTML,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  circleRating(el) {\n    if (!el.classList.contains(\"wptb-circle_rating-container\")) {\n      return;\n    }\n\n    const wrapper = el.querySelector(\".wptb-rating-circle-wrapper\");\n    const bar = el.querySelector(\".wptb-rating-circle-bar\");\n    const ratingType =\n      el.dataset.wptbRatingType === \"number\" ? \"number\" : \"percent\";\n\n    return {\n      type: \"circleRating\",\n      props: {\n        size: wrapper?.style.fontSize,\n        color: bar?.style.borderColor,\n        ratingType,\n        value:\n          (ratingType === \"number\"\n            ? el.dataset.wptbRatingNumber\n            : el.dataset.percentageCount) || \"37\",\n        total: el.dataset.wptbTotalNumber || \"10\",\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  icon(el) {\n    if (!el.classList.contains(\"wptb-icon-container\")) {\n      return;\n    }\n\n    const wrapper = el.querySelector(\".wptb-icon-wrapper\");\n    const firstIcon = el.querySelector(\".wptb-icon-link-target-1\");\n\n    const icons = [];\n\n    Array.from(wrapper.children).forEach((child) => {\n      const divEl = child.firstElementChild;\n      icons.push({\n        icon: divEl?.dataset.wptbIconSrc || \"star\",\n        color: divEl?.style.fill,\n        url: child?.href,\n        linkRel: child?.getAttribute(\"rel\"),\n        linkTarget: child?.getAttribute(\"target\"),\n        convertToAbsolute:\n          child?.dataset.wptbLinkEnableConvertRelative === \"true\"\n            ? true\n            : false,\n      });\n    });\n\n    return {\n      type: \"icon\",\n      props: {\n        count: el.dataset.wptbIconNumber,\n        size: firstIcon?.firstElementChild?.style.width,\n        alignment: wrapper?.style.textAlign,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n      icons,\n    };\n  },\n\n  ribbon(el) {\n    if (!el.classList.contains(\"wptb-ribbon_element-container\")) {\n      return;\n    }\n\n    const inner = el.querySelector(\".wptb-element-ribbon-inner\");\n    const colorDump = el.querySelector(\".wptb-element-ribbon-color-dump\");\n    const pEL = inner?.querySelector(\"p\");\n    const iconEl = el.querySelector(\"#wptbRibbonIconDump\");\n\n    return {\n      type: \"ribbon\",\n      props: {\n        type: el.dataset.wptbRibbonType,\n        modifications: el.dataset.wptbRibbonModifications,\n        side: el.dataset.wptbRibbonSide,\n        xOffset: el.dataset.wptbRibbonXOffset,\n        yOffset: el.dataset.wptbRibbonYOffset,\n        width: el.dataset.wptbRibbonWidth,\n        style: el.getAttribute(\"style\"),\n\n        background: (colorDump || inner)?.style.backgroundColor,\n        borderColor: (colorDump || inner)?.style.borderColor,\n        color: el.style.color,\n        fontSize: pEL?.style.fontSize,\n        text: pEL?.innerHTML,\n\n        icon: iconEl?.dataset.wptbRibbonIconSrc,\n        enableAnimation: iconEl?.dataset.enableAnimation === \"1\" ? \"1\" : false,\n        animationType: iconEl?.dataset.wptbRibbonIconAnimationType,\n      },\n    };\n  },\n\n  styledList(el) {\n    if (!el.classList.contains(\"wptb-styled_list-container\")) {\n      return;\n    }\n    const firstLi = el.querySelector(\"li\");\n    const firstP = firstLi?.querySelector(\"p\");\n    const iconEL = el.querySelector(\".wptb-styled-list-icon\");\n\n    const items = [];\n\n    Array.from(el.querySelectorAll(\"li\")).forEach((child) => {\n      const toolTipEl = child.querySelector(\".wptb-m-tooltip\");\n      const tooltipPosision =\n        child.className.match(/wptb-tooltip-(top|bottom|left|right)/)?.[1] ||\n        \"top\";\n      const pEl = child.querySelector(\"p\");\n\n      const alignment =\n        child.firstElementChild?.dataset.wptbStyledListAlignment || \"left\";\n\n      items.push({\n        text: pEl.innerHTML,\n        alignment,\n        toolTip: toolTipEl?.innerHTML || \"\",\n        tooltipPosision,\n        toolTipStyle: toolTipEl?.getAttribute(\"style\") || \"\",\n      });\n    });\n\n    return {\n      type: \"styledList\",\n      props: {\n        icon: iconEL?.dataset.wptbStyledListIconSrc,\n        iconSize: iconEL?.style.height,\n        iconColor: iconEL?.style.fill,\n        iconSpacing: firstP?.style.marginLeft,\n        color: firstP?.style.color,\n        fontSize: firstP?.style.fontSize,\n        itemSpacing: firstLi?.style.marginBottom,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n      items,\n    };\n  },\n\n  textIcon(el) {\n    if (!el.classList.contains(\"wptb-text_icon_element-container\")) {\n      return;\n    }\n\n    const data = el.dataset;\n\n    const pEl = el.querySelector(\"p\");\n    const iconEL = el.querySelector(\".wptb-text-icon-icon-wrapper\");\n\n    return {\n      type: \"textIcon\",\n      props: {\n        spaceBetween: data.wptbTextIconSpaceBetween,\n        alignment: data.wptbTextIconAlignment,\n        fontSize: el.style.fontSize,\n        color: pEl?.parentElement.style.color,\n        text: pEl?.innerHTML,\n        icon: iconEL?.dataset.wptbTextIconIconSrc,\n        iconLocation: data.wptbTextIconIconLocation,\n        iconSize: iconEL?.style.height,\n        iconColor: iconEL?.style.color,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  progressBar(el) {\n    if (!el.classList.contains(\"wptb-progress_bar-container\")) {\n      return;\n    }\n\n    const labelEl = el.querySelector(\".wptb-progress-bar-label\");\n    const prBar = el.querySelector(\".wptb-progress-bar-trail\");\n\n    return {\n      type: \"progressBar\",\n      props: {\n        value: parseInt(labelEl?.textContent || \"0\"),\n        thickness: prBar?.style.strokeWidth,\n        primaryColor: el\n          .querySelector(\".wptb-progress-bar-path\")\n          ?.getAttribute(\"stroke\"),\n        secondaryColor: prBar?.getAttribute(\"stroke\"),\n        labelColor: labelEl?.style.color,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n\n  badge(el) {\n    if (!el.classList.contains(\"wptb-badge-container\")) {\n      return;\n    }\n\n    const wrapper = el.querySelector(\".wptb-badge-wrapper\");\n\n    return {\n      type: \"badge\",\n      props: {\n        fontSize: wrapper?.style.fontSize,\n        color: wrapper?.style.color,\n        background: wrapper?.style.backgroundColor,\n        alignment: el.style.justifyContent,\n\n        text: wrapper?.firstElementChild?.innerHTML,\n\n        padding: el.style.padding,\n        margin: el.style.margin,\n      },\n    };\n  },\n};\n","/* eslint-disable */\nvar array = [], WPTB_Table = function ( columns, rows, wptb_preview_table ) {\n\n    /* The members of the class */\n    var settings = document.getElementsByClassName('wptb-settings-items'),\n            wptbTableSetup = document.getElementsByClassName(\"wptb-table-setup\")[0],\n            table, row, cell,\n            maxAmountOfCells,\n            maxAmountOfRows;\n\n    //HERE ARE THE PRIVATE FUNCTIONS\n    /*\n     * This function toggles buttons visibility in cell edit mode\n     * (according to the amount of currently selected cells), and\n     * highlights visually the clicked cell if it is not highlighted, or\n     * removes highlight if clicked cell is already highlighted.\n     * It too toggles the bits of our abstract representation.\n     * @param Event this is the event instance of the click performed over a cell.\n     */\n    var mark = function ( event ) {\n        let thisElem = event.currentTarget;\n        let rs = thisElem.rowSpan,\n            cs = thisElem.colSpan,\n            noCells = document.getElementsByClassName('wptb-no-cell-action'),\n            singleCells = document.getElementsByClassName('wptb-single-action'),\n            multipleCells = document.getElementsByClassName('wptb-multiple-select-action'),\n            cellSettings = document.getElementById( 'wptb-left-scroll-panel-cell-settings' ),\n            position = getCoords(thisElem),\n            row = position[0],\n            column = position[1];\n\n        /**\n         * Cell select/deselect operation\n         *\n         * @param {HTMLElement} cellElement cell element\n         * @param {Boolean} select select/deselect cell\n         *\n         */\n        function cellSelectOperation(cellElement, select = false){\n           const classListOperation = select? 'add'  : 'remove';\n           cellElement.classList[classListOperation]('wptb-highlighted');\n\n            const [row, column] = getCoords(cellElement);\n            const {rowSpan, colSpan} = cellElement;\n\n            for (var i = 0; i < rowSpan; i++) {\n                for (var j = 0; j < colSpan; j++) {\n                    array[row + i][column + j] = select? 1 : 0;\n                }\n            }\n        }\n        if ( ! document.select.isActivated() ) {\n            return;\n        }\n\n        const isShiftActive = event.shiftKey;\n        if (thisElem.className.match(/wptb-highlighted/)) {\n            const selectedCells = Array.from(document.querySelectorAll('.wptb-highlighted'));\n\n            if(selectedCells.length > 1){\n                if(isShiftActive){\n                    cellSelectOperation(thisElem, false);\n                }else {\n                    cellSelectOperation(thisElem, true);\n                    // eslint-disable-next-line array-callback-return\n                    selectedCells.map(el => {\n                        if(el !== thisElem){\n                            cellSelectOperation(el, false);\n                        }\n                    })\n                }\n            }else{\n                cellSelectOperation(thisElem, false);\n            }\n        } else {\n            if(!isShiftActive){\n                Array.from(document.querySelectorAll('.wptb-highlighted')).map(ele => {\n                    if(ele !== thisElem){\n                        cellSelectOperation(ele, false);\n                    }\n                });\n            }\n            cellSelectOperation(thisElem,true );\n        }\n\n        let cellHighlighted = document.getElementsByClassName('wptb-highlighted'),\n            markedCells = cellHighlighted.length;\n        if (markedCells === 0) {\n            for (var i = 0; i < multipleCells.length; i++) {\n                multipleCells[i].classList.remove('visible');\n                multipleCells[i].setAttribute('disabled', 'disabled');\n            }\n            for (var i = 0; i < noCells.length; i++) {\n                noCells[i].classList.add('visible');\n                noCells[i].removeAttribute('disabled');\n            }\n            for (var i = 0; i < singleCells.length; i++) {\n                singleCells[i].classList.remove('visible');\n                singleCells[i].setAttribute('disabled', 'disabled');\n            }\n            cellSettings.classList.remove( 'visible' );\n        } else if (markedCells === 1) {\n            for (var i = 0; i < multipleCells.length; i++) {\n                multipleCells[i].classList.remove('visible');\n                multipleCells[i].setAttribute('disabled', 'disabled');\n            }\n            for (var i = 0; i < noCells.length; i++) {\n                noCells[i].classList.remove('visible');\n                noCells[i].setAttribute('disabled', 'disabled');\n            }\n            for (var i = 0; i < singleCells.length; i++) {\n                singleCells[i].classList.add('visible');\n                singleCells[i].removeAttribute('disabled');\n            }\n\n            cellHighlighted = cellHighlighted[0];\n            WPTB_Helper.elementOptionsSet( 'table_cell_setting', cellHighlighted );\n\n            let infArr = cellHighlighted.className.match( /wptb-element-((.+-)\\d+)/i );\n\n            const controlElemIds = ['cellWidth', 'cellHeight'];\n\n            controlElemIds.map(s => {\n                let elementControlSizeUnicClass = `wptb-el-${infArr[1]}-${s}`,\n                    elementControlSizeFixedUnicClass = `wptb-el-${infArr[1]}-${s}Fixed`;\n                if(s === 'cellWidth' || s === 'cellHeight') {\n                    let sizeName = '',\n                        getSizeFunctionName = '';\n                    if(s === 'cellWidth') {\n                        sizeName = 'width';\n                        getSizeFunctionName = 'getColumnWidth';\n                    } else if(s === 'cellHeight') {\n                        sizeName = 'height';\n                        getSizeFunctionName = 'getRowHeight';\n                    }\n                    let size = cellHighlighted.style[sizeName],\n                        cellSizeInputs = document.querySelectorAll( '.' + elementControlSizeUnicClass ),\n                        cellSizeFixedInput = document.querySelector( '.' + elementControlSizeFixedUnicClass  );\n                    cellSizeInputs = [...cellSizeInputs];\n\n                    if(!size && !cellHighlighted.dataset[`wptbFixed${sizeName.toUpperCase()}`]) {\n                        size = WPTB_Helper[getSizeFunctionName](table, cellHighlighted);\n                        cellSizeInputs.map(s => {\n                            s.value = size;\n                        });\n\n                        cellSizeFixedInput.checked = false;\n                    } else {\n                        cellSizeInputs.map(s => {\n                            if( size ) {\n                                s.value = parseFloat( size, 10 );\n                            } else if( cellHighlighted.dataset[`wptbFixed${sizeName.toUpperCase()}`] ) {\n                                s.value = cellHighlighted.dataset[`wptbFixed${sizeName.toUpperCase()}`];\n                            }\n                        });\n\n                        cellSizeFixedInput.checked = true;\n                    }\n                }\n            });\n\n            cellSettings.classList.add( 'visible' );\n        } else {\n            for (var i = 0; i < multipleCells.length; i++) {\n                if (table.isSquare(array)) {\n                    multipleCells[i].classList.add('visible');\n                    multipleCells[i].removeAttribute('disabled');\n                } else {\n                    multipleCells[i].classList.remove('visible');\n                    multipleCells[i].setAttribute('disabled', 'disabled');\n                }\n            }\n            for (var i = 0; i < noCells.length; i++) {\n                noCells[i].classList.remove('visible');\n                noCells[i].setAttribute('disabled', 'disabled');\n            }\n            for (var i = 0; i < singleCells.length; i++) {\n                singleCells[i].classList.remove('visible');\n                singleCells[i].setAttribute('disabled', 'disabled');\n            }\n            cellSettings.classList.remove( 'visible' );\n        }\n\n        /**\n         * empty cell | highlight setting | hide column on mobile\n         */\n\n        const infArr = thisElem.className.match(/wptb-element-table_cell_setting-((.+-)\\d+)/i);\n        if (infArr && infArr.length > 1) {\n            let controlKeys = [ 'emptyCell', 'highlightRow', 'highlightColumn', 'hideColumnOnMobile'];\n            for(let i in controlKeys) {   \n                const settingId = `wptb-el-table_cell_setting-${infArr[1]}-${controlKeys[i]}`;\n                const settingElem = document.getElementById(settingId);\n                if (settingElem) {\n                    if(controlKeys[i] == 'emptyCell') {\n                        settingElem.querySelector('input[type=\"checkbox\"]').checked = thisElem.classList.contains('wptb-empty');\n                    } else if(controlKeys[i] == 'highlightRow') {\n\n                        // Extract highlight class name in the class list\n                        const className = thisElem.parentElement.classList[1] || \"\";\n\n                        // Check whether the row is already highlighted\n                        const isHighlighted = className.indexOf(\"wptb-row-highlighted-\") > -1 \n                            && thisElem.parentElement.getAttribute(\"class\").indexOf(\"wptb-row-highlighted-none\") == -1;\n                        if(isHighlighted) {\n\n                            // Extract the current highlight value\n                            const highlightValue = className.substr(21);\n                            const highlightRowInput = cellSettings.querySelectorAll(`.wptb-el-table_cell_setting-${infArr[1]}-rowTransformScale`);\n                            settingElem.querySelector('input[type=\"checkbox\"]').click();\n                            highlightRowInput[0].value = highlightValue;\n                            highlightRowInput[1].value = highlightValue;\n                        }\n                    } else if(controlKeys[i] == 'highlightColumn') {\n                        const className = thisElem.getAttribute(\"class\");\n\n                        // Check whether the column is already highlighted\n                        const isHighlighted = (className.indexOf(\"wptb-col-highlighted\") > -1\n                            && className.indexOf(\"wptb-col-highlighted-none\") == -1);\n                        if(isHighlighted) {\n\n                            // Extract the current highlight value\n                            const highlightValue = thisElem.className.match(/wptb-col-highlighted-([0-9]+)/)?.[1] || \"100\";\n                            const highlightColInput = document.querySelectorAll(`.wptb-el-table_cell_setting-${infArr[1]}-columnTransformScale`);\n                            settingElem.querySelector('input[type=\"checkbox\"]').click();\n                            highlightColInput[0].value = highlightValue;\n                            highlightColInput[1].value = highlightValue;\n                        }\n                    } else if(controlKeys[i] == 'hideColumnOnMobile') {\n                        settingElem.querySelector('input[type=\"checkbox\"]').checked = thisElem.classList.contains('wptb-hide-on-mobile');\n                    }\n                }\n            }\n        }\n\n\n        let details = {countMarkedCells:markedCells};\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/cell/mark', thisElem, details);\n\n\n        // split button disabled state calculation\n        const splitButton = document.querySelector('#wptb-split-cell');\n        if(splitButton){\n            const splitAvailable = markedCells === 1 && (rs !== 1 || cs !== 1);\n            if(splitAvailable){\n                splitButton.classList.add('visible');\n                splitButton.removeAttribute('disabled');\n            }else {\n                splitButton.classList.remove('visible');\n                splitButton.setAttribute('disabled', 'disabled');\n            }\n        }\n    };\n\n    /*\n     * This function fills an array with 1's according to the actual design\n     * of HTML table.\n     * @returns an array of arrays containing an abstract representation\n     * of HTML table.\n     * @deprecated\n     * */\n\n    var realTimeArray = function () {\n        var carried = [], tds, cols, matriz = [];\n\n        for (var i = 0; i < maxAmountOfCells; i++) {\n            carried[i] = 0;\n        }\n\n        for (var i = 0; i < table.rows.length; i++) {\n            cols = [];\n\n            var tds = table.rows[i].getElementsByTagName('td');\n\n            for (items = 0; items < tds.length; items++) {\n\n                for (var k = 0; k < tds[items].colSpan; k++) {\n                    cols.push(1);\n                }\n\n                if (tds[items].rowSpan > 1) {\n                    for (var k = 0; k < tds[items].colSpan; k++) {\n                        carried[items + k] = {\n                            justAssigned: true,\n                            amount: tds[items].rowSpan\n                        };\n                    }\n                }\n            }\n\n            for (var k = 0; k < maxAmountOfCells; k++) {\n                if (typeof carried[k] == 'object' && carried[k].amount > 0) {\n                    carried[k].amount--;\n                    if (carried[k].justAssigned) {\n                        carried[k].justAssigned = false;\n                    } else {\n                        cols.push(1);\n                    }\n                }\n            }\n\n            matriz.push(cols);\n\n        }\n        return matriz;\n    };\n\n    /*\n     * This function gets the number and position of cell spaces in current row that are occuped\n     * by upper rowspanned cells.\n     * @param number the number of row where we wish to calculate the carried rowspans up to.\n     * @return an array with the remaining rowspans in each column.\n     */\n    var carriedRowspans = function (row) {\n        var carried = [], tds, cols;\n\n        for (var i = 0; i < maxAmountOfCells; i++) {\n            carried[i] = 0;\n        }\n\n        if (row == -1) {\n            return carried;\n        }\n\n        for (var i = 0; i <= row; i++) {\n            cellsBuffer = table.rows[i].getElementsByTagName('td');\n            cellPointer = 0;\n\n            for (var xPosition = 0; xPosition < maxAmountOfCells; xPosition += stepsToMove) {\n                stepsToMove = 1;\n\n                if (carried[xPosition]) {\n                    carried[xPosition]--;\n                } else {\n                    celda = cellsBuffer[cellPointer++];\n                    if (celda.rowSpan > 1) {\n                        for (k = 0; k < celda.colSpan; k++) {\n                            carried[xPosition + k] = celda.rowSpan - 1;\n                        }\n                        stepsToMove = celda.colSpan;\n                    } else if (celda.colSpan > 1) {\n                        stepsToMove = celda.colSpan;\n                    }\n                }\n            }\n\n        }\n        return carried;\n    };\n\n    /*\n     * A helpful function for showing\n     * the abstract table in console.\n     * @param Array our abstract table.\n     */\n    var drawTable = function (a) {\n        var string = 'DRAWING TABLE:\\n';\n        for (var i = 0; i < a.length; i++) {\n\n            for (var j = 0; j < a[i].length; j++) {\n                string += ' ' + a[i][j];\n            }\n            string += '\\n';\n        }\n        table.isSquare(a);\n    };\n\n    /*\n     * It resets all the bits of our abstract representation\n     * to 0 and removes the highlighting class of all cells.\n     */\n\n    var undoSelect = function () {\n        let noCells = document.getElementsByClassName('wptb-no-cell-action'),\n            singleCells = document.getElementsByClassName('wptb-single-action'),\n            multipleCells = document.getElementsByClassName('wptb-multiple-select-action'),\n            cellSettings = document.getElementById( 'wptb-left-scroll-panel-cell-settings' ),\n            tds = table.getElementsByClassName('wptb-highlighted');\n        while (tds.length) {\n            tds[0].classList.remove('wptb-highlighted');\n        }\n        cellSettings.classList.remove( 'visible' );\n        for (let i = 0; i < array.length; i++) {\n            for (let j = 0; j < array[i].length; j++) {\n                array[i][j] = 0;\n            }\n        }\n        for (let i = 0; i < multipleCells.length; i++) {\n            multipleCells[i].classList.remove('visible');\n            multipleCells[i].setAttribute('disabled', 'disabled');\n        }\n        for (let i = 0; i < noCells.length; i++) {\n            noCells[i].classList.add('visible');\n            noCells[i].removeAttribute('disabled');\n        }\n        for (let i = 0; i < singleCells.length; i++) {\n            singleCells[i].classList.remove('visible');\n            singleCells[i].setAttribute('disabled', 'disabled');\n        }\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/undo-select/active', table);\n    };\n\n    /*\n     * This fills the abstract representation of our table with\n     * zeros, at the start. the max amount of cells is the greatest sum\n     * of all colspans for row.\n     */\n\n    var fillTableArray = function () {\n        var colspansSums = [], a = [];\n\n        //calculate max amount of cells inside a row\n        for (var i = 0; i < table.rows.length; i++) {\n            var cells = table.rows[i].getElementsByTagName('td'),\n                    colspanSumInRow = 0;\n            for (var j = 0; j < cells.length; j++) {\n                colspanSumInRow += cells[j].colSpan;\n            }\n            colspansSums.push(colspanSumInRow);\n        }\n\n        maxAmountOfCells = Math.max.apply(null, colspansSums);\n        //calculate max rows\n        var maxAmountOfRows = table.rows.length;\n\n        // fill with zeros from both values\n        for (var i = 0; i < maxAmountOfRows; i++) {\n            a[i] = [];\n            for (var j = 0; j < maxAmountOfCells; j++) {\n                a[i].push(0);\n            }\n        }\n        drawTable(a);\n        return a;\n    };\n\n    /*\n     * This function gets the sum of all colspans in a row.\n     * @param number the number of row to be used as reference.\n     */\n    var getActualPointsInRow = function (row) {\n        var tds = table.rows[row].getElementsByTagName('td'),\n                points = 0;\n        for (var i = 0; i < tds.length; i++) {\n            points += tds[i].colSpan;\n        }\n        return points;\n    }\n\n    /*\n     * This function gets us the exact coordinates of\n     * an exact cell, in a more reliable way than xIndex and yIndex,\n     * these last ones were meant to be used for getting the cell trough them.\n     * @param DOMElement the cell to get the coordinates.\n     */\n    var getCoords = function (search) {\n        var skipInCols = [], cell;\n\n        for (var i = 0; i < maxAmountOfCells; i++) {\n            skipInCols[i] = 0;\n        }\n\n        for (var i = 0; i < table.rows.length; i++) {\n            var cellsBuffer = table.rows[i].getElementsByTagName('td');\n            cellPointer = 0;\n            for (var xPosition = 0; xPosition < maxAmountOfCells; xPosition += stepsToMove) {\n                stepsToMove = 1;\n\n                if (skipInCols[xPosition]) {\n                    skipInCols[xPosition]--;\n                } else {\n                    var td = cellsBuffer[cellPointer++];\n                    if (td == search) {\n                        return [i, xPosition];\n                    }\n                    if (td.rowSpan > 1) {\n                        for ( let k = 0; k < td.colSpan; k++ ) {\n                            skipInCols[xPosition + k] = td.rowSpan - 1;\n                        }\n                        stepsToMove = td.colSpan;\n                    } else if (td.colSpan > 1) {\n                        stepsToMove = td.colSpan;\n                    }\n                }\n            }\n        }\n    };\n\n    jQuery('#wptb-table-border-color').val('');\n    jQuery('#wptb-table-padding-number,#wptb-table-padding-slider').val('15');\n\n    // Todo your code here\n    if ( columns || rows ) {\n        //END OF PRIVATE FUNCTIONS\n        for (var i = 0; i < settings.length; i++) {\n            if (settings[i].id !== 'wptb-apply-inner-border') {\n                settings[i].classList.add('visible');\n            }\n        }\n\n        //Create a HTML Table element.\n        table = document.createElement( 'table' );\n        table.classList.add( 'wptb-preview-table', 'wptb-element-main-table_setting-startedid-0' );\n        table.style.border = '1px solid #d1d1d1';\n        table.dataset.reconstraction = 1;\n        //table.dataset.wptbAdaptiveTable = 1;\n        //Add the data rows.\n        for (var i = 0; i < rows; i++) {\n\n            row = table.insertRow(-1);\n            row.classList.add( 'wptb-row' );\n\n            for (var j = 0; j < columns; j++) {\n                cell = new WPTB_Cell(mark);\n                cell.setCoords(i, j);\n                cell.getDOMElement().style.border = '1px solid #d1d1d1';\n                row.appendChild(cell.getDOMElement());\n            }\n        }\n    } else {\n        if( ! wptb_preview_table ) wptb_preview_table = document.querySelector( '.wptb-preview-table' );\n\n        if ( wptb_preview_table ) {\n            table = wptb_preview_table;\n\n            let cells = table.getElementsByTagName('td');\n\n            if (cells.length > 0) {\n                for (let i = 0; i < cells.length; i++) {\n                    WPTB_Cell(mark, cells[i]);\n                }\n            }\n        } else {\n            return;\n        }\n    }\n\n    /**\n     * this method run \"mark\" method of WPTB_Table object\n     * @param event\n     */\n    table.mark = (event) => {\n        mark(event);\n    }\n\n    table.wptbCell = (callback, DOMElement) => {\n        return WPTB_Cell(callback, DOMElement);\n    }\n\n    table.tableSM = () => {\n        return WPTB_TableStateSaveManager;\n    }\n\n    /**\n     * this method run \"undoSelect\" method of WPTB_Table object\n     * @param event\n     */\n    table.undoSelect = () => {\n        undoSelect();\n    }\n\n    /**\n     * method for set value for maxAmountOfCells\n     * @param value\n     */\n    table.setMaxAmountOfCells = (value) => {\n        maxAmountOfCells = value;\n    }\n\n    /**\n     * this method return maxAmountOfCells value\n     * @returns {*}\n     */\n    table.getMaxAmountOfCells = () => {\n        return maxAmountOfCells;\n    }\n\n    /**\n     * this method run \"fillTableArray\" method of WPTB_Table object\n     * @returns {[]}\n     */\n    table.fillTableArray = () => {\n        return fillTableArray();\n    }\n    /*\n     * For assigning to each cell xIndex and y Index attributes,\n     * these are the column number and row number of cell in table.\n     */\n\n    table.recalculateIndexes = function () {\n        WPTB_Helper.recalculateIndexes( this );\n    }\n\n    table.addColumnWidth = function( value, cleaner ) {\n        let highlighted  = table.getElementsByClassName( 'wptb-highlighted' );\n        if( highlighted.length > 0 ) {\n            for( let k = 0; k < highlighted.length; k++ ) {\n                let dataXIndex = highlighted[k].dataset.xIndex;\n                if( dataXIndex ) {\n                    function tableTdsFor( dataXIndex, colspan ) {\n                        let tableRows = table.rows;\n                        let widthIsSet = false;\n                        let arrayTdsFromPreviousRow = [];\n                        for( let i = 0; i < tableRows.length; i++ ) {\n                            let row = tableRows[i];\n                            let tds = row.children;\n                            for( let j = 0; j < tds.length; j++ ) {\n                                let td = tds[j];\n                                if( td.dataset.xIndex == dataXIndex ) {\n                                    if( value ) {\n                                        if( td.colSpan == colspan ) {\n                                            td.style.width = value + 'px';\n                                            td.removeAttribute( 'data-wptb-fixed-width' );\n                                            widthIsSet = true;\n                                        } else {\n                                            td.style.width = null;\n                                            td.dataset.wptbFixedWidth = value;\n                                            if( i == tableRows.length - 1 && ! widthIsSet ) {\n                                                tableTdsFor( dataXIndex, colspan + 1 );\n                                            }\n                                        }\n                                    } else if( cleaner ) {\n                                        td.style.width = null;\n                                        td.removeAttribute( 'data-wptb-fixed-width' );\n                                    } else {\n                                        if( td.dataset.wptbFixedWidth ) {\n                                            if( td.colSpan == colspan ) {\n                                                td.style.width = td.dataset.wptbFixedWidth + 'px';\n                                                td.removeAttribute( 'data-wptb-fixed-width' );\n                                            }\n                                        } else if( td.style.width ) {\n                                            for( let z = 0; z < arrayTdsFromPreviousRow.length; z++ ) {\n                                                arrayTdsFromPreviousRow[z].style.width = td.style.width;\n                                            }\n                                            arrayTdsFromPreviousRow = [];\n                                        } else {\n                                            arrayTdsFromPreviousRow.push( td );\n                                        }\n                                    }\n                                    break;\n                                }\n                            }\n                        }\n                    }\n\n                    tableTdsFor( dataXIndex, 1 );\n                }\n            }\n\n            table.tdDefaultWidth();\n\n            WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n        }\n    }\n\n    table.tdDefaultWidth = function() {\n        let rows = table.rows;\n\n        let tableTdsSumMaxWidth = 0;\n        let tableTdsSumMaxWidthFixed = 0;\n        let tableTdsSumMaxWidthAuto = 0;\n\n        let wptbTableSetup = document.getElementsByClassName( 'wptb-table-setup' )[0];\n        let wptbTableSetupWidth = wptbTableSetup.offsetWidth;\n\n        let arrayCellsWidthFixedHelper = [];\n        let arrayCellsWidthAutoHelper = [];\n        let tdPaddingCommon = 0;\n        let tableTdBorderCommonWidth = 0;\n        let cssForTdsWidthAuto = '';\n\n\n        let tableFullStyleObj = window.getComputedStyle( table, null );\n        let borderLeftWidth = tableFullStyleObj.getPropertyValue( 'border-left-width' );\n        let borderRightWidth = tableFullStyleObj.getPropertyValue( 'border-right-width' );\n        let tableBorderCommon = parseFloat( borderLeftWidth, 10 ) + parseFloat( borderRightWidth, 10 );\n\n        for( let i = 0; i < rows.length; i++ ) {\n            let tds = rows[i].children;\n            for( let j = 0; j < tds.length; j++ ) {\n                let td = tds[j];\n\n                if( ! arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] && ! arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] ) {\n                    if( td.style.width ) {\n                        arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] = parseFloat( td.style.width );\n                        td.removeAttribute( 'data-wptb-css-td-auto-width' );\n                    } else {\n                        if( ! td.dataset.wptbFixedWidth ) {\n                            arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] = table.dataset.wptbTdWidthAuto ? parseFloat( table.dataset.wptbTdWidthAuto, 10 ) : 100;\n                            td.dataset.wptbCssTdAutoWidth = true;\n                        }\n                    }\n\n                    if( window.getComputedStyle( td, null ) ) {\n                        let tdStyleObj = window.getComputedStyle( td, null );\n                        let tdPaddingLeft = tdStyleObj.getPropertyValue( 'padding-left' );\n                        let tdPaddingRight = tdStyleObj.getPropertyValue( 'padding-right' );\n                        tdPaddingCommon = parseFloat( tdPaddingLeft, 10 ) + parseFloat( tdPaddingRight, 10 );\n\n                        let tableTdBorderLeftWidth = tdStyleObj.getPropertyValue( 'border-left-width' );\n                        let tableTdBorderRightWidth = tdStyleObj.getPropertyValue( 'border-right-width' );\n                        tableTdBorderCommonWidth = parseFloat( tableTdBorderLeftWidth, 10 ) + parseFloat( tableTdBorderRightWidth, 10 );\n                        tableTdBorderCommonWidth = tableTdBorderCommonWidth / 2;\n\n                        if( arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] ) {\n                            arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] += tdPaddingCommon;\n                            arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] += tableTdBorderCommonWidth;\n\n                            if( j == 0 && ( tableBorderCommon / 2 ) <= parseFloat( tableTdBorderLeftWidth, 10 ) ) {\n                                arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] += parseFloat( tableTdBorderLeftWidth, 10 ) / 2;\n                            } else if( j == 0 && ( tableBorderCommon / 2 ) > parseFloat( tableTdBorderLeftWidth, 10 ) ) {\n                                arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] += ( ( tableBorderCommon / 2 ) - ( parseFloat( tableTdBorderRightWidth, 10 ) / 2 ) );\n                            }\n\n                            if( j == tds.length - 1 && ( tableBorderCommon / 2 ) <= parseFloat( tableTdBorderRightWidth, 10 ) ) {\n                                arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] += parseFloat( tableTdBorderRightWidth, 10 ) / 2;\n                            } else if( j == tds.length - 1 && ( tableBorderCommon / 2 ) > parseFloat( tableTdBorderRightWidth, 10 ) ) {\n                                arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] += ( ( tableBorderCommon / 2 ) - ( parseFloat( tableTdBorderRightWidth, 10 ) / 2 ) );\n                            }\n                        } else if( arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] ) {\n                            arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] += tdPaddingCommon;\n                            arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] += tableTdBorderCommonWidth;\n\n                            if( j == 0 && ( tableBorderCommon / 2 ) <= parseFloat( tableTdBorderLeftWidth, 10 ) ) {\n                                arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] += parseFloat( tableTdBorderLeftWidth, 10 ) / 2;\n                            } else if( j == 0 && ( tableBorderCommon / 2 ) > parseFloat( tableTdBorderLeftWidth, 10 ) ) {\n                                arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] += ( ( tableBorderCommon / 2 ) - ( parseFloat( tableTdBorderLeftWidth, 10 ) / 2 ) );\n                            }\n\n                            if( j == tds.length - 1 && ( tableBorderCommon / 2 ) <= parseFloat( tableTdBorderRightWidth, 10 ) ) {\n                                arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] += parseFloat( tableTdBorderRightWidth, 10 ) / 2;\n                            } else if( j == tds.length - 1 && ( tableBorderCommon / 2 ) > parseFloat( tableTdBorderRightWidth, 10 ) ) {\n                                arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] += ( ( tableBorderCommon / 2 ) - ( parseFloat( tableTdBorderLeftWidth, 10 ) / 2 ) );\n                            }\n                        }\n                    }\n                } else if( arrayCellsWidthAutoHelper[parseFloat( td.dataset.xIndex )] ) {\n                    if( ! td.dataset.wptbFixedWidth ) {\n                        td.dataset.wptbCssTdAutoWidth = true;\n                    }\n                } else if( arrayCellsWidthFixedHelper[parseFloat( td.dataset.xIndex )] ) {\n                    td.removeAttribute( 'data-wptb-css-td-auto-width' );\n                }\n            }\n        }\n\n        for( let i = 0; i < arrayCellsWidthFixedHelper.length; i++ ) {\n            if( arrayCellsWidthFixedHelper[i] ) {\n                tableTdsSumMaxWidthFixed += arrayCellsWidthFixedHelper[i];\n            }\n        }\n\n        let CellsWidthAutoCount = 0;\n        for( let i = 0; i < arrayCellsWidthAutoHelper.length; i++ ) {\n            if( arrayCellsWidthAutoHelper[i] ) {\n                tableTdsSumMaxWidthAuto += arrayCellsWidthAutoHelper[i];\n                CellsWidthAutoCount++;\n            }\n        }\n\n        tableTdsSumMaxWidth = tableTdsSumMaxWidthFixed + tableTdsSumMaxWidthAuto;\n\n        table.dataset.wptbTableTdsSumMaxWidth = tableTdsSumMaxWidth;\n        if( CellsWidthAutoCount ) {\n            table.dataset.wptbCellsWidthAutoCount = CellsWidthAutoCount;\n            if( table.mergingСellsHorizontally ) {\n                table.dataset.wptbFixedWidthSize = tableTdsSumMaxWidthFixed;\n            } else {\n                table.removeAttribute( 'data-wptb-fixed-width-size' );\n            }\n        } else {\n            table.removeAttribute( 'data-wptb-fixed-width-size' );\n            table.removeAttribute( 'data-wptb-cells-width-auto-count' );\n        }\n\n        let styleElementCreate = false;\n        let tableTdWidthAuto;\n        if( tableTdsSumMaxWidth < wptbTableSetupWidth ) {\n            if( CellsWidthAutoCount ) {\n                table.style.minWidth = '100%';\n                if( table.mergingСellsHorizontally ) {\n                    table.style.width = 'auto';\n                    let tableTdsWidthAutoCommon = wptbTableSetupWidth - tableTdsSumMaxWidthFixed;\n                    tableTdWidthAuto = tableTdsWidthAutoCommon / CellsWidthAutoCount;\n                    tableTdWidthAuto = tableTdWidthAuto - tdPaddingCommon - tableTdBorderCommonWidth;\n                    styleElementCreate = true;\n                } else {\n                    table.style.width = '100%';\n                }\n            } else {\n                table.style.width = 'auto';\n                table.style.minWidth = null;\n                table.style.maxWidth = null;\n            }\n        } else {\n            table.style.maxWidth = null;\n            table.style.minWidth = tableTdsSumMaxWidth + 'px';\n            table.style.width = 'auto';\n            tableTdWidthAuto = table.dataset.wptbTdWidthAuto ? table.dataset.wptbTdWidthAuto : '100';\n            styleElementCreate = true;\n        }\n\n        let head = document.head;\n        if( head ) {\n            let cssForTdsWidthAutoOld = head.querySelector( 'style[data-wptb-td-auto-width=\"true\"]' );\n            if( cssForTdsWidthAutoOld ) {\n                head.removeChild( cssForTdsWidthAutoOld );\n            }\n        }\n\n        if( styleElementCreate ) {\n            cssForTdsWidthAuto = document.createElement( 'style' );\n            cssForTdsWidthAuto.setAttribute( 'data-wptb-td-auto-width', true );\n            cssForTdsWidthAuto.innerHTML = '[data-wptb-css-td-auto-width=true]{width:' + tableTdWidthAuto + 'px}';\n            if( head ) {\n                head.appendChild( cssForTdsWidthAuto );\n            }\n        }\n\n        if( table.dataset.wptbTableAlignment ) {\n            let wptbTableAlignment = table.dataset.wptbTableAlignment;\n\n            let wptbTableSetupWidth = wptbTableSetup.offsetWidth;\n            if( wptbTableSetupWidth < table.offsetWidth ) {\n                table.style.float = null;\n            } else {\n                if( wptbTableAlignment == 'center' ) {\n                    table.style.float = null;\n                } else {\n                    table.style.float = wptbTableAlignment;\n                }\n            }\n\n            if( wptbTableAlignment == 'center' ) {\n                wptbTableSetup.style.float = null;\n            } else {\n                wptbTableSetup.style.float = wptbTableAlignment;\n            }\n\n            if( tableTdWidthAuto && table.dataset.wptbTableContainerMaxWidth && table.offsetWidth < table.dataset.wptbTableContainerMaxWidth ) {\n                table.style.width = '100%';\n            }\n        } else {\n            table.style.float = null;\n        }\n    }\n\n    table.addRowHeight = function( value, cleaner ) {\n        let highlighted  = table.getElementsByClassName( 'wptb-highlighted' );\n        if( highlighted.length > 0 ) {\n            for( let k = 0; k < highlighted.length; k++ ) {\n                let dataYIndex = highlighted[k].dataset.yIndex;\n                if( dataYIndex ) {\n                    function tableTdsFor( dataYIndex, rowspan ) {\n                        let tableRows = table.rows;\n                        let heightIsSet = false;\n                        let arrayTdsPrevious = [];\n                        for( let i = 0; i < tableRows.length; i++ ) {\n                            let row = tableRows[i];\n                            let tds = row.children;\n                            for( let j = 0; j < tds.length; j++ ) {\n                                let td = tds[j];\n                                if( td.dataset.yIndex == dataYIndex ) {\n                                    if( value ) {\n                                        if( td.rowSpan == rowspan ) {\n                                            td.style.height = value + 'px';\n                                            td.removeAttribute( 'data-wptb-fixed-heidht' );\n                                            heightIsSet = true;\n                                            continue;\n                                        } else {\n                                            td.style.height = null;\n                                            td.dataset.wptbFixedHeight = value;\n                                            if( j == tds.length - 1 && ! heightIsSet ) {\n                                                tableTdsFor( dataYIndex , rowspan + 1 );\n                                            }\n                                        }\n                                    } else if( cleaner ) {\n                                        td.style.height = null;\n                                        td.removeAttribute( 'data-wptb-fixed-heidht' );\n                                    } else {\n                                        if( td.dataset.wptbFixedHeight ) {\n                                            if( td.rowSpan = rowspan ) {\n                                                td.style.height = td.dataset.wptbFixedHeight + 'px';\n                                                td.removeAttribute( 'data-wptb-fixed-width' );\n                                            }\n                                        } else if( td.style.height ) {\n                                            for( let z = 0; z < arrayTdsPrevious.length; z++ ) {\n                                                arrayTdsPrevious[z].style.height = td.style.height;\n                                            }\n                                            arrayTdsPrevious = [];\n                                        } else {\n                                            arrayTdsPrevious.push( td );\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n\n                    tableTdsFor( dataYIndex, 1 );\n                }\n            }\n\n            WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n        }\n    }\n\n    table.reconstraction = function() {\n        let tds = table.getElementsByTagName( 'td' );\n        table.mergingСellsHorizontally = false;\n        table.mergingCellsVertically = false;\n        table.dataset.reconstraction = 1;\n        let forBreak = 0;\n        for( let i = 0; i < tds.length; i++ ) {\n            if( tds[i].colSpan > 1 ) {\n                table.dataset.reconstraction = 0;\n                table.mergingСellsHorizontally = true;\n                forBreak++;\n            }\n\n            if( tds[i].rowSpan > 1 ) {\n                table.dataset.reconstraction = 0;\n                table.mergingCellsVertically = true;\n                forBreak++;\n            }\n\n            if( forBreak == 2 ) {\n                break;\n            }\n        }\n    }\n\n    /*\n     * As simple as it is: adds a column to the end of table.\n     */\n    table.addColumnEnd = function () {\n        let td,\n            currentTable = document.getElementsByClassName('wptb-preview-table'),\n            currentTableTd,\n            currentTdStyle;\n        if (currentTable.length > 0) {\n            currentTableTd = currentTable[0].querySelector('td');\n        }\n\n        if (currentTableTd) {\n            currentTdStyle = currentTableTd.getAttribute('style');\n        }\n\n        for (var i = 0; i < table.rows.length; i++) {\n            td = new WPTB_Cell(mark);\n\n            if (currentTdStyle) {\n                td.getDOMElement().setAttribute('style', currentTdStyle);\n                td.getDOMElement().style.width = null;\n                td.getDOMElement().style.height = null;\n                td.getDOMElement().style.borderColor = WPTB_TableSettingsData.getTableSetting('borderColor');\n            }\n\n            table.rows[i].appendChild(td.getDOMElement());\n            array[i].push(0);\n        }\n\n        maxAmountOfCells++;\n        table.recalculateIndexes();\n        table.tdDefaultWidth();\n        table.addRowHeight();\n        WPTB_Helper.dataTitleColumnSet( table );\n        undoSelect();\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n        let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n        wptbTableStateSaveManager.tableStateSet();\n    };\n\n    /*\n     * As simple as it looks: adds a column to the start of table.\n     */\n\n    table.addColumnStart = function () {\n        let td,\n            firstCell,\n            currentTable = document.getElementsByClassName('wptb-preview-table'),\n            currentTableTd,\n            currentTdStyle;\n        if ( currentTable.length > 0 ) {\n            currentTableTd = currentTable[0].querySelector('td');\n        }\n\n        if ( currentTableTd ) {\n            currentTdStyle = currentTableTd.getAttribute('style');\n        }\n\n        for (var i = 0; i < table.rows.length; i++) {\n            td = new WPTB_Cell(mark);\n            if (currentTdStyle) {\n                td.getDOMElement().setAttribute('style', currentTdStyle);\n                td.getDOMElement().style.width = null;\n                td.getDOMElement().style.height = null;\n                td.getDOMElement().style.borderColor = WPTB_TableSettingsData.getTableSetting('borderColor');\n            }\n            firstCell = table.rows[i].getElementsByTagName('td')[0];\n            if (firstCell) {\n                table.rows[i].insertBefore(td.getDOMElement(), firstCell);\n            } else {\n                table.rows[i].appendChild(td.getDOMElement());\n            }\n            array[i].push(0);\n        }\n\n        maxAmountOfCells++;\n        table.recalculateIndexes();\n        table.tdDefaultWidth();\n        table.addRowHeight();\n        WPTB_Helper.dataTitleColumnSet( table );\n        undoSelect();\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n        let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n        wptbTableStateSaveManager.tableStateSet();\n    };\n\n    /*\n     * Well, not so simple as previous functions.\n     * It adds a column after a certain column of reference.\n     * @param integer the column number to be used as reference.\n     *\tIf empty, then the first highlighted cell is used as reference.\n     */\n\n    table.addColumnAfter = function (c_pos) {\n        let rows = table.rows,\n            cell,\n            cellStyle,\n            pos;\n\n        if(c_pos != undefined && typeof c_pos === 'number') {\n            pos = c_pos;\n            cell = document.querySelector('[data-x-index=\"' + pos + '\"]');\n        } else {\n            cell = document.querySelector('.wptb-highlighted');\n            pos = getCoords(cell)[1];\n        }\n\n        if(cell) {\n            cellStyle = cell.getAttribute('style');\n\n            if( maxAmountOfCells - pos - cell.colSpan + 1 == 1 ) {\n                table.addColumnEnd();\n            } else {\n                for(let i = 0; i < rows.length; i++) {\n                    let tds = rows[i].children;\n                    for(let j = 0; j < tds.length; j++) {\n                        if(parseInt(tds[j].dataset.xIndex) <= pos) {\n                            if(parseInt(tds[j].dataset.xIndex) + tds[j].colSpan == pos + cell.colSpan) {\n                                let td = newTd(cellStyle);\n                                let nextSib = tds[j].nextSibling;\n                                if (nextSib) {\n                                    rows[i].insertBefore(td.getDOMElement(), nextSib);\n                                } else {\n                                    rows[i].appendChild(td.getDOMElement());\n                                }\n\n                                break;\n                            } else if(parseInt(tds[j].dataset.xIndex) + tds[j].colSpan > pos + cell.colSpan) {\n                                tds[j].colSpan++;\n                                if(tds[j].rowSpan > 1) i += tds[j].rowSpan - 1;\n                                break;\n                            }\n                        } else if(parseInt(tds[j].dataset.xIndex) > pos) {\n                            let td = newTd(cellStyle);\n                            rows[i].insertBefore(td.getDOMElement(), tds[j]);\n                            break;\n                        }\n                    }\n                }\n\n                function newTd(cellStyle) {\n                    let td = new WPTB_Cell(mark);\n                    if (cellStyle) {\n                        td.getDOMElement().setAttribute('style', cellStyle);\n                        td.getDOMElement().style.width = null;\n                        td.getDOMElement().style.height = null;\n                    }\n                    td.getDOMElement().style.borderColor = WPTB_TableSettingsData.getTableSetting('borderColor');\n                    return td;\n                }\n\n                for (var i = 0; i < array.length; i++) {\n                    array[i].push(0);\n                }\n                maxAmountOfCells++;\n                drawTable(array);\n                table.recalculateIndexes();\n                table.addColumnWidth();\n                table.addRowHeight();\n                WPTB_Helper.dataTitleColumnSet( table );\n                undoSelect();\n\n                WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n                let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n                wptbTableStateSaveManager.tableStateSet();\n            }\n        }\n    };\n\n    /*\n     * For preventing us to take a lot of time,\n     * This is just calling the function addColumnAfter, but\n     * using the previous column to current one as reference.\n     * @see addColumnAfter\n     */\n\n    table.addColumnBefore = function () {\n        var cell = document.querySelector('.wptb-highlighted'),\n                pos = getCoords(cell)[1];\n\n        if (pos === 0) {\n            table.addColumnStart();\n        } else {\n            table.addColumnAfter(pos - 1);\n        }\n    };\n\n    /*\n     * Luckily, thisfunction is simple,\n     * it just add a row to the end of table.\n     */\n\n    table.addRowToTheEnd = function () {\n        let r = table.insertRow(-1),\n        td,\n        aux,\n        currentTable = document.getElementsByClassName('wptb-preview-table');\n        r.classList.add( 'wptb-row' );\n        if (currentTable.length > 0) {\n            currentTable = currentTable[0];\n\n            for (var i = 0; i < maxAmountOfCells; i++) {\n                td = new WPTB_Cell(mark);\n                let currentTableTd = currentTable.querySelector('[data-x-index=\"' + i + '\"]');\n                if( currentTableTd ) {\n                    let currentTdStyle = currentTableTd.getAttribute( 'style' );\n\n                    td.getDOMElement().setAttribute( 'style', currentTdStyle );\n                    td.getDOMElement().style.height = null;\n                }\n                r.appendChild(td.getDOMElement());\n            }\n\n            aux = Array.from(array[0]);\n            array.push(aux);\n            drawTable(array);\n            table.recalculateIndexes();\n            WPTB_Helper.tableRowsColorsReinstall(table);\n            table.addColumnWidth();\n            WPTB_Helper.dataTitleColumnSet( table );\n            undoSelect();\n\n            WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n            let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n            wptbTableStateSaveManager.tableStateSet();\n        }\n    };\n\n    /*\n     * Yet another simple function,\n     * it just add a row to the start of table.\n     */\n\n    table.addRowToTheStart = function () {\n        let r = table.insertRow(0),\n        td,\n        aux,\n        currentTable = document.getElementsByClassName('wptb-preview-table'),\n        currentTableTd,\n        currentTdStyle;\n        r.classList.add( 'wptb-row' );\n        if (currentTable.length > 0) {\n            currentTable = currentTable[0];\n\n            for (var i = 0; i < maxAmountOfCells; i++) {\n                td = new WPTB_Cell(mark);\n                let currentTableTd = currentTable.querySelector('[data-x-index=\"' + i + '\"]');\n                if( currentTableTd ) {\n                    let currentTdStyle = currentTableTd.getAttribute( 'style' );\n\n                    td.getDOMElement().setAttribute( 'style', currentTdStyle );\n                    td.getDOMElement().style.height = null;\n                }\n                r.appendChild(td.getDOMElement());\n            }\n\n            aux = Array.from(array[0]);\n            array.push(aux);\n            drawTable(array);\n            table.recalculateIndexes();\n            WPTB_Helper.tableRowsColorsReinstall( table );\n            table.addColumnWidth();\n            WPTB_Helper.dataTitleColumnSet( table );\n            undoSelect();\n\n            WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n            let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n            wptbTableStateSaveManager.tableStateSet();\n        }\n    };\n\n    /*\n     * This function adds a row before the current one.\n     * Since the biggest factor of problem is a not-started but ongoing rowspan,\n     * the most of the troubles is not here.\n     */\n\n    table.addRowBefore = function () {\n        let cell = document.querySelector('.wptb-highlighted'),\n            cellStyle = cell.getAttribute('style'),\n            row = getCoords(cell)[0],\n            cellNew;\n\n        if(row === 0){\n            row = -1;\n        }\n\n        for( let i = row - 1; i >= 0; i-- ) {\n            let rowChildren = table.rows[i].children;\n            let rowChildrenLength = rowChildren.length;\n            if( rowChildrenLength > 0 ) {\n                for( let j = 0; j < rowChildrenLength; j++ ) {\n                    if( rowChildren[j].rowSpan == 1 ) {\n                        row = i;\n                        cellNew = true;\n                        break;\n                    }\n                }\n            }\n            if ( cellNew ) {\n                break;\n            }\n        }\n\n\n        if (row === -1) {\n            table.addRowToTheStart();\n        } else {\n            table.addRowAfter( row, cellStyle );\n        }\n    };\n\n    /*\n     * Well... by the name convention of the previous 3 functions,\n     * it's pretty obvious that this functions attaches a new\n     * row after highlighted cell row. The greatest obstacle it was\n     * the possibility of a TR not having the exact amount of columns\n     * occuped by actual node but rowspanned upper cells. For that purpose\n     * it was created the function realTimeArray.\n     * @see realTimeArray\n     */\n\n    table.addRowAfter = function ( row, cellStyle ) {\n        let cellRowSpan,\n            rowAfter,\n            aux;\n\n        if ( ( row == undefined || typeof row !== 'number' ) && cellStyle == undefined ) {\n            let cell = document.querySelector('.wptb-highlighted');\n            cellStyle = cell.getAttribute('style'),\n            row = getCoords(cell)[0],\n            cellRowSpan = cell.rowSpan,\n            rowAfter = row + cellRowSpan - 1;\n        } else {\n            rowAfter = row;\n        }\n\n\n        let cellsColSpan = 0;\n        if ( rowAfter < table.rows.length -1 ) {\n            for( let i = 0; i <= rowAfter ; i++ ) {\n                let tableRowsIChildren = table.rows[i].children,\n                    tableRIChildrenLength = tableRowsIChildren.length;\n                if( tableRIChildrenLength > 0 ) {\n                    for( let j = 0; j < tableRIChildrenLength; j++ ) {\n                        let rowIRowSpan = tableRowsIChildren[j].rowSpan;\n\n                        if ( rowIRowSpan - 1  + i > rowAfter ) {\n                            tableRowsIChildren[j].rowSpan++;\n                        }\n                    }\n                }\n            }\n\n            let rNext = table.rows[rowAfter + 1],\n                rNextChildren = rNext.children,\n                rNextChildrenLength = rNextChildren.length;\n\n            if( rNextChildrenLength > 0 ) {\n                for ( let i = 0; i < rNextChildrenLength; i++ ) {\n                    cellsColSpan += rNextChildren[i].colSpan;\n                }\n            }\n        } else {\n            cellsColSpan = array[0].length;\n        }\n\n        let r = table.insertRow( rowAfter + 1 );\n        r.classList.add( 'wptb-row' );\n\n        for ( j = 0; j < cellsColSpan; j++ ) {\n            let td = new WPTB_Cell( mark );\n            let currentTableTd = table.querySelector('[data-x-index=\"' + j + '\"]');\n            if( currentTableTd ) {\n                let currentTdStyle = currentTableTd.getAttribute( 'style' );\n\n                td.getDOMElement().setAttribute( 'style', currentTdStyle );\n                td.getDOMElement().style.height = null;\n            }\n            r.appendChild( td.getDOMElement() );\n        }\n\n        aux = Array.from(array[0]);\n        array.push(aux);\n        drawTable(array);\n        table.recalculateIndexes();\n        WPTB_Helper.tableRowsColorsReinstall( table );\n        table.addColumnWidth();\n        WPTB_Helper.dataTitleColumnSet( table );\n        undoSelect();\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after');\n\n        let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n        wptbTableStateSaveManager.tableStateSet();\n    };\n\n    /*\n     * This function checks the current selected cells\n     * make a rectangular shape.\n     * @param Array the abstract table.\n     * @return false, if not making a rectangle, or\n     *\tArray an array containing number of rows and columns, if selection makes a rectangle.\n     */\n\n    table.isSquare = function (a) {\n        var rowStart = -1,\n            columnStart = -1,\n            rowEnd = -1,\n            columnEnd = -1,\n            height,\n            width,\n            itemsEstimate = 0,\n            items = 0;\n\n        for (var i = 0; i < a.length; i++) {\n            for (var j = 0; j < a[i].length; j++) {\n                if (a[i][j] == 1) {\n                    if ( j < columnStart || columnStart == -1 ) {\n                        columnStart = j;\n                    }\n                    if ( i < rowStart || rowStart == -1 ) {\n                        rowStart = i;\n                    }\n                }\n            }\n\n        }\n\n        for (var i = a.length - 1; i > -1; i--) {\n            for (var j = a[i].length - 1; j > -1; j--) {\n                if (a[i][j] == 1) {\n                    if ( j > columnEnd ) {\n                        columnEnd = j;\n                    }\n                    if ( i > rowEnd ) {\n                        rowEnd = i;\n                    }\n                }\n            }\n        }\n\n        for (var i = rowStart; i < rowEnd; i++) {\n            for (var j = columnStart; j < columnEnd; j++) {\n                if (a[i][j] == 0 || a[i][j] == undefined) {\n                    return false;\n                }\n            }\n        }\n\n        for (var i = 0; i < a.length; i++) {\n            for (var j = 0; j < a[i].length; j++) {\n                if (a[i][j] == 1) {\n                    items++;\n                }\n            }\n        }\n\n        height = rowEnd - rowStart + 1;\n        width = columnEnd - columnStart + 1;\n        itemsEstimate = height * width;\n\n        if (itemsEstimate !== items) {\n            return false;\n        }\n        return [height, width];\n    };\n\n    /*\n     * This function merges all selected cells.\n     * Well, actually sets the colspan and rowspan of first\n     * upper left  cell in selection and deletes the another selected cells.\n     */\n\n    table.mergeCells = function () {\n        var dimensions = table.isSquare(array),\n            rowspan = dimensions[0],\n            colspan = dimensions[1],\n            first = document.querySelector('.wptb-highlighted'),\n            tds = [].slice.call(document.getElementsByClassName('wptb-highlighted'), 1),\n            tdsChildrenNew = [];\n\n        for (let i = 0; i < tds.length; i++) {\n            let tdsInternalElements = tds[i].getElementsByClassName('wptb-ph-element');\n            if (tdsInternalElements.length > 0) {\n                let tdsIntElemLength = tdsInternalElements.length;\n                for (let j = 0; j < tdsIntElemLength; j++) {\n                    tdsChildrenNew.push(tdsInternalElements[j]);\n                }\n            }\n            let p = tds[i].parentNode;\n            p.removeChild(tds[i]);\n        }\n        if (tdsChildrenNew.length > 0) {\n            for (let i = 0; i < tdsChildrenNew.length; i++) {\n                first.appendChild(tdsChildrenNew[i]);\n            }\n        }\n\n        first.colSpan = colspan;\n        first.rowSpan = rowspan;\n        table.recalculateIndexes();\n        table.reconstraction();\n        let firstWidth = first.style.width;\n        let firstDataFixedWidth = first.dataset.wptbFixedWidth;\n        if( firstWidth ) {\n            table.addColumnWidth( parseFloat( firstWidth, 10 ) );\n        } else if( firstDataFixedWidth ) {\n            table.addColumnWidth();\n        } else {\n            table.addColumnWidth( false, true );\n        }\n\n        let firstHeight = first.style.height;\n        let firstDataFixedHeight = first.dataset.wptbFixedHeight;\n        if( firstHeight ) {\n            table.addRowHeight( parseFloat( firstHeight, 10 ) );\n        } else if( firstDataFixedHeight ) {\n            table.addRowHeight();\n        } else {\n            table.addRowHeight( false, true );\n        }\n        WPTB_Helper.dataTitleColumnSet( table );\n        undoSelect();\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n        let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n        wptbTableStateSaveManager.tableStateSet();\n    };\n\n    /*\n     * This functions makes the exact inverse as above.\n     * It resets colspan and rowspan and appends\n     * the same amount in cells to the table.\n     * @bug\n     */\n\n    table.splitCell = function () {\n        var cell = document.getElementsByClassName('wptb-highlighted')[0],\n            rowspan = cell.rowSpan,\n            colspan = cell.colSpan,\n            cellStyles = cell.getAttribute('style'),\n            row = getCoords(cell)[0],\n            thisRow = table.rows[row],\n            cellXIndex =cell.dataset.xIndex;\n\n        cell.rowSpan = 1;\n        cell.colSpan = 1;\n\n        for (let i = 1; i < colspan; i++) {\n            let td = new WPTB_Cell(mark);\n            td.getDOMElement().setAttribute('style', cellStyles);\n            td.getDOMElement().classList.add( 'wptb-highlighted' );\n            if ( cell.nextSibling ) {\n                thisRow.insertBefore( td.getDOMElement(), cell.nextSibling );\n            } else {\n                thisRow.appendChild( td.getDOMElement() );\n            }\n\n        }\n\n        if (rowspan > 1) {\n            for (let i = 1; i < rowspan; i++) {\n                let rowChildInsertBefore = undefined,\n                    rowNext = table.rows[row + i],\n                    rowChildren = rowNext.children,\n                    rowChildrenLength = rowChildren.length;\n\n                if ( rowChildrenLength > 0 ) {\n                    for ( let k = 0; k < rowChildrenLength; k++ ) {\n                        if ( Number( rowChildren[k].dataset.xIndex ) > Number( cellXIndex ) ) {\n                            rowChildInsertBefore = rowChildren[k];\n                            break;\n                        }\n                    }\n                }\n                for ( let j = 0; j < colspan; j++ ) {\n                    let td = new WPTB_Cell( mark );\n                    td.getDOMElement().setAttribute( 'style', cellStyles );\n                    if ( rowChildInsertBefore != undefined ) {\n                        rowNext.insertBefore( td.getDOMElement(), rowChildInsertBefore );\n                    } else {\n                        rowNext.appendChild( td.getDOMElement() );\n                    }\n                }\n            }\n        }\n\n        table.recalculateIndexes();\n        table.reconstraction();\n        table.addColumnWidth();\n        table.addRowHeight();\n        WPTB_Helper.dataTitleColumnSet( table );\n        undoSelect();\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n        let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n        wptbTableStateSaveManager.tableStateSet();\n    };\n\n    /*\n     * Searches for rowspanned cells up to row number meeting it.\n     * @param number the number of row where the function\n     * must search up to.\n     */\n\n    table.findRowspannedCells = function (row) {\n        var array = [],\n                difference;\n        actualPoints = getActualPointsInRow(row);\n        if (actualPoints === maxAmountOfCells) {\n            return [];\n        }\n        difference = maxAmountOfCells - actualPoints;\n\n        for (var i = row - 1; i >= 0 && difference; i--) {\n            var tds = table.rows[i].getElementsByTagName('td');\n            for (var i = 0; i < tds.length; i++) {\n                if (tds[i].rowSpan > 1) {\n                    array.push(tds[i]);\n                    difference -= tds[i].colSpan;\n                }\n            }\n        }\n        return array;\n\n    }\n\n    /*\n     * This function explores the table and adds\n     * a cell for each lacking one for each row\n     * to meet an even amount of cells.\n     */\n\n    table.addLackingCells = function () {\n        var sumRows = [];\n        for (var i = 0; i < table.rows.length; i++) {\n            sumRows.push(0);\n        }\n\n        for (var i = 0; i < table.rows.length; i++) {\n            var tds = table.rows[i].getElementsByTagName('td');\n            for (var j = 0; j < tds.length; j++) {\n                if (tds[j].rowSpan > 1) {\n                    for (var k = 1; k < tds[j].rowSpan; k++) {\n                        sumRows[i + k]++;\n                    }\n                }\n            }\n        }\n\n        for (var i = 0; i < table.rows.length; i++) {\n            var tds = table.rows[i].getElementsByTagName('td'),\n                    totalColspan = 0;\n            for (var j = 0; j < tds.length; j++) {\n                totalColspan += tds[j].colSpan;\n            }\n            totalColspan += sumRows[i];\n            difference = maxAmountOfCells - totalColspan;\n            for (var j = 0; j < difference; j++) {\n                var td = new WPTB_Cell(mark);\n                table.rows[i].appendChild(td.getDOMElement());\n                //table.rows[i].insertBefore( td.getDOMElement(), rows[i].nextSibling );\n            }\n        }\n    };\n\n    /*\n     * This function deletes the row of currently\n     * selected cell.\n     */\n\n    table.deleteRow = function () {\n        let cell = document.querySelector('.wptb-highlighted'),\n            cellStyles = cell.getAttribute('style'),\n            rowspan = cell.rowSpan,\n            row = getCoords(cell)[0],\n            thisRow,\n            aux;\n\n        if ( rowspan == undefined ) rowspan = 1;\n\n        for ( let i = 0; i < rowspan; i++ ) {\n            thisRow = table.rows[row];\n            let thisRowChildren = thisRow.children,\n                nextRow = table.rows[row + 1],\n                nextRowChildren,\n                nextRowChildrenLength,\n                tdArr = [];\n\n            if( nextRow != undefined ) {\n                nextRowChildren = nextRow.children;\n                nextRowChildrenLength = nextRowChildren.length;\n                for (let j = 0; j < thisRowChildren.length; j++) {\n                    if ( thisRowChildren[j].rowSpan > 1 ) {\n                        let td = new WPTB_Cell(mark);\n                            td.getDOMElement().setAttribute('style', cellStyles);\n                            td.getDOMElement().colSpan = thisRowChildren[j].colSpan;\n                            td.getDOMElement().rowSpan = thisRowChildren[j].rowSpan - 1;\n\n                        let nextRowChildrenK = undefined;\n                        for ( let k = 0; k < nextRowChildrenLength; k++ ) {\n                            if ( Number( nextRowChildren[k].dataset.xIndex ) > Number( thisRowChildren[j].dataset.xIndex ) ) {\n                                nextRowChildrenK = nextRowChildren[k];\n                                break;\n                            }\n                        }\n\n                        if ( nextRowChildrenK ) {\n                            tdArr.push( [td, nextRowChildrenK] );\n                        } else {\n                            tdArr.push( [td] );\n                        }\n                    }\n                }\n\n                if ( tdArr.length > 0 ) {\n                    for ( let k = 0; k < tdArr.length; k++ ) {\n                        if ( tdArr[k][1] != undefined ) {\n                            nextRow.insertBefore( tdArr[k][0].getDOMElement(), tdArr[k][1] );\n                        } else {\n                            nextRow.appendChild( tdArr[k][0].getDOMElement() );\n                        }\n                    }\n                }\n            }\n\n            let tableRows = table.rows;\n            if ( tableRows.length > 0 ) {\n                for ( let j = 0; j < row; j++ ) {\n                    let jRowChildren = tableRows[j].children;\n                    if ( jRowChildren.length > 0 ) {\n                        for ( let x = 0; x < jRowChildren.length; x++ ) {\n                            if ( jRowChildren[x].rowSpan - 1 >= row - j ) {\n                                jRowChildren[x].rowSpan--;\n                            }\n                        }\n                    }\n                }\n            }\n            aux = Array.from(array[0]);\n            array.pop(aux);\n            drawTable(array);\n            table.getElementsByTagName('tbody')[0].removeChild(table.rows[row]);\n\n            if( table.rows.length == 0 ) {\n                WPTB_Helper.toggleTableEditMode();\n                wptbTableSetup.innerHTML = '';\n                document.getElementsByClassName('wptb-table-generator')[0].style.display = 'table';\n                let wptbSaveBtn = document.getElementsByClassName( 'wptb-save-btn' );\n                if( wptbSaveBtn.length > 0 ) {\n                    wptbSaveBtn = wptbSaveBtn[0];\n\n                    wptbSaveBtn.classList.add( 'wptb-save-disabled' );\n                    wptbSaveBtn.classList.remove('active');\n                }\n            } else {\n                table.recalculateIndexes();\n                WPTB_Helper.tableRowsColorsReinstall( table );\n                WPTB_Helper.dataTitleColumnSet( table );\n                table.reconstraction();\n            }\n        }\n\n        undoSelect();\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n        let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n        wptbTableStateSaveManager.tableStateSet();\n    }\n\n    /*\n     * This function deletes the column of currently\n     * selected cell. Again, this is way more complicated than\n     * delete row case.\n     */\n\n    table.deleteColumn = function () {\n        let cell = document.querySelector('.wptb-highlighted'),\n            cellXIndex = cell.dataset.xIndex,\n            colspan = cell.colSpan;\n\n        for ( let i = 0; i < colspan; i++ ) {\n            for ( let j = 0; j < table.rows.length; j++ ) {\n                let rowChildren = table.rows[j].children;\n                let rowChildrenLength = rowChildren.length;\n                if( rowChildrenLength > 0 ) {\n                    for ( let k = rowChildrenLength - 1; k >= 0; k-- ) {\n                        if ( Number( rowChildren[k].dataset.xIndex ) == Number( cellXIndex ) ) {\n                            if ( rowChildren[k].colSpan > 1 ) {\n                                rowChildren[k].colSpan--;\n                            } else {\n                                table.rows[j].removeChild( rowChildren[k] );\n                            }\n                            break;\n                        } else if( Number( rowChildren[k].dataset.xIndex ) < Number( cellXIndex ) &&\n                                Number( rowChildren[k].dataset.xIndex ) +\n                                Number( rowChildren[k].colSpan -1 ) >= cellXIndex ) {\n                            if ( rowChildren[k].colSpan > 1 ) {\n                                rowChildren[k].colSpan--;\n                            }\n                            break;\n                        }\n                    }\n                }\n            }\n\n            for ( let j = 0; j < table.rows.length; j++ ) {\n                if (array[j] != undefined)\n                    array[j].pop();\n            }\n\n            maxAmountOfCells--;\n\n            if( table.querySelectorAll( 'td' ).length == 0 ) {\n                WPTB_Helper.toggleTableEditMode();\n                wptbTableSetup.innerHTML = '';\n                document.getElementsByClassName('wptb-table-generator')[0].style.display = 'table';\n                let wptbSaveBtn = document.getElementsByClassName( 'wptb-save-btn' );\n                if( wptbSaveBtn.length > 0 ) {\n                    wptbSaveBtn = wptbSaveBtn[0];\n\n                    wptbSaveBtn.classList.add( 'wptb-save-disabled' );\n                    wptbSaveBtn.classList.remove('active');\n                }\n            } else {\n                table.recalculateIndexes();\n                table.tdDefaultWidth();\n                WPTB_Helper.dataTitleColumnSet( table );\n                table.reconstraction();\n            }\n        }\n\n        undoSelect();\n\n        WPTB_Helper.wptbDocumentEventGenerate('wp-table-builder/table-changed/after', table);\n\n        let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n        wptbTableStateSaveManager.tableStateSet();\n    };\n\n    // @deprecated old generate logic\n    // document.getElementsByClassName('wptb-table-generator')[0].style.display = 'none';\n\n    array = fillTableArray();\n\n    undoSelect();\n    drawTable(array);\n\n    wptbTableSetup.appendChild(table);\n    //if (columns || rows) {\n        table.recalculateIndexes( true );\n    //}\n    table.reconstraction();\n    table.tdDefaultWidth();\n\n    wptbTableSetup.onresize = function() {\n        table.tdDefaultWidth();\n    };\n\n    WPTB_LeftPanel();\n\n    // event hook to signal that table is generated and ready to be used\n    WPTB_Helper.wptbDocumentEventGenerate('wptb:table:generated', document);\n\n    WPTB_Helper.elementStartScript( table, 'table_setting' );\n    WPTB_Helper.elementOptionsSet( 'table_setting', table );\n\n    // this code gets the ID of the active element in the toolbar\n    // and stores it in the data attribute of the common container element \"wpcd_fixed_toolbar\"\n//    let wptbPhElement = document.getElementsByClassName( 'wptb-ph-element' );\n//    let wpcdFixedToolbar = document.getElementById( 'wpcd_fixed_toolbar' );\n//    for ( let i = 0; i < wptbPhElement.length; i++ ) {\n//        wptbPhElement[i].addEventListener( 'click', function( e ) {\n//            let wptbToolbar = document.getElementById( 'wpcd_fixed_toolbar' ).children;\n//            for ( let j = 0; j < wptbToolbar.length; j++ ) {\n//                let elementStyles = window.getComputedStyle( wptbToolbar[j], 'null' );\n//                if( elementStyles.getPropertyValue( 'display' ) == 'block' ) {\n//                    wpcdFixedToolbar.dataset.toolbarActiveId = wptbToolbar[j].getAttribute( 'id' );\n//                }\n//            }\n//        }, false );\n//    }\n\n//    let wptbPanelLeft = document.getElementsByClassName( 'wptb-panel-left' );\n//    if( wptbPanelLeft.length > 0 ) {\n//        wptbPanelLeft[0].addEventListener( 'click', function( e ) {\n//            let toolbarActiveElementId = wpcdFixedToolbar.dataset.toolbarActiveId;\n//            document.getElementById( toolbarActiveElementId ).style.display = '';\n//        }, false );\n//    }\n\n//    let body = document.getElementsByTagName( 'body' );\n//    if( body.length > 0 ) {\n//        body[0].addEventListener( 'click', function( e ) {\n//            if ( e.target.classList.contains( 'wptb-panel-left' ) || WPTB_Helper.findAncestor( e.target, 'wptb-panel-left' ) ) {\n//                let toolbarActiveElementId = wpcdFixedToolbar.dataset.toolbarActiveId;\n//                document.getElementById( toolbarActiveElementId ).style.display = '';\n//            }\n//        }, false );\n//    }\n};\n","const WPTB_TableSettingsData = {\n    borderColor: '',\n    /**\n     *\n     * @param {string} name\n     * @param {string} value\n     */\n    setTableSetting: function(name, value){\n        this[name] = value;\n    },\n    /**\n     *\n     * @param {string} name\n     * @returns {*}\n     */\n    getTableSetting: function (name) {\n        return this[name];\n    }\n}\n\n","const WPTB_TableStateSaveManager = function () {\n\tthis.tableStateSet = (generate) => {\n\t\tif (generate && window.wptbTableStateSaving && Array.isArray(window.wptbTableStateSaving)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// get table setup\n\t\tlet wptbTableSetup = document.getElementsByClassName('wptb-table-setup');\n\t\tlet wptbPreviewTable = '';\n\t\tif (wptbTableSetup.length > 0) {\n\t\t\twptbTableSetup = wptbTableSetup[0];\n\n\t\t\twptbPreviewTable = wptbTableSetup.querySelector('.wptb-preview-table');\n\t\t} else {\n\t\t\twptbTableSetup = '';\n\t\t}\n\n\t\t// check if a global array doesn't exist with saved versions of the table\n\t\t// them create it\n\t\tif (!window.wptbTableStateSaving && !Array.isArray(window.wptbTableStateSaving)) {\n\t\t\twindow.wptbTableStateSaving = [];\n\t\t}\n\n\t\t// remove the extra part of the array after changing the table\n\t\t// when it is showed in the not last modified version\n\t\tif (window.wptbTableStateSaving.length > window.wptbTableStateNumberShow) {\n\t\t\twindow.wptbTableStateSaving = window.wptbTableStateSaving.slice(0, window.wptbTableStateNumberShow + 1);\n\t\t}\n\n\t\t// add new state of table\n\t\tlet wptbNewTableSetup = '';\n\t\tif (wptbTableSetup) {\n\t\t\twptbNewTableSetup = wptbTableSetup.cloneNode(true);\n\t\t\tconst wptbHighlighted = wptbNewTableSetup.getElementsByClassName('wptb-highlighted');\n\t\t\tfor (let i = 0; i < wptbHighlighted.length; i++) {\n\t\t\t\twptbHighlighted[i].classList.remove('wptb-highlighted');\n\t\t\t}\n\t\t\tconst wptbDirectlyhovered = wptbNewTableSetup.getElementsByClassName('wptb-directlyhovered');\n\t\t\tfor (let i = 0; i < wptbDirectlyhovered.length; i++) {\n\t\t\t\twptbDirectlyhovered[i].classList.remove('wptb-directlyhovered');\n\t\t\t}\n\t\t\tconst mceContentBodys = wptbNewTableSetup.querySelectorAll('.mce-content-body');\n\t\t\tif (mceContentBodys.length > 0) {\n\t\t\t\tfor (let k = 0; k < mceContentBodys.length; k++) {\n\t\t\t\t\tmceContentBodys[k].classList.remove('mce-content-body');\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst dataMceStyle = wptbNewTableSetup.querySelectorAll('[data-mce-style]');\n\t\t\tif (dataMceStyle.length > 0) {\n\t\t\t\tfor (let k = 0; k < dataMceStyle.length; k++) {\n\t\t\t\t\tdataMceStyle[k].removeAttribute('data-mce-style');\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst mceIds = wptbNewTableSetup.querySelectorAll('[id^=mce_]');\n\t\t\tif (mceIds.length > 0) {\n\t\t\t\tfor (let k = 0; k < mceIds.length; k++) {\n\t\t\t\t\tmceIds[k].removeAttribute('id');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet cssForTdsWidthAutoValue = '';\n\t\tconst { head } = document;\n\t\tif (head) {\n\t\t\tconst cssForTdsWidthAuto = head.querySelector('style[data-wptb-td-auto-width=\"true\"]');\n\t\t\tif (cssForTdsWidthAuto) {\n\t\t\t\tcssForTdsWidthAutoValue = cssForTdsWidthAuto.innerHTML;\n\t\t\t}\n\t\t}\n\n\t\tlet wptbTableTitle = '';\n\t\tconst wptbSetupName = document.getElementById('wptb-setup-name');\n\t\tif (wptbSetupName) wptbTableTitle = wptbSetupName.value;\n\n\t\twindow.wptbTableStateSaving.push([wptbNewTableSetup, cssForTdsWidthAutoValue, wptbTableTitle]);\n\n\t\t// set new number of state which is showed now\n\t\twindow.wptbTableStateNumberShow = window.wptbTableStateSaving.length - 1;\n\n\t\t// make undo arrow active when the table was changed\n\t\tif (window.wptbTableStateSaving.length - 1 > 0) {\n\t\t\tlet wptbUndo = document.getElementsByClassName('wptb-undo');\n\t\t\tif (wptbUndo.length > 0) {\n\t\t\t\twptbUndo = wptbUndo[0];\n\n\t\t\t\twptbUndo.classList.remove('wptb-undoredo-disabled');\n\t\t\t}\n\t\t}\n\n\t\t// make redo arrow not active when the table was changed\n\t\tlet wptbRedo = document.getElementsByClassName('wptb-redo');\n\t\tif (wptbRedo.length > 0) {\n\t\t\twptbRedo = wptbRedo[0];\n\n\t\t\twptbRedo.classList.add('wptb-undoredo-disabled');\n\t\t}\n\n\t\tconst wptbSaveBtn = document.querySelector('.main-save-button-wrapper .save-btn');\n\t\tif (wptbSaveBtn) {\n\t\t\tif (\n\t\t\t\t(!wptbSaveBtn.dataset.wptbTableStateNumberSave && window.wptbTableStateNumberShow == 0) ||\n\t\t\t\twindow.wptbTableStateNumberShow == wptbSaveBtn.dataset.wptbTableStateNumberSave ||\n\t\t\t\t!wptbPreviewTable\n\t\t\t) {\n\t\t\t\t// wptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t// wptbSaveBtn.classList.remove('active');\n\n\t\t\t\tWPTB_Store.commit('setTableClean');\n\t\t\t} else {\n\t\t\t\t// wptbSaveBtn.classList.remove('wptb-save-disabled');\n\t\t\t\t// wptbSaveBtn.classList.add('active');\n\n\t\t\t\tWPTB_Store.commit('setTableDirty');\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.tableStateGet = (datawptbUndoredo) => {\n\t\tif (datawptbUndoredo && window.wptbTableStateSaving && window.wptbTableStateSaving.length > 0) {\n\t\t\t// changes the number of the state which displays now\n\t\t\tif (datawptbUndoredo == 'undo') {\n\t\t\t\tif (window.wptbTableStateNumberShow > 0) {\n\t\t\t\t\twindow.wptbTableStateNumberShow--;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (datawptbUndoredo == 'redo') {\n\t\t\t\tif (window.wptbTableStateNumberShow < window.wptbTableStateSaving.length) {\n\t\t\t\t\twindow.wptbTableStateNumberShow++;\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// add or delete class \"wptb-undoredo-disabled\" for undo button\n\t\t\tlet wptbUndo = document.getElementsByClassName('wptb-undo');\n\t\t\tif (wptbUndo.length > 0) {\n\t\t\t\twptbUndo = wptbUndo[0];\n\n\t\t\t\tif (window.wptbTableStateNumberShow == 0) {\n\t\t\t\t\tif (wptbUndo) {\n\t\t\t\t\t\twptbUndo.classList.add('wptb-undoredo-disabled');\n\t\t\t\t\t}\n\t\t\t\t} else if (window.wptbTableStateNumberShow > 0) {\n\t\t\t\t\tif (wptbUndo) {\n\t\t\t\t\t\twptbUndo.classList.remove('wptb-undoredo-disabled');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// add or delete class \"wptb-undoredo-disabled\" for redo button\n\t\t\tlet wptbRedo = document.getElementsByClassName('wptb-redo');\n\t\t\tif (wptbRedo.length > 0) {\n\t\t\t\twptbRedo = wptbRedo[0];\n\n\t\t\t\tif (window.wptbTableStateNumberShow == window.wptbTableStateSaving.length - 1) {\n\t\t\t\t\tif (wptbRedo) {\n\t\t\t\t\t\twptbRedo.classList.add('wptb-undoredo-disabled');\n\t\t\t\t\t}\n\t\t\t\t} else if (window.wptbTableStateNumberShow < window.wptbTableStateSaving.length - 1) {\n\t\t\t\t\tif (wptbRedo) {\n\t\t\t\t\t\twptbRedo.classList.remove('wptb-undoredo-disabled');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// add or delete class \"wptb-save-disabled\" for save button\n\t\t\tconst wptbSaveBtn = document.querySelector('.main-save-button-wrapper .save-btn');\n\t\t\tif (wptbSaveBtn) {\n\t\t\t\tif (\n\t\t\t\t\t(!wptbSaveBtn.dataset.wptbTableStateNumberSave && window.wptbTableStateNumberShow == 0) ||\n\t\t\t\t\twindow.wptbTableStateNumberShow == wptbSaveBtn.dataset.wptbTableStateNumberSave\n\t\t\t\t) {\n\t\t\t\t\t// wptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t\t// wptbSaveBtn.classList.remove('active');\n\n\t\t\t\t\tWPTB_Store.commit('setTableClean');\n\t\t\t\t} else {\n\t\t\t\t\t// wptbSaveBtn.classList.add('active');\n\t\t\t\t\t// wptbSaveBtn.classList.remove('wptb-save-disabled');\n\n\t\t\t\t\tWPTB_Store.commit('setTableDirty');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// load necessary saved table state\n\t\t\tlet wptbTableSetup = document.getElementsByClassName('wptb-table-setup');\n\t\t\tif (wptbTableSetup.length > 0) {\n\t\t\t\twptbTableSetup = wptbTableSetup[0];\n\n\t\t\t\t// wptbTableSetup.outerHTML = '';\n\t\t\t\tif (window.wptbTableStateSaving[window.wptbTableStateNumberShow]) {\n\t\t\t\t\tif (\n\t\t\t\t\t\twindow.wptbTableStateSaving[window.wptbTableStateNumberShow][0] &&\n\t\t\t\t\t\ttypeof window.wptbTableStateSaving[window.wptbTableStateNumberShow][0] === 'object'\n\t\t\t\t\t) {\n\t\t\t\t\t\tif ('outerHTML' in window.wptbTableStateSaving[window.wptbTableStateNumberShow][0]) {\n\t\t\t\t\t\t\twptbTableSetup.outerHTML =\n\t\t\t\t\t\t\t\twindow.wptbTableStateSaving[window.wptbTableStateNumberShow][0].outerHTML;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst wptbTableSetupNew = document.querySelector('.wptb-table-setup');\n\t\t\t\t\tif (wptbTableSetupNew && wptbTableSetupNew.children.length == 0) {\n\t\t\t\t\t\t// document.getElementsByClassName('wptb-table-generator')[0].style.display = 'table';\n\t\t\t\t\t\t// wptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t\t\t// wptbSaveBtn.classList.remove('active');\n\n\t\t\t\t\t\tWPTB_Store.commit('setTableClean');\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// document.getElementsByClassName('wptb-table-generator')[0].style.display = 'none';\n\t\t\t\t\t}\n\n\t\t\t\t\t// add or change or delete style element in the head for table cells who have auto width\n\t\t\t\t\tconst { head } = document;\n\t\t\t\t\tif (head) {\n\t\t\t\t\t\tconst cssForTdsWidthAutoOld = head.querySelector('style[data-wptb-td-auto-width=\"true\"]');\n\t\t\t\t\t\tif (cssForTdsWidthAutoOld) {\n\t\t\t\t\t\t\thead.removeChild(cssForTdsWidthAutoOld);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (window.wptbTableStateSaving[window.wptbTableStateNumberShow][1]) {\n\t\t\t\t\t\t\tconst cssForTdsWidthAuto = document.createElement('style');\n\t\t\t\t\t\t\tcssForTdsWidthAuto.setAttribute('data-wptb-td-auto-width', true);\n\t\t\t\t\t\t\tcssForTdsWidthAuto.innerHTML =\n\t\t\t\t\t\t\t\twindow.wptbTableStateSaving[window.wptbTableStateNumberShow][1];\n\t\t\t\t\t\t\thead.appendChild(cssForTdsWidthAuto);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// change value of table title field\n\t\t\t\t\tconst wptbSetupName = document.getElementById('wptb-setup-name');\n\t\t\t\t\tif (typeof window.wptbTableStateSaving[window.wptbTableStateNumberShow][2] !== 'undefined') {\n\t\t\t\t\t\tif (wptbSetupName)\n\t\t\t\t\t\t\twptbSetupName.value = window.wptbTableStateSaving[window.wptbTableStateNumberShow][2];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet body = document.getElementsByTagName('body');\n\t\t\t\tif (body.length > 0) {\n\t\t\t\t\tbody = body[0];\n\t\t\t\t}\n\n\t\t\t\tWPTB_Helper.elementOptionsPanelClear();\n\t\t\t\tWPTB_LeftPanel();\n\n\t\t\t\tconst wptbLeftScrollPanelCellSetting = document.getElementById('wptb-left-scroll-panel-cell-settings');\n\t\t\t\tif (wptbLeftScrollPanelCellSetting) {\n\t\t\t\t\twptbLeftScrollPanelCellSetting.classList.remove('visible');\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.tableStateClear = function () {\n\t\twindow.wptbTableStateSaving = window.wptbTableStateSaving.slice(0, 1);\n\t\twindow.wptbTableStateNumberShow = 0;\n\n\t\tconst wptbSaveBtn = document.querySelector('.main-save-button-wrapper .save-btn');\n\t\tif (wptbSaveBtn) {\n\t\t\twptbSaveBtn.removeAttribute('data-wptb-table-state-number-save');\n\t\t}\n\n\t\tlet wptbUndo = document.getElementsByClassName('wptb-undo');\n\t\tif (wptbUndo.length > 0) {\n\t\t\twptbUndo = wptbUndo[0];\n\n\t\t\twptbUndo.classList.add('wptb-undoredo-disabled');\n\t\t}\n\n\t\tlet wptbRedo = document.getElementsByClassName('wptb-redo');\n\t\tif (wptbRedo.length > 0) {\n\t\t\twptbRedo = wptbRedo[0];\n\n\t\t\twptbRedo.classList.add('wptb-undoredo-disabled');\n\t\t}\n\n\t\tWPTB_Store.commit('setTableClean');\n\t};\n};\n","var WPTB_innerElementSet = function  ( element ) {\n    \n    element.ondragenter = function (e) {\n        var div;\n        if ( e.dataTransfer.types.indexOf( 'wptbelement' ) == -1 && e.dataTransfer.types.indexOf( 'wptb-moving-mode' ) == -1 ) {\n            return;\n        }\n        WPTB_DropHandle(this, e);\n        \n        element.classList.add( 'wptb-ondragenter' );\n    }\n    element.ondragover = function (e) {\n        e.preventDefault();\n        WPTB_DropHandle(this, e);\n    }\n    element.ondragleave = function (e) {\n        WPTB_DropHandle(this, e, true);\n\n    }\n    element.ondrop = function(e) {\n        this.classList.remove( 'wptb-ondragenter' );\n        let element, classId;\n        e.preventDefault();\n        e.stopPropagation();\n\n        if (!e.dataTransfer.getData('wptbElement') && !e.dataTransfer.getData('node')) {\n            return;\n        }\n        let wptbDropHandle,\n            wptbDropBorderMarker;\n        if ( document.getElementsByClassName( 'wptb-drop-handle' ).length > 0 ) {\n            wptbDropHandle = document.getElementsByClassName( 'wptb-drop-handle' )[0];\n        }\n        if( document.getElementsByClassName( 'wptb-drop-border-marker' ).length > 0 ) {\n            wptbDropBorderMarker = document.getElementsByClassName( 'wptb-drop-border-marker' )[0];\n        }\n\n        if ( e.dataTransfer.getData( 'wptbElement' ) ) {\n            element = WPTB_Helper.newElementProxy( e.dataTransfer.getData( 'wptbElement' ) );\n            element = element.getDOMElement();\n        } else {\n            classId = e.dataTransfer.getData( 'node' );\n            element = document.getElementsByClassName( classId )[0];\n            //element.classList.remove( 'wptb-moving-mode' );\n        }\n\n        if(WPTB_Helper.getDragRelativeType() === 'td_relative'){\n            WPTB_DropHandle(this, e, true);\n            const parentCell = WPTB_Helper.getParentOfType('td', e.target);\n\n            parentCell.appendChild(element);\n            WPTB_Helper.wptbDocumentEventGenerate('element:mounted:dom', element);\n\n        }else if( wptbDropHandle.style.display == 'block' ) {\n            let td;\n            if( wptbDropHandle.dataset.text == 'Drop Here' ) {\n                td = wptbDropHandle.getDOMParentElement();\n                td.appendChild( element );\n                WPTB_Helper.wptbDocumentEventGenerate('element:mounted:dom', element);\n            } else {\n                let innerElement = wptbDropHandle.getDOMParentElement();\n                td = innerElement.parentNode;\n\n                if( wptbDropHandle.dataset.text == 'Above Element' ) {\n                    td.insertBefore( element, innerElement );\n                    WPTB_Helper.wptbDocumentEventGenerate('element:mounted:dom', element);\n                } else if( wptbDropHandle.dataset.text == 'Below Element' ) {\n                    let innerElementNext = innerElement.nextSibling;\n                    td.insertBefore( element, innerElementNext );\n                    WPTB_Helper.wptbDocumentEventGenerate('element:mounted:dom', element);\n                }\n            }\n            \n            let thisRow = td.parentNode;\n            if( WPTB_Helper.rowIsTop( thisRow ) ) { \n                let table = WPTB_Helper.findAncestor( thisRow, 'wptb-preview-table' );\n                \n                if( table.classList.contains( 'wptb-table-preview-head' ) ) {\n                    WPTB_Helper.dataTitleColumnSet( table );\n                }\n            }\n            \n            // start item javascript if item is new\n            let infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n            let elemKind = infArr[1];\n            if ( e.dataTransfer.getData( 'wptbElement' ) && ( elemKind == 'text' || elemKind == 'button' || elemKind == 'image' || elemKind == 'star_rating' || elemKind == 'list' ) ) {\n                //WPTB_Helper.elementStartScript( element );\n            }\n        } else {\n            return;\n        }\n\n        if(wptbDropHandle){\n            wptbDropHandle.style.display = 'none';\n            wptbDropBorderMarker.style.display = 'none';\n        }\n\n        WPTB_innerElementSet( element );\n        \n        if( ! element.classList.contains( 'wptb-image-container' ) || element.classList.contains( 'wptb-moving-mode' ) ) {\n            element.classList.remove( 'wptb-moving-mode' );\n            let wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n            wptbTableStateSaveManager.tableStateSet();\n        } \n        return true;\n    }\n    element.onmouseover = function(e) {\n        element.classList.remove( 'wptb-ondragenter' );\n    }\n}","/**\n * Add upsell related scripts.\n */\n(function upsellsHooks() {\n\ttry {\n\t\tif (WPTB_Store.getters.proStatus) {\n\t\t\treturn;\n\t\t}\n\t} catch (e) {\n\t\treturn;\n\t}\n\tconst mountPointId = 'manageCellsMoveUpsells';\n\tconst mountPoint = document.createElement('div');\n\tmountPoint.setAttribute('id', mountPointId);\n\n\tdocument.body.appendChild(mountPoint);\n\n\tWPTB_ControlsManager.callControlScript('ManageCellsMoveUpsells', mountPointId);\n})();\n","var applyGenericItemSettings = function ( element, kindIndexProt, copy = false ) {\n    var node = element.getDOMElement(),\n        index,\n        copy;\n    if( node.classList.contains( 'wptb-ph-element' ) ) {\n        if ( kindIndexProt == undefined || copy == true ) {\n            //index = document.counter.nextIndex( element.kind );\n            // @deprecated\n            // let wptbElements = document.getElementsByClassName( 'wptb-ph-element' );\n            // let elementIndexesArr = [];\n            // for( let i = 0; i < wptbElements.length; i++ ) {\n            //     var regex = new RegExp( 'wptb-element-' + element.kind + '-(\\\\d+)', \"i\" );\n            //     let infArr = wptbElements[i].className.match( regex );\n            //     if( infArr ) {\n            //         elementIndexesArr.push( infArr[1] );\n            //     }\n            // }\n            // if( elementIndexesArr.length > 0 ) {\n            //     let elementIndexMax = Math.max( ...elementIndexesArr );\n            //     index = elementIndexMax + 1;\n            // } else {\n            //     index = 1;\n            // }\n\n            // get an id for table element\n            index = WPTB_ElementIdProvider.getNewId(element.kind);\n\n            if( copy ) {\n                // change all data-elements which save parameters for different controls\n                let wptbNodeattributes = [...node.attributes];\n                for( let i = 0; i < wptbNodeattributes.length; i++ ) {\n                    if( wptbNodeattributes[i] && typeof wptbNodeattributes[i] === 'object' && wptbNodeattributes[i].nodeName ) {\n                        let regularText = new RegExp( 'data-wptb-el-' + element.kind + '-(\\\\d+)-([a-zA-Z0-9_-]+)', \"i\" );\n                        let attr = wptbNodeattributes[i].nodeName.match( regularText );\n                        if( attr && Array.isArray( attr ) ) {\n                            let newDataAttributeName = wptbNodeattributes[i].nodeName.replace( element.kind + '-' + attr[1], element.kind + '-' + index );\n                            let newDataAttributeValue = wptbNodeattributes[i].nodeValue;\n                            node.removeAttribute( wptbNodeattributes[i].nodeName );\n                            node.setAttribute( newDataAttributeName, newDataAttributeValue );\n                        }\n                    }\n                }\n            }\n        } else if ( kindIndexProt && ! copy ) {\n            let kindIndexProtArr = kindIndexProt.split('-');\n            index = kindIndexProtArr[kindIndexProtArr.length - 1];\n            // start element javascript if element is new\n            \n        }\n\n        let node_wptb_element_kind_num = node.className.match(/wptb-element-(.+)-(\\d+)/i);\n        if ( node_wptb_element_kind_num ) {\n            node.classList.remove( node_wptb_element_kind_num[0] );\n        }\n        if ( ! node.classList.contains( 'wptb-ph-element' ) ) {\n            node.classList.add( 'wptb-ph-element' );\n            if( ! node.classList.contains( 'wptb-element-' + element.kind + '-' + index ) ) {\n                node.classList.add( 'wptb-element-' + element.kind + '-' + index );\n            }\n        } else {\n            if( ! node.classList.contains( 'wptb-element-' + element.kind + '-' + index ) ) {\n                node.classList.add( 'wptb-element-' + element.kind + '-' + index );\n            }\n        }\n        WPTB_Helper.elementStartScript( element.getDOMElement() );\n        new WPTB_ElementOptions( element, index, kindIndexProt );\n        document.counter.increment(element.kind);\n    }\n    \n    node.onmouseenter = function ( event ) {\n        \n        if (event.target.classList.contains( 'wptb-text-container' )) {\n            if (node.children.length === 1) {\n                let elemChild = node.children[0].lastChild;\n                \n                if (elemChild?.children?.length === 1) {\n                    if (elemChild.innerHTML === '<br>') {\n                        elemChild.innerHTML = '';\n                    }\n                }\n            }\n        }\n        \n        if( event.target.classList.contains( 'wptb-moving-mode' ) ) {\n            return;\n        }\n        \n        let wptbActionsField = new WPTB_ActionsField();\n        \n        wptbActionsField.addActionField( 1, node );\n        \n        wptbActionsField.setParameters( node );\n        \n        node.classList.remove( 'wptb-ondragenter' );\n    };\n    \n    node.onmouseleave = function ( event ) {\n        let wptbActionsField = new WPTB_ActionsField();\n        \n        wptbActionsField.leaveFromField( event, node );\n    };\n};","/**\n * Assign icon manager to global space.\n *\n * @param {string} key global key\n * @param {Object} context global context\n * @param {Function} factory factory function\n */\n(function assignToGlobal(key, context, factory) {\n\t// eslint-disable-next-line no-param-reassign\n\tcontext[key] = factory();\n\t// eslint-disable-next-line no-restricted-globals\n})('WPTB_IconManager', self || global, function iconManager() {\n\t/**\n\t * Frontend icon manager for WPTB builder.\n\t *\n\t * @param {Object} list all icon list\n\t * @class\n\t */\n\tfunction IconManager(list) {\n\t\tif (!list) {\n\t\t\tthrow new Error('no icon list is defined for WPTB_IconManager instance');\n\t\t}\n\t\tconst iconList = list;\n\n\t\t/**\n\t\t * Cached icons.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tconst cachedIcons = {};\n\n\t\t/**\n\t\t * Prepare an icon with a wrapper.\n\t\t *\n\t\t * @param {string} iconSvgString string representation of icon\n\t\t * @param {Array | string | null} extraClass name of extra class[es] to apply to icon wrapper\n\t\t * @param {boolean} stringifiedVersion get stringified html version of icon\n\t\t * @return {HTMLDivElement} created icon wrapper\n\t\t */\n\t\tconst prepareIcon = (iconSvgString, extraClass = null, stringifiedVersion = false) => {\n\t\t\tconst iconWrapper = document.createElement('div');\n\n\t\t\t// if an extra class is defined, add it to icon wrapper\n\t\t\tif (extraClass) {\n\t\t\t\tif (!Array.isArray(extraClass)) {\n\t\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\t\textraClass = [extraClass];\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\t\textraClass.map((eClass) => {\n\t\t\t\t\ticonWrapper.classList.add(eClass);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ticonWrapper.innerHTML = iconSvgString;\n\n\t\t\treturn stringifiedVersion ? iconWrapper.outerHTML : iconWrapper;\n\t\t};\n\n\t\t/**\n\t\t * Get a cached icon.\n\t\t *\n\t\t * @param {string} iconName name of the icon\n\t\t * @param {string | Array | null} extraClass extra class name[s] to add to icon wrapper\n\t\t * @param {boolean | null} getStringifiedVersion get stringified version of the icon\n\t\t * @return {null | Element} Prepared cached icon or null if no cached version is found\n\t\t */\n\t\tconst getCachedIcon = (iconName, extraClass = null, getStringifiedVersion = false) => {\n\t\t\tif (cachedIcons[iconName]) {\n\t\t\t\treturn prepareIcon(cachedIcons[iconName], extraClass, getStringifiedVersion);\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\t/**\n\t\t * Add an icon to cache.\n\t\t *\n\t\t * @param {string} iconName name of the icon to be stored\n\t\t * @param {string} stringifiedIcon stringified version of the icon\n\t\t */\n\t\tconst addToCache = (iconName, stringifiedIcon) => {\n\t\t\tcachedIcons[iconName] = stringifiedIcon;\n\t\t};\n\n\t\t/**\n\t\t * Get a list of all available icons.\n\t\t *\n\t\t * @return {Object} icon list\n\t\t */\n\t\tthis.getIconList = () => {\n\t\t\treturn iconList;\n\t\t};\n\n\t\t/**\n\t\t * Get an icon.\n\t\t *\n\t\t * Icons sent with this function are wrapped with a 'div' element.\n\t\t *\n\t\t * @param {string} iconName name of the icon\n\t\t * @param {string | Array | null} extraClass extra class[es] to add to icon wrapper\n\t\t * @param {boolean} getStringifiedVersion get stringified version of icon\n\t\t * @return {Promise<void>} a Promise that will be resolved when icon is fetched from server\n\t\t */\n\t\tthis.getIcon = (iconName, extraClass = null, getStringifiedVersion = false) => {\n\t\t\t// eslint-disable-next-line consistent-return\n\t\t\treturn new Promise((res, rej) => {\n\t\t\t\t// if cached version is found, return that version\n\t\t\t\tconst cachedIcon = getCachedIcon(iconName, extraClass, getStringifiedVersion);\n\t\t\t\tif (cachedIcon) {\n\t\t\t\t\treturn res(cachedIcon);\n\t\t\t\t}\n\n\t\t\t\tif (iconList[iconName]) {\n\t\t\t\t\treturn fetch(iconList[iconName])\n\t\t\t\t\t\t.then((resp) => {\n\t\t\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\t\t\treturn resp.text();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow new Error(`an error occurred while fetching icon [${iconName}]`);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then((iconString) => {\n\t\t\t\t\t\t\tif (iconString.error) {\n\t\t\t\t\t\t\t\tthrow new Error(`an error occurred while fetching icon [${iconName}]`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// add icon to cache\n\t\t\t\t\t\t\taddToCache(iconName, iconString);\n\n\t\t\t\t\t\t\treturn res(prepareIcon(iconString, extraClass, getStringifiedVersion));\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\treturn rej(new Error(err));\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn rej(new Error(`no icon found with the given name of [${iconName}]`));\n\t\t\t});\n\t\t};\n\t\tthis.getIconUrl = (iconName) => {\n\t\t\tlet iconUrl = null;\n\n\t\t\tif (iconList[iconName]) {\n\t\t\t\ticonUrl = iconList[iconName];\n\t\t\t}\n\n\t\t\treturn iconUrl;\n\t\t};\n\t}\n\n\t// eslint-disable-next-line no-restricted-globals\n\tconst context = self || global;\n\tif (context.wptb_admin_object) {\n\t\treturn new IconManager(wptb_admin_object.iconManager);\n\t}\n\n\treturn null;\n});\n"]}