function UniteCreatorGridBuilder(){ var g_objGrid, g_dialogBrowser, g_objStyle, g_options; var g_optionsCustom = {}; var g_gridID, g_objSettingsGrid = new UniteSettingsUC(); var g_objBrowser = new UniteCreatorBrowser(); var g_objSettingsRow = new UniteSettingsUC(); var g_objDialogRowSettings; var t = this; var g_vars = { class_col: "uc-grid-col", class_first_col: "uc-col-first", class_last_col: "uc-col-last", class_empty: "uc-col-empty", class_first_row: "uc-row-first", class_last_row: "uc-row-last", class_size_prefix:"uc-colsize-", max_cols: 6 }; this.events = { ROW_COLUMNS_UPDATED: "ROW_COLUMNS_UPDATED", ROWS_UPDATED: "ROWS_UPDATED", //add, remove, reorder row ROW_ADDED: "ROW_ADDED", COL_ADDED: "COL_ADDED", COL_ADDONS_UPDATED: "ADDONS_UPDATED" } if(!g_ucAdmin) var g_ucAdmin = new UniteAdminUC(); function ____________GENERAL______________(){} /** * get element type - column, addon, row, undefined */ function getElementType(element){ if(element.hasClass("uc-grid-col")) return("column"); if(element.hasClass("uc-grid-col-addon")) return("addon"); if(element.hasClass("uc-grid-row")) return("row"); return("undefined"); } /** * do grid action */ function doGridAction(action){ switch(action){ case "add_row": addRow(); break; default: throw new Error("Wrong grid action: "+action); break; } } function ____________ROW______________(){} /** * validate row */ function validateRow(objRow){ if(!objRow) throw new Error("Empty Row Found: "+objRow); if(objRow.hasClass("uc-grid-row") == false) throw new Error("Wrong Row: "+objRow); } /** * get row html */ function getHtmlRow(){ var html = ""; html += "
"; //add row panel html += "
"; html += " "; html += " "; html += " "; html += " "; html += "
"; //add title html += ""; //add container html += "
"; html += "
"; html += "
"; return(html); } /** * add empty row */ function addEmptyRow(){ var html = getHtmlRow(); var objRow = jQuery(html); g_objGrid.append(objRow); triggerEvent(t.events.ROW_ADDED, objRow); triggerEvent(t.events.ROWS_UPDATED); return(objRow); } /** * add row to the end */ function addRow(){ var objRow = addEmptyRow(); addColumn(objRow); } /** * get all rows */ function getRows(){ var objRows = g_objGrid.children(".uc-grid-row"); return(objRows); } /** * get number of rows */ function getNumRows(){ var objRows = getRows(); var numRows = objRows.length; return(numRows); } /** * get row bu number */ function getRow(num){ if(!num) var num = 0; var objRows = getRows(); if(num >= objRows.length) throw new Error("getRow error: Row "+num+" don't exists"); var objRow = jQuery(objRows[num]); return(objRow); } /** * get row container * @param objRow */ function getRowContainer(objRow){ var objContainer = objRow.children(".uc-grid-row-container"); g_ucAdmin.validateDomElement(objContainer, "Row Container"); return(objContainer); } /** * get parent row */ function getParentRow(objChild){ var objRow = objChild.parents(".uc-grid-row"); return(objRow); } /** * get row settings */ function getRowSettings(objRow){ var objSettings = objRow.data("settings"); if(!objSettings) objSettings = {}; return(objSettings); } /** * delete row */ function deleteRow(objRow){ objRow.remove(); var numRows = getNumRows(); if(numRows == 0) addRow(); //triggers the updated event else triggerEvent(t.events.ROWS_UPDATED); } /** * update row visual css */ function updateRowVisual_css(objRow, objSettings){ //back color var cssRow = {}; cssRow = g_ucAdmin.addCssSetting(objSettings, cssRow, "row_background_color", "background-color"); cssRow = g_ucAdmin.addCssSetting(objSettings, cssRow, "row_padding_top", "padding-top","px"); cssRow = g_ucAdmin.addCssSetting(objSettings, cssRow, "row_padding_bottom", "padding-bottom","px"); //remove style objRow.removeAttr("style"); //add additional css var rowAddCss = g_ucAdmin.getVal(objSettings, "row_css", null); if(rowAddCss){ rowAddCss = g_ucAdmin.removeLineBreaks(rowAddCss); objRow.prop("style", rowAddCss); } objRow.css(cssRow); //----------- Container var strStyleContainer = ""; var containerWidth = g_ucAdmin.getVal(objSettings, "row_container_width", null); if(containerWidth){ containerWidth = g_ucAdmin.normalizeSizeValue(containerWidth); strStyleContainer += "width:" + containerWidth+";"; } //add container css var containerAddCss = g_ucAdmin.getVal(objSettings, "row_container_css", null); if(containerAddCss){ containerAddCss = g_ucAdmin.removeLineBreaks(containerAddCss); strStyleContainer += containerAddCss; } var objContainer = getRowContainer(objRow); //remove style objContainer.removeAttr("style"); if(strStyleContainer){ objContainer.prop("style", strStyleContainer); } // row - col - addons var addonBoxStyle = ""; var objAddons = getRowAddons(objRow); var spaceBetweenAddons = g_ucAdmin.getVal(objSettings, "space_between_addons", null); if(spaceBetweenAddons){ spaceBetweenAddons = g_ucAdmin.normalizeSizeValue(spaceBetweenAddons); addonBoxStyle += "margin-top:" + spaceBetweenAddons+";"; } jQuery.each(objAddons, function(index, addon){ var objAddon = jQuery(addon); var addonIndex = objAddon.index(); if(addonIndex != 0) objAddon.prop("style", addonBoxStyle); else objAddon.prop("style", ""); }); } /** * update row title object */ function updateRowVisual_title(objRow, objSettings){ //update row title: var rowTitle = g_ucAdmin.getVal(objSettings, "row_title","",g_ucAdmin.getvalopt.TRIM); var showTitle = false; if(rowTitle) showTitle = true; //turn of by local or global setting if(showTitle == true){ var showTitleText = g_ucAdmin.getVal(objSettings, "row_show_title"); if(showTitleText == "default") showTitleText = getGridOption("show_row_titles"); if(showTitleText == "default") showTitleText = getGridOption("show_row_titles_global"); if(showTitleText == "no") showTitle = false; } //show or hide title var objTitle = objRow.children(".uc-grid-row-title"); if(showTitle == true){ objTitle.show(); objTitle.html(rowTitle); }else objTitle.hide(); } /** * update row css */ function updateRowVisual(objRow){ var objSettings = objRow.data("settings"); updateRowVisual_css(objRow, objSettings); updateRowVisual_title(objRow, objSettings); } /** * set row settings, update css */ function updateRowSettings(objRow, objSettings){ objRow.data("settings", objSettings); updateRowVisual(objRow); } /** * duplicate row */ function duplicateRow(objRow){ var objRowCopy = objRow.clone(true, true); objRowCopy.insertAfter(objRow); triggerEvent(t.events.ROWS_UPDATED); } /** * redraw row */ function redrawRow(objRow){ trace("redraw"); } /** * do action */ function doRowAction(action, objRow){ switch(action){ case "add_row": addRow(); break; case "delete_row": deleteRow(objRow); break; case "duplicate_row": duplicateRow(objRow); break; case "row_settings": openRowSettingsDialog(objRow); break; default: trace("wrong row action: " + action); break; } } function ____________MULTIPLE_ROWS______________(){} /** * update all rows visual */ function updateAllRowsVisual(){ var rows = getRows(); jQuery.each(rows,function(index, row){ var objRow = jQuery(row); updateRowVisual(objRow); }); } /** * update classes of all rows */ function updateRowsClasses(){ var objRows = getRows(); var numRows = getNumRows(); jQuery.each(objRows, function(key, row){ var rowClass = "uc-grid-row"; if(key == 0) rowClass += " uc-row-first"; if(key == (numRows-1)) rowClass += " uc-row-last"; row.className = rowClass; }) } function ____________COLUMN______________(){} /** * validate that the object is column */ function validateCol(objCol){ g_ucAdmin.validateDomElement(objCol, "column"); if(objCol.hasClass("uc-grid-col") == false) throw new Error("The object is not column type"); } /** * get html columns */ function getHtmlColumn(){ var html = ""; html += "
"; //add columns buttons html += " "; html += " "; html += "
"; //top panel html += "
"; html += "
"; html += " "; html += " "; html += " "; //html += " "; html += "
"; html += "
"; html += "
"; //middle content html += "
"; //set addon html += "
"; html += "
"; html += "
"+g_uctext.set_addon+"
"; html += "
"; html += "
"; html += "
"; html += "
"; //col addons html += "
"; //middle content //bottom panel html += "
"; html += " "; html += "
"; html += "
"; //box wrapper end html += "
" //col; return(html); } /** * get num columns in row */ function getCols(objRow, novalidate){ var objContainer = getRowContainer(objRow); var objCols = objContainer.children(".uc-grid-col"); if(objCols.length == 0 && !novalidate) throw new Error("getCols error - row should have at least 1 column"); return(objCols); } /** * get column by number */ function getCol(objRow, numCol){ var objCols = getCols(objRow); if(numCol >= objCols.length) throw new Error("There is no col number: "+numCol+" in the row"); var objCol = jQuery(objCols[numCol]); return(objCol); } /** * get parent column */ function getParentCol(objChild){ var objCol = objChild.parents(".uc-grid-col"); return(objCol); } /** * get number of columns in row */ function getNumCols(objRow){ validateRow(objRow); var objCols = getCols(objRow, true); var numCols = objCols.length; return(numCols); } /** * get addons wrapper */ function getColAddonsWrapper(objCol){ var objAddonsWrapper = objCol.find(".uc-grid-col-addons"); g_ucAdmin.validateDomElement(objAddonsWrapper, "col addons wrapper"); return(objAddonsWrapper); } /** * check if it's first column */ function isFirstCol(objCol){ var isFirst = objCol.hasClass("uc-col-first"); return isFirst; } /** * check if it's last column */ function isLastCol(objCol){ var isLast = objCol.hasClass("uc-col-last"); return isLast; } /** * add empty column * the mode can be: empty, before, after */ function addColumn(objRow, objCol, mode){ if(!objRow){ if(objCol) var objRow = getParentRow(objCol); else var objRow = getRow(); } //check the limits var numCols = getNumCols(objRow); if(numCols == g_vars.max_cols) return(false); //add the column var htmlCol = getHtmlColumn(); var objNewCol = jQuery(htmlCol); //insert before or after column objNewCol.hide(); if(objCol){ switch(mode){ case "before": objNewCol.insertBefore(objCol); break; case "after": objNewCol.insertAfter(objCol); break; default: break; } }else{ //insert last column var objContainer = getRowContainer(objRow); objContainer.append(objNewCol); } triggerEvent(t.events.ROW_COLUMNS_UPDATED, objRow); triggerEvent(t.events.COL_ADDED, objNewCol); //show the column after transition setTimeout(function(){ objNewCol.show(); },350); return(objNewCol); } /** * duplicate column */ function duplicateCol(objCol){ var objRow = getParentRow(objCol); var objColCopy = objCol.clone(true, true); objColCopy.insertAfter(objCol); triggerEvent(t.events.ROW_COLUMNS_UPDATED, objRow); } /** * * @param objCol */ function deleteCol(objCol){ var objRow = getParentRow(objCol); var numCols = getNumCols(objRow); if(numCols <= 1){ alert("Can't delete last column"); return(false); } objCol.remove(); triggerEvent(t.events.ROW_COLUMNS_UPDATED, objRow); } /** * do column action */ function doColAction(objCol, action){ switch(action){ case "delete": deleteCol(objCol); break; case "duplicate": duplicateCol(objCol); break; case "stretch": trace("stretch"); break; case "addcol_before": addColumn(null, objCol, "before"); break; case "addcol_after": addColumn(null, objCol, "after"); break; case "add_col_addon": openAddonsBrowser(objCol, true); break; default: trace("wrong col action: "+action); break; } } /** * update row columns classes */ function updateColsClasses(objRow){ var objCols = getCols(objRow); var numCols = objCols.length; var colWidth = 1; //temp value, num cells that it take var classColSize = g_vars.class_size_prefix + colWidth+ "_" + numCols; objCols.each(function(num, col){ var isFirst = (num == 0); var isLast = (num == numCols-1); var objCol = jQuery(col); var isEmpty = objCol.hasClass(g_vars.class_empty); //set class var classCol = g_vars.class_col; if(isFirst) classCol += " "+g_vars.class_first_col; if(isLast) classCol += " "+g_vars.class_last_col; if(isEmpty) classCol += " "+g_vars.class_empty; classCol += " " + classColSize; classCol += " uc-col-trans"; col.className = classCol; }); } /** * set the add col icon active / not active */ function activateAddColIcon(objIcon, isActivate){ if(isActivate){ objIcon.addClass("uc-icon-active"); } else{ objIcon.removeClass("uc-icon-active"); } } /** * check row related buttons after the row is changed */ function updateColOperationButtons(objRow){ var numCols = getNumCols(objRow); var objCols = getCols(objRow); var isHideAll = false; if(numCols >= g_vars.max_cols) isHideAll = true; jQuery.each(objCols, function(key, col){ var objCol = jQuery(col); var showLeftIcon = false; var showRightIcon = true; if(isHideAll == true){ showRightIcon = false }else if(isFirstCol(objCol) == true) showLeftIcon = true; //show the buttons var objLeftIcon = objCol.find(".uc-icon-addcol.uc-addcol-before"); var objRightIcon = objCol.find(".uc-icon-addcol.uc-addcol-after"); activateAddColIcon(objLeftIcon, showLeftIcon); activateAddColIcon(objRightIcon, showRightIcon); }); } /** * set col empty state visual */ function setColEmptyStateVisual(objCol, isEmpty){ var objOverlayEmpty = objCol.find(".uc-grid-overlay-empty"); var objIconAddMore = objCol.find(".uc-icon-add-more-addon"); if(isEmpty == true){ objOverlayEmpty.show(); objIconAddMore.hide(); //empty column }else{ objOverlayEmpty.hide(); //has addons objIconAddMore.show(); } } function ____________COL_ADDON_ELEMENT______________(){} /** * validate that the column element is col addon type */ function validateColAddonElement(objElement){ //validate type var type = getElementType(objElement); if(type != "addon") throw new Error("The element must be addons type"); //validate single if(objElement.length > 1){ trace(objElement); throw new Error("The addon element should be sinlge"); } } /** * get col addons data */ function getColAddons(objCol){ validateCol(objCol); var objAddonsWrapper = getColAddonsWrapper(objCol); var objAddons = objAddonsWrapper.children(".uc-grid-col-addon").not(".uc-grid-overlay-empty"); return(objAddons); } /** * get row addons */ function getRowAddons(objRow){ validateRow(objRow); var objAddons = objRow.find(".uc-grid-col-addon").not(".uc-grid-overlay-empty"); return(objAddons); } /** * get number of col addons */ function getNumColAddons(objCol){ validateCol(objCol); var objAddons = getColAddons(objCol); var numAddons = objAddons.length; return(numAddons); } /** * get the html */ function generateAddonHtml_getHTMLBack(addon_name, url_icon, title){ url_icon = g_ucAdmin.escapeDoubleQuote(url_icon); title = g_ucAdmin.htmlspecialchars(title); var html = ""; html += "
"; html += "
"; html += " "; html += " "+title+""; html += "
"; html += " "; html += "
"; return(html); } /** * generate addon html */ function generateAddonHtml(addonData){ var extra = g_ucAdmin.getVal(addonData,"extra"); if(extra){ var title = addonData.extra.title; var url_icon = addonData.extra.url_icon; }else{ var title = addonData.title; var url_icon = addonData.url_icon; } var addon_name = addonData.name; var data = { addon_name: addon_name, addonData: addonData }; //get front end html /* g_ucAdmin.ajaxRequest("get_addon_output_data", data, function(response){ trace(response); }); */ //back end html htmlBack = generateAddonHtml_getHTMLBack(addon_name, url_icon, title); return(htmlBack); } /** * get parent row */ function getParentAddonElement(objChild){ var objAddon = objChild.parents(".uc-grid-col-addon"); g_ucAdmin.validateDomElement(objAddon, "addon holder"); return(objAddon); } /** * hide addon overlay */ function showAddonOverlay(objAddon, toShow){ var objOverlay = objAddon.find(".uc-grid-overlay-edit"); var objMoveIcon = objAddon.find(".uc-addon-icon-move"); if(toShow == true){ var isSingleAddon = isSingleAddonInGrid(objAddon); objOverlay.show(); if(isSingleAddon == true) objMoveIcon.hide(); else objMoveIcon.show(); }else{ objOverlay.hide(); } } /** * show/hide move icon when number addons = 1,columns = 1,rows = 1 */ function isSingleAddonInGrid(objAddon){ var objCol = getParentCol(objAddon); var numRows = getNumRows(); if(numRows>1) return(false); var objRow = getParentRow(objCol); var numColums = getNumCols(objRow); if(numColums >1) return(false); var numAddons = getNumColAddons(objCol); if(numAddons > 1) return(false); return(true); } /** * delete column addon */ function deleteColAddon(objAddon){ validateColAddonElement(objAddon); var objCol = getParentCol(objAddon); objAddon.remove(); var numAddons = getNumColAddons(objCol); triggerEvent(t.events.COL_ADDONS_UPDATED, objCol); } /** * duplicate col addon */ function duplicateColAddon(objAddon){ validateColAddonElement(objAddon); var objAddonCopy = objAddon.clone(true, true); showAddonOverlay(objAddonCopy); objAddonCopy.insertAfter(objAddon); var objCol = getParentCol(objAddon); triggerEvent(t.events.COL_ADDONS_UPDATED, objCol); } /** * do addon element related action */ function doAddonAction(objAddon, action){ validateColAddonElement(objAddon); switch(action){ case "edit_addon": openAddonsBrowser(objAddon); break; case "delete_addon": deleteColAddon(objAddon); break; case "duplicate_addon": duplicateColAddon(objAddon); break; default: throw new Error("Wrong addon action: "+action); break; } } function ____________ADDONS______________(){} /** * save addon element data */ function saveAddonElementData(objAddon, addonData){ validateColAddonElement(objAddon); var addonName = addonData.name; objAddon.data("addon_name", addonName); objAddon.data("addon_data", addonData); } /** * update column with addon data */ function addColAddon(objCol, addonData){ if(jQuery.isArray(addonData)) return(false); var objAddonsWrapper = getColAddonsWrapper(objCol); //save data var htmlAddon = generateAddonHtml(addonData); var objHtml = jQuery(htmlAddon); saveAddonElementData(objHtml, addonData); objAddonsWrapper.append(objHtml); triggerEvent(t.events.COL_ADDONS_UPDATED, objCol); } /** * update obj addon */ function updateColAddon(objAddon, addonData){ g_ucAdmin.validateNotEmpty(addonData, "addon data"); validateColAddonElement(objAddon); var htmlAddon = generateAddonHtml(addonData); var objAddonNew = jQuery(htmlAddon); objAddon.replaceWith(objAddonNew); saveAddonElementData(objAddonNew, addonData); } /** * get col addon data */ function getColAddonData(objAddon){ validateColAddonElement(objAddon); var objData = objAddon.data("addon_data"); if(!objData) objData = null; return(objData); } /** * get col addons data */ function getColAddonsData(objCol){ var objAddons = getColAddons(objCol); var arrData = []; jQuery.each(objAddons, function(index, addon){ var objAddon = jQuery(addon); var objData = getColAddonData(objAddon); arrData.push(objData); }); return(arrData); } /** * open addons browser, for column - add new, for addon - update */ function openAddonsBrowser(objElement){ var isNew = true; var type = getElementType(objElement); if(type == "addon") isNew = false; var buttonOpts = {}; //cancel button buttonOpts[g_uctext.cancel] = function(){ g_dialogBrowser.dialog("close"); }; var buttonText = g_uctext.update; if(isNew == true) buttonText = g_uctext.set_addon; //update button buttonOpts[buttonText] = function(){ var addonData = g_objBrowser.getCurrentAddonData(); if(addonData){ if(isNew == true) addColAddon(objElement, addonData); else{ updateColAddon(objElement, addonData); } } g_dialogBrowser.dialog("close"); } g_dialogBrowser.dialog({ dialogClass:"unite-ui", buttons:buttonOpts, minWidth:1000, modal:true, create:function () { var objButton = g_ucAdmin.dialogAddLeftButton(jQuery(this),"Choose Another Addon"); g_objBrowser.setObjBackButton(objButton); }, open:function(){ g_objBrowser.onShowBrowser(); if(isNew == false){ var objData = getColAddonData(objElement); g_objBrowser.setAddonMode(objData, true); }else{ g_objBrowser.setBrowserMode(); } } }); } function ____________________GET_DATA________________(){} /** * get columns data */ function getGridData_cols(objRow){ var objCols = getCols(objRow); var dataCols = []; //create col data jQuery.each(objCols,function(colIndex, col){ var objCol = jQuery(col); var dataCol = {}; dataCol.addon_data = getColAddonsData(objCol); dataCols.push(dataCol); }); return(dataCols); } /** * get row data */ function getGridData_row(objRow){ var dataRow = {}; dataRow.cols = getGridData_cols(objRow); var rowSettings = objRow.data("settings"); if(rowSettings) dataRow.settings = rowSettings; return(dataRow); } /** * get grid rows */ function getGridData_rows(){ var dataRows = []; var objRows = getRows(); jQuery.each(objRows, function(index, row){ var objRow = jQuery(row); var dataRow = getGridData_row(objRow); dataRows.push(dataRow); }); return(dataRows); } /** * get grid data */ function getGridData(){ var data = {}; data.rows = getGridData_rows(); if(g_optionsCustom) data.options = g_optionsCustom; return(data); } /** * get grid data */ this.getGridData = function(){ var objData = getGridData(); return(objData); } function ____________GRID_SETTINGS______________(){} /** * get grid option */ function getGridOption(name){ var gridOptions = getCombinedOptions(); var value = g_ucAdmin.getVal(gridOptions, name); return(value); } /** * get combined options */ function getCombinedOptions(){ if(!g_optionsCustom) g_optionsCustom = {}; var objOptions = {}; jQuery.extend(objOptions, g_options, g_optionsCustom); return(objOptions); } /** * put css based on the options */ function putGeneratedCss(){ var br = "\n"; var tab = " "; var objOptions = getCombinedOptions(); var css = ""; g_ucAdmin.validateObjProperty(objOptions, ["col_gutter", "col_border_gutter", "row_gutter", "row_container_width", "row_title_global_css", "row_title_css", "row_titles_css_type" ],"grid options"); //row css css += g_gridID+" .uc-grid-row{"+br; css += tab+"padding-top:"+objOptions.row_gutter+"px;"+br; css += tab+"padding-bottom:"+objOptions.row_gutter+"px;"+br; css += "}"+br+br; //add row first and last child css += g_gridID+" .uc-grid-row{"+br; css += tab+"padding-top:"+objOptions.row_gutter+"px;"+br; css += tab+"padding-bottom:"+objOptions.row_gutter+"px;"+br; css += "}"+br+br; css += g_gridID+" .uc-grid-row.uc-row-first{padding-top:0px;}"+br; css += g_gridID+" .uc-grid-row.uc-row-last{padding-bottom:0px;}"+br+br; //row title css var rowTitleCss = jQuery.trim(objOptions.row_title_global_css); var rowTitleLocalCss = jQuery.trim(objOptions.row_title_css) if(objOptions.row_titles_css_type == "override") rowTitleCss = rowTitleLocalCss; else{ //add rowTitleCss += rowTitleLocalCss; } css += g_gridID+" .uc-grid-row .uc-grid-row-title{"+br; css += rowTitleCss css += "}"+br+br; //row container css css += g_gridID+" .uc-grid-row .uc-grid-row-container{"+br; css += tab+"width:"+g_ucAdmin.normalizeSizeValue(objOptions.row_container_width)+";"+br; css += "}"+br+br; //column css css += g_gridID+" .uc-grid-row .uc-grid-col{"+br; //add gutter css += tab+"padding-left:"+objOptions.col_gutter+"px;"+br; css += tab+"padding-right:"+objOptions.col_gutter+"px;"+br; css += "}"+br; //first and last column var borderGutter = objOptions.col_border_gutter; borderGutter = jQuery.trim(borderGutter); if(borderGutter !== ""){ //first column css += g_gridID+" .uc-grid-row .uc-grid-col.uc-col-first{"+br; css += tab+"padding-left:"+borderGutter+"px;"+br; css += "}"+br; //last column css += g_gridID+" .uc-grid-row .uc-grid-col.uc-col-last{"+br; css += tab+"padding-right:"+borderGutter+"px;"+br; css += "}"+br; } g_objStyle.html(css); } /** * on grid settings click */ function openGridSettingsDialog(){ var dialogOptions = { minWidth:750 }; jQuery("#uc_dialog_grid_settings_action").show(); jQuery("#uc_dialog_grid_settings_success").hide(); g_ucAdmin.openCommonDialog("#uc_dialog_grid_settings" , null , dialogOptions); } /** * update options from settings dialog */ function updateOptionsFromSettingsDialog(){ var objValues = g_objSettingsGrid.getSettingsValues(); //update custom options, skip empty values g_optionsCustom = {}; jQuery.each(objValues, function(option, val){ if(!val || jQuery.trim(val) == "") return(true); //convert to int if(typeof val == "string" && jQuery.isNumeric(val)) val = parseInt(val); g_optionsCustom[option] = val; }); putGeneratedCss(); } /** * on update grid settings click */ function onUpdateGridSettingsClick(){ //visualize close jQuery("#uc_dialog_grid_settings_action").hide(); jQuery("#uc_dialog_grid_settings_success").show(); setTimeout(function(){ jQuery("#uc_dialog_grid_settings").dialog("close"); updateOptionsFromSettingsDialog(); updateAllRowsVisual(); }, 300); } /** * init grid settings related, style, options, dialogs */ function initGridSettings(){ //init style object g_objStyle = objWrapper.children("style"); g_ucAdmin.validateDomElement(g_objStyle, "style tag"); //init options g_options = g_objGrid.data("options"); if(!g_options) throw new Error("Should be passed some options!"); g_objGrid.removeAttr("data-options"); //remove attribute for not interfere //init settings object var objSettingsWrapper = jQuery("#uc_settings_grid"); g_ucAdmin.validateDomElement(objSettingsWrapper, "settings wrapper"); g_objSettingsGrid.init(objSettingsWrapper); //init settings related events: jQuery("#uc_button_grid_settings").click(openGridSettingsDialog); jQuery("#uc_dialog_grid_settings_action").click(onUpdateGridSettingsClick); } function ____________ROW_SETTINGS______________(){} /** * open row settings dialog */ function openRowSettingsDialog(objRow){ var dialogOptions = { minWidth:700 }; jQuery("#uc_dialog_row_settings_action").show(); jQuery("#uc_dialog_row_settings_success").hide(); g_objDialogRowSettings.data("active_row", objRow); g_ucAdmin.openCommonDialog("#uc_dialog_row_settings" , function(){ //on open - set setting values var objSettingsData = getRowSettings(objRow); g_objSettingsRow.setValues(objSettingsData); } , dialogOptions); } /** * on update row settings click */ function onUpdateRowSettingsClick(){ //visualize close jQuery("#uc_dialog_row_settings_action").hide(); jQuery("#uc_dialog_row_settings_success").show(); setTimeout(function(){ jQuery("#uc_dialog_row_settings").dialog("close"); var objRow = g_objDialogRowSettings.data("active_row"); if(!objRow) throw new Error("Active row not found"); var objSettingsData = g_objSettingsRow.getSettingsValues(); updateRowSettings(objRow, objSettingsData); }, 300); } /** * init grid settings related, style, options, dialogs */ function initRowSettings(){ g_objDialogRowSettings = jQuery("#uc_dialog_row_settings"); g_ucAdmin.validateDomElement(g_objDialogRowSettings, "row settings dialog"); var objSettingsWrapper = jQuery("#uc_settings_grid_row"); g_ucAdmin.validateDomElement(objSettingsWrapper, "row settings wrapper"); g_objSettingsRow.init(objSettingsWrapper); //init settings related events: jQuery("#uc_dialog_row_settings_action").click(onUpdateRowSettingsClick); } function ____________EVENTS______________(){} /** * grigger event */ function triggerEvent(eventName, options){ g_objGrid.trigger(eventName, options); } /** * on some event */ function onEvent(eventName, func){ g_objGrid.on(eventName, func); } /** * on rows updated * happends on add / update / delete / reorder row */ function onRowsUpdated(event){ updateRowsClasses(); } /** * on add column */ function onRowColumnsUpdated(event, objRow){ objRow = jQuery(objRow); updateColsClasses(objRow); updateColOperationButtons(objRow); } /** * on col addons updated function * show / hide empty visual if no addons */ function onColAddonsUpdated(event, objCol, origEvent){ objCol = jQuery(objCol); var numAddons = getNumColAddons(objCol); if(origEvent == "sortchange") numAddons--; if(numAddons == 0) setColEmptyStateVisual(objCol, true); else setColEmptyStateVisual(objCol, false); } /** * on col or row action icon click */ function onActionIconClick(){ var objIcon = jQuery(this); var action = objIcon.data("action"); var actionType = objIcon.data("actiontype"); if(!action || action == "") throw new Error("wrong icon action"); switch(actionType){ case "grid": doGridAction(action); break; case "col": var objAddon = getParentCol(objIcon); doColAction(objAddon, action); break; case "row": var objRow = getParentRow(objIcon); doRowAction(action, objRow); break; case "addon": var objAddon = getParentAddonElement(objIcon); doAddonAction(objAddon, action); break; default: throw new Error("Wrong action type: " + actionType); break; } } /** * on row mouse over */ function onRowMouseOver(){ var objRow = jQuery(this); objRow.addClass("uc-row-over"); } /** * on row mouse out */ function onRowMouseOut(){ var objRow = jQuery(this); objRow.removeClass("uc-row-over"); } /** * on column mouse enter */ function onColAddonMouseOver(){ var objAddon = jQuery(this); showAddonOverlay(objAddon, true); } /** * on column mouse out */ function onColAddonMouseOut(){ var objAddon = jQuery(this); showAddonOverlay(objAddon, false); } /** * init new row events */ function initNewRowEvents(event, objRow){ jQuery(objRow).sortable({ items: ".uc-grid-col", handle: ".uc-col-icon-move", cursor: "move", axis: "x", update: function(event, ui){ var objCol = ui.item; var objRow = getParentRow(objCol); triggerEvent(t.events.ROW_COLUMNS_UPDATED, objRow); } }); } /** * on sortable addons change */ function onSortableAddonsChanged(event, ui){ var objAddon = ui.item; var objCol = getParentCol(objAddon); triggerEvent(t.events.COL_ADDONS_UPDATED, [objCol, event.type]); } /** * init the events */ function initEvents(){ onEvent(t.events.ROW_COLUMNS_UPDATED, onRowColumnsUpdated); onEvent(t.events.ROWS_UPDATED, onRowsUpdated); onEvent(t.events.ROW_ADDED, initNewRowEvents); onEvent(t.events.COL_ADDONS_UPDATED, onColAddonsUpdated) g_objGrid.delegate(".uc-grid-col .uc-grid-col-addon", "mouseenter", onColAddonMouseOver); g_objGrid.delegate(".uc-grid-col .uc-grid-col-addon", "mouseleave", onColAddonMouseOut); g_objGrid.delegate(".uc-grid-row","mouseenter",onRowMouseOver); g_objGrid.delegate(".uc-grid-row","mouseleave",onRowMouseOut); jQuery("#uc_grid_builder_bottom_panel .uc-grid-action-icon").click(onActionIconClick); g_objGrid.delegate(".uc-grid-action-icon", "click", onActionIconClick); //init sortable rows g_objGrid.sortable({ handle: ".uc-row-icon-move", axis: "y", update: function(){ triggerEvent(t.events.ROWS_UPDATED); } }); //init sortable addons var objGridOuter = g_objGrid.parents(".uc-grid-builder-outer"); objGridOuter.sortable({ items: ".uc-grid-col-addon", handle: ".uc-addon-icon-move", cursor: "move", axis: "y,x", change: onSortableAddonsChanged, update: onSortableAddonsChanged }); } /** * init tipsy */ function initTipsy(){ if(typeof jQuery("body").tipsy != "function") return(false); var tipsyOptions = { html:true, gravity:"s", delayIn: 1000, selector: ".uc-tip" }; g_objGrid.tipsy(tipsyOptions); } function ____________INIT______________(){} /** * init rows */ function initByData_rows(rows){ jQuery.map(rows, function(row){ var objRow = addEmptyRow(); if(row.hasOwnProperty("settings") && typeof row.settings == "object"){ updateRowSettings(objRow, row.settings); } g_ucAdmin.validateObjProperty(row, "cols"); var cols = row.cols; jQuery.map(cols,function(col){ var objCol = addColumn(objRow); var addonsData = col.addon_data; if(jQuery.isArray(addonsData)){ //add addons jQuery.map(addonsData, function(addonData){ addColAddon(objCol, addonData); }); }else{ //single - old way if(addonsData) addColAddon(objCol, addonsData); } }); }); } /** * init options by data */ function initByData_options(options){ g_optionsCustom = options; g_objSettingsGrid.setValues(g_optionsCustom); } /** * init the builder by data */ function initByData(initData){ g_ucAdmin.validateObjProperty(initData, "rows"); //init options if(initData.hasOwnProperty("options")) initByData_options(initData.options); //init rows if(initData.hasOwnProperty("rows")) initByData_rows(initData.rows); } /** * init grid */ this.init = function(gridID){ g_objGrid = jQuery(gridID); if(g_objGrid.length == 0) throw new Error("grid object: " + gridID + " not found"); g_gridID = gridID; objWrapper = g_objGrid.parents(".uc-grid-builder-wrapper"); //init browser g_dialogBrowser = objWrapper.find(".uc-grid-builder-dialog-browser"); g_ucAdmin.validateDomElement(g_dialogBrowser, "dialog browser"); var browserWrapper = objWrapper.find(".uc-browser-wrapper"); g_objBrowser.init(browserWrapper); initEvents(); initGridSettings(); initRowSettings(); //add the data var initData = g_objGrid.data("init"); if(initData){ initByData(initData); g_objGrid.removeAttr("data-init"); //remove attribute for not interfere } else addRow(); //put the css by the options putGeneratedCss(); //initTipsy(); } }