(function($, window, document) {
var $body = $("body");
// On Load
$(window).on("load", function() {
window.mainTree = function(completeEvent) {
var melisExtensions;
var $tabArrowTop = $("#tab-arrow-top");
if (melisCore.screenSize <= 767) {
melisExtensions = ["contextMenu", "filter", "glyph"];
} else {
melisExtensions = ["contextMenu", "dnd", "filter", "glyph", "persist"];
}
$("#id-mod-menu-dynatree").fancytree({
extensions: melisExtensions,
glyph: {
map: {
loading: "fa fa-spinner fa-pulse",
//loading: "glyphicon-refresh fancytree-helper-spin" // edited by junry
},
},
persist: {
cookiePrefix: "fancytree-1-",
expandLazy: true,
overrideSource: true, // true: cookie takes precedence over `source` data attributes.
store: "auto", // 'cookie', 'local': use localStore, 'session': sessionStore
},
activeVisible: false,
debugLevel: 0,
autoScroll: true,
generateIds: true,
idPrefix: "mt_",
tabindex: "",
toggleEffect: {
height: "toggle",
duration: 250,
},
source: {
url: "/melis/MelisCms/TreeSites/get-tree-pages-by-page-id",
cache: true,
},
contextMenu: {
menu: {
new: {
name: translations.tr_meliscms_menu_new,
icon: "paste",
},
edit: {
name: translations.tr_meliscms_menu_edit,
icon: "edit",
},
delete: {
name: translations.tr_meliscms_menu_delete,
icon: "delete",
},
dupe: {
name: translations.tr_meliscms_menu_dupe,
icon: "copy",
},
export: {
name: translations.tr_melis_cms_tree_export_page,
icon: "export",
},
import: {
name: translations.tr_melis_cms_page_tree_import,
icon: "import",
},
},
actions: function(node, action, options) {
if (action === "new") {
var data = node.data;
//close page creation tab and open new one (in case if its already open - updated parent ID)
melisHelper.tabClose("0_id_meliscms_page");
melisHelper.tabOpen(
translations.tr_meliscms_page_creation,
"fa-file-text-o",
"0_id_meliscms_page",
"meliscms_page_creation",
{
idPage: 0,
idFatherPage: data.melisData.page_id,
}
);
}
if (action === "edit") {
var data = node.data;
melisHelper.tabOpen(
data.melisData.page_title,
data.iconTab,
data.melisData.item_zoneid,
data.melisData.item_melisKey,
{
idPage: data.melisData.page_id,
}
);
}
if (action === "delete") {
var data = node.data;
var zoneId = data.melisData.item_zoneid;
var idPage = data.melisData.page_id;
var parentNode =
node.getParent().key == "root_1" ? -1 : node.getParent().key;
var $resetView = $("#leftResetTreeView");
// var parentNode = ( node.key == 'root_1') ? -1 : node.getParent().key;
// check if page to be delete is open or not
var openedOrNot = $(
".tabsbar a[data-id='" + zoneId + "']"
).parent("li");
// delete page confirmation
melisCoreTool.confirm(
translations.tr_meliscms_menu_delete,
translations.tr_meliscms_menu_cancel,
translations.tr_meliscms_delete_confirmation,
translations.tr_meliscms_delete_confirmation_msg,
function() {
// reload and expand the treeview
melisCms.refreshTreeview(parentNode, 1);
// check if node has children if TRUE then cannot be deleted
$.ajax({
url: "/melis/MelisCms/Page/deletePage?idPage=" + idPage,
encode: true,
})
.done(function(data) {
if (data.success === 1) {
//close the page if its open. do nothing if its not open
if (openedOrNot.length === 1) {
melisHelper.tabClose(zoneId);
}
// notify deleted page
melisHelper.melisOkNotification(
data.textTitle,
data.textMessage,
"#72af46"
);
// update flash messenger values
melisCore.flashMessenger();
} else {
melisHelper.melisKoNotification(
data.textTitle,
data.textMessage,
data.errors,
"#000"
);
}
})
.fail(function(xhr, textStatus, errorThrown) {
alert(translations.tr_meliscore_error_message);
});
}
);
}
if (action === "dupe") {
var data = node.data;
// melisHelper.tabOpen( data.melisData.page_title, data.iconTab, data.melisData.item_zoneid, data.melisData.item_melisKey, { sourcePageId: data.melisData.page_id } );
// initialation of local variable
zoneId = "id_meliscms_tools_tree_modal_form_handler";
melisKey = "meliscms_tools_tree_modal_form_handler";
modalUrl =
"melis/MelisCms/TreeSites/renderTreeSitesModalContainer";
// requesitng to create modal and display after
melisHelper.createModal(
zoneId,
melisKey,
false,
{
sourcePageId: data.melisData.page_id,
},
modalUrl,
function() {}
);
}
if (action === "export" || action === "import") {
var modalUrl =
"/melis/MelisCms/Page/renderPageExportImportModalHandler";
var data = node.data;
if (action === "export") {
melisHelper.createModal(
"id_meliscms_page_export_modal",
"meliscms_page_export_modal",
true,
{ pageId: data.melisData.page_id },
modalUrl,
function() {}
);
} else {
melisHelper.createModal(
"id_meliscms_page_import_modal",
"meliscms_page_import_modal",
true,
{
pageId: data.melisData.page_id,
},
modalUrl,
function() {}
);
}
}
},
},
lazyLoad: function(event, data) {
// get the page ID and pass it to lazyload
var pageId = data.node.data.melisData.page_id;
data.result = {
url:
"/melis/MelisCms/TreeSites/get-tree-pages-by-page-id?nodeId=" +
pageId,
data: {
mode: "children",
parent: data.node.key,
},
cache: false,
};
},
create: function(event, data) {
melisHelper.loadingZone($("#treeview-container"));
},
init: function(event, data, flag) {
melisHelper.removeLoadingZone($("#treeview-container"));
// focus search box
$("input[name=left_tree_search]").trigger("focus");
var tree = $("#id-mod-menu-dynatree").fancytree("getTree");
if (tree.count() === 0) {
$(".meliscms-search-box.sidebar-treeview-search").hide();
// Checking if the user has a Page rights to access
// -1 is the value for creating new page right
$.get(
"/melis/MelisCms/TreeSites/checkUserPageTreeAccress",
{
idPage: -1,
},
function(res) {
if (res.isAccessible) {
$("#id-mod-menu-dynatree").prepend(
"<div class='create-newpage'><span class='btn btn-success'>" +
translations.tr_meliscms_create_page +
"</span></div>"
);
}
}
);
} else {
$(".meliscms-search-box.sidebar-treeview-search").show();
$("#id-mod-menu-dynatree .create-newpage").remove();
}
},
click: function(event, data) {
targetType = data.targetType;
if (targetType === "title") {
data.node.setExpanded();
// open page on click on mobile . desktop is double click
if (melisCore.screenSize <= 1024) {
var data = data.node.data;
var pageName =
data.melisData.page_id + " - " + data.melisData.page_title;
melisHelper.tabOpen(
pageName,
data.iconTab,
data.melisData.item_zoneid,
data.melisData.item_melisKey,
{
idPage: data.melisData.page_id,
},
null,
() => {
melisCms.pageTabOpenCallback(data.melisData.page_id);
// show page loader
loader.addActivePageEditionLoading(
data.melisData.item_zoneid
);
}
);
}
}
$(".hasNiceScroll")
.getNiceScroll()
.resize();
if ($tabArrowTop.length) {
$tabArrowTop.removeClass("hide-arrow");
}
},
dblclick: function(event, data) {
/**
* Get eventType to know what was clicked the 'expander (+-)' or the title
* targetType = data.targetType;
*/
// open tab and page
var data = data.node.data,
pageName =
data.melisData.page_id + " - " + data.melisData.page_title;
melisHelper.tabOpen(
pageName,
data.iconTab,
data.melisData.item_zoneid,
data.melisData.item_melisKey,
{
idPage: data.melisData.page_id,
},
null,
() => {
melisCms.pageTabOpenCallback(data.melisData.page_id);
// show page loader
loader.addActivePageEditionLoading(data.melisData.item_zoneid);
}
);
$(".hasNiceScroll")
.getNiceScroll()
.resize();
return false;
},
loadChildren: function(event, data) {
//RUNS ONLY ONCE
// if there is no/empty pages in the treeview
//var tree = $("#id-mod-menu-dynatree").fancytree("getTree");
/* // PAGE ACCESS user rights checking
$.ajax({
url : '/melis/MelisCms/TreeSites/canEditPages',
encode : true
}).done(function(data){
// has no access
if(data.edit === 0){
$(".meliscms-search-box.sidebar-treeview-search").hide();
$("#id-mod-menu-dynatree").prepend("<div class='create-newpage'><span class='no-access'>" + translations.tr_meliscms_no_access + "</span></div>");
}
// has access
else{
if(tree.count() === 0){
$(".meliscms-search-box.sidebar-treeview-search").hide();
$("#id-mod-menu-dynatree").prepend("<div class='create-newpage'><span class='btn btn-success'>"+ translations.tr_meliscms_create_page +"</span></div>");
}
else{
$(".meliscms-search-box.sidebar-treeview-search").show();
$("#id-mod-menu-dynatree .create-newpage").remove();
}
}
}).fail(function(xhr, textStatus, errorThrown){
alert( translations.tr_meliscore_error_message );
});
// SAVE user rights checking
$.ajax({
url : '/melis/MelisCms/Page/isActionActive?actionwanted=save',
encode : true
}).done(function(data){
if(data.active === 0){
$("body").addClass('disable-create');
}
else{
$("body").removeClass('disable-create');
}
}).fail(function(xhr, textStatus, errorThrown){
alert( translations.tr_meliscore_error_message );
});
// DELETE user rights checking
$.ajax({
url : '/melis/MelisCms/Page/isActionActive?actionwanted=delete',
encode : true
}).done(function(data){
if(data.active === 0){
$("body").addClass('disable-delete');
}
else{
$("body").removeClass('disable-delete');
}
}).fail(function(xhr, textStatus, errorThrown){
alert( translations.tr_meliscore_error_message );
}); */
},
renderNode: function(event, data) {
// removed .fancytree-icon class and replace it with font-awesome icons
$(data.node.span)
.find(".fancytree-icon")
.addClass(data.node.data.iconTab)
.removeClass("fancytree-icon");
if (data.node.statusNodeType !== "loading") {
if (data.node.data.melisData.page_is_online === 0) {
$(data.node.span)
.find(".fancytree-title, .fa")
.css("color", "#686868");
}
if (data.node.data.melisData.page_has_saved_version === 1) {
//check if it has already 'unpublish' circle - avoid duplicate circle bug
if (
$(data.node.span)
.children("span")
.hasClass("unpublish") == false
) {
$(data.node.span)
.find(".fancytree-title")
.before("<span class='unpublish'></span>");
}
}
/* setTimeout(function() {
// remove spinning fontawesome icon
if ( $(data.node.span).find(".fancytree-expander") ) {
$(data.node.span).find(".fancytree-expander").removeClass("fa fa-spinner fa-pulse");
}
}, 1000); */
}
},
dnd: {
autoExpandMS: 400,
smartRevert: true,
refreshPositions: true,
draggable: {
zIndex: 1000,
scroll: false,
appendTo: "body",
},
dragStart: function(node, data) {
var pageLocked = $("#leftLockDragDropTreeView .fa-lock").length;
// disable drag & drop if its on mobile
if (melisCore.screenSize >= 1024 && pageLocked === 0) {
// determine if the node is draggable or not
if (!data.node.data.dragdrop) {
return false;
} else {
return true;
}
} else {
return false;
}
},
dragEnter: function(node, data) {
return true;
},
dragOver: function(node, data) {},
dragLeave: function(node, data) {},
dragStop: function(node, data) {},
dragDrop: function(node, data) {
node.setExpanded(true).always(function() {
// This function MUST be defined to enable dropping of items on the tree.
// data.hitMode is 'before', 'after', or 'over'.
// We could for example move the source to the new target:
// catch if its 'root_*' parent
var isRootOldParentId = data.otherNode.getParent().key.toString();
var oldParentId = isRootOldParentId.includes("root")
? -1
: data.otherNode.getParent().key;
// move the node to drag parent ------------------------------------------------
data.otherNode.moveTo(node, data.hitMode);
var tree = $("#id-mod-menu-dynatree").fancytree("getTree");
var draggedPage = data.otherNode.key;
// catch if its 'root_*' parent
var isRootNewParentId = node.getParent().key.toString();
var newParentId = isRootNewParentId.includes("root")
? -1
: node.getParent().key;
if (data.hitMode == "over") {
newParentId = data.node.key;
}
var newIndexPosition = data.otherNode.getIndex() + 1;
//send data to apply new position of the dragged node
var datastring = {
idPage: draggedPage,
oldFatherIdPage: oldParentId,
newFatherIdPage: newParentId,
newPositionIdPage: newIndexPosition,
};
$.ajax({
url: "/melis/MelisCms/Page/movePage",
data: datastring,
encode: true,
})
.done(function(data) {})
.fail(function(xhr, textStatus, errorThrown) {
alert(translations.tr_meliscore_error_message);
});
});
// end
},
},
});
};
// initialize the tree
mainTree();
});
// create page if treeview page is empty
$body.on("click", "#id-mod-menu-dynatree .create-newpage .btn", function() {
melisHelper.tabOpen(
translations.tr_meliscms_page_creation,
"fa-file-text-o",
"0_id_meliscms_page",
"meliscms_page_creation",
{
idPage: 0,
idFatherPage: "-1",
}
);
});
/**
* Changed to fix: https://mantis2.uat.melistechnology.fr/view.php?id=894
* Just trigger on the button and not on the input text
*/
$body.on(
"click",
"#sourcePageIdFindPageTree .input-button-hover-pointer",
function() {
melisLinkTree.createInputTreeModal("#sourcePageId");
}
);
/**
* Commented for this issue: https://mantis2.uat.melistechnology.fr/view.php?id=894
* Replaced #destinationPageIdFindPageTree .input-button-hover-pointer
* /
/* $body.on("click", '#destinationPageIdFindPageTree', function() {
melisLinkTree.createInputTreeModal('#destinationPageId');
}); */
$body.on(
"click",
"#destinationPageIdFindPageTree .input-button-hover-pointer",
function() {
melisLinkTree.createInputTreeModal("#destinationPageId");
}
);
$body.on("click", 'button[data-inputid="#destinationPageId"]', function() {
$('[name="use_root"]').each(function() {
if ($(this).is(":checked")) {
$(this).prop("checked", false);
}
});
$(".remember-me-cont .cbmask-inner").removeClass("cb-active");
$("#destinationPageId").prop("disabled", false);
});
$body.on("change", '[name="use_root"]', function() {
if ($('[name="use_root"]:checked').length) {
$("#destinationPageId").val("");
$("#destinationPageId").prop("disabled", true);
} else {
$("#destinationPageId").prop("disabled", false);
}
});
// use this callback to re-initialize the tree when its zoneReloaded
window.treeCallBack = function() {
if ($("#id-mod-menu-dynatree").children().length == 0) {
mainTree();
}
};
$body.on("click", "#duplicatePageTree", function() {
var dataString = $("#duplicatePageTreeForm").serializeArray();
var parentNode = $(
'#duplicatePageTreeForm input[name="destinationPageId"]'
).val();
melisCoreTool.pending("#duplicatePageTree");
$("#duplicatePageTree")
.find("i")
.removeClass();
$("#duplicatePageTree")
.find("i")
.addClass("fa fa-spinner fa-spin");
$.ajax({
type: "POST",
url: "/melis/MelisCms/TreeSites/duplicateTreePage",
data: dataString,
dataType: "json",
encode: true,
})
.done(function(data) {
if (data.success) {
$("#id_meliscms_tools_tree_modal_form_handler_container").modal(
"hide"
);
melisCms.refreshTreeview(parentNode, 1);
// clear Add Form
melisHelper.melisOkNotification(data.textTitle, data.textMessage);
} else {
melisHelper.melisKoNotification(
data.textTitle,
data.textMessage,
data.errors
);
melisCoreTool.highlightErrors(
data.success,
data.errors,
"duplicatePageTreeForm"
);
}
melisCore.flashMessenger();
melisCoreTool.done("#duplicatePageTree");
$("#duplicatePageTree")
.find("i")
.removeClass();
$("#duplicatePageTree")
.find("i")
.addClass("fa fa-save");
})
.fail(function() {
alert(translations.tr_meliscore_error_message);
});
});
})(jQuery, window);
|