/*jslint browser: true, devel: true, white: true, eqeq: true, plusplus: true, sloppy: true, vars: true*/ /*global $ */ /*************** General ***************/ var updateOutput = function (e) { var list = e.length ? e : $(e.target), output = list.data('output'); if (window.JSON) { if (output) { output.val(window.JSON.stringify(list.nestable('serialize'))); } } else { alert('JSON browser support required for this page.'); } }; var nestableList = $(".dd.nestable > .dd-list"); /***************************************/ /*************** Delete ***************/ var deleteFromMenuHelper = function (target) { /** if (target.data('new') == 1) { // if it's not yet saved in the database, just remove it from DOM target.fadeOut(function () { target.remove(); updateOutput($('.dd.nestable').data('output', $('#json-output'))); }); } else { // otherwise hide and mark it for deletion target.appendTo(nestableList); // if children, move to the top level target.data('deleted', '1'); target.fadeOut(); } **/ target.remove(); updateOutput($('.dd.nestable').data('output', $('#json-output'))); }; var deleteFromMenu = function () { var targetId = $(this).data('owner-id'); var target = $('[data-id="' + targetId + '"]'); var result = confirm("Delete " + target.data('name') + " and all its subitems ?"); if (!result) { return; } // Remove children (if any) target.find("li").each(function () { deleteFromMenuHelper($(this)); }); // Remove parent deleteFromMenuHelper(target); // update JSON updateOutput($('.dd.nestable').data('output', $('#json-output'))); }; /***************************************/ /*************** Edit ***************/ var menuAdd = $("#menu-add"); var menuEditor = $("#menu-editor"); var editButton = $("#editButton"); var editInputName = $("#editInputName"); var editInputSlug = $("#editInputSlug"); var editInputClass = $("#editInputClass"); var currentEditName = $("#currentEditName"); // Prepares and shows the Edit Form var prepareEdit = function () { var targetId = $(this).data('owner-id'); var target = $('[data-id="' + targetId + '"]'); editInputName.val(target.data("name")); editInputSlug.val(target.data("slug")); editInputClass.val(target.data("class")); currentEditName.html(target.data("name")); editButton.data("owner-id", target.data("id")); console.log("[INFO] Editing Menu Item " + editButton.data("owner-id")); menuEditor.fadeIn('fast'); menuAdd.fadeOut('fast'); }; // Edits the Menu item and hides the Edit Form var editMenuItem = function () { var targetId = $(this).data('owner-id'); var target = $('[data-id="' + targetId + '"]'); var newName = editInputName.val(); var newSlug = editInputSlug.val(); var newClass = editInputClass.val(); target.data("name", newName); target.data("slug", newSlug); target.data("class", newClass); target.find("> .dd-handle").html(newName); menuEditor.fadeOut('fast'); menuAdd.fadeIn('fast'); // update JSON updateOutput($('.dd.nestable').data('output', $('#json-output'))); }; /***************************************/ /*************** Add ***************/ var newIdCount = new Date().getTime(); var addToMenu = function () { var newName = $("#addInputName").val(); var newSlug = $("#addInputSlug").val(); var newClass = $("#addInputClass").val(); var newId = newIdCount; nestableList.append( '
  • ' + '
    ' + newName + '
    ' + ' ' + 'Delete' + '' + '' + 'Edit' + '' + '
  • ' ); newIdCount++; // update JSON updateOutput($('.dd.nestable').data('output', $('#json-output'))); // set events $(".dd.nestable .button-delete-"+newId).on("click", deleteFromMenu); $(".dd.nestable .button-edit-"+newId).on("click", prepareEdit); // clear input $("#addInputName").val(''); $("#addInputSlug").val(''); $("#addInputClass").val(''); }; /***************************************/ $(function () { // output initial serialised data updateOutput($('.dd.nestable').data('output', $('#json-output'))); // set onclick events editButton.on("click", editMenuItem); $(".dd.nestable .button-delete").on("click", deleteFromMenu); $(".dd.nestable .button-edit").on("click", prepareEdit); $("#menu-editor").submit(function (e) { e.preventDefault(); }); $("#menu-add").submit(function (e) { e.preventDefault(); addToMenu(); }); });