File: /home/wwwroot/shredder/wwwroot/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_ElementIdProvider.js","WPTB_ElementObject.js","WPTB_ElementOptions.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_Upsells.js","WPTB_innerElementSet.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","tmplIconsDirectories","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","factory","self","global","singletonInstance","getCurrentTable","querySelector","getSelectorToolbox","initialized","store","removeHighlights","from","querySelectorAll","map","cell","highlightCellLogic","targetElement","multiSelection","arguments","undefined","currentTargetType","nodeName","toLowerCase","highlightCell","preventDefault","stopPropagation","commit","state","types","selected","item","getColumnSelector","getRowSelector","rowMouseEnter","cellMouseEnter","index","reduce","carry","current","cellIndex","element","getCellsAtColumnIndex","columnIndex","parsedIndex","Number","parseInt","cells","isNaN","row","_Array$from$splice","splice","cellAtIndex","_slicedToArray","push","createRailMark","railMark","calculateRailPositions","tableWidth","_currentTable$getBoun","width","tableHeight","height","columnRailHeight","columnRail","concat","columnRailElement","mark","currentTable","indexRow","currentRowCellCount","_cell$getBoundingClie","cellX","x","cellWidth","cellDataObject","addEventListener","addColumnMarksToRail","rowRailElement","rowRailWidth","rowRail","_row$getBoundingClien","rowHeight","rowPositionObject","addSelectorToolbox","toolbox","rowSelector","title","WPTB_IconManager","getIcon","then","icon","colSelector","getters","hoveredCell","first","_getCellsAtColumnInde2","_toArray","rest","slice","column","_toConsumableArray","assignRowClickHandler","currentActiveRow","hoveredRow","_Array$from4","selectorToolboxVisibility","visible","dataset","removeHandlersAndStates","removeEventListener","dispatch","watchStoreMutations","suppliedStore","subscribe","_ref4","targetRow","parentY","_targetRow$getBoundin","payload","y","cellsAtIndex","cellToUse","offsetWidth","parentX","_cellToUse$getBoundin","applyOptions","_ref","headerBg","evenBg","oddBg","_ref2","wptbHeaderBackgroundColor","wptbEvenRowBackgroundColor","wptbOddRowBackgroundColor","header","_Array$from2","colorVal","removeProperty","backgroundColor","customBgColorRuleSet","customBgColor","wptbBgColor","hasCustomBgColor","includes","init","_ref3","detail","WPTB_ControlsManager","callControlScript","getPreviousSection","WPTB_Store","get","elementActionsToolbox","addStore","storeObject","url","window","location","href","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","WPTB_Cell","callback","DOMElement","padding","jQuery","val","innerBorderWidth","border","newElementProxy","ondblclick","wptbTableSetup","yIndex","wptbSortableTable","currentTarget","elementStartScript","wptbPhElement","_loop","i","wptbElementTypeClass","wptbTypeElementArr","split","wptbInternalActiveElement","j","wptbInternalActiveElementObj","_loop2","setCoords","xIndex","getCoords","coords","appendElement","getCellDimensions","tdStyleObj","getComputedStyle","tdPaddingLeft","getPropertyValue","tdPaddingRight","tdBorderLeftWidth","tdBorderRightWidth","tdPaddingTop","tdPaddingBottom","tdBorderTopWidth","tdBorderBottomWidth","offsetHeight","borderCollapse","tableBorderLeft","tableFullStyleObj","tableBorderRight","tableBorderTop","tableBorderBottom","tr","firstChild","lastChild","WPTB_CutGlueTable","cutTableHorizontally","rowBefore","rows","tableRowsIChildren","children","rowSpan","newTdRowspan","sameCellBeforeDivision","td","wptbCell","tdTopStyle","getAttribute","setAttribute","colSpan","dataXIndex","dataXIndexNext","beforeTd","maxCols","WPTB_RecalculateIndexes","glueTableHorizontally","tds","hasAttribute","dataSameCellBeforeDivision","tdsSameBeforeDivision","tdsSameBeforeDivisionJPlusChildren","k","cutTableVertically","col","rowSpanNewTd","colSpanOld","colSpanNewTd","rowChildren","rowChildrenLength","afterTd","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","key","nextIndex","elementIds","getNewId","elementType","elements","regex","matchArray","Math","max","kindIndexProt","itemHtml","wptbElementMutch","elementClearFromTinyMce","wpTemplateId","replace","trim","innerHTML","inElems","inElemObj","WPTB_ElementOptions","elementOptionsSet","capture","context","module","exports","_tableQueries","prefixStyleRules","prefix","extraStyles","splitStyles","replaceAll","prefixedStylesArray","matches","join","applyGeneralStyles","generalStyles","baseElement","generalStylesheet","id","insertAdjacentElement","currentMode","modes","block","baseDocument","prefixedStyleRules","parentPrefix","styles","createTextNode","applyExtraStyle","tableElement","styleId","styleElement","uniqueClass","prefixedStyles","extraStylesRaw","wptbExtraStyles","atob","_tableElement$getAttr","tableId","head","disableThemeStyles","frontEnd","builder","tableQueries","_defineProperty","applyStyles","mode","allTables","WPTB_GetDirectionAfterReconstruction","typeFirst","typeSecond","verticalProp","responsiveFront","itemsPerHeader","tableMaxCols","switchMode","getDirective","directives","sizeRangeId","responsiveMode","modeOptions","topRowAsHeader","cellStackDirection","cellsPerRow","newTable","WPTB_HeaderToolbox","wrapperQuery","topMargin","toggleToolboxVisibility","show","button","activateSection","buttonType","hideList","currentSection","hexToRgb","hex","result","rgbToHex","rgb","isHex","rgbm","toString","toUpperCase","round","test","icon_directory","protocol","hostname","img","src","wptbDropHandles","wptbDropBorderMarkers","linkHttpCheckChange","link","convertToAbs","origin","linkClean","linkArr","cls","parentElement","getSelectionText","getSelection","selection","elementOptionsPanelClear","elementOptionsGroup","wpColorPickerCheckChangeForTableStateSaving","originalEvent","irisStripMouseUpStateSaveManager","wpColorPickerClear","attribute","isId","input","parent","wpPickerContainer","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","tmplControlsConfig","container","innerElementCopyIncludeHandler","valueDependOnControl","dependOnControlName","targetControlElementClass","valueDependOnControlCorrect","dependOnControlDataGet","dependOnControlElements","valueDependOnControlCorrectObj","dependOnControlElementsArr","s","dependOnControlElementClass","dependOnControlData","Object","keys","forEach","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","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","editActionClassRemove","startsWith","wptbelementOptionClass","childNodes","controlsConfigJson","controlsConfig","elementOptionsGroupIdsInvolved","elementOptionsGroupInvolved","elementOptionsContainerInvolved","controlScriptsObj","controlappearDependOnControl","controltoggleSwitch","controlValueDependOnControl","controlsConfigNew","controlKey","tmplControlTemplate","elemContainer","elementControlTargetUnicClass","controlParamCalculateValue","elementOptionsContainer","controlTemplate","elementOptionsGroupChildren","elementOptionsContainerOn","elementOptionContainerOn","elementOptionContainer","elementOptionClass","controlContainerElemParent","helperJavascriptElem","helperJavascriptCode","innerText","script","controlScriptsArr","editActiveElems","unicClassP","controlParamCalculateValueCreateFunction","handlerFunction","managerExternalCssStyles","elementContainer","selector","cssName","cssValue","cssForThisElement","cssText","cssTextArrFirst","pop","selectorExists","cssTextArrSecond","cssTextArrThird","cssNameExists","registerSections","sections","_this2","previousSection","sectionElement","sectionDataId","_this3","displayType","triggerSectionEvent","builderAdminContainer","wptbActiveSection","visibility","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","activeElemClass","cssForNewElement","cssForActiveElement","infArrCopyEl","cssForActiveElementInnerHTML","cssForNewElementInnerHTML","elementsStylesConvertToObject","stylesElements","stylesObj","styleElemId","elementsStylesSetFromObject","jsonObject","styleCss","saveTable","startSaving","previewSaving","tableSaveIndicator","wptbTableStateNumberSave","wptbTableStateNumberShow","bar","toggleTableEditMode","tableClean","messagingArea","postId","wptb_admin_object","t","code","rs","wptbId","codeClone","datas","paramIdsNecessaryChange","columns","WPTB_Stringifier","outerHTML","datas_containers","styleObjJson","messagingAreaText","setTimeout","params","content","elements_datas","elements_styles","security_code","preview_saving","action","WPTB_NotificationManager","sendNotification","message","wptbPreviewBtn","wptbPreviewBtnHref","previewHref","wptbSaveBtn","builderPageUrl","history","pushState","clickOnFreeSpace","cellModeBackground","wpcdFixedToolbar","elementAjax","dataAjaxData","element_ajax_data","element_name","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","tableHeaderBackground","tableEvenRowBackground","tableOddRowBackground","tableIndex","parentType","dragRelativeType","setDragRelativeType","getElementColorStylesHex","showControlsOnElementMount","showElementsListOnRemove","blockTinyMCE","addBlocker","blockerElement","haveChild","removeBlocker","calledByBlock","isTableClean","confirm","strings","dirtyConfirmation","saveStatus","wptbSaving","tableGenerator","columnsDecrementButton","columnsIncrementButton","rowsDecrementButton","rowsIncrementButton","columnsInput","rowsInput","WptbResponsive","WPTB_ExtraStyles","subscribeToControl","WPTB_LeftPanel","wptbElementButtons","wptbElement","closeButton","wptbHeader","bgColors","normal","prepareMessage","prepareMessageStyle","messageType","log","console","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","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","wptbUndoRedoContainer","tableStateGet","wptbUndoredo","wptbRedo","shortcodePopupWindow","onbeforeunload","previewId","newHref","floor","random","tableTitleField","onchange","thisObject","sortingCellMouseMov","xMatch","tagName","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","tdsAll","removeCellsAttrAfterDivision","tableSM","reassignElementsStyles","dataAttr","prevValue","nextValue","textElements","tdIndexSpanPrev","collectionTdsJSpan","collectionTdsJSpanProperty","indexName","indexNameCamelCase","indexNamePerpendicularCamelCase","tableGroupCount","tdsCollectionChanged","tdSpanProperty","collectionTds","tdSpan","cellsStylesScheme","rowsStylesScheme","sortModeSwitcher","active","sortableTableVerticalStart","sortingCellMouseMoveSwitcher","wptbSortableTableVertical","createTableElementsStylesScheme","sortableTableHorizontalStart","wptbSortableTableHorizontal","tableObjectChange","start","elemSelector","elem","objectKey","elementsStylesScheme","elemStyles","sortableTableInitialization","sortModeSwitcherRun","switchModeObj","tableOld","sCMM","dataAttrSortChange","rowsLength","dataYIndexStart","codeMain","tableColumns","minWidth","innerElements","wptbActionsLength","dataMceBogus","array","wptb_preview_table","cs","noCells","singleCells","multipleCells","cellSettings","cellSelectOperation","cellElement","classListOperation","_getCoords","_getCoords2","position","isShiftActive","shiftKey","ele","cellHighlighted","markedCells","sizeName","getSizeFunctionName","size","elementControlSizeUnicClass","elementControlSizeFixedUnicClass","cellSizeInputs","cellSizeFixedInput","isSquare","settingId","settingElem","countMarkedCells","splitButton","drawTable","a","undoSelect","fillTableArray","colspansSums","colspanSumInRow","maxAmountOfCells","apply","maxAmountOfRows","skipInCols","cellsBuffer","xPosition","cellPointer","stepsToMove","reconstraction","insertRow","setMaxAmountOfCells","getMaxAmountOfCells","addColumnWidth","cleaner","highlighted","tableTdsFor","tableRows","widthIsSet","arrayTdsFromPreviousRow","wptbFixedWidth","tableTdsSumMaxWidth","tableTdsSumMaxWidthFixed","tableTdsSumMaxWidthAuto","wptbTableSetupWidth","arrayCellsWidthFixedHelper","arrayCellsWidthAutoHelper","tdPaddingCommon","tableTdBorderCommonWidth","cssForTdsWidthAuto","borderLeftWidth","borderRightWidth","tableBorderCommon","tableTdBorderLeftWidth","tableTdBorderRightWidth","wptbCssTdAutoWidth","wptbTdWidthAuto","CellsWidthAutoCount","wptbTableTdsSumMaxWidth","wptbCellsWidthAutoCount","mergingСellsHorizontally","wptbFixedWidthSize","tableTdWidthAuto","styleElementCreate","cssForTdsWidthAutoOld","wptbTableAlignment","addRowHeight","dataYIndex","heightIsSet","arrayTdsPrevious","wptbFixedHeight","mergingCellsVertically","forBreak","addColumnEnd","currentTableTd","currentTdStyle","borderColor","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","items","mergeCells","dimensions","tdsChildrenNew","tdsInternalElements","tdsIntElemLength","firstWidth","firstDataFixedWidth","firstHeight","firstDataFixedHeight","splitCell","cellStyles","cellXIndex","rowChildInsertBefore","rowNext","findRowspannedCells","actualPoints","points","getActualPointsInRow","addLackingCells","sumRows","totalColspan","deleteRow","thisRowChildren","nextRow","nextRowChildren","tdArr","nextRowChildrenLength","nextRowChildrenK","jRowChildren","deleteColumn","onresize","setTableSetting","generate","wptbTableStateSaving","wptbNewTableSetup","wptbHighlighted","wptbDirectlyhovered","cssForTdsWidthAutoValue","wptbTableTitle","wptbSetupName","datawptbUndoredo","wptbLeftScrollPanelCellSetting","wptbTableSetupNew","tableStateClear","dummyWrapper","upsellContainer","upsells","pro","leftPanel","classId","onmouseover","WPTB_ElementIdProvider","newDataAttributeName","newDataAttributeValue","wptbNodeattributes","attributes","attr","nodeValue","kindIndexProtArr","node_wptb_element_kind_num","onmouseenter","elemChild","wptbActionsField","list","prepareIcon","iconSvgString","extraClass","stringifiedVersion","iconWrapper","eClass","iconList","cachedIcons","getIconList","iconName","getStringifiedVersion","Promise","res","rej","cachedIcon","getCachedIcon","fetch","resp","ok","iconString","error","stringifiedIcon","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\t// eslint-disable-next-line no-param-reassign\n\tcontext[key] = factory();\n\t// eslint-disable-next-line no-restricted-globals\n})('WPTB_BackgroundMenu', self || global, function wptbBackgroundMenuSetup() {\n\t/**\n\t * Background menu component.\n\t *\n\t * @class\n\t */\n\tfunction BackgroundMenu() {\n\t\t// whether setup operation done or not\n\t\tthis.initialized = false;\n\n\t\t// flux store that will be used with menu\n\t\tlet store = null;\n\n\t\t/**\n\t\t * Get current active table on builder.\n\t\t *\n\t\t * @return {HTMLElement | null} found active table\n\t\t */\n\t\tconst getCurrentTable = () => {\n\t\t\treturn document.querySelector('.wptb-table-setup .wptb-preview-table');\n\t\t};\n\n\t\t/**\n\t\t * Get selector toolbox element.\n\t\t *\n\t\t * @return {Element | undefined} selector toolbox\n\t\t */\n\t\tconst getSelectorToolbox = () => {\n\t\t\treturn document.querySelector('.wptb-bg-color-selectors');\n\t\t};\n\n\t\t/**\n\t\t * Get background specific options from table attributes.\n\t\t */\n\t\tconst parseOptionsFromTable = () => {\n\t\t\tconst currentTable = getCurrentTable();\n\n\t\t\tconst headerBg = currentTable.dataset.wptbHeaderBackgroundColor;\n\t\t\tconst evenBg = currentTable.dataset.wptbEvenRowBackgroundColor;\n\t\t\tconst oddBg = currentTable.dataset.wptbOddRowBackgroundColor;\n\n\t\t\treturn {\n\t\t\t\trow: {\n\t\t\t\t\theaderBg,\n\t\t\t\t\tevenBg,\n\t\t\t\t\toddBg,\n\t\t\t\t},\n\t\t\t};\n\t\t};\n\n\t\t/**\n\t\t * Apply color value to element.\n\t\t *\n\t\t * @param {string | null} colorVal color value\n\t\t * @param {Element} element html element\n\t\t */\n\t\tconst applyColor = (colorVal, element) => {\n\t\t\tif (colorVal === '' || colorVal === null) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\telement.style.removeProperty('background-color');\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\telement.style.backgroundColor = colorVal;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Row specific operations.\n\t\t *\n\t\t * @param {Object} rowOptions row options object\n\t\t * @param {string} rowOptions.headerBg header color\n\t\t * @param {string} rowOptions.evenBg even row color\n\t\t * @param {string} rowOptions.oddBg odd row color\n\t\t */\n\t\tconst rowOperations = ({ headerBg, evenBg, oddBg }) => {\n\t\t\tconst currentTable = getCurrentTable();\n\n\t\t\tconst [header, ...rest] = Array.from(currentTable.querySelectorAll('tr'));\n\n\t\t\t// apply header row color\n\t\t\tapplyColor(headerBg, header);\n\n\t\t\t// apply even/odd row color\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\trest.map((row, index) => {\n\t\t\t\t// ruleset to decide whether row has a custom bg color applied or not\n\t\t\t\tconst customBgColorRuleSet = ['', null, undefined];\n\t\t\t\tconst customBgColor = row.dataset.wptbBgColor;\n\t\t\t\tconst hasCustomBgColor = !customBgColorRuleSet.includes(customBgColor);\n\n\t\t\t\t// eslint-disable-next-line no-param-reassign,no-nested-ternary\n\t\t\t\trow.style.backgroundColor = hasCustomBgColor ? customBgColor : index % 2 === 0 ? evenBg : oddBg;\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Apply background options to table.\n\t\t *\n\t\t * @param {null | Object} suppliedOptions options object, if supplied, these options will be used instead of parsing from table itself\n\t\t */\n\t\tthis.applyOptions = (suppliedOptions = null) => {\n\t\t\tconst { row: rowOptions } = suppliedOptions || parseOptionsFromTable();\n\n\t\t\trowOperations(rowOptions);\n\t\t};\n\n\t\t/**\n\t\t * Remove all highlight visuals from cells.\n\t\t */\n\t\tconst removeHighlights = () => {\n\t\t\t// remove any active highlighted cells\n\t\t\tconst allCells = Array.from(getCurrentTable().querySelectorAll('td'));\n\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tallCells.map((cell) => {\n\t\t\t\tcell.classList.remove('wptb-highlighted');\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Extracted cell highlight logic to use with other parts of component.\n\t\t *\n\t\t * @param {Element} targetElement target element\n\t\t * @param {boolean} multiSelection is multi selection active, multi selection should be enabled for elements after the first selected one onwards\n\t\t */\n\t\tconst highlightCellLogic = (targetElement, multiSelection = false) => {\n\t\t\tconst currentTargetType = targetElement.nodeName.toLowerCase();\n\n\t\t\tif (!multiSelection) {\n\t\t\t\tremoveHighlights();\n\t\t\t}\n\n\t\t\t// only add highlight style to table cell elements\n\t\t\tif (currentTargetType !== 'td') {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\ttargetElement = targetElement.parentNode;\n\t\t\t}\n\n\t\t\ttargetElement.classList.add('wptb-highlighted');\n\t\t};\n\n\t\t/**\n\t\t * Highlight selected data cell element.\n\t\t *\n\t\t * @param {Event} event click event\n\t\t */\n\t\tconst highlightCell = (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\tconst currentTargetType = event.target.nodeName.toLowerCase();\n\n\t\t\tlet targetElement = event.target;\n\n\t\t\tif (currentTargetType !== 'td') {\n\t\t\t\ttargetElement = event.target.parentNode;\n\t\t\t}\n\n\t\t\thighlightCellLogic(targetElement);\n\n\t\t\tstore.commit('setMenuSelectedTableElement', { type: store.state.types.selected.cell, item: targetElement });\n\t\t};\n\n\t\t/**\n\t\t * Get column selection element.\n\t\t *\n\t\t * @return {Element} row selection element\n\t\t */\n\t\tconst getColumnSelector = () => {\n\t\t\tconst rowSelectionClass = '.wptb-col-selection';\n\t\t\treturn document.querySelector(rowSelectionClass);\n\t\t};\n\n\t\t/**\n\t\t * Get column rail element\n\t\t *\n\t\t * @return {Element} column rail element\n\t\t */\n\t\tconst getColumnRail = () => {\n\t\t\treturn document.querySelector('.wptb-bg-color-selectors .wptb-bg-column-rail');\n\t\t};\n\n\t\t/**\n\t\t * Get row rail element\n\t\t *\n\t\t * @return {Element} row rail element\n\t\t */\n\t\tconst getRowRail = () => {\n\t\t\treturn document.querySelector('.wptb-bg-color-selectors .wptb-bg-row-rail');\n\t\t};\n\n\t\t/**\n\t\t * Get column selection element.\n\t\t *\n\t\t * @return {Element} column selection element\n\t\t */\n\t\tconst getRowSelector = () => {\n\t\t\tconst columnSelectionClass = '.wptb-row-selection';\n\t\t\treturn document.querySelector(columnSelectionClass);\n\t\t};\n\n\t\t/**\n\t\t * Handle mouse over event for table rows.\n\t\t *\n\t\t * @param {Event} event event object\n\t\t */\n\t\tconst rowMouseEnter = (event) => {\n\t\t\t// update hovered row element on store\n\t\t\tstore.commit('updateHoveredRowElement', event.target);\n\t\t};\n\n\t\t/**\n\t\t * Handle mouse over event for table cells.\n\t\t *\n\t\t * @param {Event} event event object\n\t\t */\n\t\tconst cellMouseEnter = (event) => {\n\t\t\tconst targetElement = event.target;\n\n\t\t\t// find index of cell element relative to its container row element\n\t\t\tconst index = Array.from(targetElement.parentNode.querySelectorAll('td')).reduce(\n\t\t\t\t(carry, current, cellIndex) => {\n\t\t\t\t\treturn current === targetElement ? cellIndex : carry;\n\t\t\t\t},\n\t\t\t\t-1\n\t\t\t);\n\n\t\t\t// update hovered cell element on store\n\t\t\tstore.commit('updateHoveredCellElement', { element: targetElement, index });\n\t\t};\n\n\t\t/**\n\t\t * Get all cells at the given column index.\n\t\t *\n\t\t * @param {number | string} columnIndex column index\n\t\t */\n\t\tconst getCellsAtColumnIndex = (columnIndex) => {\n\t\t\t// parse index to an integer if its type is not a number\n\t\t\tconst parsedIndex = typeof columnIndex === 'number' ? columnIndex : Number.parseInt(columnIndex, 10);\n\n\t\t\tconst cells = [];\n\t\t\t// eslint-disable-next-line no-restricted-globals\n\t\t\tif (!isNaN(parsedIndex)) {\n\t\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\t\tArray.from(getCurrentTable().querySelectorAll('tr')).map((row) => {\n\t\t\t\t\tconst [cellAtIndex] = Array.from(row.querySelectorAll('td')).splice(parsedIndex, 1);\n\n\t\t\t\t\t// only push the cell to found ones if there is a cell at the given index\n\t\t\t\t\tif (cellAtIndex) {\n\t\t\t\t\t\tcells.push(cellAtIndex);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn cells;\n\t\t};\n\n\t\t/**\n\t\t * Calculate row selector position relative to supplied table row element.\n\t\t *\n\t\t * @param {Element} targetRow target row element\n\t\t */\n\t\tconst rowSelectorPosition = (targetRow) => {\n\t\t\tconst { y: parentY } = document.querySelector('.wptb-table-setup').getBoundingClientRect();\n\t\t\tconst { height, y } = targetRow.getBoundingClientRect();\n\n\t\t\tconst rowSelector = getRowSelector();\n\t\t\trowSelector.classList.add('wptb-bg-selection-visible');\n\t\t\trowSelector.style.height = `${height}px`;\n\t\t\trowSelector.style.top = `${y - parentY}px`;\n\n\t\t\t// @deprecated\n\t\t\t// // since row selector is hidden with 'display: none' css rule, should get its size values after it becomes visible\n\t\t\t// const { width: selectorWidth } = getRowSelector().getBoundingClientRect();\n\t\t\t// rowSelector.style.left = `${x - parentX - selectorWidth}px`;\n\t\t};\n\n\t\t/**\n\t\t * Calculate position of column selector element.\n\t\t *\n\t\t * @param {number | string} index index of the column relative to current table\n\t\t */\n\t\tconst columnSelectorPosition = (index) => {\n\t\t\tconst cellsAtIndex = getCellsAtColumnIndex(index);\n\n\t\t\tif (cellsAtIndex.length > 0) {\n\t\t\t\tconst colSelector = getColumnSelector();\n\n\t\t\t\t// select the cell width lowest width value to use as a pivot point\n\t\t\t\tconst cellToUse = cellsAtIndex.reduce((carry, cell) => {\n\t\t\t\t\treturn carry.offsetWidth > cell.offsetWidth ? cell : carry;\n\t\t\t\t}, cellsAtIndex[0]);\n\n\t\t\t\tconst { x: parentX } = document.querySelector('.wptb-table-setup').getBoundingClientRect();\n\t\t\t\tconst { width, x } = cellToUse.getBoundingClientRect();\n\n\t\t\t\tcolSelector.classList.add('wptb-bg-selection-visible');\n\t\t\t\tcolSelector.style.left = `${x - parentX}px`;\n\t\t\t\t// colSelector.style.top = `${-colSelector.offsetHeight}px`;\n\t\t\t\tcolSelector.style.width = `${width}px`;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Create rail mark element.\n\t\t *\n\t\t * @return {HTMLDivElement} rail mark element\n\t\t */\n\t\tconst createRailMark = () => {\n\t\t\tconst railMark = document.createElement('div');\n\t\t\trailMark.classList.add('wptb-bg-rail-mark');\n\t\t\treturn railMark;\n\t\t};\n\n\t\t/**\n\t\t * Add column marks to selector rail.\n\t\t *\n\t\t * @param {Element} columnRailElement column rail element\n\t\t */\n\t\tconst addColumnMarksToRail = (columnRailElement) => {\n\t\t\t// clear rail from all previous mark elements\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tArray.from(columnRailElement.querySelectorAll('.wptb-bg-rail-mark')).map((mark) => {\n\t\t\t\tmark.remove();\n\t\t\t});\n\n\t\t\tconst currentTable = getCurrentTable();\n\t\t\t// find row with most columns to use an index\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tconst indexRow = Array.from(currentTable.querySelectorAll('tr')).reduce((carry, item) => {\n\t\t\t\tif (carry === null) {\n\t\t\t\t\treturn item;\n\t\t\t\t}\n\t\t\t\tconst currentRowCellCount = item.querySelectorAll('td').length;\n\t\t\t\tconst carryRowCellCount = carry.querySelectorAll('td').length;\n\n\t\t\t\treturn currentRowCellCount > carryRowCellCount ? item : carry;\n\t\t\t}, null);\n\n\t\t\t// 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\t\t\tconst indexRowCellData = Array.from(indexRow.querySelectorAll('td')).map((cell) => {\n\t\t\t\tconst { x, width } = cell.getBoundingClientRect();\n\t\t\t\treturn { cellX: x, cellWidth: width };\n\t\t\t});\n\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tindexRowCellData.map((cellDataObject, index) => {\n\t\t\t\t// create a new rail mark element and update its properties\n\t\t\t\tconst railMark = createRailMark();\n\t\t\t\trailMark.style.width = `${cellDataObject.cellWidth}px`;\n\t\t\t\trailMark.addEventListener('click', (event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\n\t\t\t\t\tstore.commit('updateHoveredCellElement', { element: null, index });\n\t\t\t\t});\n\t\t\t\tcolumnRailElement.appendChild(railMark);\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Add row marks to selector rail.\n\t\t *\n\t\t * @param {Element} rowRailElement row rail element\n\t\t */\n\t\tconst addRowMarksToRail = (rowRailElement) => {\n\t\t\t// clear any rail mark available within row rail element\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tArray.from(rowRailElement.querySelectorAll('.wptb-bg-rail-mark')).map((mark) => {\n\t\t\t\tmark.remove();\n\t\t\t});\n\n\t\t\t// get position data for row elements in current table\n\t\t\tconst rowsPositionsObject = Array.from(getCurrentTable().querySelectorAll('tr')).map((row) => {\n\t\t\t\tconst { height } = row.getBoundingClientRect();\n\n\t\t\t\treturn { element: row, rowHeight: height };\n\t\t\t});\n\n\t\t\trowsPositionsObject.map((rowPositionObject) => {\n\t\t\t\t// create a rail mark element and update its properties\n\t\t\t\tconst railMark = createRailMark();\n\t\t\t\trailMark.style.height = `${rowPositionObject.rowHeight}px`;\n\t\t\t\trailMark.addEventListener('click', (event) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\n\t\t\t\t\tstore.commit('updateHoveredRowElement', rowPositionObject.element);\n\t\t\t\t});\n\n\t\t\t\t// add rail mark to row rail element\n\t\t\t\trowRailElement.appendChild(railMark);\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Calculate rail positions.\n\t\t *\n\t\t * This function will calculate main component position and also fill up rail with column marks.\n\t\t */\n\t\tconst calculateRailPositions = () => {\n\t\t\tconst currentTable = getCurrentTable();\n\n\t\t\tconst { width: tableWidth, height: tableHeight } = currentTable.getBoundingClientRect();\n\n\t\t\t// column rail position calculations\n\t\t\tconst columnRail = getColumnRail();\n\t\t\tconst { height: columnRailHeight } = columnRail.getBoundingClientRect();\n\t\t\tcolumnRail.style.top = `-${columnRailHeight}px`;\n\t\t\tcolumnRail.style.width = `${tableWidth}px`;\n\t\t\t// add rail marks to column rail\n\t\t\taddColumnMarksToRail(columnRail);\n\n\t\t\t// row rail position calculations\n\t\t\tconst rowRail = getRowRail();\n\t\t\tconst { width: rowRailWidth } = rowRail.getBoundingClientRect();\n\t\t\trowRail.style.left = `-${rowRailWidth}px`;\n\t\t\trowRail.style.height = `${tableHeight}px`;\n\t\t\t// add rail marks to column rail\n\t\t\taddRowMarksToRail(rowRail);\n\t\t};\n\n\t\t/**\n\t\t * Selecting an entire row operation handler.\n\t\t */\n\t\tconst selectRow = () => {\n\t\t\tconst currentActiveRow = store.getters.hoveredRow;\n\n\t\t\tif (currentActiveRow) {\n\t\t\t\tconst [first, ...rest] = Array.from(currentActiveRow.querySelectorAll('td'));\n\n\t\t\t\t// don't activate multi highlight for first element to clear any previous highlighted cell\n\t\t\t\thighlightCellLogic(first);\n\n\t\t\t\t// activate multi highlight for the rest\n\t\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\t\trest.map((cell) => {\n\t\t\t\t\thighlightCellLogic(cell, true);\n\t\t\t\t});\n\n\t\t\t\tstore.commit('setMenuSelectedTableElement', {\n\t\t\t\t\ttype: store.getters.types.selected.row,\n\t\t\t\t\titem: currentActiveRow,\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Select cells of an entire column.\n\t\t *\n\t\t * This function will use store index value to determine which column to use.\n\t\t */\n\t\tconst selectColumn = () => {\n\t\t\tconst { index } = store.getters.hoveredCell;\n\n\t\t\tif (index !== null) {\n\t\t\t\tconst [first, ...rest] = getCellsAtColumnIndex(index);\n\t\t\t\thighlightCellLogic(first);\n\t\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\t\trest.map((cell) => {\n\t\t\t\t\thighlightCellLogic(cell, true);\n\t\t\t\t});\n\n\t\t\t\tstore.commit('setMenuSelectedTableElement', {\n\t\t\t\t\ttype: store.getters.types.selected.column,\n\t\t\t\t\titem: [first, ...rest],\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Add a container that will contain row and column selectors.\n\t\t */\n\t\tconst addSelectorToolbox = () => {\n\t\t\t// main toolbox wrapper\n\t\t\tconst toolbox = document.createElement('div');\n\t\t\ttoolbox.classList.add('wptb-bg-color-selectors');\n\n\t\t\t// row rail\n\t\t\tconst rowRail = document.createElement('div');\n\t\t\trowRail.classList.add('wptb-bg-row-rail');\n\n\t\t\t// row selector\n\t\t\tconst rowSelector = document.createElement('div');\n\t\t\trowSelector.classList.add('wptb-row-selection', 'wptb-bg-selection-item');\n\t\t\trowSelector.title = 'Select row';\n\t\t\tWPTB_IconManager.getIcon('arrow-alt-circle-right', 'wptb-selector-icon-wrapper').then((icon) => {\n\t\t\t\trowSelector.appendChild(icon);\n\t\t\t});\n\n\t\t\t// column rail\n\t\t\tconst columnRail = document.createElement('div');\n\t\t\tcolumnRail.classList.add('wptb-bg-column-rail');\n\n\t\t\t// column selector\n\t\t\tconst colSelector = document.createElement('div');\n\t\t\tcolSelector.classList.add('wptb-col-selection', 'wptb-bg-selection-item');\n\t\t\tcolSelector.title = 'Select column';\n\t\t\tWPTB_IconManager.getIcon('arrow-alt-circle-down', 'wptb-selector-icon-wrapper').then((icon) => {\n\t\t\t\tcolSelector.appendChild(icon);\n\t\t\t});\n\n\t\t\t// add column selector click event\n\t\t\tcolSelector.addEventListener('click', (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tselectColumn();\n\t\t\t});\n\n\t\t\t// add row selector to column rail\n\t\t\trowRail.appendChild(rowSelector);\n\t\t\t// add column selector to column rail\n\t\t\tcolumnRail.appendChild(colSelector);\n\t\t\t// add column rail to toolbox\n\t\t\ttoolbox.appendChild(columnRail);\n\t\t\t// add row rail to toolbox\n\t\t\ttoolbox.appendChild(rowRail);\n\n\t\t\t// add toolbox element to its parent container\n\t\t\tdocument.querySelector('.wptb-builder-content .wptb-table-setup').appendChild(toolbox);\n\t\t};\n\n\t\t/**\n\t\t * Assign row select handlers for current table.\n\t\t */\n\t\tconst assignRowClickHandler = () => {\n\t\t\tconst rowSelector = getRowSelector();\n\n\t\t\trowSelector.addEventListener('click', (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tselectRow();\n\t\t\t});\n\n\t\t\tconst rows = Array.from(getCurrentTable().querySelectorAll('tr'));\n\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\trows.map((row) => {\n\t\t\t\trow.addEventListener('mouseenter', rowMouseEnter);\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Set visibility of selector toolbox.\n\t\t *\n\t\t * @param {boolean} visible visibility state\n\t\t */\n\t\tconst selectorToolboxVisibility = (visible = true) => {\n\t\t\tconst toolbox = getSelectorToolbox();\n\n\t\t\tif (toolbox) {\n\t\t\t\tgetSelectorToolbox().dataset.visible = visible;\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Remove row related event listeners and handlers\n\t\t */\n\t\tconst removeRowHandlers = () => {\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tArray.from(getCurrentTable().querySelectorAll('tr')).map((row) => {\n\t\t\t\t// remove event listener for each row element on table\n\t\t\t\trow.removeEventListener('mouseenter', rowMouseEnter);\n\t\t\t});\n\n\t\t\t// @deprecated\n\t\t\t// const rowSelector = getRowSelector();\n\t\t\t// if (rowSelector) {\n\t\t\t// \t// hide row selector element if any found\n\t\t\t// \trowSelector.classList.remove('wptb-bg-selection-visible');\n\t\t\t// }\n\n\t\t\t// clear up last hovered row element value\n\t\t\tstore.commit('updateHoveredRowElement', null);\n\t\t};\n\n\t\t/**\n\t\t * Assign cell click handlers to data cells.\n\t\t */\n\t\tconst assignCellClickHandlers = () => {\n\t\t\tconst cells = Array.from(getCurrentTable().querySelectorAll('td'));\n\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tcells.map((cell) => {\n\t\t\t\tcell.addEventListener('click', highlightCell);\n\t\t\t\tcell.addEventListener('mouseenter', cellMouseEnter);\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Remove cell click handlers from data cells.\n\t\t */\n\t\tconst removeCellHandlers = () => {\n\t\t\tconst cells = Array.from(getCurrentTable().querySelectorAll('td'));\n\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tcells.map((cell) => {\n\t\t\t\tcell.removeEventListener('click', highlightCell);\n\t\t\t\tcell.removeEventListener('mouseenter', cellMouseEnter);\n\t\t\t});\n\n\t\t\t// hide column selector element\n\t\t\tgetColumnSelector().classList.remove('wptb-bg-selection-visible');\n\t\t};\n\n\t\t/**\n\t\t * Clear specific states from store.\n\t\t */\n\t\tconst clearStates = () => {\n\t\t\tstore.dispatch('clearSelection');\n\t\t\tstore.dispatch('clearHoverStates');\n\t\t};\n\t\t/**\n\t\t * Clear out hover,edit active etc indicators that might have been stated on table.\n\t\t */\n\t\tconst clearTableIndicators = () => {\n\t\t\tconst currentTable = getCurrentTable();\n\n\t\t\t// remove active edit indicators\n\t\t\tArray.from(currentTable.querySelectorAll('.edit-active')).map((el) => {\n\t\t\t\tel.classList.remove('edit-active');\n\t\t\t});\n\n\t\t\t// hide element hover toolbox\n\t\t\tconst elementActionsToolbox = document.querySelector('.wptb-actions');\n\t\t\tif (elementActionsToolbox) {\n\t\t\t\telementActionsToolbox.style.display = 'none';\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Startup positions for selectors.\n\t\t */\n\t\tconst startUpPositionsForSelectors = () => {\n\t\t\t// start both column and row selectors at first row and first column\n\t\t\tstore.commit('updateHoveredCellElement', { element: null, index: 0 });\n\t\t\tstore.commit('updateHoveredRowElement', getCurrentTable().querySelector('tr'));\n\t\t};\n\n\t\t/**\n\t\t * Remove various event listeners and clear out states.\n\t\t */\n\t\tconst removeHandlersAndStates = () => {\n\t\t\tremoveCellHandlers();\n\t\t\tremoveRowHandlers();\n\t\t\tremoveHighlights();\n\t\t\tclearStates();\n\t\t};\n\n\t\t/**\n\t\t * Initialize hook for component.\n\t\t */\n\t\tthis.init = () => {\n\t\t\t// initialize background menu on correct section change\n\t\t\tdocument.addEventListener('wptbSectionChanged', ({ detail }) => {\n\t\t\t\t// only run setup once\n\t\t\t\tif (!this.initialized && detail === 'background_menu') {\n\t\t\t\t\tWPTB_ControlsManager.callControlScript('BackgroundMenu', 'wptb-background-menu');\n\t\t\t\t\tthis.initialized = true;\n\t\t\t\t}\n\n\t\t\t\tif (WPTB_Helper.getPreviousSection() !== 'background_menu' && detail === 'background_menu') {\n\t\t\t\t\tif (!getSelectorToolbox()) {\n\t\t\t\t\t\taddSelectorToolbox();\n\t\t\t\t\t}\n\n\t\t\t\t\tselectorToolboxVisibility(true);\n\n\t\t\t\t\tif (WPTB_Store.get('proStatus')) {\n\t\t\t\t\t\tassignCellClickHandlers();\n\t\t\t\t\t}\n\n\t\t\t\t\tassignRowClickHandler();\n\t\t\t\t\tclearTableIndicators();\n\t\t\t\t\tcalculateRailPositions();\n\t\t\t\t\tstartUpPositionsForSelectors();\n\t\t\t\t}\n\n\t\t\t\tif (WPTB_Helper.getPreviousSection() === 'background_menu' && detail !== 'background_menu') {\n\t\t\t\t\tselectorToolboxVisibility(false);\n\t\t\t\t\tremoveHandlersAndStates();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// reapply options after table changed events\n\t\t\tdocument.addEventListener('wp-table-builder/table-changed/after', () => {\n\t\t\t\tthis.applyOptions();\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Watch store mutations.\n\t\t *\n\t\t * @param {Object} suppliedStore store object\n\t\t */\n\t\t// eslint-disable-next-line no-shadow\n\t\tconst watchStoreMutations = (suppliedStore) => {\n\t\t\tsuppliedStore.subscribe(({ type, payload }) => {\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase 'updateHoveredRowElement':\n\t\t\t\t\t\tif (payload) {\n\t\t\t\t\t\t\t// update row selector position on hovered row element changes\n\t\t\t\t\t\t\trowSelectorPosition(payload);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'updateHoveredCellElement':\n\t\t\t\t\t\tcolumnSelectorPosition(payload.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t/**\n\t\t * Define a flux store for background menu.\n\t\t *\n\t\t * @param {Object} storeObject store object\n\t\t */\n\t\tthis.addStore = (storeObject) => {\n\t\t\tif (!store) {\n\t\t\t\tstore = storeObject;\n\t\t\t\twatchStoreMutations(store);\n\t\t\t}\n\t\t};\n\t}\n\n\t// create singleton instance for background menu component\n\tconst singletonInstance = new BackgroundMenu();\n\n\t// initialize background menu component\n\tsingletonInstance.init();\n\n\treturn singletonInstance;\n});\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('Content-type', 'application/x-www-form-urlencoded');\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 = document.getElementsByClassName('wptb-table-setup')[0];\n wptbTableSetupEl.appendChild( WPTB_Parser( ans[1] ) );\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( 'wptb-element-main-table_setting-' + table_id );\n }\n \n if( element.dataset.wptbTableContainerMaxWidth ) {\n wptbTableSetupEl.style.maxWidth = 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('wptb-table-generator')[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})();","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};","/**\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_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","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 * Extra styles module to add custom css rules defined for individual tables.\n */\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_ExtraStyles', self || global, () => {\n\t/**\n\t * Extra styles frontend manager.\n\t *\n\t * This component will be responsible for adding and maintaining extra styles defined for tables.\n\t *\n\t * @class\n\t */\n\t// eslint-disable-next-line camelcase\n\tfunction WPTB_ExtraStyles() {\n\t\t/**\n\t\t * Extra styles operation modes\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.modes = {\n\t\t\tbuilder: 'builder',\n\t\t\tfrontEnd: 'frontEnd',\n\t\t\tblock: 'block',\n\t\t};\n\n\t\t/**\n\t\t * Base document for DOM operations.\n\t\t *\n\t\t * @type {Document}\n\t\t */\n\t\tthis.baseDocument = document;\n\n\t\t/**\n\t\t * Current mode extra styles are operating on.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.currentMode = this.modes.builder;\n\n\t\t/**\n\t\t * General table styles.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tthis.generalStyles = '';\n\n\t\t/**\n\t\t * HTML queries for table element in different plugin modes\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tconst tableQueries = {\n\t\t\t[this.modes.builder]: '.wptb-table-setup .wptb-preview-table',\n\t\t\t[this.modes.block]: '.wptb-block-table-setup .wptb-preview-table',\n\t\t\t[this.modes.frontEnd]: '.wptb-table-container .wptb-preview-table',\n\t\t};\n\n\t\t/**\n\t\t * Format styles.\n\t\t *\n\t\t * @param {string} styles styles\n\t\t * @return {string} formatted styles\n\t\t */\n\t\tconst formatStyles = (styles) => {\n\t\t\t// remove all newlines, comments and '!important' from style string to make it a one liner\n\t\t\tconst cleaned = styles.replaceAll(/(\\r?\\n)|(\\/\\*.+?\\*\\/)|(\\s*!important)/g, '');\n\n\t\t\t// add '!important' to all rules to override default style rules\n\t\t\treturn cleaned.replaceAll(';', ' !important;');\n\t\t};\n\n\t\t/**\n\t\t * Reform style rules so they will only affect given table id.\n\t\t *\n\t\t * @param {number} prefix prefix string that will be added to all rules\n\t\t * @param {string} extraStyles extra styles\n\t\t * @return {string} new style properties prefixed with table id class\n\t\t */\n\t\tconst prefixStyleRules = (prefix, extraStyles) => {\n\t\t\t// reformat styles into a suitable form for our regexp operations\n\t\t\tconst formattedStyles = formatStyles(extraStyles);\n\n\t\t\tconst splitStyles = formattedStyles.split('}');\n\t\t\tconst prefixedStylesArray = [];\n\n\t\t\t// eslint-disable-next-line array-callback-return\n\t\t\tsplitStyles.map((split) => {\n\t\t\t\tconst regExp = new RegExp(/(.+?)\\{/g);\n\t\t\t\tconst matches = regExp.exec(split);\n\n\t\t\t\tif (matches) {\n\t\t\t\t\tprefixedStylesArray.push(split.replace(matches[1], `${prefix} ${matches[1]}`));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn `${prefixedStylesArray.join('}')}}`;\n\t\t};\n\n\t\t/**\n\t\t * Apply general styles to document.\n\t\t *\n\t\t * @param {string} generalStyles general style rules\n\t\t * @param {Node} baseElement element to use as base\n\t\t */\n\t\tconst applyGeneralStyles = (generalStyles, baseElement = null) => {\n\t\t\tconst generalStylesheet = document.createElement('style');\n\t\t\tgeneralStylesheet.type = 'text/css';\n\t\t\tgeneralStylesheet.id = 'wptb-general-styles';\n\n\t\t\tif (!baseElement) {\n\t\t\t\tconst head =\n\t\t\t\t\tthis.currentMode === this.modes.block ? this.baseDocument : this.baseDocument.querySelector('head');\n\n\t\t\t\thead.appendChild(generalStylesheet);\n\t\t\t} else {\n\t\t\t\tbaseElement.insertAdjacentElement('beforebegin', generalStylesheet);\n\t\t\t}\n\t\t\tconst prefixedStyleRules = prefixStyleRules(generalStyles.parentPrefix, generalStyles.styles);\n\t\t\tgeneralStylesheet.appendChild(document.createTextNode(prefixedStyleRules));\n\t\t};\n\n\t\t/**\n\t\t * Apply defined extra styles for given table element.\n\t\t *\n\t\t * @param {Element} tableElement table element\n\t\t */\n\t\tconst applyExtraStyle = (tableElement) => {\n\t\t\tconst extraStylesRaw = tableElement.dataset.wptbExtraStyles;\n\t\t\tconst styleIdPrefix = 'wptb-extra-styles-';\n\n\t\t\tif (extraStylesRaw) {\n\t\t\t\tconst extraStyles = atob(extraStylesRaw);\n\n\t\t\t\tconst [, tableId] = tableElement\n\t\t\t\t\t.getAttribute('class')\n\t\t\t\t\t.match(/wptb-element-main-table_setting-(?:startedid-)?(\\d+)/);\n\n\t\t\t\tconst styleId = styleIdPrefix + tableId;\n\n\t\t\t\tconst head = this.baseDocument.querySelector('head');\n\n\t\t\t\t// 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\t\t\t\tlet styleElement = head?.querySelector(`#${styleId}`);\n\n\t\t\t\t// if no style element is found, create one\n\t\t\t\tif (!styleElement) {\n\t\t\t\t\tstyleElement = document.createElement('style');\n\t\t\t\t\tstyleElement.type = 'text/css';\n\t\t\t\t\tstyleElement.id = styleId;\n\n\t\t\t\t\tconst isThemeStylesDisabled = tableElement.dataset.disableThemeStyles;\n\n\t\t\t\t\t// 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\t\t\t\t\tif (\n\t\t\t\t\t\t(isThemeStylesDisabled && this.currentMode === this.modes.frontEnd) ||\n\t\t\t\t\t\tthis.currentMode === this.modes.block\n\t\t\t\t\t) {\n\t\t\t\t\t\ttableElement.insertAdjacentElement('beforebegin', styleElement);\n\t\t\t\t\t\tif (this.currentMode === this.modes.frontEnd && this.generalStyles) {\n\t\t\t\t\t\t\tapplyGeneralStyles(this.generalStyles, tableElement);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\thead.appendChild(styleElement);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst uniqueClass = `.wptb-element-main-table_setting-${tableId}`;\n\t\t\t\t// reform style rules so they will only affect the table they are assigned to\n\t\t\t\tconst prefixedStyles = prefixStyleRules(uniqueClass, extraStyles);\n\n\t\t\t\t// remove previous styles with updated ones\n\t\t\t\tstyleElement.innerHTML = '';\n\t\t\t\tstyleElement.appendChild(document.createTextNode(prefixedStyles));\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Apply extra styles to all available tables on DOM.\n\t\t *\n\t\t * @param {string} mode operation mode to apply styles\n\t\t * @param {string} generalStyles general style rules\n\t\t * @param {Object} baseDocument base document for DOM operations\n\t\t */\n\t\tthis.applyStyles = (mode = this.modes.frontEnd, generalStyles = null, baseDocument = document) => {\n\t\t\tthis.baseDocument = baseDocument;\n\t\t\tthis.currentMode = mode;\n\t\t\tthis.generalStyles = generalStyles;\n\n\t\t\tconst allTables = Array.from(this.baseDocument.querySelectorAll(tableQueries[mode]));\n\n\t\t\tif (allTables) {\n\t\t\t\tallTables.map(applyExtraStyle);\n\t\t\t}\n\n\t\t\t// only apply general styles on client frontend if any general styles are defined\n\t\t\tif ((mode === this.modes.frontEnd || mode === this.modes.block) && generalStyles) {\n\t\t\t\tapplyGeneralStyles(generalStyles);\n\t\t\t}\n\t\t};\n\t}\n\n\t// send a singleton instance of manager\n\treturn 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","var WPTB_Helper = {\n\thexToRgb(hex) {\n\t\tconst result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\t\treturn result ? `rgb(${parseInt(result[1], 16)},${parseInt(result[2], 16)},${parseInt(result[3], 16)})` : null;\n\t},\n\trgbToHex(rgb) {\n\t\tif (rgb) {\n\t\t\tif (WPTB_Helper.isHex(rgb)) return rgb;\n\n\t\t\tlet rgbm = rgb.match(\n\t\t\t\t/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?((?:[0-9]*[.])?[0-9]+)[\\s+]?\\)/i\n\t\t\t);\n\t\t\tif (rgbm && rgbm.length === 5) {\n\t\t\t\treturn `#${`0${parseInt(rgbm[1], 10).toString(16).toUpperCase()}`.slice(-2)}${`0${parseInt(rgbm[2], 10)\n\t\t\t\t\t.toString(16)\n\t\t\t\t\t.toUpperCase()}`.slice(-2)}${`0${parseInt(rgbm[3], 10).toString(16).toUpperCase()}`.slice(\n\t\t\t\t\t-2\n\t\t\t\t)}${`0${Math.round(parseFloat(rgbm[4], 10) * 255)\n\t\t\t\t\t.toString(16)\n\t\t\t\t\t.toUpperCase()}`.slice(-2)}`;\n\t\t\t}\n\t\t\trgbm = rgb.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n\t\t\tif (rgbm && rgbm.length === 4) {\n\t\t\t\treturn `#${`0${parseInt(rgbm[1], 10).toString(16).toUpperCase()}`.slice(-2)}${`0${parseInt(rgbm[2], 10)\n\t\t\t\t\t.toString(16)\n\t\t\t\t\t.toUpperCase()}`.slice(-2)}${`0${parseInt(rgbm[3], 10).toString(16).toUpperCase()}`.slice(-2)}`;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t\treturn '';\n\t},\n\tisHex(hex) {\n\t\tconst regex = new RegExp('^#(?:[A-Fa-f0-9]{3}){1,2}(?:[0-9]?){1,2}$');\n\t\treturn regex.test(hex);\n\t},\n\tgetElementIcon(icon_directory) {\n\t\tconst hostName = `${location.protocol}//${location.hostname}`;\n\t\tconst img = document.createElement('img');\n\t\timg.src = icon_directory;\n\t\treturn img;\n\t},\n\telementDragEndClear() {\n\t\tconst wptbMovingMode = document.getElementsByClassName('wptb-moving-mode');\n\t\tif (wptbMovingMode.length > 0) {\n\t\t\tfor (let i = 0; i < wptbMovingMode.length; i++) {\n\t\t\t\twptbMovingMode[i].classList.remove('wptb-moving-mode');\n\t\t\t}\n\t\t}\n\n\t\tconst wptbDropHandles = document.getElementsByClassName('wptb-drop-handle');\n\t\tif (wptbDropHandles.length > 0) {\n\t\t\tfor (let i = 0; i < wptbDropHandles.length; i++) {\n\t\t\t\twptbDropHandles[i].style.display = 'none';\n\t\t\t}\n\t\t}\n\n\t\tconst wptbDropBorderMarkers = document.getElementsByClassName('wptb-drop-border-marker');\n\t\tif (wptbDropBorderMarkers.length > 0) {\n\t\t\tfor (let i = 0; i < wptbDropBorderMarkers.length; i++) {\n\t\t\t\twptbDropBorderMarkers[i].style.display = 'none';\n\t\t\t}\n\t\t}\n\t},\n\tlinkHttpCheckChange(link, convertToAbs = false) {\n\t\tif (link) {\n\t\t\t// 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\t\t\tif (link.match(/^(javascript:)(.+)$/)) {\n\t\t\t\treturn link;\n\t\t\t}\n\t\t\t// relative link checking\n\t\t\t// if link starts with '/', assume it is a relative link to the origin of the current site\n\t\t\tif (link.match(/^\\/([\\S]+)$/)) {\n\t\t\t\tif (convertToAbs) {\n\t\t\t\t\tconst currentLocation = document.location;\n\t\t\t\t\tlet { origin } = currentLocation;\n\n\t\t\t\t\t// strip out the '/' at the end of the origin name if there is any\n\t\t\t\t\tif (origin.match(/^(.+)\\/$/)) {\n\t\t\t\t\t\torigin = origin.slice(-1);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn `${origin}${link}`;\n\t\t\t\t}\n\t\t\t\treturn link;\n\t\t\t}\n\t\t\tif (link.indexOf('http://') == -1 && link.indexOf('https://') == -1) {\n\t\t\t\tconst linkArr = link.split('/');\n\t\t\t\tlet linkClean;\n\t\t\t\tif (Array.isArray(linkArr) && linkArr.length > 0) {\n\t\t\t\t\tlinkClean = linkArr[linkArr.length - 1];\n\t\t\t\t}\n\t\t\t\treturn `${document.location.protocol}//${linkClean}`;\n\t\t\t}\n\t\t\treturn link;\n\t\t}\n\t\treturn '';\n\t},\n\tdataTitleColumnSet(table) {\n\t\t// TODO dataTitleColumnSet\n\t\t// let rows = table.rows,\n\t\t// rowHead = rows[0];\n\t\t// let computedStyleRowHead = getComputedStyle( rowHead );\n\t\t//\n\t\t// let rowHeadChildren = rowHead.children;\n\t\t// let contentsForHeader = {};\n\t\t// for( let i = 0; i < rowHeadChildren.length; i++ ) {\n\t\t// let tdElements = rowHeadChildren[i].children;\n\t\t//\n\t\t// for( let j = 0; j < tdElements.length; j++ ) {\n\t\t// let element = tdElements[j];\n\t\t// if( element.classList.contains( 'wptb-ph-element' ) ) {\n\t\t// let infArr = element.className.match( /wptb-element-(.+)-(\\d+)/i );\n\t\t// if( infArr[1] == 'text' ) {\n\t\t// let p = element.querySelector( 'p' ),\n\t\t// textContent = p.textContent,\n\t\t// textAlign = p.style.textAlign;\n\t\t// contentsForHeader[rowHeadChildren[i].dataset.xIndex] = [textContent, element.style.fontSize,\n\t\t// element.style.color, computedStyleRowHead.backgroundColor, textAlign];\n\t\t// break;\n\t\t// }\n\t\t// }\n\t\t// }\n\t\t// if( ! contentsForHeader[rowHeadChildren[i].dataset.xIndex] ) {\n\t\t// contentsForHeader[rowHeadChildren[i].dataset.xIndex] = ['', '',\n\t\t// '', computedStyleRowHead.backgroundColor, ''];\n\t\t// }\n\t\t// }\n\t\t// for ( let i = 1; i < rows.length; i++ ) {\n\t\t// let thisRow = rows[i],\n\t\t// thisRowChildren = thisRow.children;\n\t\t// for( let j = 0; j < thisRowChildren.length; j++ ) {\n\t\t// if ( contentsForHeader[thisRowChildren[j].dataset.xIndex] ) {\n\t\t// thisRowChildren[j].dataset.wptbTitleColumn = contentsForHeader[thisRowChildren[j].dataset.xIndex][0];\n\t\t// thisRowChildren[j].dataset.wptbTitleColumnFontSize = contentsForHeader[thisRowChildren[j].dataset.xIndex][1];\n\t\t// thisRowChildren[j].dataset.wptbTitleColumnColor = contentsForHeader[thisRowChildren[j].dataset.xIndex][2];\n\t\t// thisRowChildren[j].dataset.wptbTitleBackgroundColor = contentsForHeader[thisRowChildren[j].dataset.xIndex][3];\n\t\t// thisRowChildren[j].dataset.wptbTitleAlign = contentsForHeader[thisRowChildren[j].dataset.xIndex][4];\n\t\t// } else {\n\t\t// thisRowChildren[j].dataset.wptbTitleColumn = null;\n\t\t// thisRowChildren[j].dataset.wptbTitleColumnFontSize = null;\n\t\t// thisRowChildren[j].dataset.wptbTitleColumnColor = null;\n\t\t// thisRowChildren[j].dataset.wptbTitleBackgroundColor = null;\n\t\t// thisRowChildren[j].dataset.wptbTitleAlign = null;\n\t\t// }\n\t\t// }\n\t\t// }\n\t},\n\tfindAncestor(el, cls) {\n\t\twhile ((el = el.parentElement) && !el.classList.contains(cls));\n\t\treturn el;\n\t},\n\trowIsTop(row) {\n\t\tconst parent = row.parentNode;\n\t\tif (parent.children[0] == row) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\tgetSelectionText() {\n\t\tlet txt = '';\n\t\tif ((txt = window.getSelection)) {\n\t\t\ttxt = window.getSelection().toString();\n\t\t} else {\n\t\t\ttxt = document.selection.createRange().text;\n\t\t}\n\t\treturn txt;\n\t},\n\telementOptionsPanelClear() {\n\t\tconst elementOptionsGroup = document.getElementById('element-options-group');\n\t\tif (elementOptionsGroup) {\n\t\t\telementOptionsGroup.innerHTML = '';\n\t\t}\n\t},\n\twpColorPickerCheckChangeForTableStateSaving(event) {\n\t\tif (event.originalEvent.type == 'external') {\n\t\t\tconst wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n\t\t\twptbTableStateSaveManager.tableStateSet();\n\t\t} else {\n\t\t\tconst wpPickerContainer = WPTB_Helper.findAncestor(event.target, 'wp-picker-container');\n\t\t\tif (wpPickerContainer) {\n\t\t\t\tif (event.originalEvent.type == 'square' || event.originalEvent.type == 'strip') {\n\t\t\t\t\tconst body = document.getElementsByTagName('body')[0];\n\t\t\t\t\tbody.removeEventListener('mouseup', WPTB_Helper.irisStripMouseUpStateSaveManager, false);\n\t\t\t\t\tbody.addEventListener('mouseup', WPTB_Helper.irisStripMouseUpStateSaveManager, false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tirisStripMouseUpStateSaveManager() {\n\t\tconst wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n\t\twptbTableStateSaveManager.tableStateSet();\n\n\t\tconst body = document.getElementsByTagName('body')[0];\n\t\tbody.removeEventListener('mouseup', WPTB_Helper.irisStripMouseUpStateSaveManager, false);\n\t},\n\twpColorPickerClear(attribute, isId) {\n\t\tlet input;\n\t\tif (isId) {\n\t\t\tinput = [document.getElementById(attribute)];\n\t\t\tinput.length = 1;\n\t\t} else {\n\t\t\tinput = document.getElementsByClassName(attribute);\n\t\t}\n\t\tfor (let i = 0; i < input.length; i++) {\n\t\t\tconst wpPickerContainer = WPTB_Helper.findAncestor(input[i], 'wp-picker-container');\n\t\t\tif (wpPickerContainer) {\n\t\t\t\tconst parent = wpPickerContainer.parentNode;\n\t\t\t\tparent.removeChild(wpPickerContainer);\n\t\t\t\tconst newInput = document.createElement('input');\n\t\t\t\tif (isId) {\n\t\t\t\t\tnewInput.setAttribute('id', attribute);\n\t\t\t\t} else {\n\t\t\t\t\tnewInput.classList.add('wptb-element-property', attribute);\n\t\t\t\t}\n\t\t\t\tnewInput.value = '';\n\t\t\t\tparent.appendChild(newInput);\n\t\t\t}\n\t\t}\n\t},\n\tdetectMode() {\n\t\tconst url = window.location.href;\n\t\tconst regex = new RegExp('[?&]table(=([^&#]*)|&|#|$)');\n\t\tconst results = regex.exec(url);\n\t\tif (!results) return false;\n\t\tif (!results[2]) return '';\n\t\treturn decodeURIComponent(results[2].replace(/\\+/g, ' '));\n\t},\n\tgetTableId() {\n\t\tlet tableId = WPTB_Helper.detectMode();\n\t\tif (!tableId) {\n\t\t\ttableId = 'startedid-0';\n\t\t}\n\n\t\treturn tableId;\n\t},\n\tgetColumnWidth(table, cell) {\n\t\tconst { xIndex } = cell.dataset;\n\t\tconst xIndexes = table.querySelectorAll(`[data-x-index=\"${xIndex}\"]`);\n\t\tlet cellWidth = cell.getCellDimensions().width;\n\t\tfor (let i = 0; i < xIndexes.length; i++) {\n\t\t\tif (cellWidth > xIndexes[i].getCellDimensions().width) {\n\t\t\t\tcellWidth = xIndexes[i].getCellDimensions().width;\n\t\t\t}\n\t\t}\n\t\treturn cellWidth;\n\t},\n\tgetRowHeight(table, cell) {\n\t\tconst { yIndex } = cell.dataset;\n\t\tconst yIndexes = table.querySelectorAll(`[data-y-index=\"${yIndex}\"]`);\n\t\tlet cellHeight = cell.getCellDimensions().height;\n\t\tfor (let i = 0; i < yIndexes.length; i++) {\n\t\t\tif (cellHeight > yIndexes[i].getCellDimensions().height) {\n\t\t\t\tcellHeight = yIndexes[i].getCellDimensions().height;\n\t\t\t}\n\t\t}\n\t\treturn cellHeight;\n\t},\n\tnewElementProxy(el) {\n\t\tif (el) {\n\t\t\tconst data = { kind: el };\n\t\t\treturn new WPTB_ElementObject(data);\n\t\t}\n\t},\n\twpColorPickerChange(event, ui) {\n\t\tlet uiColor;\n\t\tif (ui) {\n\t\t\tuiColor = ui.color.toString();\n\t\t} else {\n\t\t\tuiColor = '';\n\t\t}\n\n\t\tconst parent = WPTB_Helper.findAncestor(event.target, 'wp-picker-input-wrap').getElementsByClassName(\n\t\t\t'wptb-color-picker'\n\t\t)[0];\n\t\tlet classe;\n\t\tlet type;\n\t\tlet ps;\n\t\tlet number;\n\t\tclasse = parent.dataset.element.match(/wptb-options-(.+)-(\\d+)/i);\n\t\ttype = classe[1];\n\t\tnumber = classe[2];\n\t\tconst affectedEl = document.getElementsByClassName(`wptb-element-${type}-${number}`)[0];\n\t\tif (type == 'button') {\n\t\t\tif (parent.dataset.type == 'button-text-color') {\n\t\t\t\taffectedEl.getElementsByClassName('wptb-button')[0].style.color = uiColor;\n\t\t\t} else {\n\t\t\t\taffectedEl.getElementsByClassName('wptb-button')[0].style.backgroundColor = uiColor;\n\t\t\t}\n\t\t} else if (type == 'list') {\n\t\t\tconst ps = affectedEl.querySelectorAll('p');\n\t\t\tif (ps.length > 0) {\n\t\t\t\tfor (let i = 0; i < ps.length; i++) {\n\t\t\t\t\tps[i].style.color = uiColor;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (type == 'star_rating') {\n\t\t\tif (parent.dataset.type == 'star-color') {\n\t\t\t\tconst ratingStar = affectedEl.querySelectorAll('li');\n\t\t\t\tfor (let i = 0; i < ratingStar.length; i++) {\n\t\t\t\t\tconst span = ratingStar[i].getElementsByTagName('span');\n\t\t\t\t\tfor (let j = 0; j < span.length; j++) {\n\t\t\t\t\t\tspan[j].style.fill = uiColor;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (parent.dataset.type == 'numeral-rating-color') {\n\t\t\t\tconst wptbTextMessageSize = affectedEl.querySelector('.wptb-number-rating');\n\t\t\t\twptbTextMessageSize.style.color = uiColor;\n\t\t\t}\n\t\t} else {\n\t\t\taffectedEl.style.color = uiColor;\n\t\t}\n\t},\n\tnumberImputSize(wptbNumberInputs, maxCount, maxValue) {\n\t\twptbNumberInputs.onkeydown = function () {\n\t\t\tlet thisValue = this.value;\n\t\t\tthisValue = String(thisValue);\n\t\t\tif (thisValue[0] == 0) {\n\t\t\t\tthis.value = '';\n\t\t\t} else {\n\t\t\t\tthisValue = thisValue.substring(0, maxCount);\n\t\t\t\tthis.value = thisValue;\n\t\t\t}\n\t\t};\n\t\twptbNumberInputs.onkeyup = function () {\n\t\t\tconst thisValue = this.value;\n\t\t\tif (parseInt(thisValue, 10) > parseInt(maxValue, 10)) {\n\t\t\t\tthis.value = maxValue;\n\t\t\t}\n\n\t\t\tconst wptbTableStateSaveManager = new WPTB_TableStateSaveManager();\n\t\t\twptbTableStateSaveManager.tableStateSet();\n\t\t};\n\t},\n\tucfirst(str) {\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1);\n\t},\n\twptbDocumentEventGenerate(eventName, element, details) {\n\t\tif (eventName && element) {\n\t\t\tif (!details) {\n\t\t\t\tdetails = true;\n\t\t\t}\n\t\t\tconst event = new CustomEvent(eventName, { detail: details, bubbles: true });\n\t\t\telement.dispatchEvent(event);\n\t\t}\n\t},\n\t// run script for the pointed element\n\telementStartScript(element, kind) {\n\t\t// let script = element.getElementsByTagName( 'script' );\n\t\tif (!kind) {\n\t\t\tconst infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\tkind = infArr[1];\n\t\t\t}\n\t\t}\n\n\t\tif (kind) {\n\t\t\t// let wpTemplateId = 'wptb-' + kind + '-script';\n\t\t\t// let template = wp.template( wpTemplateId );\n\t\t\t// let data = {elemClass: infArr[0]};\n\t\t\t// let elementScriptText = template( data );\n\t\t\t// elementScriptText = elementScriptText.replace(/\\r|\\n|\\t/g, '').trim();\n\t\t\t//\n\t\t\t// let scriptNew = document.createElement( 'script' );\n\t\t\t// scriptNew.setAttribute( 'type', 'text/javascript' );\n\t\t\t// scriptNew.innerHTML = elementScriptText;\n\t\t\t// element.parentNode.appendChild( scriptNew );\n\n\t\t\t// element.parentNode.removeChild( scriptNew );\n\t\t\tif (kind in WPTB_ElementsScriptsLauncher) {\n\t\t\t\tconst elementIdMatch = element.getAttribute('class').match(/(wptb-element-\\D+-\\d+\\b)/);\n\t\t\t\tconst elementId = elementIdMatch ? elementIdMatch[0] : null;\n\t\t\t\tWPTB_ElementsScriptsLauncher[kind](element, elementId);\n\t\t\t}\n\t\t}\n\t},\n\t// deletes event handlers from the pointed option element and from all his daughter elements\n\tdeleteEventHandlers(element) {\n\t\tif (element) {\n\t\t\tjQuery(element).off();\n\t\t\tconst elementChildren = element.children;\n\t\t\tif (elementChildren) {\n\t\t\t\tfor (let i = 0; i < elementChildren.length; i++) {\n\t\t\t\t\tWPTB_Helper.deleteEventHandlers(elementChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t}\n\t},\n\t// replace all occurrences in a string\n\treplaceAll(string, search, replace) {\n\t\treturn string.split(search).join(replace);\n\t},\n\t// clears code from TinyMCE attributes\n\telementClearFromTinyMce(element) {\n\t\tconst mceContentBodys = element.querySelectorAll('.mce-content-body');\n\t\tif (mceContentBodys.length > 0) {\n\t\t\tfor (let k = 0; k < mceContentBodys.length; k++) {\n\t\t\t\tmceContentBodys[k].classList.remove('mce-content-body');\n\t\t\t}\n\t\t}\n\n\t\tconst dataMceStyle = element.querySelectorAll('[data-mce-style]');\n\t\tif (dataMceStyle.length > 0) {\n\t\t\tfor (let k = 0; k < dataMceStyle.length; k++) {\n\t\t\t\tdataMceStyle[k].removeAttribute('data-mce-style');\n\t\t\t}\n\t\t}\n\n\t\tconst mceEditFocus = element.querySelectorAll('.mce-edit-focus');\n\t\tif (mceEditFocus.length > 0) {\n\t\t\tfor (let k = 0; k < mceEditFocus.length; k++) {\n\t\t\t\tmceEditFocus[k].classList.remove('mce-edit-focus');\n\t\t\t}\n\t\t}\n\n\t\tconst contentEditable = element.querySelectorAll('[contenteditable]');\n\t\tif (contentEditable.length > 0) {\n\t\t\tfor (let k = 0; k < contentEditable.length; k++) {\n\t\t\t\tcontentEditable[k].removeAttribute('contenteditable');\n\t\t\t}\n\t\t}\n\n\t\tconst spellCheck = element.querySelectorAll('[spellcheck]');\n\t\tif (spellCheck.length > 0) {\n\t\t\tfor (let k = 0; k < spellCheck.length; k++) {\n\t\t\t\tspellCheck[k].removeAttribute('spellcheck');\n\t\t\t}\n\t\t}\n\n\t\tconst mceIds = element.querySelectorAll('[id^=mce_]');\n\t\tif (mceIds.length > 0) {\n\t\t\tfor (let k = 0; k < mceIds.length; k++) {\n\t\t\t\tmceIds[k].removeAttribute('id');\n\t\t\t}\n\t\t}\n\n\t\treturn element;\n\t},\n\telementOptionContainerCustomClassSet(targetInput, customClassForContainer) {\n\t\tif (targetInput && customClassForContainer) {\n\t\t\tconst containerElement = WPTB_Helper.findAncestor(targetInput, 'wptb-element-option');\n\t\t\tif (containerElement) {\n\t\t\t\tcontainerElement.classList.add(customClassForContainer);\n\t\t\t}\n\t\t}\n\t},\n\telementOptionContainerAdditionalStyles(targetInput, containerAdditionalStyles) {\n\t\tif (targetInput && containerAdditionalStyles) {\n\t\t\tconst containerElement = WPTB_Helper.findAncestor(targetInput, 'wptb-element-option');\n\t\t\tconst containerStylesArrOne = containerAdditionalStyles.split(';');\n\n\t\t\tif (containerElement && containerStylesArrOne) {\n\t\t\t\tfunction containerStylesSet(containerStyleStr, containerElement) {\n\t\t\t\t\tif (containerStyleStr) {\n\t\t\t\t\t\tcontainerStyleStrArr = containerStyleStr.split(':');\n\n\t\t\t\t\t\tif (containerStyleStrArr && Array.isArray(containerStyleStrArr)) {\n\t\t\t\t\t\t\tcontainerElement.style[containerStyleStrArr[0]] = containerStyleStrArr[1];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (containerStylesArrOne && Array.isArray(containerStylesArrOne)) {\n\t\t\t\t\tfor (let i = 0; i < containerStylesArrOne.length; i++) {\n\t\t\t\t\t\tif (containerStylesArrOne[i]) {\n\t\t\t\t\t\t\tcontainerStylesSet(containerStylesArrOne[i], containerElement);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcontainerStylesSet(containerStylesArrOne, containerElement);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t// function which set handler for event of changes of control\n\tcontrolsInclude(element, functionHandler, acceptEventValues = false) {\n\t\tif (element && typeof element === 'object' && typeof functionHandler === 'function') {\n\t\t\telement.addEventListener(\n\t\t\t\t'element:controls:active',\n\t\t\t\tfunction () {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!element.hasOwnProperty('controlConnectFunctionsName') ||\n\t\t\t\t\t\t!Array.isArray(element.controlConnectFunctionsName) ||\n\t\t\t\t\t\telement.controlConnectFunctionsName.indexOf(functionHandler.name) == -1\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n\t\t\t\t\t\tlet elementKind;\n\n\t\t\t\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\t\t\t\telementKind = infArr[1];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// if( ! element.hasOwnProperty( 'сontrolsConnectIndic' ) || element.сontrolsConnectIndic !== true && elementKind ) {\n\t\t\t\t\t\t// let elementsSettingsTemplateJs = document.getElementsByClassName( 'wptb-element-datas' );\n\t\t\t\t\t\t// if( elementsSettingsTemplateJs.length > 0 ) {\n\t\t\t\t\t\t// elementsSettingsTemplateJs = elementsSettingsTemplateJs[0];\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// let elementsSettings = elementsSettingsTemplateJs.innerHTML;\n\t\t\t\t\t\t// let controlClassesNames = [];\n\t\t\t\t\t\t// if( elementsSettings ) {\n\t\t\t\t\t\t// elementsSettings = elementsSettings.trim();\n\t\t\t\t\t\t// elementsSettings = JSON.parse( elementsSettings );\n\t\t\t\t\t\t// if( elementsSettings && typeof elementsSettings === 'object' ) {\n\t\t\t\t\t\t// if( 'tmpl-wptb-el-datas-' + infArr[1] + '-' + infArr[2] in elementsSettings ) {\n\t\t\t\t\t\t// let elementSettings = elementsSettings['tmpl-wptb-el-datas-' + infArr[1] + '-' + infArr[2]];\n\t\t\t\t\t\t// if( elementSettings && typeof elementSettings === 'object' ) {\n\t\t\t\t\t\t// Object.keys( elementSettings ).forEach( function( key ) {\n\t\t\t\t\t\t// let regularText = new RegExp( 'data-wptb-el-' + elementKind + '-(\\\\d+)-([a-zA-Z0-9_-]+)', \"i\" );\n\t\t\t\t\t\t// let keyInfArr = key.match( regularText );\n\t\t\t\t\t\t// if( keyInfArr && Array.isArray( keyInfArr ) ) {\n\t\t\t\t\t\t// let controlClass = key.replace( 'data-', '' );\n\t\t\t\t\t\t// controlClassesNames.push( [controlClass, keyInfArr[2]] );\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t// });\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t// }\n\t\t\t\t\t\tif (elementKind) {\n\t\t\t\t\t\t\tconst elementOptionsGroupIds = element.optionsGroupIds;\n\t\t\t\t\t\t\tif (elementOptionsGroupIds && Array.isArray(elementOptionsGroupIds)) {\n\t\t\t\t\t\t\t\tfor (let i = 0; i < elementOptionsGroupIds.length; i++) {\n\t\t\t\t\t\t\t\t\tconst elementOptionsGroupId = elementOptionsGroupIds[i];\n\n\t\t\t\t\t\t\t\t\tconst elementOptionsGroup = document.getElementById(elementOptionsGroupId);\n\n\t\t\t\t\t\t\t\t\tlet controlActiveElements = elementOptionsGroup.querySelectorAll(\n\t\t\t\t\t\t\t\t\t\t'.wptb-element-property'\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tcontrolActiveElements = [...controlActiveElements];\n\n\t\t\t\t\t\t\t\t\tcontrolActiveElements.map((controlActiveElement) => {\n\t\t\t\t\t\t\t\t\t\tconst regularText = new RegExp(\n\t\t\t\t\t\t\t\t\t\t\t`wptb-el-${elementKind}-(\\\\d+)-([a-zA-Z0-9_-]+)`,\n\t\t\t\t\t\t\t\t\t\t\t'i'\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tconst controlInfArr = controlActiveElement.className.match(regularText);\n\t\t\t\t\t\t\t\t\t\tif (controlInfArr && Array.isArray(controlInfArr)) {\n\t\t\t\t\t\t\t\t\t\t\tconst controlUnicClassName = controlInfArr[0];\n\n\t\t\t\t\t\t\t\t\t\t\telement.addEventListener(\n\t\t\t\t\t\t\t\t\t\t\t\t`wptb-control:${controlUnicClassName}`,\n\t\t\t\t\t\t\t\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst controls = {};\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst controlName = controlInfArr[2];\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst control = document.getElementsByClassName(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrolUnicClassName\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (control.length > 0 && controlName) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst targetControlValue = WPTB_Helper.targetControlValueGet(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrol\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (acceptEventValues) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrols[controlName] = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttargetValue: targetControlValue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\teventValue: e.detail.value,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcontrols[controlName] = targetControlValue;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfunctionHandler(controls, element);\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// let elementOptionsContainer = document.querySelector( '.wptb-element-options.wptb-options-' + infArr[1] + '-' + infArr[2] );\n\n\t\t\t\t\t\t\t// 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\t\t\t\t\t\t\t// if(!elementOptionsContainer){\n\t\t\t\t\t\t\t// return;\n\t\t\t\t\t\t\t// }\n\n\t\t\t\t\t\t\t// let elementOptions = elementOptionsContainer.querySelectorAll( '.wptb-element-option' );\n\t\t\t\t\t\t\t// let controlActiveElements = elementOptions[i].querySelector( '.wptb-element-property' );\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// for( let i = 0; i < elementOptions.length; i++ ) {\n\t\t\t\t\t\t\t// let controlActiveElement = elementOptions[i].querySelector( '.wptb-element-property' );\n\t\t\t\t\t\t\t// if( controlActiveElement ) {\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// }\n\t\t\t\t\t\t\t// }\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t!element.controlConnectFunctionsName &&\n\t\t\t\t\t\t\t\t!Array.isArray(element.controlConnectFunctionsName)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\telement.controlConnectFunctionsName = [];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\telement.controlConnectFunctionsName.push(functionHandler.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\t},\n\toneControlInclude(element, functionHandler, controlName) {\n\t\tif (\n\t\t\telement &&\n\t\t\ttypeof element === 'object' &&\n\t\t\ttypeof functionHandler === 'function' &&\n\t\t\ttypeof controlName === 'string'\n\t\t) {\n\t\t\tconst infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n\t\t\tlet elementKind;\n\n\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\telementKind = infArr[1].split('-')[0];\n\n\t\t\t\tconst wptbContrlStacksConfigId = `wptb-${elementKind}-control-stack`;\n\t\t\t\tconst tmplControlsConfig = wp.template(wptbContrlStacksConfigId);\n\t\t\t\tconst data = {\n\t\t\t\t\tcontainer: `.${infArr[0]}`,\n\t\t\t\t};\n\t\t\t\tconst jsonControlsConfigJson = tmplControlsConfig(data);\n\t\t\t\tconst jsonControlsConfig = JSON.parse(jsonControlsConfigJson);\n\n\t\t\t\tif (\n\t\t\t\t\tjsonControlsConfig &&\n\t\t\t\t\ttypeof jsonControlsConfig === 'object' &&\n\t\t\t\t\tjsonControlsConfig.hasOwnProperty(controlName)\n\t\t\t\t) {\n\t\t\t\t\tconst controlClassName = `wptb-el-${infArr[1]}-${controlName}`;\n\n\t\t\t\t\telement.addEventListener(\n\t\t\t\t\t\t`wptb-control:${controlClassName}`,\n\t\t\t\t\t\tfunction (event) {\n\t\t\t\t\t\t\tconst control = document.getElementsByClassName(controlClassName);\n\t\t\t\t\t\t\tif (control.length > 0) {\n\t\t\t\t\t\t\t\tconst targetControlValue = WPTB_Helper.targetControlValueGet(control);\n\n\t\t\t\t\t\t\t\tfunctionHandler(targetControlValue, element);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfalse\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t},\n\t//\n\tinnerElementCopyIncludeHandler(element, functionHandler) {\n\t\tif (element && typeof element === 'object' && typeof functionHandler === 'function') {\n\t\t\telement.addEventListener(\n\t\t\t\t'wptb-inner-element:copy',\n\t\t\t\tfunction (event) {\n\t\t\t\t\tconst innerElement = event.detail;\n\t\t\t\t\tif (innerElement) {\n\t\t\t\t\t\tWPTB_Helper.elementClearFromTinyMce(innerElement);\n\t\t\t\t\t\tfunctionHandler(innerElement, element);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\t},\n\t/**\n\t * Sets the control elements when changing which to will restart this control\n\t *\n\t * @param {Array} dependOnControlName\n\t * @param {string} targetControlElementClass\n\t * @param {Array} valueDependOnControlCorrect\n\t * @param {string} kind\n\t * @param {HTMLElement} element\n\t */\n\tvalueDependOnControl(dependOnControlName, targetControlElementClass, valueDependOnControlCorrect, kind, element) {\n\t\tfunction dependOnControlDataGet(dependOnControlName, targetControlElementClass, valueDependOnControlCorrect) {\n\t\t\tif (typeof dependOnControlName === 'string') {\n\t\t\t\tdependOnControlName = [dependOnControlName];\n\t\t\t}\n\t\t\tconst infArr = targetControlElementClass.match(/wptb-el-((.+-)\\d+)-(.+)/i);\n\t\t\tconst valueDependOnControl = {};\n\t\t\tconst dependOnControlElementsArr = [];\n\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\tconst controlName = infArr[3];\n\t\t\t\tlet dependOnControlElements;\n\t\t\t\tconst valueDependOnControlCorrectObj = {};\n\t\t\t\tif (Array.isArray(valueDependOnControlCorrect)) {\n\t\t\t\t\tif (Array.isArray(valueDependOnControlCorrect[0])) {\n\t\t\t\t\t\tvalueDependOnControlCorrect.map((s) => {\n\t\t\t\t\t\t\tvalueDependOnControlCorrectObj[s[0]] = [s[1], s[2]];\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueDependOnControlCorrectObj[valueDependOnControlCorrect[0]] = [\n\t\t\t\t\t\t\tvalueDependOnControlCorrect[1],\n\t\t\t\t\t\t\tvalueDependOnControlCorrect[2],\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdependOnControlName.map((s) => {\n\t\t\t\t\tconst dependOnControlElementClass = targetControlElementClass.replace(controlName, s);\n\t\t\t\t\tif (dependOnControlElementClass) {\n\t\t\t\t\t\tdependOnControlElements = document.getElementsByClassName(dependOnControlElementClass);\n\t\t\t\t\t\tif (dependOnControlElements.length > 0 && dependOnControlElements[0].type) {\n\t\t\t\t\t\t\tvalueDependOnControl[s] = dependOnControlElements[0].value;\n\t\t\t\t\t\t\tif (s in valueDependOnControlCorrectObj) {\n\t\t\t\t\t\t\t\tif (valueDependOnControlCorrectObj[s][1] === 'integer') {\n\t\t\t\t\t\t\t\t\tvalueDependOnControl[s] =\n\t\t\t\t\t\t\t\t\t\tparseInt(valueDependOnControl[s]) +\n\t\t\t\t\t\t\t\t\t\tparseInt(valueDependOnControlCorrectObj[s][0]);\n\t\t\t\t\t\t\t\t} else if (valueDependOnControlCorrectObj[s][1] === 'string') {\n\t\t\t\t\t\t\t\t\tvalueDependOnControl[s] =\n\t\t\t\t\t\t\t\t\t\tvalueDependOnControl[s] + valueDependOnControlCorrectObj[s][0];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdependOnControlElementsArr.push(dependOnControlElements[0]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn [valueDependOnControl, dependOnControlElementsArr];\n\t\t}\n\n\t\tconst dependOnControlData = dependOnControlDataGet(\n\t\t\tdependOnControlName,\n\t\t\ttargetControlElementClass,\n\t\t\tvalueDependOnControlCorrect\n\t\t);\n\t\tWPTB_Helper.elementOptionsSet(kind, element, dependOnControlData[0], targetControlElementClass);\n\n\t\tObject.keys(dependOnControlData[0]).forEach(function (key) {\n\t\t\tconst infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n\t\t\tconst unicClass = `wptb-el-${infArr[1]}-${[key]}`;\n\t\t\telement.addEventListener(\n\t\t\t\t`wptb-control:${unicClass}`,\n\t\t\t\tfunction (event) {\n\t\t\t\t\tconst dependOnControlData = dependOnControlDataGet(\n\t\t\t\t\t\tdependOnControlName,\n\t\t\t\t\t\ttargetControlElementClass,\n\t\t\t\t\t\tvalueDependOnControlCorrect\n\t\t\t\t\t);\n\t\t\t\t\tWPTB_Helper.elementOptionsSet(kind, element, dependOnControlData[0], targetControlElementClass);\n\t\t\t\t},\n\t\t\t\tfalse\n\t\t\t);\n\t\t});\n\t},\n\t/**\n\t * Sets the visibility of one control to depend on the state of other controls\n\t *\n\t * @param dependOnMain\n\t * @param targetControlElementClass\n\t */\n\tappearDependOnControl(dependOnMain, targetControlElementClass) {\n\t\tif (Array.isArray(dependOnMain)) {\n\t\t\tif (typeof dependOnMain[0] === 'string') {\n\t\t\t\tdependOnMain = [dependOnMain];\n\t\t\t} else if (!Array.isArray(dependOnMain[0])) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst dependOnControlElementsValue = {};\n\t\t\tfor (let i = 0; i < dependOnMain.length; i++) {\n\t\t\t\tconst dependOn = dependOnMain[i];\n\t\t\t\tconst dependOnControlName = dependOn[0];\n\t\t\t\tconst infArr = targetControlElementClass.match(/wptb-el-((.+-)\\d+)-(.+)/i);\n\n\t\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\t\tconst controlName = infArr[3];\n\n\t\t\t\t\tconst dependOnControlElementClass = targetControlElementClass.replace(\n\t\t\t\t\t\tcontrolName,\n\t\t\t\t\t\tdependOnControlName\n\t\t\t\t\t);\n\t\t\t\t\tif (dependOnControlElementClass) {\n\t\t\t\t\t\tconst dependOnControlElements = document.getElementsByClassName(dependOnControlElementClass);\n\t\t\t\t\t\tif (dependOnControlElements.length > 0) {\n\t\t\t\t\t\t\tdependOnControlElementsValue[dependOn[0]] = [\n\t\t\t\t\t\t\t\tdependOnControlElementValue(dependOnControlElements, dependOn),\n\t\t\t\t\t\t\t\tdependOnControlElements,\n\t\t\t\t\t\t\t\tdependOn,\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}\n\t\t\t}\n\n\t\t\tconst targetControlElements = document.getElementsByClassName(targetControlElementClass);\n\t\t\tif (targetControlElements.length > 0) {\n\t\t\t\tconst targetControlElement = targetControlElements[0];\n\t\t\t\tconst controlContainerElem = WPTB_Helper.findAncestor(targetControlElement, 'wptb-element-option');\n\n\t\t\t\tif (controlContainerElem) {\n\t\t\t\t\tshowHideTargetControlElement(controlContainerElem, dependOnControlElementsValue);\n\n\t\t\t\t\tObject.keys(dependOnControlElementsValue).map((k) => {\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(dependOnControlElementsValue, k)) {\n\t\t\t\t\t\t\tconst dependOnControlElements = dependOnControlElementsValue[k][1];\n\t\t\t\t\t\t\tconst dependOnControlElement = dependOnControlElements[0];\n\t\t\t\t\t\t\tdependOnControlElement.addEventListener(\n\t\t\t\t\t\t\t\t'change',\n\t\t\t\t\t\t\t\tdependOnControlElementChangeHandler,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction dependOnControlElementChangeHandler(event) {\n\t\t\t\t\t\t\tconst dependOn = dependOnControlElementsValue[k][2];\n\t\t\t\t\t\t\tconst dependOnControlElements = dependOnControlElementsValue[k][1];\n\t\t\t\t\t\t\tdependOnControlElementsValue[dependOn[0]] = [\n\t\t\t\t\t\t\t\tdependOnControlElementValue(dependOnControlElements, dependOn),\n\t\t\t\t\t\t\t\tdependOnControlElements,\n\t\t\t\t\t\t\t\tdependOn,\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tshowHideTargetControlElement(controlContainerElem, dependOnControlElementsValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction showHideTargetControlElement(controlContainerElem, dependOnControlElementsValue) {\n\t\t\t\tlet display = 'block';\n\t\t\t\tlet targetControlInactiveVal;\n\t\t\t\tObject.keys(dependOnControlElementsValue).map((k) => {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(dependOnControlElementsValue, k)) {\n\t\t\t\t\t\tif (dependOnControlElementsValue[k][0] === false) {\n\t\t\t\t\t\t\tdisplay = 'none';\n\t\t\t\t\t\t\tif (dependOnControlElementsValue[k][2][3]) {\n\t\t\t\t\t\t\t\ttargetControlInactiveVal = dependOnControlElementsValue[k][2][3];\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});\n\n\t\t\t\tif (controlContainerElem.style.display !== display) {\n\t\t\t\t\tcontrolContainerElem.style.display = display;\n\n\t\t\t\t\tif (display === 'none' && targetControlInactiveVal) {\n\t\t\t\t\t\ttargetControlElements[0].dataset.controlActiveVal = WPTB_Helper.targetControlValueGet(\n\t\t\t\t\t\t\ttargetControlElements\n\t\t\t\t\t\t);\n\t\t\t\t\t\tWPTB_Helper.targetControlValueGet(targetControlElements, targetControlInactiveVal);\n\t\t\t\t\t} else if (display === 'block' && targetControlElements[0].dataset.controlActiveVal) {\n\t\t\t\t\t\tWPTB_Helper.targetControlValueGet(\n\t\t\t\t\t\t\ttargetControlElements,\n\t\t\t\t\t\t\ttargetControlElements[0].dataset.controlActiveVal\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction dependOnControlElementValue(dependOnControlElements, dependOn) {\n\t\t\t\tconst targetControlValue = WPTB_Helper.targetControlValueGet(dependOnControlElements);\n\n\t\t\t\tlet returnBool = false;\n\t\t\t\tfor (let i = 1; i <= 2; i++) {\n\t\t\t\t\tif (dependOn[i] && Array.isArray(dependOn[i])) {\n\t\t\t\t\t\tlet coincided;\n\t\t\t\t\t\tlet hasNumberAnyParams = false;\n\t\t\t\t\t\tfor (let j = 0; j < dependOn[i].length; j++) {\n\t\t\t\t\t\t\tif (typeof dependOn[i][j] === 'string' && dependOn[i][j].indexOf('numberAny >') !== -1) {\n\t\t\t\t\t\t\t\thasNumberAnyParams = true;\n\t\t\t\t\t\t\t\tconst xNum = parseInt(dependOn[i][j].match(/\\d+/));\n\t\t\t\t\t\t\t\tif (targetControlValue > xNum) {\n\t\t\t\t\t\t\t\t\tcoincided = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcoincided = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\ttypeof dependOn[i][j] === 'string' &&\n\t\t\t\t\t\t\t\tdependOn[i][j].indexOf('numberAny <') !== -1\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\thasNumberAnyParams = true;\n\t\t\t\t\t\t\t\tconst xNum = parseInt(dependOn[i][j].match(/\\d+/));\n\t\t\t\t\t\t\t\tif (targetControlValue < xNum) {\n\t\t\t\t\t\t\t\t\tcoincided = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcoincided = false;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (dependOn[i][j] === targetControlValue) {\n\t\t\t\t\t\t\t\tcoincided = true;\n\t\t\t\t\t\t\t\tif (!hasNumberAnyParams) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (coincided && i === 1) {\n\t\t\t\t\t\t\treturnBool = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else if (coincided && i === 2) {\n\t\t\t\t\t\t\treturnBool = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn returnBool;\n\t\t\t}\n\t\t}\n\t},\n\t//\n\n\t/**\n\t * Switch toggle\n\t *\n\t * @param dataToggleSwitch\n\t * @param targetControlElementClass\n\t */\n\ttoggleSwitch(dataToggleSwitch, targetControlElementClass) {\n\t\tif (Array.isArray(dataToggleSwitch)) {\n\t\t\tif (dataToggleSwitch[1] && typeof dataToggleSwitch[1] === 'object') {\n\t\t\t\tconst dependOnParams = dataToggleSwitch[1];\n\t\t\t\tconst toggleSwitchExec = false;\n\t\t\t\tObject.keys(dependOnParams).map((k) => {\n\t\t\t\t\tconst dependOnValue = dependOnParams[k];\n\n\t\t\t\t\tconst infArr = targetControlElementClass.match(/wptb-el-((.+-)\\d+)-(.+)/i);\n\n\t\t\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\t\t\tconst controlName = infArr[3];\n\n\t\t\t\t\t\tconst dependOnControlElementClass = targetControlElementClass.replace(controlName, k);\n\t\t\t\t\t\tif (dependOnControlElementClass) {\n\t\t\t\t\t\t\tconst dependOnControlElements = document.getElementsByClassName(\n\t\t\t\t\t\t\t\tdependOnControlElementClass\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (dependOnControlElements.length > 0) {\n\t\t\t\t\t\t\t\tconst dependOnControlElement = dependOnControlElements[0];\n\t\t\t\t\t\t\t\tdependOnControlElement.addEventListener(\n\t\t\t\t\t\t\t\t\t'change',\n\t\t\t\t\t\t\t\t\ttoggleSwitchExecuteCheckRun.bind(null, dependOnControlElementClass, dependOnValue),\n\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t);\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});\n\n\t\t\t\tif (toggleSwitchExec) {\n\t\t\t\t\ttoggleSwitchExecute();\n\t\t\t\t}\n\t\t\t\tfunction toggleSwitchExecuteCheckRun(dependOnControlElementClass, dependOnValue) {\n\t\t\t\t\tif (dependOnControlElementClass) {\n\t\t\t\t\t\tconst dependOnControlElements = document.getElementsByClassName(dependOnControlElementClass);\n\t\t\t\t\t\tif (dependOnControlElements.length > 0) {\n\t\t\t\t\t\t\tconst targetControlValue = WPTB_Helper.targetControlValueGet(dependOnControlElements);\n\n\t\t\t\t\t\t\tif (targetControlValue === dependOnValue) {\n\t\t\t\t\t\t\t\ttoggleSwitchExecute();\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}\n\t\t\t\tfunction toggleSwitchExecute() {\n\t\t\t\t\tconst elems = document.getElementsByClassName(targetControlElementClass);\n\t\t\t\t\tif (elems.length && WPTB_Helper.targetControlValueGet(elems) !== dataToggleSwitch[0]) {\n\t\t\t\t\t\tif (dataToggleSwitch[0] === 'unchecked') {\n\t\t\t\t\t\t\telems[0].checked = false;\n\t\t\t\t\t\t} else if (dataToggleSwitch[0] === 'checked') {\n\t\t\t\t\t\t\telems[0].checked = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (dataToggleSwitch[2] === undefined || dataToggleSwitch[2] === true) {\n\t\t\t\t\t\t\tWPTB_Helper.wptbDocumentEventGenerate('change', elems[0], { eventType: 'toggleSwitch' });\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\t},\n\t//\n\tcontrolsStateManager(targetControlClass, controlChangeIndic) {\n\t\tconst targetControls = document.getElementsByClassName(targetControlClass);\n\t\tif (targetControls.length > 0) {\n\t\t\t// targetControls = targetControls[0];\n\n\t\t\tconst infArr = targetControlClass.match(/wptb-el-((.+-)\\d+)-(.+)/i);\n\n\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\tlet selectorElement;\n\t\t\t\tselectorElement = document.querySelector(`.wptb-element-${infArr[1]}`);\n\n\t\t\t\tif (selectorElement) {\n\t\t\t\t\tlet elementsSettingsTemplatesJs;\n\t\t\t\t\tconst elementSettings = {};\n\t\t\t\t\tlet elementsSettings;\n\t\t\t\t\telementsSettingsTemplatesJs = document.getElementsByClassName('wptb-element-datas');\n\t\t\t\t\tif (elementsSettingsTemplatesJs.length == 0 || elementsSettingsTemplatesJs[0].innerHTML == '') {\n\t\t\t\t\t\tconst targetControlValue = WPTB_Helper.targetControlValueGet(targetControls);\n\t\t\t\t\t\telementSettings[`data-${targetControlClass}`] = targetControlValue;\n\n\t\t\t\t\t\telementsSettings = {};\n\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] = elementSettings;\n\t\t\t\t\t\telementsSettings = JSON.stringify(elementsSettings);\n\n\t\t\t\t\t\tif (elementsSettingsTemplatesJs.length == 0) {\n\t\t\t\t\t\t\telementsSettingsTemplatesJs = document.createElement('script');\n\t\t\t\t\t\t\telementsSettingsTemplatesJs.setAttribute('type', 'text/html');\n\t\t\t\t\t\t\telementsSettingsTemplatesJs.setAttribute('class', 'wptb-element-datas');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telementsSettingsTemplatesJs = elementsSettingsTemplatesJs[0];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\telementsSettingsTemplatesJs.innerHTML = elementsSettings;\n\n\t\t\t\t\t\tconst body = document.getElementsByTagName('body')[0];\n\t\t\t\t\t\tbody.appendChild(elementsSettingsTemplatesJs);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementsSettingsTemplatesJs = elementsSettingsTemplatesJs[0];\n\t\t\t\t\t\telementsSettings = elementsSettingsTemplatesJs.innerHTML;\n\t\t\t\t\t\tif (elementsSettings) {\n\t\t\t\t\t\t\telementsSettings = elementsSettings.trim();\n\t\t\t\t\t\t\telementsSettings = JSON.parse(elementsSettings);\n\n\t\t\t\t\t\t\tif (elementsSettings && typeof elementsSettings === 'object') {\n\t\t\t\t\t\t\t\tif (controlChangeIndic) {\n\t\t\t\t\t\t\t\t\tconst targetControlValue = WPTB_Helper.targetControlValueGet(targetControls);\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t!(`tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings) ||\n\t\t\t\t\t\t\t\t\t\ttypeof elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] !== 'object'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] = {};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n\t\t\t\t\t\t\t\t\t\t`data-${targetControlClass}`\n\t\t\t\t\t\t\t\t\t] = targetControlValue;\n\t\t\t\t\t\t\t\t\telementsSettingsTemplatesJs.innerHTML = JSON.stringify(elementsSettings);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\t`tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings &&\n\t\t\t\t\t\t\t\t\t\ttypeof elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] === 'object' &&\n\t\t\t\t\t\t\t\t\t\t`data-${targetControlClass}` in\n\t\t\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`]\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tconst targetControlValue = WPTB_Helper.targetControlValueGet(targetControls);\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t!(`tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings) ||\n\t\t\t\t\t\t\t\t\t\ttypeof elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] !== 'object'\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] = {};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n\t\t\t\t\t\t\t\t\t\t`data-${targetControlClass}`\n\t\t\t\t\t\t\t\t\t] = targetControlValue;\n\t\t\t\t\t\t\t\t\telementsSettingsTemplatesJs.innerHTML = JSON.stringify(elementsSettings);\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t`tmpl-wptb-el-datas-${infArr[1]}` in elementsSettings &&\n\t\t\t\t\t\t\t\t\ttypeof elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`] === 'object' &&\n\t\t\t\t\t\t\t\t\t`data-${targetControlClass}` in elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`]\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tfor (let i = 0; i < targetControls.length; i++) {\n\t\t\t\t\t\t\t\t\t\tif (targetControls[i].type == 'checkbox') {\n\t\t\t\t\t\t\t\t\t\t\tlet targetControlValue;\n\t\t\t\t\t\t\t\t\t\t\tif (targetControls[i].name) {\n\t\t\t\t\t\t\t\t\t\t\t\ttargetControlValue =\n\t\t\t\t\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`data-${targetControlClass}`\n\t\t\t\t\t\t\t\t\t\t\t\t\t][targetControls[i].name];\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\ttargetControlValue =\n\t\t\t\t\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t`data-${targetControlClass}`\n\t\t\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\tif (targetControlValue == 'checked') {\n\t\t\t\t\t\t\t\t\t\t\t\ttargetControls[i].checked = true;\n\t\t\t\t\t\t\t\t\t\t\t} else if (targetControlValue == 'unchecked') {\n\t\t\t\t\t\t\t\t\t\t\t\ttargetControls[i].checked = false;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\ttargetControls[i].value =\n\t\t\t\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}`][\n\t\t\t\t\t\t\t\t\t\t\t\t\t`data-${targetControlClass}`\n\t\t\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\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}\n\t\t\t}\n\t\t}\n\t},\n\t//\n\ttargetControlValueGet(targetControls, val) {\n\t\tlet targetControlValue;\n\t\tfor (let i = 0; i < targetControls.length; i++) {\n\t\t\tif (targetControls[i].type == 'checkbox' && targetControls[i].name) {\n\t\t\t\tif (val) {\n\t\t\t\t\tif (val === 'checked') {\n\t\t\t\t\t\ttargetControls[i].checked = true;\n\t\t\t\t\t} else if (val === 'unchecked') {\n\t\t\t\t\t\ttargetControls[i].checked = false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!targetControlValue) targetControlValue = {};\n\t\t\t\t\tif (targetControls[i].checked == true) {\n\t\t\t\t\t\ttargetControlValue[targetControls[i].name] = 'checked';\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttargetControlValue[targetControls[i].name] = 'unchecked';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (targetControls[i].type == 'checkbox') {\n\t\t\t\tif (val) {\n\t\t\t\t\tif (val === 'checked') {\n\t\t\t\t\t\ttargetControls[i].checked = true;\n\t\t\t\t\t} else if (val === 'unchecked') {\n\t\t\t\t\t\ttargetControls[i].checked = false;\n\t\t\t\t\t}\n\t\t\t\t} else if (targetControls[i].checked == true) {\n\t\t\t\t\ttargetControlValue = 'checked';\n\t\t\t\t} else {\n\t\t\t\t\ttargetControlValue = 'unchecked';\n\t\t\t\t}\n\t\t\t} else if (targetControls[i].type) {\n\t\t\t\tif (val) {\n\t\t\t\t\ttargetControls[i].value = val;\n\t\t\t\t} else {\n\t\t\t\t\ttargetControlValue = targetControls[i].value;\n\t\t\t\t}\n\t\t\t} else if (targetControls[i].dataset.alignmentValue && targetControls[i].classList.contains('selected')) {\n\t\t\t\tif (val) {\n\t\t\t\t\ttargetControls[i].dataset.alignmentValue = val;\n\t\t\t\t} else {\n\t\t\t\t\ttargetControlValue = targetControls[i].dataset.alignmentValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn targetControlValue;\n\t},\n\t//\n\telementControlsStateCopy(elementProt, copyElem) {\n\t\tif (elementProt && copyElem) {\n\t\t\tconst infArrProt = elementProt.className.match(/wptb-element-((.+-)\\d+)/i);\n\t\t\tconst infArrCopy = copyElem.className.match(/wptb-element-((.+-)\\d+)/i);\n\t\t\tif (infArrProt && Array.isArray(infArrProt) && infArrCopy && Array.isArray(infArrCopy)) {\n\t\t\t\tconst elemProtKind = infArrProt[1];\n\t\t\t\tconst elemCopyKind = infArrCopy[1];\n\t\t\t\tlet elementsSettingsTemplateJs = document.getElementsByClassName('wptb-element-datas');\n\t\t\t\tif (elementsSettingsTemplateJs.length > 0) {\n\t\t\t\t\telementsSettingsTemplateJs = elementsSettingsTemplateJs[0];\n\n\t\t\t\t\tlet elementsSettings = elementsSettingsTemplateJs.innerHTML;\n\t\t\t\t\tif (elementsSettings) {\n\t\t\t\t\t\telementsSettings = elementsSettings.trim();\n\t\t\t\t\t\telementsSettings = JSON.parse(elementsSettings);\n\n\t\t\t\t\t\tif (elementsSettings && typeof elementsSettings === 'object') {\n\t\t\t\t\t\t\tconst elementSettingsProt = elementsSettings[`tmpl-wptb-el-datas-${elemProtKind}`];\n\t\t\t\t\t\t\tif (elementSettingsProt && typeof elementSettingsProt === 'object') {\n\t\t\t\t\t\t\t\tconst elementSettingsCopy = {};\n\n\t\t\t\t\t\t\t\tObject.keys(elementSettingsProt).forEach(function (key) {\n\t\t\t\t\t\t\t\t\tconst elementSettingValue = elementSettingsProt[key];\n\t\t\t\t\t\t\t\t\tconst elementSettingKeyCopy = key.replace(elemProtKind, elemCopyKind);\n\t\t\t\t\t\t\t\t\telementSettingsCopy[elementSettingKeyCopy] = elementSettingValue;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (Object.keys(elementSettingsCopy).length > 0) {\n\t\t\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${elemCopyKind}`] = elementSettingsCopy;\n\n\t\t\t\t\t\t\t\t\telementsSettings = JSON.stringify(elementsSettings);\n\t\t\t\t\t\t\t\t\telementsSettingsTemplateJs.innerHTML = elementsSettings;\n\t\t\t\t\t\t\t\t}\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}\n\t\t\t}\n\t\t}\n\t},\n\t//\n\telementControlsStateDelete(element, nameControl) {\n\t\tconst infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n\t\tconst body = document.getElementsByTagName('body')[0];\n\t\tlet wptbElementDatas = body.getElementsByClassName('wptb-element-datas');\n\t\tif (infArr && Array.isArray(infArr) && wptbElementDatas.length > 0) {\n\t\t\twptbElementDatas = wptbElementDatas[0];\n\t\t\tlet elementsSettings = wptbElementDatas.innerHTML;\n\t\t\tif (elementsSettings) {\n\t\t\t\telementsSettings = elementsSettings.trim();\n\t\t\t\telementsSettings = JSON.parse(elementsSettings);\n\t\t\t\tif (\n\t\t\t\t\telementsSettings &&\n\t\t\t\t\ttypeof elementsSettings === 'object' &&\n\t\t\t\t\t`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}` in elementsSettings\n\t\t\t\t) {\n\t\t\t\t\tif (!nameControl) {\n\t\t\t\t\t\tdelete elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`];\n\t\t\t\t\t} else if (\n\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`] &&\n\t\t\t\t\t\ttypeof elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`] === 'object' &&\n\t\t\t\t\t\t`data-wptb-el-${infArr[1]}-${infArr[2]}-${nameControl}` in\n\t\t\t\t\t\t\telementsSettings[`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`]\n\t\t\t\t\t) {\n\t\t\t\t\t\tdelete elementsSettings[`tmpl-wptb-el-datas-${infArr[1]}-${infArr[2]}`][\n\t\t\t\t\t\t\t`data-wptb-el-${infArr[1]}-${infArr[2]}-${nameControl}`\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Object.keys(elementsSettings).length == 0) {\n\t\t\t\t\t\tbody.removeChild(wptbElementDatas);\n\t\t\t\t\t} else {\n\t\t\t\t\t\telementsSettings = JSON.stringify(elementsSettings);\n\t\t\t\t\t\twptbElementDatas.innerHTML = elementsSettings;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tactiveElement: null,\n\telementOptionsSet(kind, element, valueDependOnControl, targetControlElementClass) {\n\t\tconst elementIdClassMatch = element.getAttribute('class').match(/(?<elementId>wptb-element-.+-\\d+)/);\n\t\tconst id = element.getAttribute('id');\n\t\tlet cellId = null;\n\n\t\t// prepare cell id if element is a table cell\n\t\tif (element.getAttribute('class').includes('wptb-cell')) {\n\t\t\tconst { xIndex, yIndex } = element.dataset;\n\t\t\tcellId = `cell_${xIndex}-${yIndex}`;\n\t\t}\n\n\t\tconst elementIdClass = elementIdClassMatch ? elementIdClassMatch.groups.elementId : null;\n\n\t\t// use class match or id of target element for option set identification\n\t\tconst decisiveAttr = elementIdClass || id || cellId || null;\n\n\t\tif (decisiveAttr && this.activeElement !== decisiveAttr) {\n\t\t\tthis.activeElement = decisiveAttr;\n\n\t\t\tWPTB_Helper.wptbDocumentEventGenerate('element:controls:prepare', element);\n\n\t\t\t// get controls config for this element\n\t\t\tconst wptbContrlStacksConfigId = `wptb-${kind}-control-stack`;\n\t\t\tconst tmplControlsConfig = wp.template(wptbContrlStacksConfigId);\n\t\t\tlet data;\n\t\t\tlet elementContainerClass;\n\t\t\tlet elementOptionClassIndic;\n\t\t\tlet elementOptionsGroup;\n\n\t\t\tlet controlElementParent;\n\t\t\tlet elementOptionsScriptsContainer;\n\n\t\t\tlet infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n\t\t\tif (!infArr) {\n\t\t\t\tlet table_id = WPTB_Helper.detectMode();\n\t\t\t\tif (!table_id) {\n\t\t\t\t\ttable_id = 'startedid-0';\n\t\t\t\t}\n\t\t\t\tif (element.classList.contains('wptb-preview-table')) {\n\t\t\t\t\telement.classList.add(`wptb-element-main-table_setting-${table_id}`);\n\t\t\t\t} else if (element.classList.contains('wptb-cell')) {\n\t\t\t\t\tconst cellEditActiveClass = document.querySelector(\n\t\t\t\t\t\t`.wptb-element-table_cell_setting-${element.dataset.xIndex}-${element.dataset.yIndex}`\n\t\t\t\t\t);\n\t\t\t\t\tif (!cellEditActiveClass)\n\t\t\t\t\t\telement.classList.add(\n\t\t\t\t\t\t\t`wptb-element-table_cell_setting-${element.dataset.xIndex}-${element.dataset.yIndex}`\n\t\t\t\t\t\t);\n\t\t\t\t} else if (element.classList.contains('wptb-responsive')) {\n\t\t\t\t\t// 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\t\t\t\t\tif (table_id.startsWith('wptb_team')) {\n\t\t\t\t\t\ttable_id = 'startedid-0';\n\t\t\t\t\t}\n\t\t\t\t\telement.classList.add(`wptb-element-table_responsive_setting-${table_id}`);\n\t\t\t\t}\n\n\t\t\t\tinfArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n\t\t\t} else {\n\t\t\t\tWPTB_Helper.editActionClassRemove();\n\t\t\t\telement.classList.add('edit-active');\n\t\t\t}\n\n\t\t\tdata = {\n\t\t\t\tcontainer: `.${infArr[0]}`,\n\t\t\t};\n\t\t\tlet controlName;\n\t\t\tdata.valueDependOnControl = {};\n\t\t\tif (valueDependOnControl) {\n\t\t\t\tObject.keys(valueDependOnControl).forEach(function (key) {\n\t\t\t\t\tdata.valueDependOnControl[key] = valueDependOnControl[key];\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (targetControlElementClass) {\n\t\t\t\tconst infArr = targetControlElementClass.match(/wptb-el-((.+-)\\d+)-(.+)/i);\n\n\t\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\t\tcontrolName = infArr[3];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telementContainerClass = infArr[0];\n\t\t\telementOptionClassIndic = infArr[1];\n\n\t\t\tif (element.classList.contains('wptb-preview-table')) {\n\t\t\t} else if (element.classList.contains('wptb-cell')) {\n\t\t\t\tthis.activateSection('cell_settings');\n\t\t\t} else if (element.classList.contains('wptb-responsive')) {\n\t\t\t\telementOptionsGroupId = 'table-responsive-group';\n\t\t\t\twptbelementOptionClass = 'wptb-element-option';\n\t\t\t} else {\n\t\t\t\tconst children = document.getElementById('element-options-group').childNodes;\n\t\t\t\tfor (let i = 0; i < children.length; i++) {\n\t\t\t\t\tif (children[i].style) children[i].style.display = 'none';\n\t\t\t\t}\n\t\t\t\tthis.activateSection('options_group');\n\t\t\t}\n\n\t\t\tconst controlsConfigJson = tmplControlsConfig(data);\n\t\t\tlet controlsConfig = JSON.parse(controlsConfigJson);\n\n\t\t\tconst elementOptionsGroupIdsInvolved = [];\n\t\t\tconst elementOptionsGroupInvolved = {};\n\t\t\tconst elementOptionsContainerInvolved = {};\n\n\t\t\t// object for save all scrips for each controls\n\t\t\tconst controlScriptsObj = {};\n\n\t\t\t// array for keep \"appear depend on\" params\n\t\t\tconst controlappearDependOnControl = [];\n\n\t\t\t// array for keep \"toggle switch\" params\n\t\t\tconst controltoggleSwitch = [];\n\n\t\t\t// array for keep \"value depend on\" params\n\t\t\tconst controlValueDependOnControl = [];\n\n\t\t\t// create controls\n\t\t\tconst elementOptionsScriptsContainerIndic = false;\n\t\t\tif (controlName) {\n\t\t\t\tconst controlsConfigNew = {};\n\t\t\t\tcontrolsConfigNew[controlName] = controlsConfig[controlName];\n\t\t\t\tcontrolsConfig = controlsConfigNew;\n\t\t\t}\n\t\t\tlet i = 0;\n\t\t\tObject.keys(controlsConfig).forEach(function (key) {\n\t\t\t\tconst data = controlsConfig[key];\n\t\t\t\tdata.controlKey = key;\n\n\t\t\t\t// get necessary wp js template\n\t\t\t\tconst tmplControlTemplate = wp.template(`wptb-${data.type}-control`);\n\n\t\t\t\tdata.elemContainer = elementContainerClass;\n\t\t\t\tdata.elementControlTargetUnicClass = `wptb-el-${elementOptionClassIndic}-${data.controlKey}`;\n\t\t\t\tObject.keys(data).map((k) => {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(data, k) && data[k] === 'control_param_calculate_value') {\n\t\t\t\t\t\tdata[k] = WPTB_Helper.controlParamCalculateValue(data.elementControlTargetUnicClass, k);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tconst controlTemplate = tmplControlTemplate(data);\n\t\t\t\tif ('appearDependOnControl' in data) {\n\t\t\t\t\tif (Array.isArray(data.appearDependOnControl)) {\n\t\t\t\t\t\tcontrolappearDependOnControl.push([\n\t\t\t\t\t\t\tdata.appearDependOnControl,\n\t\t\t\t\t\t\tdata.elementControlTargetUnicClass,\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ('toggleSwitch' in data) {\n\t\t\t\t\tif (Array.isArray(data.toggleSwitch)) {\n\t\t\t\t\t\tcontroltoggleSwitch.push([data.toggleSwitch, data.elementControlTargetUnicClass]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ('valueDependOnControl' in data && !valueDependOnControl && !targetControlElementClass) {\n\t\t\t\t\tlet valueDependOnControlCorrect = '';\n\t\t\t\t\tif (data.valueDependOnControlCorrect)\n\t\t\t\t\t\tvalueDependOnControlCorrect = data.valueDependOnControlCorrect;\n\t\t\t\t\tcontrolValueDependOnControl.push([\n\t\t\t\t\t\tdata.valueDependOnControl,\n\t\t\t\t\t\tdata.elementControlTargetUnicClass,\n\t\t\t\t\t\tvalueDependOnControlCorrect,\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\tfunction elementOptionsContainerInvolvedGet(elementOptionsGroupId, elementOptionsContainerInvolved) {\n\t\t\t\t\tif (!elementOptionsContainerInvolved[elementOptionsGroupId]) {\n\t\t\t\t\t\tconst elementOptionsContainer = document.createElement('div');\n\t\t\t\t\t\telementOptionsContainer.classList.add('wptb-element-options', `wptb-options-${infArr[1]}`);\n\t\t\t\t\t\tdocument.getElementById(elementOptionsGroupId).appendChild(elementOptionsContainer);\n\t\t\t\t\t\telementOptionsContainerInvolved[elementOptionsGroupId] = elementOptionsContainer;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn elementOptionsContainerInvolved[elementOptionsGroupId];\n\t\t\t\t}\n\n\t\t\t\tif (elementOptionsGroupIdsInvolved.indexOf(data.elementOptionsGroupId) == -1 && !controlName) {\n\t\t\t\t\telementOptionsGroupIdsInvolved.push(data.elementOptionsGroupId);\n\t\t\t\t\t// clear elements from options group\n\t\t\t\t\t// document.getElementById( 'element-options-group' ).innerHTML = '';\n\t\t\t\t\telementOptionsGroup = document.getElementById(data.elementOptionsGroupId);\n\t\t\t\t\tconst elementOptionsGroupChildren = [...elementOptionsGroup.children];\n\t\t\t\t\tfor (let i = 0; i < elementOptionsGroupChildren.length; i++) {\n\t\t\t\t\t\telementOptionsGroup.removeChild(elementOptionsGroupChildren[i]);\n\t\t\t\t\t}\n\t\t\t\t\telementOptionsGroupInvolved[data.elementOptionsGroupId] = elementOptionsGroup;\n\t\t\t\t}\n\n\t\t\t\tcontrolElementParent = elementOptionsGroupInvolved[data.elementOptionsGroupId];\n\n\t\t\t\tif (data.elementOptionsContainerOn === 'true' && !controlName) {\n\t\t\t\t\tcontrolElementParent = elementOptionsContainerInvolvedGet(\n\t\t\t\t\t\tdata.elementOptionsGroupId,\n\t\t\t\t\t\telementOptionsContainerInvolved\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (data.elementOptionContainerOn === 'true') {\n\t\t\t\t\tconst elementOptionContainer = document.createElement('div');\n\t\t\t\t\telementOptionContainer.classList.add(data.elementOptionClass, 'wptb-settings-items');\n\n\t\t\t\t\tif (data.customClassForContainer) {\n\t\t\t\t\t\telementOptionContainer.classList.add(data.customClassForContainer);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data.containerAdditionalStyles) {\n\t\t\t\t\t\telementOptionContainer.setAttribute('style', data.containerAdditionalStyles);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (targetControlElementClass) {\n\t\t\t\t\t\tlet targetControlElement = document.getElementsByClassName(targetControlElementClass);\n\t\t\t\t\t\tif (targetControlElement.length > 0) {\n\t\t\t\t\t\t\ttargetControlElement = targetControlElement[0];\n\t\t\t\t\t\t\tconst controlContainerElem = WPTB_Helper.findAncestor(\n\t\t\t\t\t\t\t\ttargetControlElement,\n\t\t\t\t\t\t\t\t'wptb-element-option'\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (controlContainerElem) {\n\t\t\t\t\t\t\t\tconst controlContainerElemParent = controlContainerElem.parentNode;\n\t\t\t\t\t\t\t\tcontrolContainerElemParent.insertBefore(elementOptionContainer, controlContainerElem);\n\t\t\t\t\t\t\t\tcontrolContainerElemParent.removeChild(controlContainerElem);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontrolElementParent.appendChild(elementOptionContainer);\n\t\t\t\t\t}\n\t\t\t\t\tcontrolElementParent = elementOptionContainer;\n\t\t\t\t}\n\t\t\t\tcontrolElementParent.innerHTML += controlTemplate;\n\n\t\t\t\tlet helperJavascriptElem = controlElementParent.getElementsByTagName('wptb-template-script');\n\t\t\t\tif (helperJavascriptElem.length > 0) {\n\t\t\t\t\thelperJavascriptElem = helperJavascriptElem[0];\n\t\t\t\t\tconst helperJavascriptCode = helperJavascriptElem.innerText;\n\t\t\t\t\tcontrolElementParent.removeChild(helperJavascriptElem);\n\t\t\t\t\tconst script = document.createElement('script');\n\t\t\t\t\tscript.setAttribute('type', 'text/javascript');\n\t\t\t\t\tscript.setAttribute('id', `${kind}-${data.controlKey}`);\n\t\t\t\t\tscript.innerHTML = helperJavascriptCode.replace(/\\r|\\n|\\t/g, '').trim();\n\t\t\t\t\tif (\n\t\t\t\t\t\t!controlScriptsObj[data.elementOptionsGroupId] ||\n\t\t\t\t\t\t!Array.isArray(controlScriptsObj[data.elementOptionsGroupId])\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontrolScriptsObj[data.elementOptionsGroupId] = [];\n\t\t\t\t\t}\n\t\t\t\t\tcontrolScriptsObj[data.elementOptionsGroupId].push(script);\n\t\t\t\t}\n\n\t\t\t\ti++;\n\t\t\t});\n\n\t\t\telement.optionsGroupIds = elementOptionsGroupIdsInvolved;\n\n\t\t\t// run the scripts of controls\n\t\t\tObject.keys(controlScriptsObj).forEach(function (elementOptionsGroupId) {\n\t\t\t\tif (!targetControlElementClass) {\n\t\t\t\t\telementOptionsScriptsContainer = document.createElement('div');\n\t\t\t\t\telementOptionsScriptsContainer.classList.add(\n\t\t\t\t\t\t'wptb-element-options-scripts',\n\t\t\t\t\t\t`wptb-options-${infArr[1]}`\n\t\t\t\t\t);\n\t\t\t\t\telementOptionsGroupInvolved[elementOptionsGroupId].appendChild(elementOptionsScriptsContainer);\n\t\t\t\t}\n\n\t\t\t\tconst controlScriptsArr = controlScriptsObj[elementOptionsGroupId];\n\t\t\t\tif (controlScriptsArr.length > 0) {\n\t\t\t\t\tfor (let i = 0; i < controlScriptsArr.length; i++) {\n\t\t\t\t\t\tif (targetControlElementClass) {\n\t\t\t\t\t\t\tconst id = `${kind}-${controlName}`;\n\t\t\t\t\t\t\tconst script = document.getElementById(id);\n\t\t\t\t\t\t\telementOptionsScriptsContainer = script.parentNode;\n\t\t\t\t\t\t\telementOptionsScriptsContainer.insertBefore(controlScriptsArr[i], script);\n\t\t\t\t\t\t\telementOptionsScriptsContainer.removeChild(script);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telementOptionsScriptsContainer.appendChild(controlScriptsArr[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// run toggleSwitch function\n\t\t\tfor (let i = 0; i < controltoggleSwitch.length; i++) {\n\t\t\t\tWPTB_Helper.toggleSwitch(controltoggleSwitch[i][0], controltoggleSwitch[i][1]);\n\t\t\t}\n\n\t\t\t// run appearDependOnControl function\n\t\t\tfor (let i = 0; i < controlappearDependOnControl.length; i++) {\n\t\t\t\tWPTB_Helper.appearDependOnControl(\n\t\t\t\t\tcontrolappearDependOnControl[i][0],\n\t\t\t\t\tcontrolappearDependOnControl[i][1]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tWPTB_Helper.wptbDocumentEventGenerate('element:controls:active', element);\n\t\t\t// run valueDependOnControl function\n\t\t\tfor (let i = 0; i < controlValueDependOnControl.length; i++) {\n\t\t\t\tWPTB_Helper.valueDependOnControl(\n\t\t\t\t\tcontrolValueDependOnControl[i][0],\n\t\t\t\t\tcontrolValueDependOnControl[i][1],\n\t\t\t\t\tcontrolValueDependOnControl[i][2],\n\t\t\t\t\tkind,\n\t\t\t\t\telement\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * remove edit-action classes from wptb-ph-element elements\n\t */\n\teditActionClassRemove() {\n\t\tconst editActiveElems = document.querySelectorAll('.edit-active');\n\t\tfor (let i = 0; i < editActiveElems.length; i++) {\n\t\t\teditActiveElems[i].classList.remove('edit-active');\n\t\t}\n\t},\n\n\t/**\n\t *\n\t * @param unicClass\n\t * @param controlKey\n\t * @param key\n\t * @return {*}\n\t */\n\tcontrolParamCalculateValue(unicClass, key) {\n\t\tconst unicClassP = WPTB_Helper.replaceAll(unicClass, '-', '_');\n\t\tif (\n\t\t\twindow[`paramCalculateValue_${unicClassP}_${key}`] &&\n\t\t\ttypeof window[`paramCalculateValue_${unicClassP}_${key}`] === 'function'\n\t\t) {\n\t\t\treturn window[`paramCalculateValue_${unicClassP}_${key}`]();\n\t\t}\n\t},\n\n\tcontrolParamCalculateValueCreateFunction(element, controlKey, key, handlerFunction) {\n\t\tconst infArr = element.className.match(/wptb-element-((.+-)\\d+)/i);\n\t\tconst unicClass = `wptb-el-${infArr[1]}-${controlKey}`;\n\t\tconst unicClassP = WPTB_Helper.replaceAll(unicClass, '-', '_');\n\t\twindow[`paramCalculateValue_${unicClassP}_${key}`] = function () {\n\t\t\treturn handlerFunction(element);\n\t\t};\n\t},\n\n\t/**\n\t * function for create, update css for element\n\t *\n\t * @param elementContainer\n\t * @param selector\n\t * @param cssName\n\t * @param cssValue\n\t */\n\tmanagerExternalCssStyles(elementContainer, selector, cssName, cssValue) {\n\t\tconst infArr = elementContainer.match(/wptb-element-main(.+)-(\\d+)/i);\n\t\tif (!infArr || !Array.isArray(infArr)) {\n\t\t\tlet table = document.getElementsByClassName('wptb-preview-table');\n\n\t\t\tif (table.length > 0) {\n\t\t\t\ttable = table[0];\n\n\t\t\t\tconst infArr = table.className.match(/wptb-element-main(.+)-(\\d+)/i);\n\t\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\t\tselector = `.${infArr[0]} ${selector}`;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst { head } = document;\n\t\tif (head) {\n\t\t\tconst cssForThisElement = head.querySelector(`#styles-${elementContainer}`);\n\t\t\tif (cssForThisElement) {\n\t\t\t\tconst cssText = cssForThisElement.innerHTML;\n\t\t\t\tif (cssText) {\n\t\t\t\t\tconst cssTextArrFirst = cssText.split('}');\n\t\t\t\t\tcssTextArrFirst.pop();\n\t\t\t\t\tlet selectorExists = false;\n\t\t\t\t\tfor (let i = 0; i < cssTextArrFirst.length; i++) {\n\t\t\t\t\t\tconst cssTextArrSecond = cssTextArrFirst[i].split('{');\n\t\t\t\t\t\tif (cssTextArrSecond[0] === selector) {\n\t\t\t\t\t\t\tconst cssTextArrThird = cssTextArrSecond[1].split(';');\n\t\t\t\t\t\t\tcssTextArrThird.pop();\n\t\t\t\t\t\t\tlet cssNameExists = false;\n\t\t\t\t\t\t\tfor (let j = 0; j < cssTextArrThird.length; j++) {\n\t\t\t\t\t\t\t\tconst cssTextArrFourth = cssTextArrThird[j].split(':');\n\t\t\t\t\t\t\t\tif (cssTextArrFourth[0] === cssName) {\n\t\t\t\t\t\t\t\t\tif (cssValue) {\n\t\t\t\t\t\t\t\t\t\tcssTextArrThird[j] = `${cssName}:${cssValue}`;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tcssTextArrThird.splice(j, 1);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tcssTextArrSecond[1] = cssTextArrThird.join(';')\n\t\t\t\t\t\t\t\t\t\t? `${cssTextArrThird.join(';')};`\n\t\t\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\t\t\t\tcssNameExists = true;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!cssNameExists) {\n\t\t\t\t\t\t\t\tif (cssValue) {\n\t\t\t\t\t\t\t\t\tcssTextArrSecond[1] += `${cssName}:${cssValue};`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cssTextArrSecond[1]) {\n\t\t\t\t\t\t\t\tcssTextArrFirst[i] = `${cssTextArrSecond[0]}{${cssTextArrSecond[1]}`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcssTextArrFirst.splice(i, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (cssTextArrFirst.join('}')) {\n\t\t\t\t\t\t\t\tcssForThisElement.innerHTML = `${cssTextArrFirst.join('}')}}`;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thead.removeChild(cssForThisElement);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tselectorExists = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!selectorExists) {\n\t\t\t\t\t\tif (cssValue) {\n\t\t\t\t\t\t\tcssForThisElement.innerHTML = `${cssText + selector}{${cssName}:${cssValue};}`;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcssForThisElement.innerHTML = cssText;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (cssValue) {\n\t\t\t\t\tcssForThisElement.innerHTML = `${selector}{${cssName}:${cssValue};}`;\n\t\t\t\t} else {\n\t\t\t\t\thead.removeChild(cssForThisElement);\n\t\t\t\t}\n\t\t\t} else if (cssValue) {\n\t\t\t\tconst cssForThisElement = document.createElement('style');\n\t\t\t\tcssForThisElement.setAttribute('id', `styles-${elementContainer}`);\n\t\t\t\tcssForThisElement.classList.add('styles-wptb-elements');\n\t\t\t\tcssForThisElement.innerHTML = `${selector}{${cssName}:${cssValue};}`;\n\t\t\t\thead.appendChild(cssForThisElement);\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t *\n\t * Register section parts for sidebar\n\t *\n\t * @param {Array} sections an array of section names\n\t */\n\tregisterSections(sections) {\n\t\tthis.sections = {};\n\t\tthis.previousSection = null;\n\t\tthis.currentSection = null;\n\t\tif (!Array.isArray(sections)) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tsections = [sections];\n\t\t}\n\n\t\t// eslint-disable-next-line array-callback-return\n\t\tsections.map((s) => {\n\t\t\tconst sectionElement = document.querySelector(`[data-wptb-section=${s}]`);\n\t\t\tif (sectionElement) {\n\t\t\t\tthis.sections[s] = sectionElement;\n\t\t\t}\n\t\t});\n\t},\n\t/**\n\t * Activate a registered section and deactivates others\n\t *\n\t * @param {string} sectionDataId section name to be activated\n\t * @param {string} displayType display type override for section to be used in its display style property\n\t */\n\tactivateSection(sectionDataId, displayType = 'block') {\n\t\tthis.previousSection = this.currentSection;\n\t\tthis.currentSection = sectionDataId;\n\t\tthis.triggerSectionEvent(sectionDataId);\n\n\t\tconst builderAdminContainer = document.querySelector('#wptb_builder');\n\n\t\tif (builderAdminContainer) {\n\t\t\tbuilderAdminContainer.dataset.wptbActiveSection = this.currentSection;\n\t\t}\n\n\t\t// eslint-disable-next-line array-callback-return\n\t\tObject.keys(this.sections).map((k) => {\n\t\t\tif (Object.prototype.hasOwnProperty.call(this.sections, k)) {\n\t\t\t\tconst visibility = sectionDataId === k ? displayType : 'none';\n\t\t\t\tthis.sections[k].style = `display: ${visibility} !important`;\n\t\t\t}\n\t\t});\n\t},\n\t/**\n\t * Get id of current active section.\n\t *\n\t * @return {string} active section id\n\t */\n\tgetCurrentSection() {\n\t\treturn this.currentSection;\n\t},\n\t/**\n\t * Get id of previous section.\n\t *\n\t * @return {string} previous section id\n\t */\n\tgetPreviousSection() {\n\t\treturn this.previousSection;\n\t},\n\t/**\n\t * Get current section from search parameter 'wptb-builder-section' of window location\n\t */\n\tgetSectionFromUrl() {\n\t\tconst parsedUrl = new URL(window.location.href);\n\t\tconst urlSection = parsedUrl.searchParams.get('wptb-builder-section');\n\t\tif (urlSection) {\n\t\t\tif (Object.keys(this.sections).some((key) => key === urlSection)) {\n\t\t\t\tthis.activateSection(urlSection);\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Set up related buttons and links to trigger certain elements\n\t */\n\tsetupSectionButtons() {\n\t\tconst sectionButtons = Array.from(document.querySelectorAll('[data-wptb-section-button]'));\n\t\tconst vm = this;\n\n\t\tsectionButtons.map((s) => {\n\t\t\tconst sectionName = s.dataset.wptbSectionButton;\n\t\t\ts.addEventListener('click', function () {\n\t\t\t\tconst displayType = s.dataset.wptbSectionDisplayType;\n\t\t\t\tvm.activateSection(sectionName, displayType);\n\t\t\t\tWPTB_Helper.editActionClassRemove();\n\t\t\t});\n\n\t\t\tdocument.addEventListener('wptbSectionChanged', (e) => {\n\t\t\t\tif (e.detail === sectionName) {\n\t\t\t\t\ts.classList.remove('disabled');\n\t\t\t\t\ts.classList.add('active');\n\t\t\t\t} else {\n\t\t\t\t\ts.classList.remove('active');\n\t\t\t\t\ts.classList.add('disabled');\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t},\n\tsetupPanelToggleButtons() {\n\t\tconst $ = jQuery;\n\n\t\t$('.wptb-panel-toggle-group').each(function () {\n\t\t\tconst vm = $(this);\n\t\t\t$(this)\n\t\t\t\t.find('.toggle-icon')\n\t\t\t\t.click(() => {\n\t\t\t\t\tvm.find('.wptb-panel-toggle-target').slideToggle();\n\t\t\t\t\tvm.toggleClass('wptb-panel-toggle-content');\n\t\t\t\t});\n\t\t});\n\t},\n\t/**\n\t * Trigger a section change event\n\t *\n\t * @param {string} sectionName section name\n\t */\n\ttriggerSectionEvent(sectionName) {\n\t\tconst sectionEvent = new CustomEvent('wptbSectionChanged', { detail: sectionName });\n\n\t\tdocument.dispatchEvent(sectionEvent);\n\t},\n\t/**\n\t * Setup sidebar toggle element\n\t *\n\t * @param {string} toggleSelector query selector for drawer toggle element\n\t */\n\tsetupSidebarToggle(toggleSelector) {\n\t\tconst toggleButton = document.querySelector(toggleSelector);\n\t\tif (toggleButton) {\n\t\t\ttoggleButton.addEventListener('click', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tdocument.body.classList.toggle('collapsed');\n\t\t\t});\n\t\t}\n\t},\n\t// function for deleting all external CSS for the element\n\texternalCssStylesDelete(elementContainerClass) {\n\t\tconst { head } = document;\n\t\tif (head) {\n\t\t\tconst cssForThisElement = head.querySelector(`#styles-${elementContainerClass}`);\n\n\t\t\tif (cssForThisElement) {\n\t\t\t\thead.removeChild(cssForThisElement);\n\t\t\t}\n\t\t}\n\t},\n\t// function for copy all external CSS for the element\n\texternalCssStylesCopy(activeElement, copyElement) {\n\t\tif (activeElement) {\n\t\t\tconst infArr = activeElement.className.match(/wptb-element-(.+)-(\\d+)/i);\n\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\tconst activeElemClass = infArr[0];\n\n\t\t\t\tconst { head } = document;\n\t\t\t\tif (head) {\n\t\t\t\t\tconst cssForActiveElement = head.querySelector(`#styles-${activeElemClass}`);\n\n\t\t\t\t\tif (cssForActiveElement) {\n\t\t\t\t\t\tconst cssForNewElement = cssForActiveElement.cloneNode(true);\n\n\t\t\t\t\t\tcssForNewElement.removeAttribute('id', `styles-${activeElemClass}`);\n\n\t\t\t\t\t\tconst infArrCopyEl = copyElement.className.match(/wptb-element-(.+)-(\\d+)/i);\n\t\t\t\t\t\tif (infArrCopyEl && Array.isArray(infArrCopyEl)) {\n\t\t\t\t\t\t\tcssForNewElement.setAttribute('id', `styles-${infArrCopyEl[0]}`);\n\t\t\t\t\t\t\tconst cssForActiveElementInnerHTML = cssForActiveElement.innerHTML;\n\t\t\t\t\t\t\tconst cssForNewElementInnerHTML = WPTB_Helper.replaceAll(\n\t\t\t\t\t\t\t\tcssForActiveElementInnerHTML,\n\t\t\t\t\t\t\t\tactiveElemClass,\n\t\t\t\t\t\t\t\tinfArrCopyEl[0]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcssForNewElement.innerHTML = cssForNewElementInnerHTML;\n\t\t\t\t\t\t\thead.appendChild(cssForNewElement);\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\t},\n\t// function for convertation elements stiles in json\n\telementsStylesConvertToObject() {\n\t\tconst { head } = document;\n\t\tconst stylesElements = head.querySelectorAll('.styles-wptb-elements');\n\t\tconst stylesObj = {};\n\t\tfor (let i = 0; i < stylesElements.length; i++) {\n\t\t\tconst styleElemId = stylesElements[i].getAttribute('id');\n\t\t\tif (styleElemId && stylesElements[i].innerHTML) {\n\t\t\t\tstylesObj[styleElemId] = stylesElements[i].innerHTML;\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(stylesObj).length != 0) {\n\t\t\treturn JSON.stringify(stylesObj);\n\t\t}\n\t\treturn '';\n\t},\n\t// function for set scc styles tags to head\n\telementsStylesSetFromObject(jsonObject) {\n\t\tconst { head } = document;\n\t\tif (head) {\n\t\t\tlet stylesElements = head.querySelectorAll('.styles-wptb-elements');\n\t\t\tif (stylesElements.length > 0) {\n\t\t\t\tstylesElements = [...stylesElements];\n\t\t\t\tfor (let i = 0; i < stylesElements.length; i++) {\n\t\t\t\t\thead.removeChild(stylesElements[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (jsonObject) {\n\t\t\t\tconst stylesObj = JSON.parse(jsonObject);\n\t\t\t\tif (Object.keys(stylesObj).length != 0) {\n\t\t\t\t\tObject.keys(stylesObj).forEach(function (key) {\n\t\t\t\t\t\tconst cssText = stylesObj[key];\n\t\t\t\t\t\tconst styleCss = document.createElement('style');\n\t\t\t\t\t\tstyleCss.setAttribute('id', key);\n\t\t\t\t\t\tstyleCss.classList.add('styles-wptb-elements');\n\t\t\t\t\t\tstyleCss.innerHTML = cssText;\n\t\t\t\t\t\thead.appendChild(styleCss);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t// function for table saving\n\tsaveTable(event, startSaving, previewSaving) {\n\t\t// show save indicator\n\t\tWPTB_Helper.tableSaveIndicator(true);\n\n\t\tif (!previewSaving && !startSaving) {\n\t\t\tif (\n\t\t\t\t(!event.target.dataset.wptbTableStateNumberSave && window.wptbTableStateNumberShow == 0) ||\n\t\t\t\twindow.wptbTableStateNumberShow == event.target.dataset.wptbTableStateNumberSave\n\t\t\t) {\n\t\t\t\t// return;\n\t\t\t}\n\t\t}\n\n\t\tif (!previewSaving) {\n\t\t\tconst bar = document.querySelector('.wptb-edit-bar');\n\t\t\tif (bar && bar.classList.contains('visible')) {\n\t\t\t\tconst table = document.getElementsByClassName('wptb-preview-table')[0];\n\t\t\t\tWPTB_Helper.toggleTableEditMode();\n\t\t\t}\n\t\t}\n\n\t\t// before save event trigger\n\t\tWPTB_Helper.wptbDocumentEventGenerate('wptb:save:before', document);\n\n\t\t// clean any left over artifacts related to builder\n\t\tWPTB_Helper.tableClean();\n\n\t\tconst http = new XMLHttpRequest();\n\t\tconst url = `${wptb_admin_object ? wptb_admin_object.ajaxurl : ajaxurl}?action=save_table`;\n\t\tconst t = document.getElementById('wptb-setup-name').value.trim();\n\t\tlet messagingArea;\n\t\tlet code;\n\t\tlet datas;\n\n\t\tcode = document.getElementsByClassName('wptb-preview-table');\n\n\t\tlet postId;\n\t\tif ((rs = WPTB_Helper.detectMode()) || (rs = document.wptbId)) {\n\t\t\tpostId = rs;\n\t\t}\n\t\tlet paramIdsNecessaryChange = false;\n\t\tif (code.length > 0) {\n\t\t\tcode = code[0];\n\t\t\tconst codeClone = code.cloneNode(true);\n\t\t\tif (postId) {\n\t\t\t\tif (codeClone.classList.contains('wptb-element-main-table_setting-startedid-0')) {\n\t\t\t\t\tcodeClone.classList.remove('wptb-element-main-table_setting-startedid-0');\n\t\t\t\t\tcodeClone.classList.add(`wptb-element-main-table_setting-${postId}`);\n\t\t\t\t\tconst wptbTableSetup = document.querySelector('.wptb-table-setup');\n\t\t\t\t\tif (wptbTableSetup) {\n\t\t\t\t\t\twptbTableSetup.innerHTML = '';\n\t\t\t\t\t\twptbTableSetup.appendChild(codeClone);\n\t\t\t\t\t\tWPTB_Table();\n\t\t\t\t\t}\n\t\t\t\t\tparamIdsNecessaryChange = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcodeClone.columns = code.columns;\n\t\t\tcode = WPTB_Stringifier(codeClone);\n\t\t\tcode = code.outerHTML;\n\t\t} else {\n\t\t\tcode = '';\n\t\t}\n\n\t\tif (!previewSaving) {\n\t\t\tdatas = '';\n\t\t\tconst datas_containers = document.getElementsByClassName('wptb-element-datas');\n\n\t\t\tif (datas_containers.length > 0) {\n\t\t\t\tif (datas_containers[0].innerHTML) {\n\t\t\t\t\tdatas = datas_containers[0].innerHTML;\n\n\t\t\t\t\tif (paramIdsNecessaryChange) {\n\t\t\t\t\t\tdatas = WPTB_Helper.replaceAll(\n\t\t\t\t\t\t\tdatas,\n\t\t\t\t\t\t\t'tmpl-wptb-el-datas-main-table_setting-startedid-0',\n\t\t\t\t\t\t\t`tmpl-wptb-el-datas-main-table_setting-${postId}`\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tdatas = WPTB_Helper.replaceAll(\n\t\t\t\t\t\t\tdatas,\n\t\t\t\t\t\t\t'data-wptb-el-main-table_setting-startedid-0',\n\t\t\t\t\t\t\t`data-wptb-el-main-table_setting-${postId}`\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\tlet styleObjJson = WPTB_Helper.elementsStylesConvertToObject();\n\t\tif (paramIdsNecessaryChange) {\n\t\t\tstyleObjJson = WPTB_Helper.replaceAll(\n\t\t\t\tstyleObjJson,\n\t\t\t\t'.wptb-element-main-table_setting-startedid-0',\n\t\t\t\t`.wptb-element-main-table_setting-${postId}`\n\t\t\t);\n\t\t}\n\n\t\tif (t === '' && code === '') {\n\t\t\tlet messagingAreaText = '';\n\t\t\tif (t === '') messagingAreaText += 'You must assign a name to the table before saving it.</br>';\n\t\t\tif (code === '') messagingAreaText += \"Table wasn't created\";\n\t\t\tmessagingArea = document.getElementById('wptb-messaging-area');\n\t\t\tmessagingArea.innerHTML = `<div class=\"wptb-error wptb-message\">Error: ${messagingAreaText}</div>`;\n\t\t\tmessagingArea.classList.add('wptb-warning');\n\t\t\tsetTimeout(function () {\n\t\t\t\tmessagingArea.removeChild(messagingArea.firstChild);\n\t\t\t}, 4000);\n\t\t\treturn;\n\t\t}\n\n\t\tlet params = {\n\t\t\ttitle: t,\n\t\t\tcontent: code,\n\t\t\telements_datas: datas,\n\t\t\telements_styles: styleObjJson,\n\t\t\tsecurity_code: wptb_admin_object.security_code,\n\t\t};\n\n\t\tif (previewSaving) {\n\t\t\tparams.preview_saving = previewSaving;\n\t\t}\n\n\t\tif (postId) {\n\t\t\tparams.id = postId;\n\t\t}\n\n\t\t// wptb save before event\n\t\tWPTB_Helper.wptbDocumentEventGenerate('wptb:save:before', document, params);\n\n\t\tparams = JSON.stringify(params);\n\n\t\thttp.open('POST', url, true);\n\n\t\thttp.setRequestHeader('Content-type', 'application/json; charset=utf-8');\n\n\t\thttp.onreadystatechange = function (action) {\n\t\t\tif (this.readyState == 4) {\n\t\t\t\t// hide save indicator\n\t\t\t\tWPTB_Helper.tableSaveIndicator(false);\n\n\t\t\t\tif (this.status == 200) {\n\t\t\t\t\tconst data = JSON.parse(http.responseText);\n\t\t\t\t\tmessagingArea = document.getElementById('wptb-messaging-area');\n\n\t\t\t\t\tif (data[0] == 'saved') {\n\t\t\t\t\t\tlet builderPageUrl = document.location.href.replace('#', '');\n\t\t\t\t\t\tconst regex = new RegExp('&table=(.+)', 'i');\n\t\t\t\t\t\tbuilderPageUrl = builderPageUrl.replace(regex, '');\n\t\t\t\t\t\twindow.history.pushState(null, null, `${builderPageUrl}&table=${data[1]}`);\n\n\t\t\t\t\t\tdocument.wptbId = data[1];\n\t\t\t\t\t\tmessagingArea.innerHTML = `<div class=\"wptb-success wptb-message\">Table \"${t}\" was successfully saved.</div>`;\n\n\t\t\t\t\t\tWPTB_NotificationManager.sendNotification({ message: `Table ${t} was successfully saved.` });\n\t\t\t\t\t\tdocument.getElementsByClassName('wptb-embed-btn')[0].classList.remove('wptb-button-disable');\n\t\t\t\t\t\tdocument.getElementById('wptb-embed-shortcode').value = `[wptb id=${data[1]}]`;\n\t\t\t\t\t\tconst wptbPreviewTable = document.querySelector('.wptb-preview-table');\n\t\t\t\t\t\tlet wptbPreviewBtn = document.getElementsByClassName('wptb-preview-btn');\n\t\t\t\t\t\tif (wptbPreviewBtn.length > 0) {\n\t\t\t\t\t\t\twptbPreviewBtn = wptbPreviewBtn[0];\n\t\t\t\t\t\t\twptbPreviewBtn.classList.remove('wptb-button-disable');\n\t\t\t\t\t\t\tlet wptbPreviewBtnHref = wptbPreviewBtn.dataset.previewHref;\n\t\t\t\t\t\t\twptbPreviewBtnHref = wptbPreviewBtnHref.replace('empty', data[1]);\n\t\t\t\t\t\t\twptbPreviewBtn.setAttribute('href', wptbPreviewBtnHref);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tevent.target.dataset.wptbTableStateNumberSave = window.wptbTableStateNumberShow;\n\t\t\t\t\t\tlet wptbSaveBtn = document.getElementsByClassName('wptb-save-btn');\n\t\t\t\t\t\tif (wptbSaveBtn.length > 0) {\n\t\t\t\t\t\t\twptbSaveBtn = wptbSaveBtn[0];\n\t\t\t\t\t\t\twptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t\t\t\twptbSaveBtn.classList.remove('active');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// WPTB_Helper.saveTable( event, true );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (data[0] == 'edited' && startSaving) {\n\t\t\t\t\t\tdocument.wptbId = data[1];\n\t\t\t\t\t\tmessagingArea.innerHTML = `<div class=\"wptb-success wptb-message\">Table \"${t}\" was successfully saved.</div>`;\n\n\t\t\t\t\t\tWPTB_NotificationManager.sendNotification({ message: `Table ${t} was successfully saved.` });\n\t\t\t\t\t\tdocument.getElementsByClassName('wptb-embed-btn')[0].classList.remove('wptb-button-disable');\n\t\t\t\t\t\tdocument.getElementById('wptb-embed-shortcode').value = `[wptb id=${data[1]}]`;\n\t\t\t\t\t\tconst wptbPreviewTable = document.querySelector('.wptb-preview-table');\n\t\t\t\t\t\tlet wptbPreviewBtn = document.getElementsByClassName('wptb-preview-btn');\n\t\t\t\t\t\tif (wptbPreviewBtn.length > 0) {\n\t\t\t\t\t\t\twptbPreviewBtn = wptbPreviewBtn[0];\n\t\t\t\t\t\t\twptbPreviewBtn.classList.remove('wptb-button-disable');\n\t\t\t\t\t\t\tlet wptbPreviewBtnHref = wptbPreviewBtn.dataset.previewHref;\n\t\t\t\t\t\t\twptbPreviewBtnHref = wptbPreviewBtnHref.replace('empty', data[1]);\n\t\t\t\t\t\t\twptbPreviewBtn.setAttribute('href', wptbPreviewBtnHref);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tevent.target.dataset.wptbTableStateNumberSave = window.wptbTableStateNumberShow;\n\t\t\t\t\t\tlet wptbSaveBtn = document.getElementsByClassName('wptb-save-btn');\n\t\t\t\t\t\tif (wptbSaveBtn.length > 0) {\n\t\t\t\t\t\t\twptbSaveBtn = wptbSaveBtn[0];\n\t\t\t\t\t\t\twptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t\t\t\twptbSaveBtn.classList.remove('active');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (data[0] == 'edited') {\n\t\t\t\t\t\tmessagingArea.innerHTML = `<div class=\"wptb-success wptb-message\">Table \"${t}\" was successfully updated.</div>`;\n\n\t\t\t\t\t\tWPTB_NotificationManager.sendNotification({ message: `Table ${t} was successfully updated.` });\n\t\t\t\t\t\tevent.target.dataset.wptbTableStateNumberSave = window.wptbTableStateNumberShow;\n\n\t\t\t\t\t\tlet wptbSaveBtn = document.getElementsByClassName('wptb-save-btn');\n\t\t\t\t\t\tif (wptbSaveBtn.length > 0) {\n\t\t\t\t\t\t\twptbSaveBtn = wptbSaveBtn[0];\n\t\t\t\t\t\t\twptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t\t\t\twptbSaveBtn.classList.remove('active');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (data[0] == 'preview_edited') {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessagingArea.innerHTML = '<div class=\"wptb-error wptb-message\">Safety problems</div>';\n\t\t\t\t\t}\n\t\t\t\t\tmessagingArea.classList.add('wptb-success');\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tmessagingArea.removeChild(messagingArea.firstChild);\n\t\t\t\t\t}, 4000);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\thttp.send(params);\n\t},\n\t//\n\tclickOnFreeSpace() {\n\t\tWPTB_Helper.editActionClassRemove();\n\t\t// if current active section is responsive menu, ignore this functionality\n\t\tif (this.getCurrentSection() === 'table_responsive_menu') {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cellModeBackground = document.querySelector('#wptb-cell_mode_background');\n\t\tif (cellModeBackground && cellModeBackground.classList.contains('visible')) {\n\t\t\treturn;\n\t\t}\n\t\t// document.getElementsByClassName( 'wptb-elements-container' )[0].style.display = 'table';\n\t\t// document.getElementsByClassName( 'wptb-settings-section' )[0].style.display = 'block';\n\t\t// document.getElementById( 'element-options-group' ).style.display = 'none';\n\t\tthis.activateSection('elements');\n\n\t\tconst wpcdFixedToolbar = document.getElementById('wpcd_fixed_toolbar');\n\t\tif (wpcdFixedToolbar.hasAttribute('data-toolbar-active-id')) {\n\t\t\tdocument\n\t\t\t\t.getElementById(wpcdFixedToolbar.getAttribute('data-toolbar-active-id'))\n\t\t\t\t.classList.remove('toolbar-active');\n\t\t}\n\t\tconst element = document.querySelector('.wptb-preview-table');\n\t\tif (element) {\n\t\t\tWPTB_Helper.elementOptionsSet('table_setting', element);\n\t\t}\n\t},\n\n\t/*\n\t * function for sending of element ajax request\n\t */\n\telementAjax(dataAjaxData, element) {\n\t\tconst http = new XMLHttpRequest();\n\t\tconst url = `${wptb_admin_object ? wptb_admin_object.ajaxurl : ajaxurl}?action=wptb_element_ajax`;\n\t\tlet element_name;\n\t\tconst infArr = element.className.match(/wptb-element-(.+)-(\\d+)/i);\n\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\telement_name = infArr[1];\n\t\t}\n\n\t\tlet params = {\n\t\t\telement_ajax_data: dataAjaxData,\n\t\t\telement_name,\n\t\t\tsecurity_code: wptb_admin_object.security_code,\n\t\t};\n\t\tparams = JSON.stringify(params);\n\n\t\thttp.open('POST', url, true);\n\t\thttp.setRequestHeader('Content-type', 'application/json; charset=utf-8');\n\n\t\thttp.onreadystatechange = function (action) {\n\t\t\tif (this.readyState == 4 && this.status == 200) {\n\t\t\t\tconst data = JSON.parse(http.responseText);\n\t\t\t\tlet detail;\n\t\t\t\tif (data && Array.isArray(data) && data[0] == 'element_ajax_responce') {\n\t\t\t\t\tdetail = { value: data[1] };\n\t\t\t\t} else {\n\t\t\t\t\tdetail = '';\n\t\t\t\t}\n\t\t\t\tWPTB_Helper.wptbDocumentEventGenerate('wptb-element:ajax-response', element, detail);\n\t\t\t}\n\t\t};\n\t\thttp.send(params);\n\t},\n\n\t/*\n\t * This just toggles visibility of cell edit bar, and toggles\n\t * cell selecting mode.\n\t */\n\ttoggleTableEditMode(close = false) {\n\t\tconst bar = document.getElementsByClassName('wptb-edit-bar');\n\t\tconst cellModeBackground = document.getElementById('wptb-cell_mode_background');\n\t\tconst leftScrollPanelCurtain = document.getElementById('wptb-left-scroll-panel-curtain');\n\t\tconst leftScrollPanelCellSettings = document.getElementById('wptb-left-scroll-panel-cell-settings');\n\t\tlet wptbPreviewTable = document.getElementsByClassName('wptb-preview-table');\n\t\tif (wptbPreviewTable.length > 0) {\n\t\t\twptbPreviewTable = wptbPreviewTable[0];\n\t\t}\n\n\t\tconst builderPanel = document.querySelector('.wptb-builder-panel');\n\n\t\tif (bar.length > 0) {\n\t\t\tlet toggleEditMode = '';\n\t\t\tfor (let i = 0; i < bar.length; i++) {\n\t\t\t\tif (close) {\n\t\t\t\t\tdocument.select.deactivateMultipleSelectMode();\n\t\t\t\t\tbar[i].classList.remove('visible');\n\t\t\t\t\tcellModeBackground.classList.remove('visible');\n\t\t\t\t\tleftScrollPanelCurtain.classList.remove('visible');\n\t\t\t\t\tleftScrollPanelCellSettings.classList.remove('visible');\n\t\t\t\t\twptbPreviewTable.parentNode.classList.remove('wptb-preview-table-manage-cells');\n\t\t\t\t\tconst wptbPreviewTableTds = wptbPreviewTable.getElementsByTagName('td');\n\t\t\t\t\tif (wptbPreviewTableTds.length > 0) {\n\t\t\t\t\t\tfor (let i = 0; i < wptbPreviewTableTds.length; i++) {\n\t\t\t\t\t\t\twptbPreviewTableTds[i].classList.remove('wptb-highlighted');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttoggleEditMode = 'closed';\n\n\t\t\t\t\tbuilderPanel.dataset.manageCellsActive = false;\n\n\t\t\t\t\t// @deprecated\n\t\t\t\t\t// WPTB_Helper.activateSection('elements');\n\t\t\t\t} else if (!close) {\n\t\t\t\t\tdocument.select.activateMultipleSelectMode();\n\t\t\t\t\tbar[i].classList.add('visible');\n\t\t\t\t\tcellModeBackground.classList.add('visible');\n\t\t\t\t\tleftScrollPanelCurtain.classList.add('visible');\n\t\t\t\t\twptbPreviewTable.parentNode.classList.add('wptb-preview-table-manage-cells');\n\n\t\t\t\t\ttoggleEditMode = 'opened';\n\n\t\t\t\t\tbuilderPanel.dataset.manageCellsActive = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tWPTB_Helper.wptbDocumentEventGenerate(\n\t\t\t\t`wp-table-builder/table-edit-mode/${toggleEditMode}`,\n\t\t\t\twptbPreviewTable\n\t\t\t);\n\t\t}\n\t},\n\n\t/*\n\t * checking of dimension of value\n\t */\n\tcheckingDimensionValue(value, dimension) {\n\t\tvalue = String(value);\n\t\tdimension = String(dimension);\n\t\tif (value && dimension) {\n\t\t\tconst searchIndex = value.indexOf(dimension);\n\t\t\tif (searchIndex != -1 && searchIndex == value.length - dimension.length) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn false;\n\t},\n\n\t/*\n\t * if dimension is included - checking and if it necessary setting value\n\t * without dimension - return value\n\t */\n\tcheckSetGetStyleSizeValue(element, styleName, computedStyleName, dimension) {\n\t\tlet elemStyleValue = element.style[styleName];\n\t\telemStyleValue = String(elemStyleValue);\n\n\t\tif (!elemStyleValue || dimension ? !WPTB_Helper.checkingDimensionValue(elemStyleValue, dimension) : false) {\n\t\t\tconst elementStyles = window.getComputedStyle(element);\n\t\t\tif (\n\t\t\t\tcomputedStyleName && elementStyles.getPropertyValue(computedStyleName) && dimension\n\t\t\t\t\t? WPTB_Helper.checkingDimensionValue(elementStyles.getPropertyValue(computedStyleName), dimension)\n\t\t\t\t\t: true\n\t\t\t) {\n\t\t\t\tif (!dimension) {\n\t\t\t\t\treturn elementStyles.getPropertyValue(computedStyleName);\n\t\t\t\t}\n\t\t\t\telement.style[styleName] = elementStyles.getPropertyValue(computedStyleName);\n\t\t\t} else if (!dimension) {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\telement.style[styleName] = null;\n\t\t\t}\n\t\t} else if (!dimension) {\n\t\t\treturn elemStyleValue;\n\t\t}\n\n\t\treturn element.style[styleName];\n\t},\n\n\t/*\n\t * function checking that element has the style\n\t * if this style is present - checking the format color\n\t * if param set is true - setting style for element (consider hex format of color)\n\t * if param set is false - getting style from element\n\t */\n\tcheckSetGetStyleColorValue(element, styleName, computedStyleName, set = false) {\n\t\tlet elemStyleColorValue = element.style[styleName];\n\n\t\tif (!elemStyleColorValue) {\n\t\t\tconst elementStyles = window.getComputedStyle(element, null);\n\n\t\t\tif (elementStyles && elementStyles.getPropertyValue(computedStyleName)) {\n\t\t\t\tif (set) {\n\t\t\t\t\telemStyleColorValue = WPTB_Helper.rgbToHex(elementStyles.getPropertyValue(computedStyleName));\n\t\t\t\t\tif (WPTB_Helper.isHex(elemStyleColorValue)) {\n\t\t\t\t\t\telement.style[styleName] = elemStyleColorValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.style[styleName] = '';\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn elementStyles.getPropertyValue(computedStyleName);\n\t\t\t\t}\n\t\t\t} else if (set) {\n\t\t\t\telement.style[styleName] = '';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t} else if (!set) {\n\t\t\treturn elemStyleColorValue;\n\t\t}\n\t},\n\n\t/*\n\t * function checking that element has the style\n\t * if this style is present - checking the format color\n\t * if param set is true - setting style for element (consider hex format of color)\n\t * if param set is false - getting style from element\n\t */\n\tcheckSetGetStyleValue(element, styleName, computedStyleName, set = false) {\n\t\tconst elemStyleColorValue = element.style[styleName];\n\n\t\tif (!elemStyleColorValue) {\n\t\t\tconst elementStyles = window.getComputedStyle(element, null);\n\n\t\t\tif (elementStyles && elementStyles.getPropertyValue(computedStyleName)) {\n\t\t\t\tif (set) {\n\t\t\t\t\telement.style[styleName] = elementStyles.getPropertyValue(computedStyleName);\n\t\t\t\t} else {\n\t\t\t\t\treturn elementStyles.getPropertyValue(computedStyleName);\n\t\t\t\t}\n\t\t\t} else if (!set) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t} else if (!set) {\n\t\t\treturn elemStyleColorValue;\n\t\t}\n\t},\n\n\t/*\n\t * get the value of the same elements that have the most count\n\t */\n\tgetValueMaxCountSameElementsInArray(arr) {\n\t\tif (arr && Array.isArray(arr)) {\n\t\t\tconst check = {};\n\t\t\tlet countEmpty = 0;\n\t\t\tfor (let i = 0; i < arr.length; i++) {\n\t\t\t\tif (arr[i]) {\n\t\t\t\t\tif (check[arr[i]]) {\n\t\t\t\t\t\tcheck[arr[i]]++;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcheck[arr[i]] = 1;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcountEmpty++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet maxPropName;\n\t\t\tfor (const key in check) {\n\t\t\t\tif (!maxPropName) {\n\t\t\t\t\tmaxPropName = key;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (check[maxPropName] < check[key]) {\n\t\t\t\t\tmaxPropName = key;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn check[maxPropName] >= countEmpty ? maxPropName : '';\n\t\t}\n\t},\n\n\t/*\n\t * For assigning to each cell xIndex and y Index attributes,\n\t * these are the column number and row number of cell in table.\n\t */\n\trecalculateIndexes(table) {\n\t\tWPTB_RecalculateIndexes(table);\n\t},\n\n\t/**\n\t * Table Rows colors reinstall\n\t *\n\t * @param table\n\t */\n\ttableRowsColorsReinstall(table) {\n\t\tif (table.rows.length) {\n\t\t\tconst infArr = table.className.match(/wptb-element-main(.+)-(\\d+)/i);\n\t\t\tif (infArr && Array.isArray(infArr)) {\n\t\t\t\tlet tableIndex = '';\n\t\t\t\tif (infArr[infArr.length - 1] == '0') {\n\t\t\t\t\ttableIndex = 'startedid-0';\n\t\t\t\t} else {\n\t\t\t\t\ttableIndex = infArr[infArr.length - 1];\n\t\t\t\t}\n\n\t\t\t\tconst tableHeaderBackground = document.querySelector(\n\t\t\t\t\t`.wptb-el-main-table_setting-${tableIndex}-tableHeaderBackground`\n\t\t\t\t);\n\t\t\t\tif (tableHeaderBackground) {\n\t\t\t\t\tconst details = { value: tableHeaderBackground.value };\n\t\t\t\t\tWPTB_Helper.wptbDocumentEventGenerate('controlColor:change', tableHeaderBackground, details);\n\t\t\t\t}\n\n\t\t\t\tconst tableEvenRowBackground = document.querySelector(\n\t\t\t\t\t`.wptb-el-main-table_setting-${tableIndex}-tableEvenRowBackground`\n\t\t\t\t);\n\t\t\t\tif (tableEvenRowBackground) {\n\t\t\t\t\tconst details = { value: tableEvenRowBackground.value };\n\t\t\t\t\tWPTB_Helper.wptbDocumentEventGenerate('controlColor:change', tableEvenRowBackground, details);\n\t\t\t\t}\n\n\t\t\t\tconst tableOddRowBackground = document.querySelector(\n\t\t\t\t\t`.wptb-el-main-table_setting-${tableIndex}-tableOddRowBackground`\n\t\t\t\t);\n\t\t\t\tif (tableOddRowBackground) {\n\t\t\t\t\tconst details = { value: tableOddRowBackground.value };\n\t\t\t\t\tWPTB_Helper.wptbDocumentEventGenerate('controlColor:change', tableOddRowBackground, details);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Get parent html element of given type\n\t *\n\t * @param {string} parentType type of parent element\n\t * @param {HTMLElement} el current element\n\t * @return {*} html element of type\n\t */\n\tgetParentOfType: (parentType, el) => {\n\t\tif (el.nodeName === parentType.toUpperCase()) {\n\t\t\treturn el;\n\t\t}\n\n\t\treturn WPTB_Helper.getParentOfType(parentType, el.parentElement);\n\t},\n\t// current relative type of drag element\n\t// this type is used on differentiating certain elements based on their positioning on table\n\tdragRelativeType: '',\n\t/**\n\t *\n\t * @param {string} val drag relative type\n\t */\n\tsetDragRelativeType(val) {\n\t\tthis.dragRelativeType = val;\n\t},\n\t// get drag relative type\n\tgetDragRelativeType() {\n\t\treturn this.dragRelativeType;\n\t},\n\t/**\n\t *\n\t * @param {HTMLElement} element\n\t * @param {string} styleName\n\t */\n\tgetElementColorStylesHex(element, styleName) {\n\t\tlet color = element.style[styleName];\n\t\tcolor = WPTB_Helper.rgbToHex(color);\n\t\tif (!WPTB_Helper.isHex(color)) {\n\t\t\tcolor = '';\n\t\t}\n\t\treturn color;\n\t},\n\t/**\n\t * Show element controls on adding them to table.\n\t */\n\tshowControlsOnElementMount() {\n\t\tdocument.addEventListener('element:mounted:dom', function (e) {\n\t\t\te.target.click();\n\t\t});\n\t},\n\t/**\n\t * Show elements list menu on left panel on removing element from table\n\t */\n\tshowElementsListOnRemove() {\n\t\tdocument.addEventListener('element:removed:dom', function () {\n\t\t\tWPTB_Helper.activateSection('elements');\n\t\t});\n\t},\n\t/**\n\t * Block tiny MCE initialization and element selected activation for data cells for specific active sections.\n\t * Sections: Manage cells, background menu\n\t */\n\tblockTinyMCE() {\n\t\tconst addBlocker = (parent) => {\n\t\t\tconst blockerElement = document.createElement('div');\n\t\t\tblockerElement.classList.add('wptb-plugin-blocker-element');\n\n\t\t\tconst haveChild = parent.childNodes.length > 0;\n\t\t\tparent.appendChild(blockerElement);\n\n\t\t\t// if don't have any children, then add before/after css element states to blocker in order to reflect table builder menu visuals\n\t\t\tif (!haveChild) {\n\t\t\t\tparent.classList.add('wptb-plugin-blocker-element-empty');\n\t\t\t}\n\t\t};\n\n\t\tconst removeBlocker = (parent) => {\n\t\t\tconst blockerElement = parent.querySelector('.wptb-plugin-blocker-element');\n\t\t\tif (blockerElement) {\n\t\t\t\tblockerElement.remove();\n\t\t\t}\n\n\t\t\tparent.classList.remove('wptb-plugin-blocker-element-empty');\n\t\t};\n\t\tdocument.addEventListener('wptbSectionChanged', ({ detail }) => {\n\t\t\tconst table = document.querySelector('.wptb-table-setup table.wptb-preview-table');\n\t\t\tif (table) {\n\t\t\t\tconst cells = Array.from(table.querySelectorAll('td'));\n\n\t\t\t\tcells.map(removeBlocker);\n\n\t\t\t\tconst allowedSections = ['manage_cells', 'cell_settings', 'background_menu'];\n\t\t\t\tif (allowedSections.includes(detail)) {\n\t\t\t\t\tcells.map(addBlocker);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tdocument.addEventListener('wptb:save:before', () => {\n\t\t\tconst table = document.querySelector('.wptb-table-setup table.wptb-preview-table');\n\t\t\tconst cells = Array.from(table.querySelectorAll('td'));\n\n\t\t\tcells.map(removeBlocker);\n\t\t});\n\t},\n\t/**\n\t * Setup for builder if called by gutenberg block.\n\t */\n\tcalledByBlock() {\n\t\tconst parsedUrl = new URL(window.location.href);\n\t\tconst isCalledByBlock = parsedUrl.searchParams.get('gutenberg');\n\t\tif (isCalledByBlock) {\n\t\t\tconst closeButton = document.querySelector('.wptb-plugin-header-close a');\n\n\t\t\tcloseButton.addEventListener(\n\t\t\t\t'click',\n\t\t\t\t(e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\n\t\t\t\t\tconst isTableClean = document.querySelector('.wptb-save-disabled');\n\n\t\t\t\t\tconst tableId = new URL(window.location.href).searchParams.get('table');\n\n\t\t\t\t\tif (!isTableClean) {\n\t\t\t\t\t\tconst confirmResult = window.confirm(wptb_admin_object.strings.dirtyConfirmation);\n\t\t\t\t\t\tif (confirmResult) {\n\t\t\t\t\t\t\tWPTB_Helper.wptbDocumentEventGenerate('gutenbergClose', document, tableId);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tWPTB_Helper.wptbDocumentEventGenerate('gutenbergClose', document, tableId);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ capture: true }\n\t\t\t);\n\t\t}\n\t},\n\t/**\n\t * Clean any builder related artifacts from table.\n\t */\n\ttableClean() {\n\t\t// remove any hover artifacts from table\n\t\tArray.from(document.querySelectorAll('.wptb-directlyhovered')).map((el) => {\n\t\t\tel.classList.remove('wptb-directlyhovered');\n\t\t});\n\n\t\t// remove all data-placeholder from table\n\t\t// eslint-disable-next-line array-callback-return\n\t\tArray.from(document.querySelectorAll('.wptb-text-container p')).map((el) => {\n\t\t\tel.removeAttribute('data-placeholder');\n\t\t});\n\t},\n\t/**\n\t * Setup table save related visual styles and elements.\n\t *\n\t * @param {boolean} saveStatus whether saving or not\n\t */\n\ttableSaveIndicator(saveStatus) {\n\t\tconst builder = document.querySelector('#wptb_builder');\n\t\tif (builder) {\n\t\t\tif (saveStatus) {\n\t\t\t\tbuilder.dataset.wptbSaving = true;\n\t\t\t} else {\n\t\t\t\tdelete builder.dataset.wptbSaving;\n\t\t\t}\n\t\t}\n\t},\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\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 // @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\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 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","var WPTB_Parser = function ( code ) {\n let div = document.createElement( 'div' );\n div.innerHTML = code;\n \n let table = div.children[0];\n let columnTitleMobile = [...table.querySelectorAll( '.wptb-column-title-mobile-container' )];\n \n for( let i = 0; i < columnTitleMobile.length; i++ ) {\n let parent = columnTitleMobile[i].parentNode;\n parent.removeChild( columnTitleMobile[i] );\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 }\n \n return table;\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 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 shortcodePopupWindow.classList.add( 'wptb-popup-show' );\n }\n }\n \n window.onbeforeunload = function(e) {\n let wptbSaveDisabled = document.getElementsByClassName( 'wptb-save-disabled' );\n if( wptbSaveDisabled.length == 0 ) {\n return true;\n } else {\n return null;\n }\n };\n \n \n document.getElementsByClassName( 'wptb-popup-dark-area' )[0].onclick = function () {\n shortcodePopupWindow.classList.remove( 'wptb-popup-show' );\n }\n \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 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","var WPTB_Stringifier = function ( codeMain ) {\n if ( codeMain ) {\n let code = codeMain.cloneNode( true );\n code.dataset.tableColumns = codeMain.columns;\n code.style.width = null;\n code.style.minWidth = null;\n code.style.maxWidth = null;\n\n let tds = code.getElementsByTagName( 'td' );\n if ( tds.length > 0 ) {\n for ( let i = 0; i < tds.length; i++ ) {\n\n // tds[i].removeAttribute( 'data-x-index' );\n // tds[i].removeAttribute( 'data-y-index' );\n tds[i].removeAttribute( 'draggable' );\n tds[i].classList.remove( 'wptb-droppable' );\n let infArr = tds[i].className.match( /wptb-element-((.+-)\\d+)/i );\n if(infArr) tds[i].classList.remove(infArr[0]);\n let innerElements = tds[i].getElementsByClassName( 'wptb-ph-element' );\n\n if ( innerElements.length > 0 ) {\n for ( let j = 0; j < innerElements.length; j++ ) {\n\n let mceContentBodys = innerElements[j].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 let dataMceStyle = innerElements[j].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 let contentEditable = innerElements[j].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 let spellCheck = innerElements[j].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 let mceIds = innerElements[j].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 let wptbActions = innerElements[j].querySelectorAll( '.wptb-actions' );\n let wptbActionsLength = wptbActions.length;\n while ( wptbActionsLength > 0 ) {\n if( wptbActions[0] && wptbActions[0].parentNode ) {\n wptbActions[0].parentNode.removeChild( wptbActions[0] );\n wptbActionsLength--;\n } else {\n break;\n }\n\n }\n\n let dataMceBogus = innerElements[j].querySelectorAll( '[data-mce-bogus]' );\n if( dataMceBogus.length > 0 ) {\n dataMceBogus = [...dataMceBogus];\n for( let k = 0; k < dataMceBogus.length; k++ ) {\n if( dataMceBogus[k] && dataMceBogus[k].parentNode ) {\n dataMceBogus[k].parentNode.removeChild( dataMceBogus[k] );\n }\n }\n }\n }\n }\n\n // TODO dataTitleColumnSet\n // if( tds[i].hasAttribute( 'data-wptb-title-column' ) ) {\n // let columnNameDivContainer = document.createElement( 'div' ),\n // columnNameDiv = document.createElement( 'div' );\n // columnNameDivContainer.classList.add( 'wptb-column-title-mobile-container' );\n // columnNameDiv.classList.add( 'wptb-column-title-mobile' );\n // columnNameDiv.dataset.wptbTitleColumn = tds[i].dataset.wptbTitleColumn;\n // columnNameDiv.setAttribute( 'style', 'font-size:' + tds[i].dataset.wptbTitleColumnFontSize + '; \\n\\\n // color:' + tds[i].dataset.wptbTitleColumnColor + '; background-color:' + tds[i].dataset.wptbTitleBackgroundColor + '; text-align:' + tds[i].dataset.wptbTitleAlign + ';' );\n // columnNameDiv.style.padding = tds[i].style.padding;\n // if( tds[i].children.length == 0 ) {\n // tds[i].classList.add( 'wptb-column-title-mobile-not-elements' );\n // }\n // columnNameDivContainer.appendChild( columnNameDiv );\n // tds[i].insertBefore( columnNameDivContainer, tds[i].firstChild );\n // }\n }\n }\n\n return code;\n }\n}\n","var 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 setting\n */\n // let emptySetting = document.\n const infArr = thisElem.className.match(/wptb-element-table_cell_setting-((.+-)\\d+)/i);\n if (infArr && infArr.length > 1) {\n const controlKey = 'emptyCell';\n const settingId = `wptb-el-table_cell_setting-${infArr[1]}-${controlKey}`;\n const settingElem = document.getElementById(settingId);\n if (settingElem) {\n settingElem.querySelector('input[type=\"checkbox\"]').checked = thisElem.classList.contains('wptb-empty')\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\tlet wptbSaveBtn = document.getElementsByClassName('wptb-save-btn');\n\t\tif (wptbSaveBtn.length > 0) {\n\t\t\twptbSaveBtn = wptbSaveBtn[0];\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\twptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\twptbSaveBtn.classList.remove('active');\n\t\t\t} else {\n\t\t\t\twptbSaveBtn.classList.remove('wptb-save-disabled');\n\t\t\t\twptbSaveBtn.classList.add('active');\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\tlet wptbSaveBtn = document.getElementsByClassName('wptb-save-btn');\n\t\t\tif (wptbSaveBtn.length > 0) {\n\t\t\t\twptbSaveBtn = wptbSaveBtn[0];\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\twptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t\twptbSaveBtn.classList.remove('active');\n\t\t\t\t} else {\n\t\t\t\t\twptbSaveBtn.classList.add('active');\n\t\t\t\t\twptbSaveBtn.classList.remove('wptb-save-disabled');\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\twptbSaveBtn.classList.add('wptb-save-disabled');\n\t\t\t\t\t\twptbSaveBtn.classList.remove('active');\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\tdelete window.wptbTableStateSaving;\n\t\tdelete window.wptbTableStateNumberShow;\n\n\t\tlet wptbSaveBtn = document.getElementsByClassName('wptb-save-btn');\n\t\tif (wptbSaveBtn.length > 0) {\n\t\t\twptbSaveBtn = wptbSaveBtn[0];\n\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\t};\n};\n","/**\n * Add upsell related scripts.\n */\n(function upsellsHooks() {\n\t// add pro upsells to dummy pro table elements container\n\tif (wptb_admin_object.upsells && !wptb_admin_object.upsells.pro) {\n\t\tconst dummyWrapper = document.querySelector('.wptb-panel-toggle-group[id=\"pro\"] .wptb-panel-toggle-target');\n\n\t\tconst upsellContainer = document.createElement('div');\n\t\tupsellContainer.classList.add('wptb-upsells-pro-overlay');\n\n\t\tupsellContainer.innerHTML = wptb_admin_object.upsells.elements.leftPanel;\n\n\t\tdummyWrapper.style.position = 'relative';\n\t\tdummyWrapper.appendChild(upsellContainer);\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}","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"]}