/** * Theme: Uplon Admin Template * Author: Coderthemes * Tree view */ function clearObjectDetails(){ $('#inline-objName').editable('setValue', '-').editable('disable'); $('#detailTemplateName').html('-'); $('#detailCategory').html('-'); $('#detailTrunkedTo').html('-'); $('#detailObjType').html('-'); $('#detailObjFunction').html('-'); $('#detailRUSize').html('-'); $('#detailMountConfig').html('-'); $('#detailPortRange').html('-'); $('#detailPortOrientation').html('-'); $('#detailPortType').html('-'); $('#detailMediaType').html('-'); $('#detailTemplateImage').html('-'); //Clear the hightlight around any highlighted object $('.rackObjSelected').removeClass('rackObjSelected'); //Reset selected object input value so it doesn't get highlighted again $(document).data('selectedObjectID', ''); // -=Floorplan Object Details=- $('#inline-floorplanObjName').editable('setValue', '-').editable('disable'); $('#floorplanDetailType').html('-'); $('#floorplanDetailTrunkedTo').html('-'); //Disable the 'Delete' button in object details $('.objDelete').addClass('disabled'); $('.clearTrunkPeer').addClass('disabled'); $('.createCombinedTemplate').addClass('disabled'); } function disableCabinetDetails(){ $('#cabinetSizeInput').editable('setValue', '-').editable('disable'); $('#cablePathTableBody').html(''); $('#pathAdd').prop('disabled', true); $('.adjCabinetSelect').editable('setValue', '').editable('disable'); $('#cabinetControls').hide(); } function insertObject(droppableIndex, objectRUSize){ $('.droppable').eq(droppableIndex).attr('rowspan', objectRUSize); for (x=1; x 0){ displayError(responseJSON.error); } else { $(parentElement).remove(); } }); }); $('.pathDistanceNumber').editable({ showbuttons: false, mode: 'inline', showbuttons: false, onblur: 'submit', source: selectSource, url: 'backend/process_cabinet.php', params: function(params){ var data = { action: 'distance', pathID: params.pk, distance: params.value }; params.data = JSON.stringify(data); return params; } }); $('.pathCabinetSelect').editable({ showbuttons: false, mode: 'inline', source: selectSource, url: 'backend/process_cabinet.php', params: function(params){ var data = { action: 'path', cabinetID: $('#cabinetHeader').data('cabinetId'), pathID: params.pk, value: params.value }; params.data = JSON.stringify(data); return params; } }); $('.pathNotesText').editable({ showbuttons: false, mode: 'inline', showbuttons: false, onblur: 'submit', url: 'backend/process_cabinet.php', params: function(params){ var data = { action: 'notes', pathID: params.pk, value: params.value }; params.data = JSON.stringify(data); return params; } }); } function makeRackObjectsClickable(){ $('#cabinetTable').find('.selectable').off('click'); $('#cabinetTable').find('.selectable').on('click', function(event){ event.stopPropagation(); var object = $(this).closest('.rackObj'); var partitionDepth = parseInt($(this).data('depth'), 10); //Store object $(document).data('selectedObject', object); //Store objectID var selectedObjectID = $(object).data('templateObjectId'); $(document).data('selectedObjectID', selectedObjectID); //Store objectFace var objFace = $(object).data('objectFace'); $('#selectedObjectFace').val(objFace); //Store objectDepth $('#selectedPartitionDepth').val(partitionDepth); //Store cabinetFace var cabinetFace = $('#currentCabinetFace').val(); //Remove hightlight from all racked objects $('.rackObjSelected').removeClass('rackObjSelected'); //Hightlight the selected racked object $(this).addClass('rackObjSelected'); //Collect object data var data = { objID: selectedObjectID, page: 'build', objFace: objFace, cabinetFace: cabinetFace, partitionDepth: partitionDepth }; data = JSON.stringify(data); //Retrieve object details $.post("backend/retrieve_object_details.php", {data:data}, function(responseJSON){ var alertMsg = ''; var response = JSON.parse(responseJSON); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ displayError(response.error); } else { var response = response.success; $('#inline-objName').editable('setValue', response.objectName).editable('enable'); $('#detailTemplateName').html(response.templateName); $('#detailCategory').html(response.categoryName); $('#detailObjType').html(response.objectType); $('#detailObjFunction').html(response.function); $('#detailRUSize').html(response.RUSize); $('#detailMountConfig').html(response.mountConfig); $('#detailPortRange').html(response.portRange); $('#detailPortOrientation').html(response.portOrientationName); $('#detailPortType').html(response.portType); $('#detailMediaType').html(response.mediaType); if(response.templateImgExists) { $('#detailTemplateImage').html(''); $('#elementTemplateImage').attr({ src:response.templateImgPath, height:response.templateImgHeight + 'px', width:response.templateImgWidth + '%' }); } else { $('#detailTemplateImage').html('None'); } $('.objDelete.rackObj').removeClass('disabled'); $('.clearTrunkPeer.rackObj').removeClass('disabled'); $('.createCombinedTemplate.rackObj').removeClass('disabled'); $('#inline-name').editable('option', 'disabled', false); // Trunked to if(!response.trunkable) { $('#detailTrunkedTo').html(response.trunkFlatPath); } else { var cabinetTrunkedTo = $(''+response.trunkFlatPath+'') .data('peerIDArray', response.peerIDArray); $('#detailTrunkedTo') .html(cabinetTrunkedTo); initializePathSelector(); } // Public data $(document).data('selectedObjectName', response.objectName); } }); }); } function makeFloorplanObjectsClickable(){ $('#floorplanContainer').find('.selectable').off('click'); $('#floorplanContainer').find('.selectable').on('click', function(event){ event.stopPropagation(); var objectID = $(this).data('objectId'); var objectType = $(this).data('type'); $(document).data('selectedFloorplanObject', $(this)); $(document).data('selectedFloorplanObjectID', objectID); $(document).data('selectedFloorplanObjectType', objectType); //Remove hightlight from all racked objects $('.floorplanObjSelected').removeClass('floorplanObjSelected'); //Hightlight the selected racked object $(this).addClass('floorplanObjSelected'); //Collect object data var data = { objectID: objectID }; data = JSON.stringify(data); //Retrieve object details $.post("backend/retrieve_floorplan_object_details.php", {data:data}, function(responseJSON){ var response = JSON.parse(responseJSON); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ displayError(response.error); } else { var response = response.success; $('#inline-floorplanObjName').editable('setValue', response.name).editable('enable'); $('#floorplanDetailType').html(objectType); // Object delete button $('.objDelete.floorplanObj').removeClass('disabled'); $('.clearTrunkPeer.floorplanObj').removeClass('disabled'); // Trunked to if(!response.trunkable) { $('#floorplanDetailTrunkedTo').html(response.trunkFlatPath); } else { var floorplanTrunkedTo = $(''+response.trunkFlatPath+'') .data('peerIDArray', response.peerIDArray); $('#floorplanDetailTrunkedTo') .html(floorplanTrunkedTo); initializeFloorplanPathSelector(); } // Public data $(document).data('selectedObjectName', response.name); } }); $('#floorplanObjectTableBody').children().removeClass('table-info'); $('#floorplanObjectTableBody').children('[data-id="'+objectID+'"]').addClass('table-info'); }); } function initializePathSelector(){ $('#cabinetTrunkedTo').off('click'); $('#cabinetTrunkedTo').on('click', function(e){ e.preventDefault(); var modalTitle = $(this).data('modaltitle'); var peerIDArray = $(this).data('peerIDArray'); $(document).data('peerIDArray', peerIDArray); var selectedObjID = $(document).data('selectedObjectID'); var objectFace = $('#selectedObjectFace').val(); var objectDepth = $('#selectedPartitionDepth').val(); $('#objTree').jstree(true).settings.core.data = {url: 'backend/retrieve_environment-tree.php?scope=partition&objectID='+selectedObjID+'&objectFace='+objectFace+'&objectDepth='+objectDepth}; $('#objTree').jstree(true).settings.core.multiple = false; $('#objTree').jstree(true).refresh(); $('#objectTreeModalLabel').html(modalTitle); $('#objectTreeModal').modal('show'); }); } function initializeFloorplanPathSelector(){ $('#floorplanTrunkedTo').off('click'); $('#floorplanTrunkedTo').on('click', function(e){ e.preventDefault(); var modalTitle = $(this).data('modalitle'); var peerIDArray = $(this).data('peerIDArray'); $(document).data('peerIDArray', peerIDArray); var objID = $(document).data('selectedFloorplanObjectID'); var objFace = 0; var objDepth = 0; $('#objTree').jstree(true).settings.core.data = {url: 'backend/retrieve_environment-tree.php?scope=floorplanObject&objID='+objID+'&objFace='+objFace+'&objDepth='+objDepth}; if($(document).data('selectedFloorplanObjectType') == 'walljack') { $('#objTree').jstree(true).settings.core.multiple = true; } else { $('#objTree').jstree(true).settings.core.multiple = false; } $('#objTree').jstree(true).refresh(); $('#objectTreeModalLabel').html(modalTitle); $('#objectTreeModal').modal('show'); }); } function setObjectSize(obj){ $(obj).each(function(){ $(this).height($(this).parent().height()-1); }); } function initializeEditable(){ //Object Name $('#inline-objName').editable({ display: function(value){ return $(this).text(value); }, pk: 1, mode: 'inline', showbuttons: false, onblur: 'submit', url: 'backend/process_cabinet-objects.php', params: function(params){ var selectedObjID = $(document).data('selectedObjectID'); var data = { 'action':'edit', 'objectID':selectedObjID, 'value':params.value }; params.data = JSON.stringify(data); return params; }, success: function(response) { var selectedObjID = $(document).data('selectedObjectID'); var responseJSON = JSON.parse(response); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); } else { $('.objName'+selectedObjID).html(responseJSON.success); $('#alertMsg').empty(); } } }).editable('option', 'disabled', true); //Floorplan Object Name $('#inline-floorplanObjName').editable({ display: function(value){ $(this).text(value); }, pk: 1, mode: 'inline', showbuttons: false, onblur: 'submit', url: 'backend/process_floorplan-objects.php', params: function(params){ var selectedFloorplanObjID = $(document).data('selectedFloorplanObjectID'); var data = { 'action': 'editName', 'objectID': selectedFloorplanObjID, 'value': params.value }; params.data = JSON.stringify(data); return params; }, success: function(responseJSON) { var response = JSON.parse(responseJSON); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ displayError(response.error); } else { $('#alertMsg').empty(); getFloorplanObjectPeerTable(); } } }).editable('option', 'disabled', true); } function initializeInsertDroppable(){ $('#cabinetTable').find('.insertDroppable').droppable({ greedy: true, hoverClass: 'hoverClass', tolerance: 'pointer', accept: '.insertDraggable, .initialInsertDraggable', drop: function(event, ui){ var data = {}; var encHeight = $(this).height()+1; var validDrop = true; data['cabinetID'] = $('#cabinetID').val(); data['cabinetFace'] = $('#currentCabinetFace').val(); data['RU'] = 0; data['parent_id'] = parseInt($(this).closest('.rackObj').data('templateObjectId')); data['parent_face'] = parseInt($(this).closest('.rackObj').data('objectFace')); data['parent_depth'] = parseInt($(this).closest('[data-depth]').data('depth')); data['insertSlotX'] = $(this).data('encX'); data['insertSlotY'] = $(this).data('encY'); //If object came from stock, then append the clone. Otherwise append the object. if (ui.draggable.hasClass('stockObj')){ var object = ui.draggable.clone(); data['objectID'] = ui.draggable.data('templateId'); data['templateCombined'] = 'no'; data['action'] = 'add'; } else { var object = ui.draggable; data['objectID'] = ui.draggable.data('templateObjectId'); data['action'] = 'updateInsert'; } //Write object info to DB data = JSON.stringify(data); $.ajax({ url: 'backend/process_cabinet-objects.php', method: 'POST', data: {'data':data}, success: function(result){ var responseJSON = JSON.parse(result); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); validDrop = false; } else if (responseJSON.success != ''){ $('#objectID').val(responseJSON.success); } }, async: false }); //Quit function if object needs to be reverted. if(!validDrop){ $(ui.draggable).addClass('revert'); return false; } else { $(ui.draggable).addClass('valid'); } //If object came from stock, then set cabinetObjectID to the ID retreived from the insert //else, set it to its current value. if (ui.draggable.hasClass('stockObj')){ var cabinetObjectID = $('#objectID').val(); } else { var cabinetObjectID = ui.draggable.data('objectId'); } //Create object where it was dropped. $(this).append(object .show() .removeClass('stockObj obj-border') //Mark object as being racked in cabinet and landing in a valid dropZone .addClass('rackObj insert') .attr('data-template-object-id', cabinetObjectID) .draggable({ delay: 200, helper: 'clone', classes: {'ui-draggable-dragging': 'obj-border'}, zIndex: 1000, cursorAt: { top:10 }, start: function(){ var cabinetRUObject = $(this).parent(); var dragStartWidth = $(cabinetRUObject).width(); var dragStartHeight = $(cabinetRUObject).height(); $(cabinetRUObject).children().eq(1).width(dragStartWidth).height(dragStartHeight); }, revert: function(){ return determineRevert($(this), false) } }) ); makeRackObjectsClickable(); initializeInsertDroppable(); } }); } function retrieveCabinet(cabinetID, cabinetFace){ var selectedObjectID = $(document).data('selectedObjectID'); //Collect object data var data = { cabinetArray: [{ id: cabinetID, face: cabinetFace, type: 'cabinet' }], view: 'port', page: 'environment' }; data = JSON.stringify(data); //Retrieve object details $.post("backend/create_build_space.php", {data:data}, function(responseJSON){ var response = JSON.parse(responseJSON); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ displayError(response.error); } else { $('#buildSpaceContent').html(response.data[0].html); loadCabinetBuild(); //Re-highlight select cabinet object when switching cabinet side. if (selectedObjectID) { $('[data-template-object-id="'+selectedObjectID+'"]').find('.flex-container-parent:first').addClass('rackObjSelected'); } } }); } function determineRevert(obj, expandDroppable){ var droppableIndex = $('.droppable').index($(obj).parent()); var objectRUSize = parseInt($(obj).data('ruSize')); if ($(obj).hasClass('revert')) { $(obj).removeClass('revert'); if(expandDroppable){ insertObject(droppableIndex, objectRUSize); } return true; } else if ($(obj).hasClass('valid')){ $('.rackObj').removeClass('valid'); $('.stockObj').removeClass('valid'); return false; } else { if(expandDroppable){ insertObject(droppableIndex, objectRUSize); } return true; } } function makeRackUnitsDroppable(target){ $(target).droppable({ tolerance: 'pointer', accept: '.draggable, .initialDraggable', drop: function(event, ui){ var data = {}; var dataSecondary = {}; var targetDroppable = $(this); var cabinetRU = parseInt($(targetDroppable).data('cabinetru')); var objectRUSize = parseInt($(ui.draggable).data('ruSize')); var droppableIndex = $('.droppable').index($(targetDroppable)); var currentCabinetFace = $('#currentCabinetFace').val(); var cabinetID = $('#cabinetID').val(); var validDrop = true; data['cabinetID'] = cabinetID; data['cabinetFace'] = currentCabinetFace; data['objectFace'] = ui.draggable.data('objectFace'); data['RU'] = cabinetRU; dataSecondary['cabinetID'] = cabinetID; //If object came from stock, then append the clone. Otherwise append the object. if (ui.draggable.hasClass('stockObj')){ var object = ui.draggable.clone(); var templateCombined = ui.draggable.data('templateCombined'); if (templateCombined == 'yes') { var templateID = ui.draggable.closest('.object-wrapper').data('templateId'); } else { var templateID = ui.draggable.data('templateId'); } data['objectID'] = templateID; data['templateCombined'] = templateCombined; data['action'] = 'add'; } else { var object = ui.draggable; data['objectID'] = ui.draggable.data('templateObjectId'); data['action'] = 'updateObject'; } //Write object info to DB data = JSON.stringify(data); $.ajax({ url: 'backend/process_cabinet-objects.php', method: 'POST', data: {'data':data}, success: function(result){ var response = JSON.parse(result); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ $(ui.draggable).addClass('revert'); displayError(response.error); } else { var responseData = response.data; $(ui.draggable).addClass('valid'); $('#objectID').val(responseData.parentID); //If object came from stock, then set cabinetObjectID to the ID retreived from the insert //else, set it to its current value. if (ui.draggable.hasClass('stockObj')){ var cabinetObjectID = $('#objectID').val(); } else { var cabinetObjectID = ui.draggable.data('templateObjectId'); removeObject($(ui.draggable)); } //Adjust droppable table to fit dropped object insertObject(droppableIndex, objectRUSize); //Create object where it was dropped. $(targetDroppable).append(object .removeClass('stockObj') //Mark object as being racked in cabinet and landing in a valid dropZone .addClass('rackObj') .css({ 'left':0, 'top':0, 'width':'auto' }) .show() .attr('data-template-object-id', cabinetObjectID) .draggable({ delay: 200, helper: 'clone', zIndex: 1000, cursorAt: { top:10 }, start: function(){ var cabinetRUObject = $(this).parent(); var dragStartWidth = $(cabinetRUObject).width(); var dragStartHeight = $(cabinetRUObject).height(); $(cabinetRUObject).children().eq(1).width(dragStartWidth).height(dragStartHeight); }, revert: function(){ return determineRevert($(this), true); } }) ); $.each(responseData.childrenID, function(faceID, faceData){ $.each(faceData, function(depthID, depthData){ var encObj = $(object).find('[data-enc-obj-face="'+faceID+'"][data-enc-obj-depth="'+depthID+'"]'); $.each(depthData, function(encXID, encXData){ $.each(encXData, function(encYID, insertID){ var encSlot = $(encObj).find('[data-enc-x="'+encXID+'"][data-enc-y="'+encYID+'"]'); var insert = $(encSlot).children('.insert'); $(insert).attr('data-template-object-id', insertID); $(insert).removeClass('stockObj'); $(insert).addClass('rackObj insertDraggable'); $(insert).draggable({ delay: 200, helper: 'clone', classes: {'ui-draggable-dragging': 'obj-border'}, cursorAt: {top:10}, start: function(event, ui){ var dragStartWidth = $(this).width(); var dragStartHeight = $(this).height(); $(ui.helper).width(dragStartWidth).height(dragStartHeight); }, revert: function(){ return determineRevert($(this), false); }, zIndex: 1000 }); }); }); }); }); makeRackObjectsClickable(); initializeInsertDroppable(); // Update RUSize Minimum dataSecondary['action'] = 'updateCabinetRUMin'; dataSecondary = JSON.stringify(dataSecondary); $.ajax({ url: 'backend/process_cabinet.php', method: 'POST', data: {'data':dataSecondary}, success: function(resultSecondary){ var responseSecondary = JSON.parse(resultSecondary); if (responseSecondary.active == 'inactive'){ window.location.replace("/"); } else if ($(responseSecondary.error).size() > 0){ displayError(responseSecondary.error); } else if ($(responseSecondary.success.RUData).length) { $('#cabinetSizeInput').editable('option', 'min', responseSecondary.success.RUData.orientationSpecificMin); } }, async: false }); } }, async: false }); } }).removeClass('newDroppable'); } function loadCabinetBuild(){ initializeInsertDroppable(); makeRackObjectsClickable(); $('.draggable').draggable({ delay: 200, helper: 'clone', cursorAt: {top:10}, start: function(event, ui){ var dragStartWidth = $(this).width(); $(ui.helper).width(dragStartWidth); }, revert: function(){ return determineRevert($(this), false); }, zIndex: 1000 }); $('.insertDraggable').draggable({ delay: 200, helper: 'clone', classes: {'ui-draggable-dragging': 'obj-border'}, cursorAt: {top:10}, start: function(event, ui){ var dragStartWidth = $(this).width(); var dragStartHeight = $(this).height(); $(ui.helper).width(dragStartWidth).height(dragStartHeight); }, revert: function(){ return determineRevert($(this), false); }, zIndex: 1000 }); $('.initialDraggable').draggable({ delay: 200, helper: 'clone', zIndex: 1000, cursorAt: {top:10}, start: function(){ var cabinetRUObject = $(this).parent(); var dragStartWidth = $(cabinetRUObject).width(); $(cabinetRUObject).children().eq(1).width(dragStartWidth); }, revert: function(){ return determineRevert($(this), true); } }); $('.initialInsertDraggable').draggable({ delay: 200, helper: 'clone', zIndex: 1000, cursorAt: { top:10 }, start: function(){ var cabinetRUObject = $(this).parent(); var dragStartWidth = $(cabinetRUObject).width(); $(cabinetRUObject).children().eq(1).width(dragStartWidth); }, revert: function(){ return determineRevert($(this), false); } }); makeRackUnitsDroppable($('.droppable')); } function filterTemplates(){ var tags = $('#templateFilter').tagsinput('items'); var templates = $('.object-wrapper'); var categoryContainers = $('.categoryContainerEntire'); if($(tags).length) { $(templates).hide().attr('data-visible', false);; $.each(templates, function(indexTemplate, valueTemplate){ var templateObj = $(this); var templateName = $(valueTemplate).data('templateName').toLowerCase(); var match = true; $.each(tags, function(indexTag, valueTag){ var tag = valueTag.toLowerCase(); if(templateName.indexOf(tag) >= 0 && match) { match = true; } else { match = false; } }); if(match) { $(templateObj).show().attr('data-visible', true); } }); $.each(categoryContainers, function(){ if($(this).children('.categoryContainer').children('.object-wrapper[data-visible="true"]').size()) { $(this).show(); } else { $(this).hide(); } }); } else { $(templates).show().attr('data-visible', true);; $(categoryContainers).show(); } } function determineObjectTreeModalSaveState(){ var disableSaveButton = false var selectedNodes = $('#objTree').jstree().get_selected(true); $.each(selectedNodes, function(index, item){ if(item.type != 'port') { disableSaveButton = true; return; } }); $('#buttonObjectTreeModalSave').prop("disabled", disableSaveButton); } function getFloorplanObjectPeerTable(){ var cabinetID = $(document).data('selectedNodeID'); //Collect object data var data = { cabinetID: cabinetID, action: 'getFloorplanObjectPeerTable' }; data = JSON.stringify(data); //Retrieve floorplan details $.post("backend/process_cabinet.php", {data:data}, function(response){ var response = $.parseJSON(response); if (response.error != ''){ displayError(response.error); } else { $('#floorplanObjectTable').remove(); var table = ''; table += ''; table += ''; table += ''; table += ''; table += ''; table += ''; table += ''; $.each(response.success.floorplanObjectPeerTable, function(index, item){ table += ''; table += ''; table += ''; table += ''; }); table += ''; table += '
NamePortName
'+item.objName+''+item.peerPortName+'
'; $('#floorplanObjectTableContainer').html($(table).on('click', 'tr', function(){ $(this).addClass('selectedObjTableEntry'); var floorplanObjID = $(this).data('objectId'); $('#floorplanObj'+floorplanObjID).click(); })); $('#floorplanObjectTable').DataTable({ 'paging': false, 'info': false, 'scrollY': '200px', 'scrollCollapse': true }); } }); } function initializeImageUpload(floorplanID){ $('#fileFloorplanImage').remove(); $('#containerFloorplanImage').html(''); $('#fileFloorplanImage').filer({ limit: 1, maxSize: null, extensions: null, changeInput: '

Drag & Drop file here

or
Browse Files
', showThumbs: true, theme: "dragdropbox", templates: { box: '', item: '
  • \
    \
    \
    \
    \
    \ {{fi-name | limitTo: 25}}\ {{fi-size2}}\
    \ {{fi-image}}\
    \
    \
      \
    • {{fi-progressBar}}
    • \
    \
      \
    • \
    \
    \
    \
    \
  • ', itemAppend: '
  • \
    \
    \
    \
    \
    \ {{fi-name | limitTo: 25}}\ {{fi-size2}}\
    \ {{fi-image}}\
    \
    \
      \
    • {{fi-icon}}
    • \
    \
      \
    • \
    \
    \
    \
    \
  • ', progressBar: '
    ', itemAppendToEnd: false, removeConfirmation: true, _selectors: { list: '.jFiler-items-list', item: '.jFiler-item', progressBar: '.bar', remove: '.jFiler-item-trash-action' } }, dragDrop: { dragEnter: null, dragLeave: null, drop: null, }, uploadFile: { url: 'backend/process_image-upload.php', data: { action:'floorplanImage', floorplanID:floorplanID }, type: 'POST', enctype: 'multipart/form-data', beforeSend: function(){}, success: function(data, el){ var parent = el.find(".jFiler-jProgressBar").parent(); el.find(".jFiler-jProgressBar").fadeOut("slow", function(){ $("
    Success
    ").hide().appendTo(parent).fadeIn("slow"); }); var responseJSON = JSON.parse(data); var response = responseJSON.success; var floorplanImgPath = response.imgPath; $('#imgDummy').load(function(){ var imgHeight = $(this).height(); var imgWidth = $(this).width(); $('#floorplanContainer').css({"background-image":"url("+floorplanImgPath+")", "height":imgHeight, "width":imgWidth}); fitFloorplan(); }).attr('src', floorplanImgPath); }, error: function(el){ var parent = el.find(".jFiler-jProgressBar").parent(); el.find(".jFiler-jProgressBar").fadeOut("slow", function(){ $("
    Error
    ").hide().appendTo(parent).fadeIn("slow"); }); }, statusCode: null, onProgress: null, onComplete: null }, addMore: false, clipBoardPaste: true, excludeName: null, beforeRender: null, afterRender: null, beforeShow: null, beforeSelect: null, onSelect: null, afterShow: null, onRemove: null, onEmpty: null, options: null, captions: { button: "Choose Files", feedback: "Choose files To Upload", feedback2: "files were chosen", drop: "Drop file here to Upload", removeConfirmation: "Are you sure you want to remove this file?", errors: { filesLimit: "Only {{fi-limit}} files are allowed to be uploaded.", filesType: "Only Images are allowed to be uploaded.", filesSize: "{{fi-name}} is too large! Please upload file up to {{fi-maxSize}} MB.", filesSizeAll: "Files you've choosed are too large! Please upload files up to {{fi-maxSize}} MB." } } }); } function renumberCabinet(){ var RUOrientation = $('#cabinetHeader').data('ruOrientation'); var cabSize = $('.cabinetRU').length; $('.cabinetRU').each(function(){ elemIndex = $(this).index(); RUNumber = cabSize - elemIndex; if(RUOrientation == 0) { $(this).children('.leftRail').html(RUNumber); $(this).children('.droppable').data('cabinetru', RUNumber); } else { $(this).children('.leftRail').html(elemIndex + 1); $(this).children('.droppable').data('cabinetru', RUNumber); } }); } function fitFloorplan(){ var imgWidth = $('#floorplanContainer').width(); var imgHeight = $('#floorplanContainer').height(); var containerWidth = $('#floorplanWindow').width(); var scale = containerWidth / imgWidth; scale = (scale > 4) ? 4 : scale; var imgHeightScaled = imgHeight * scale; var imgWidthScaled = imgWidth * scale; if(scale > 1) { var imgHeightDiff = imgHeightScaled - imgHeight; var imgWidthDiff = imgWidthScaled - imgWidth; var scaleDirection = 1; } else { var imgHeightDiff = imgHeight - imgHeightScaled; var imgWidthDiff = imgWidth - imgWidthScaled; var scaleDirection = -1; } $('#floorplanWindow').css({height:imgHeightScaled+'px'}); // Scale floorplan panzoom.zoom(scale); // Pan floorplan accounting for scale and "50% 50%" transform origin panzoom.pan(((imgWidthDiff/2)/scale)*scaleDirection, ((imgHeightDiff/2)/scale)*scaleDirection); } function dropFloorplanObject(event, ui){ var objectClone = $(ui.helper).clone(); var floorplanWindow = $('#floorplanWindow'); var floorplanContainer = $('#floorplanContainer'); // PanZoom var panzoomScale = parseFloat(panzoom.getScale(), 10); var panzoomScaleDirection = (panzoomScale < 1) ? -1 : 1; var panzoomLeft = parseInt(panzoom.getPan().x, 10); var panzoomTop = parseInt(panzoom.getPan().y, 10); // Image var imgWidth = $(floorplanContainer).width(); var imgHeight = $(floorplanContainer).height(); var imgHeightScaled = imgHeight * panzoomScale; var imgWidthScaled = imgWidth * panzoomScale; if(panzoomScale > 1) { var imgHeightDiff = imgHeightScaled - imgHeight; var imgWidthDiff = imgWidthScaled - imgWidth; var scaleDirection = 1; } else { var imgHeightDiff = imgHeight - imgHeightScaled; var imgWidthDiff = imgWidth - imgWidthScaled; var scaleDirection = -1; } var imgWidthMargin = imgWidthDiff / 2; var imgWidthMarginScaled = imgWidthMargin / panzoomScale; var imgHeightMargin = imgHeightDiff / 2; var imgHeightMarginScaled = imgHeightMargin / panzoomScale; var floorplanImgTop = panzoomTop - (imgHeightMarginScaled * scaleDirection); var floorplanImgLeft = panzoomLeft - (imgWidthMarginScaled * scaleDirection); var floorplanImgRight = floorplanImgLeft + imgWidth; var floorplanImgBottom = floorplanImgTop + imgHeight; // Window var floorplanWindowTop = $(floorplanWindow).offset().top; var floorplanWindowLeft = $(floorplanWindow).offset().left; // Object - Top var objectTop = ui.offset.top; var objectTopWindowRelative = objectTop - floorplanWindowTop; var objectTopWindowRelativeScaled = objectTopWindowRelative / panzoomScale; // Object - Left var objectLeft = ui.offset.left; var objectLeftWindowRelative = objectLeft - floorplanWindowLeft; var objectLeftWindowRelativeScaled = objectLeftWindowRelative / panzoomScale; var objectPositionTop = Math.round(objectTopWindowRelativeScaled - floorplanImgTop); var objectPositionLeft = Math.round(objectLeftWindowRelativeScaled - floorplanImgLeft); if($(document).data('floorplanObjectInBounds')) { if($(objectClone).hasClass('floorplanStockObj')) { var action = 'add'; var nodeID = $(document).data('selectedNodeID'); var type = $(objectClone).data('type'); var data = { action: action, type: type, positionTop: objectPositionTop, positionLeft: objectPositionLeft, nodeID: nodeID }; $('#floorplanContainer').append(objectClone .removeClass('floorplanStockObj') .css({ 'z-index': 1000, 'position': 'absolute', 'top': objectPositionTop, 'left': objectPositionLeft }) .draggable({ start: function(event, ui){ $(document).data('disableWheelZoom', true); var scale = panzoom.getScale(); ui.originalPosition.left = ui.originalPosition.left / scale; ui.originalPosition.top = ui.originalPosition.top / scale; }, drag:function(event, ui){ var scale = panzoom.getScale(); ui.position.left = ui.position.left / scale; ui.position.top = ui.position.top / scale; }, stop: function(event, ui){ $(document).data('disableWheelZoom', false); dropFloorplanObject(event, ui); }, revert: function(){ var inBounds = objectInBounds($(this).offset()); $(document).data('floorplanObjectInBounds', inBounds); return !inBounds; } }) .hover( function(){ panzoom.setOptions({disablePan: true}); }, function(){ panzoom.setOptions({disablePan: false}); } ) ); makeFloorplanObjectsClickable(); } else { var positionTop = Math.round(objectPositionTop * panzoomScale); var positionLeft = Math.round(objectPositionLeft * panzoomScale); var action = 'editLocation'; var objectID = $(event.target).data('objectId'); var data = { action: action, positionTop: positionTop, positionLeft: positionLeft, objectID: objectID }; } data = JSON.stringify(data); $.post('backend/process_floorplan-objects.php', {data:data}, function(responseJSON){ var response = JSON.parse(responseJSON); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ displayError(response.error); } else { if(action == 'add') { $(objectClone).data('objectId', response.success.id); $(objectClone).attr('id', 'floorplanObj'+response.success.id); getFloorplanObjectPeerTable(); } } }); } } function objectInBounds(offset){ var floorplanWindow = $('#floorplanWindow'); var floorplanContainer = $('#floorplanContainer'); // PanZoom var panzoomScale = panzoom.getScale(); var panzoomLeft = panzoom.getPan().x; var panzoomTop = panzoom.getPan().y; // Window var floorplanWindowTop = $(floorplanWindow).offset().top; var floorplanWindowLeft = $(floorplanWindow).offset().left; var floorplanWindowHeight = $(floorplanWindow).height(); var floorplanWindowWidth = $(floorplanWindow).width(); // Image var imgWidth = $(floorplanContainer).width(); var imgHeight = $(floorplanContainer).height(); var imgHeightScaled = imgHeight * panzoomScale; var imgWidthScaled = imgWidth * panzoomScale; if(panzoomScale > 1) { var imgHeightDiff = imgHeightScaled - imgHeight; var imgWidthDiff = imgWidthScaled - imgWidth; var scaleDirection = 1; } else { var imgHeightDiff = imgHeight - imgHeightScaled; var imgWidthDiff = imgWidth - imgWidthScaled; var scaleDirection = -1; } var imgWidthMargin = imgWidthDiff/2; var imgWidthMarginScaled = imgWidthMargin/panzoomScale; var imgHeightMargin = imgHeightDiff/2; var imgHeightMarginScaled = imgHeightMargin/panzoomScale; var floorplanImgTop = panzoomTop - (imgHeightMarginScaled*scaleDirection); var floorplanImgLeft = panzoomLeft - (imgWidthMarginScaled*scaleDirection); var floorplanImgRight = floorplanImgLeft + imgWidth; var floorplanImgBottom = floorplanImgTop + imgHeight; // Object - Top var objectTop = offset.top; var objectTopWindowRelative = objectTop - floorplanWindowTop; var objectTopWindowRelativeScaled = objectTopWindowRelative / panzoomScale; // Object - Left var objectLeft = offset.left; var objectLeftWindowRelative = objectLeft - floorplanWindowLeft; var objectLeftWindowRelativeScaled = objectLeftWindowRelative / panzoomScale; // Left Boundary if(floorplanImgLeft < 0) { var floorplanBoundaryLeft = 0; } else { var floorplanBoundaryLeft = floorplanImgLeft; } // Top Boundary if(floorplanImgTop < 0) { var floorplanBoundaryTop = 0; } else { var floorplanBoundaryTop = floorplanImgTop; } // Right Boundary if(floorplanImgRight <= floorplanWindowWidth/panzoomScale) { var floorplanBoundaryRight = floorplanImgRight; } else { var floorplanBoundaryRight = floorplanWindowWidth/panzoomScale; } // Bottom Boundary if(floorplanImgBottom <= floorplanWindowHeight/panzoomScale) { var floorplanBoundaryBottom = floorplanImgBottom; } else { var floorplanBoundaryBottom = floorplanWindowHeight/panzoomScale; } if(objectTopWindowRelativeScaled > floorplanBoundaryTop && objectTopWindowRelativeScaled < floorplanBoundaryBottom && objectLeftWindowRelativeScaled > floorplanBoundaryLeft && objectLeftWindowRelativeScaled < floorplanBoundaryRight) { var accept = true; } else { var accept = false; } return accept; } function reloadTemplates(){ $('#templateContainerLoad').load('/backend/retrieve_build-objects.php', function(){ makeCategoryTitlesClickable(); loadCabinetBuild(); }); } function makeCategoryTitlesClickable(){ $('.categoryTitle').off('click'); $('.categoryTitle').on('click', function(){ var categoryName = $(this).data('categoryName'); if($('.category'+categoryName+'Container').is(':visible')) { $('.category'+categoryName+'Container').hide(400); $(this).children('i').removeClass('fa-caret-down').addClass('fa-caret-right'); } else { $('.categoryContainer').hide(400); $('.categoryTitle').children('i').removeClass('fa-caret-down').addClass('fa-caret-right'); $('.category'+categoryName+'Container').show(400); $(this).children('i').removeClass('fa-caret-right').addClass('fa-caret-down'); } }); } $( document ).ready(function() { $('#btnImageUpload').on('click', function(event){ $('#modalImageUpload').modal('show'); }); $('.floorplanObject').draggable({ helper: "clone", zIndex: 1000, stop: function(event, ui){ dropFloorplanObject(event, ui); }, revert: function(){ var inBounds = objectInBounds($('.ui-draggable-dragging').offset()); $(document).data('floorplanObjectInBounds', inBounds); return !inBounds; } }); elem = document.getElementById('floorplanContainer'); panzoom = Panzoom(elem); $(document).data('disableWheelZoom', false); $('#btnZoomIn').on('click', panzoom.zoomIn); $('#btnZoomOut').on('click', panzoom.zoomOut); $('#btnZoomReset').on('click', panzoom.reset); $('#floorplanContainer').parent().bind('mousewheel DOMMouseScroll', function(event){ var mouseCoords = {top:event.pageY, left:event.pageX}; var mouseInBounds = objectInBounds(mouseCoords); if(!$(document).data('disableWheelZoom')) { if(mouseInBounds) { event.preventDefault(); var pzMatrix = panzoom.getScale(); var pzScale = parseFloat(pzMatrix, 10); if (event.originalEvent.wheelDelta > 0 || event.originalEvent.detail < 0) { var newScale = pzScale + (pzScale * 0.3); } else { var newScale = pzScale - (pzScale * 0.3); } panzoom.zoomToPoint(newScale, event); } } else { var scrollTop = $(window).scrollTop(); var mouseTop = event.pageY - scrollTop; $('.ui-draggable-dragging').offset({top:event.pageY, left:event.pageX}); } }); elem.addEventListener('panzoomreset', function(){ fitFloorplan(); }); // Ajax Tree $('#objTree') .on('select_node.jstree', function(e, data){ determineObjectTreeModalSaveState(); }) .on('deselect_node.jstree', function(e, data){ determineObjectTreeModalSaveState(); }) .on('refresh.jstree', function(){ var peerIDArray = $(document).data('peerIDArray'); $('#objTree').jstree('deselect_all', true); $.each(peerIDArray, function(index, item){ $('#objTree').jstree(true).select_node(item); }); }) .jstree({ 'core' : { 'multiple': false, 'check_callback': function(operation, node, node_parent, node_position, more){ if(operation == 'move_node'){ return node_parent.type === 'location'; } return true; }, 'themes': { 'responsive': false }, 'data': {'url' : false, 'data': function (node) { return { 'id' : node.id }; } } }, 'state' : { 'key' : 'trunkNavigation' }, "types" : { 'default' : { 'icon' : 'fa fa-building' }, 'location' : { 'icon' : 'fa fa-building' }, 'pod' : { 'icon' : 'zmdi zmdi-group-work' }, 'cabinet' : { 'icon' : 'fa fa-server' }, 'floorplan' : { 'icon' : 'fa fa-map-o' }, 'object' : { 'icon' : 'fa fa-minus' }, 'port' : { 'icon' : 'fa fa-circle' } }, "plugins" : [ "search", "state", "types", "wholerow" ] }); $('#buttonObjectTreeModalSave').on('click', function(){ var selectedObjectType = $(document).data('selectedObjectType'); var selectedNodes = $('#objTree').jstree('get_selected', true); var selectedNodeArray = []; $.each(selectedNodes, function(index, item){ selectedNodeArray.push(item.data.globalID); }); if(selectedObjectType == 'floorplan') { var value = selectedNodeArray; var selectedObjectID = $(document).data('selectedFloorplanObjectID'); var trunkPathContainer = $('#floorplanTrunkedTo'); var data = { action: 'trunkFloorplanPeer', value: value, objectID: selectedObjectID } } else if(selectedObjectType == 'cabinet') { var value = selectedNodeArray[0]; var selectedObjectID = $(document).data('selectedObjectID'); var objectFace = $('#selectedObjectFace').val(); var objectDepth = $('#selectedPartitionDepth').val(); var trunkPathContainer = $('#cabinetTrunkedTo'); var data = { action: 'trunkPeer', value: value, objectID: selectedObjectID, objectFace: objectFace, objectDepth: objectDepth }; } else { return; } data = JSON.stringify(data); $.post('backend/process_cabinet.php', {data:data}, function(response){ var responseJSON = JSON.parse(response); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); } else { $(trunkPathContainer) .html(responseJSON.success.trunkFlatPath) .data('peerIDArray', [value]); $('#objectTreeModal') .modal('hide'); if(selectedObjectType == 'floorplan') { getFloorplanObjectPeerTable(); } else { $('[data-template-object-id='+selectedObjectID+']').find('[data-depth='+objectDepth+']').find('.port').addClass('endpointTrunked'); var peerArray = value.split('-'); var peerID = peerArray[1]; var peerDepth = peerArray[3]; $('[data-template-object-id='+peerID+']').find('[data-depth='+peerDepth+']').find('.port').addClass('endpointTrunked'); } } }); }); $('.clearTrunkPeer').on('click', function(event){ event.preventDefault(); var selectedObjectType = $(document).data('selectedObjectType'); if(selectedObjectType == 'floorplan') { var selectedObjectID = $(document).data('selectedFloorplanObjectID'); var data = { action: 'clearFloorplanTrunkPeer', objectID: selectedObjectID }; } else if(selectedObjectType == 'cabinet') { var selectedObjectID = $(document).data('selectedObjectID'); var objectFace = $('#selectedObjectFace').val(); var objectDepth = $('#selectedPartitionDepth').val(); var data = { action: 'clearTrunkPeer', objectID: selectedObjectID, objectFace: objectFace, objectDepth: objectDepth }; } else { return; } data = JSON.stringify(data); $.post('backend/process_cabinet.php', {data:data}, function(responseJSON){ var response = JSON.parse(responseJSON); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ displayError(response.error); } else { $('#objectTreeModal').modal('hide'); if(selectedObjectType == 'cabinet') { $('#detailTrunkedTo') .children('a') .html(response.success.trunkFlatPath) .data('peerIDArray', []); // Clear trunked style $('[data-template-object-id='+selectedObjectID+']').find('[data-depth='+objectDepth+']').find('.port').removeClass('endpointTrunked'); $('[data-template-object-id='+response.success.peerID+']').find('[data-depth='+response.success.peerFace+']').find('.port').removeClass('endpointTrunked'); } else if(selectedObjectType == 'floorplan') { $('#floorplanTrunkedTo') .html(response.success.trunkFlatPath) .data('peerIDArray', []); getFloorplanObjectPeerTable(); } } }); }); $('.createCombinedTemplate').on('click', function(event){ var obj = $(document).data('selectedObject'); var templateName = $(obj).data('templateName'); var categoryID = $(obj).data('templateCategoryId'); $('#inputCreateCombinedTemplateCategory option[value='+categoryID+']').attr('selected','selected'); $('#inputCreateCombinedTemplateName').val(templateName); $('#alertMsgCreateCombinedTemplate').empty(); $('#modalCreateCombinedTemplate').modal('show'); }); $('#buttonCreateCombinedTemplateModalSave').on('click', function(event){ var combinedTemplateName = $('#inputCreateCombinedTemplateName').val(); var combinedTemplateCategory = $('#inputCreateCombinedTemplateCategory').children("option:selected").val(); if($(document).data('selectedObject').hasClass('insert')) { var object = $(document).data('selectedObject').closest('.object'); } else { var object = $(document).data('selectedObject'); } var objID = $(object).data('templateObjectId'); var data = { action: 'combinedTemplate', name: combinedTemplateName, category: combinedTemplateCategory, parentObjID: objID }; data = JSON.stringify(data); $.post('backend/process_cabinet.php', {data:data}, function(responseJSON){ var response = JSON.parse(responseJSON); if (response.active == 'inactive'){ window.location.replace("/"); } else if ($(response.error).size() > 0){ displayErrorElement(response.error, $('#alertMsgCreateCombinedTemplate')); } else { reloadTemplates(); $('#modalCreateCombinedTemplate').modal('hide'); } }); }); $('#templateFilter').on('itemAdded', function(event){ filterTemplates(); }); $('#templateFilter').on('itemRemoved', function(event){ filterTemplates(); }); makeCategoryTitlesClickable(); $('.sideSelectorCabinet').on('change', function(){ var currentCabinetFace = $(this).val(); var cabinetID = $('#cabinetHeader').data('cabinetId'); $('#currentCabinetFace').val(currentCabinetFace); retrieveCabinet(cabinetID, currentCabinetFace); if (currentCabinetFace == 0) { $('#detailsContainer1').hide(); $('#detailsContainer0').show(); } else { $('#detailsContainer1').show(); $('#detailsContainer0').hide(); } }); $('#pathAdd').click(function(){ var data = {}; data['cabinetID'] = $('#cabinetHeader').data('cabinetId'); data['action'] = 'new'; data = JSON.stringify(data); $.post('backend/process_cabinet.php', {data:data}, function(data){ var responseJSON = JSON.parse(data); if (responseJSON['error'] != ''){ alert(responseJSON['error']); } else { var cablePathLine = ''; cablePathLine += ''; cablePathLine += ''; cablePathLine += ''; cablePathLine += ''; cablePathLine += ''; cablePathLine += ''; console.log('Debug (cablePathLine): '+cablePathLine); $('#cablePathTableBody').append(cablePathLine); makePathDeleteClickable(responseJSON.success.localCabinets); } }); }); //X-editable buttons style $.fn.editableform.buttons = '' + ''; initializeEditable(); $('.objDelete').click(function(e){ // Prevent browser following # link e.preventDefault(); if($(this).hasClass('disabled')) { // Prevent modal from showing e.stopPropagation(); } else { var objectName = $(document).data('selectedObjectName'); $('#modalConfirmTitle').html('Delete Object'); $('#modalConfirmBody').html('Delete '+objectName+'?'); if($(this).hasClass('rackObj')){ $(document).data('modalConfirmAction', 'deleteRackObject'); } else if($(this).hasClass('floorplanObj')){ $(document).data('modalConfirmAction', 'deleteFloorplanObject'); } } }); $('#modalConfirmBtn').click(function(){ // Store confirm action var confirmAction = $(document).data('modalConfirmAction'); if(confirmAction == 'deleteRackObject') { // Delete Rack Object var cabinetID = $('#cabinetID').val(); var selectedObjectID = $(document).data('selectedObjectID'); var object = $('#cabinetTable').find('[data-template-object-id='+selectedObjectID+']'); var data = { objectID: selectedObjectID, action: 'delete' }; var dataSecondary = { cabinetID: cabinetID, action: 'updateCabinetRUMin' }; data = JSON.stringify(data); $.post('backend/process_cabinet-objects.php', {data:data}, function(response){ var alertMsg = ''; var responseJSON = JSON.parse(response); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); } else { removeObject(object); $(object).remove(); clearObjectDetails(); // Update RUSize Minimum dataSecondary = JSON.stringify(dataSecondary); $.ajax({ url: 'backend/process_cabinet.php', method: 'POST', data: {'data':dataSecondary}, success: function(resultSecondary){ var responseSecondary = JSON.parse(resultSecondary); if (responseSecondary.active == 'inactive'){ window.location.replace("/"); } else if ($(responseSecondary.error).size() > 0){ displayError(responseSecondary.error); } else if ($(responseSecondary.success.RUData).length) { $('#cabinetSizeInput').editable('option', 'min', responseSecondary.success.RUData.orientationSpecificMin); } }, async: false }); } } ); } else if(confirmAction == 'deleteFloorplanObject') { // Delete floorplan object var objectID = $(document).data('selectedFloorplanObjectID'); var data = { objectID: objectID, action: 'delete' }; data = JSON.stringify(data); $.post('backend/process_floorplan-objects.php', {data:data}, function(response){ var alertMsg = ''; var responseJSON = JSON.parse(response); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); } else { $(document).data('selectedFloorplanObject').remove(); clearObjectDetails(); getFloorplanObjectPeerTable(); } }); } }); // Ajax Tree $('#ajaxTree') .on('select_node.jstree', function (e, data) { clearObjectDetails(); var portAndPathObject = $('#portAndPath').detach(); $('#rowCabinet').hide(); $('#cabinetCardBox').hide(); $('#rowFloorplan').hide(); $('#floorplanDetails').hide(); $('#floorplanContainer').children('i').remove(); //Store objectID var cabinetID = data.node.id; $(document).data('selectedNodeID', cabinetID); if(data.node.type == 'cabinet'){ $(document).data('selectedObjectType', 'cabinet'); var currentCabinetFace = $('#currentCabinetFace').val(); retrieveCabinet(cabinetID, currentCabinetFace); $('#portAndPathContainerCabinet').html(portAndPathObject); $('#rowCabinet').show(); $('#cabinetCardBox').show(); //Collect object data var data = { cabinetID: cabinetID, action: 'get' }; data = JSON.stringify(data); //Retrieve cabinet details $.post("backend/process_cabinet.php", {data:data}, function(response){ var response = $.parseJSON(response); if (response.error != ''){ displayError(response.error); } else { //Initialize cabinet size input $('#cabinetSizeInput').editable('destroy'); $('#cabinetSizeInput').editable({ showbuttons: false, mode: 'inline', url: 'backend/process_cabinet.php', params: function(params){ var data = { action: 'RU', cabinetID: cabinetID, RUSize: params.value }; params.data = JSON.stringify(data); return params; }, success: function(response) { var response = $.parseJSON(response); if (response.error.length){ displayError(response.error); $('#cabinetSizeInput').editable('setValue', response.success.originalSize); } else { var origSize = parseInt(response.success.originalSize); var newSize = parseInt(response.success.size); if(newSize > origSize) { var cabAdjustment = 'grow'; } else { var cabAdjustment = 'shrink'; } var RUOrientation = $('#cabinetHeader').data('ruOrientation'); var rackUnitHTML = ''; rackUnitHTML += ''; rackUnitHTML += '42'; rackUnitHTML += ''; rackUnitHTML += ''; rackUnitHTML += ''; // Get difference between new and original cabinet size if(cabAdjustment == 'grow') { var sizeDiff = newSize - origSize; } else { var sizeDiff = origSize - newSize; } // Grow or shrink cabinet for(x=0; x'; tableData += ''; tableData += ''; tableData += ''+path.notes+''; tableData += ''; tableData += ''; }); $('#cablePathTableBody').html(tableData); makePathDeleteClickable(response.success.allCabinets); //Enable 'Add Path' button $('#pathAdd').prop('disabled', false); //Initialize cabinet adjacency inputs $('.adjCabinetSelect').editable('destroy'); $('.adjCabinetSelect').editable({ showbuttons: false, mode: 'inline', source: response.success.localCabinets, url: 'backend/process_cabinet.php', params: function(params){ var data = { action: 'adj', cabinetID: cabinetID, side: params.name, adjCabinetID: params.value }; params.data = JSON.stringify(data); return params; }, success: function(response, newValue) { $('#ajaxTree').jstree("refresh"); } }); var adjLeftCabinetID = 'adjLeft' in response.success ? response.success.adjLeft.cabinetID : '-'; var adjRightCabinetID = 'adjRight' in response.success ? response.success.adjRight.cabinetID : '-'; $('#adjCabinetSelectL').editable('setValue', adjLeftCabinetID).editable('enable'); $('#adjCabinetSelectR').editable('setValue', adjRightCabinetID).editable('enable'); // Enable cabinet face selector $('#cabinetControls').show(); } }); } else if (data.node.type == 'floorplan') { $(document).data('selectedObjectType', 'floorplan'); initializeImageUpload($(document).data('selectedNodeID')); disableCabinetDetails(); $('#portAndPathContainerFloorplan').html(portAndPathObject); $('#rowFloorplan').show(); $('#floorplanDetails').show(); //Collect object data var data = { cabinetID: cabinetID, action: 'getFloorplan' }; data = JSON.stringify(data); //Retrieve floorplan details $.post("backend/process_cabinet.php", {data:data}, function(response){ var response = $.parseJSON(response); if (response.error != ''){ displayError(response.error); } else { var floorplanImgPath = '/images/floorplanImages/'+response.success.floorplanImg; $('#imgDummy').load(function(){ var imgHeight = $(this).height(); var imgWidth = $(this).width(); $('#floorplanContainer').css({"background-image":"url("+floorplanImgPath+")", "height":imgHeight, "width":imgWidth}); fitFloorplan(); }).attr('src', floorplanImgPath); $.each(response.success.floorplanObjectData, function(index, item){ var object = $(item.html); var positionTop = item.position_top+'px'; var positionLeft = item.position_left+'px'; $('#floorplanContainer') .append(object .css({ 'z-index': 1000, 'position': 'absolute', 'top': positionTop, 'left': positionLeft}) .draggable({ start: function(event, ui){ $(document).data('disableWheelZoom', true); var scale = panzoom.getScale(); ui.originalPosition.left = ui.originalPosition.left / scale; ui.originalPosition.top = ui.originalPosition.top / scale; }, drag:function(event, ui){ var scale = panzoom.getScale(); ui.position.left = ui.position.left / scale; ui.position.top = ui.position.top / scale; }, stop: function(event, ui){ $(document).data('disableWheelZoom', false); dropFloorplanObject(event, ui); }, revert: function(){ var inBounds = objectInBounds($(this).offset()); $(document).data('floorplanObjectInBounds', inBounds); return !inBounds; } }) .hover( function(){ panzoom.setOptions({disablePan: true}); }, function(){ panzoom.setOptions({disablePan: false}); }) .data('objectId', item.id) .attr('id', 'floorplanObj'+item.id) ); makeFloorplanObjectsClickable(); }); getFloorplanObjectPeerTable(); } }); } else if (data.node.type == 'location' || data.node.type == 'pod') { $(document).data('selectedObjectType', 'location'); disableCabinetDetails(); $("#buildSpaceContent").html("Please select a cabinet from the Environment Tree."); $('#portAndPathContainerCabinet').html(portAndPathObject); $('#rowCabinet').show(); } else { $(document).data('selectedObjectType', ''); $("#buildSpaceContent").html("Error"); } }) .bind('rename_node.jstree', function(event, nodeData){ var data = { operation: 'rename_node', id: nodeData.node.id, name: nodeData.node.text }; data = JSON.stringify(data); $.post('/backend/process_environment-tree.php', {data:data}, function(response){ var responseJSON = JSON.parse(response); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); } else { var nodeType = $("#ajaxTree").jstree(true).get_type(nodeData.node); if (nodeType == 'cabinet') { $('#cabinetHeader').html(nodeData.node.text); } } $('#ajaxTree').jstree("refresh"); }); return false; }) .bind('move_node.jstree', function(event, nodeData){ var nodeID = nodeData.node.id; var ordOrig = parseInt(nodeData.node.original.order); var posOld = parseInt(nodeData.old_position); var posNew = parseInt(nodeData.position); var posDiff = posNew - posOld; var ordNew = ordOrig + posDiff; nodeData.node.original.order = ordNew; var data = { operation: 'move_node', id: nodeID, parent: nodeData.node.parent, order: ordNew }; data = JSON.stringify(data); $.post('/backend/process_environment-tree.php', {data:data}, function(response){ var responseJSON = JSON.parse(response); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); } $('#ajaxTree').jstree("refresh"); }); }) .jstree({ 'sort' : function(a, b){ a1 = this.get_node(a); b1 = this.get_node(b); aOrd = parseInt(a1.original.order); bOrd = parseInt(b1.original.order); return aOrd > bOrd ? 1 : -1; }, 'core' : { 'check_callback' : function(operation, node, node_parent, node_position, more){ if(operation == 'move_node'){ if(node.type == 'location') { if(node_parent.type == 'pod' || node_parent.type == 'cabinet') { return false; } } else if(node.type == 'pod') { if(node_parent.type === '#' || node_parent.type == 'cabinet' || node_parent.type == 'pod') { return false; } } else if(node.type == 'cabinet' || node.type == 'floorplan') { if(node_parent.type === '#') { return false; } } } return true; }, 'themes' : { 'responsive': false }, 'data' : { 'url' : function (node) { return 'backend/retrieve_environment-tree.php?scope=cabinet'; } }, 'strings' : { 'New node' : 'New_Node' }, 'multiple' : false }, 'dnd' : { 'check_while_dragging': false }, 'state' : { 'key' : 'envNavigation', 'filter': function(state){ // Select template requested by app if($('#nodeID').length) { var nodeID = $('#nodeID').val(); state.core.selected = [nodeID]; $('#nodeID').remove(); } return state; } }, 'types' : { 'default' : { 'icon' : 'fa fa-building' }, 'location' : { 'icon' : 'fa fa-building' }, 'pod' : { 'icon' : 'zmdi zmdi-group-work' }, 'cabinet' : { 'icon' : 'fa fa-server' }, 'floorplan' : { 'icon' : 'fa fa-map-o' } }, 'contextmenu':{ 'items': customMenu }, 'plugins' : [ 'contextmenu', 'dnd', 'search', 'state', 'types', 'wholerow', 'sort' ] }); }); function createNode(refData, newNodeType) { var ref = $.jstree.reference(refData.reference); node = ref.get_selected(); if(!node.length) { return false; } nodeID = node[0]; var data = { operation: 'create_node', parent: nodeID, type: newNodeType }; data = JSON.stringify(data); $.post('/backend/process_environment-tree.php', {data:data}, function(response){ var responseJSON = JSON.parse(response); if (responseJSON.active == 'inactive'){ window.location.replace("/"); } else if ($(responseJSON.error).size() > 0){ displayError(responseJSON.error); } else { var newNodeID = responseJSON.success.nodeID; var newNodeName = responseJSON.success.nodeName; nodeID = ref.create_node(nodeID, { type:newNodeType, id:newNodeID, text:newNodeName }); if(nodeID) { ref.edit(nodeID); $('#ajaxTree').jstree('deselect_all'); $('#ajaxTree').jstree('select_node', newNodeID); } } }); } function customMenu(node) { var items = { "New Location": { "label": "New Location", "action": function(data) { createNode(data, 'location'); } }, "New Pod": { "label": "New Pod", "action": function(data) { createNode(data, 'pod'); } }, "New Cabinet": { "label": "New Cabinet", "action": function(data) { createNode(data, 'cabinet'); } }, "New Floorplan": { "label": "New Floorplan", "action": function(data) { createNode(data, 'floorplan'); } }, "Rename": { "label": "Rename", "action": function (data) { var inst = $.jstree.reference(data.reference); obj = inst.get_node(data.reference); inst.edit(obj); } }, "Delete": { "label": "Delete", "action": function (data) { var ref = $.jstree.reference(data.reference), node = ref.get_selected(); if(!node.length) { return false; } var nodeID = node[0]; var data = { operation: 'delete_node', id: nodeID } data = JSON.stringify(data); $.post('backend/process_environment-tree.php', {data:data}, function(response){ var responseJSON = JSON.parse(response); if($(responseJSON.error).size() > 0) { displayError(responseJSON.error); } else { ref.delete_node(node); } }); } } }; if(node.type == 'cabinet' || node.type == 'floorplan') { delete items['New Location']; delete items['New Cabinet']; delete items['New Pod']; delete items['New Floorplan']; } else if(node.type == 'pod') { delete items['New Location']; delete items['New Pod']; delete items['New Floorplan']; } return items; }