1*4882a593Smuzhiyun"use strict"; 2*4882a593Smuzhiyun 3*4882a593Smuzhiyunfunction layerDetailsPageInit (ctx) { 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun var layerDepInput = $("#layer-dep-input"); 6*4882a593Smuzhiyun var layerDepBtn = $("#add-layer-dependency-btn"); 7*4882a593Smuzhiyun var layerDepsList = $("#layer-deps-list"); 8*4882a593Smuzhiyun var currentLayerDepSelection; 9*4882a593Smuzhiyun var addRmLayerBtn = $("#add-remove-layer-btn"); 10*4882a593Smuzhiyun var targetTab = $("#targets-tab"); 11*4882a593Smuzhiyun var machineTab = $("#machines-tab"); 12*4882a593Smuzhiyun var detailsTab = $("#details-tab"); 13*4882a593Smuzhiyun var editLayerSource = $("#edit-layer-source"); 14*4882a593Smuzhiyun var saveSourceChangesBtn = $("#save-changes-for-switch"); 15*4882a593Smuzhiyun var layerGitRefInput = $("#layer-git-ref"); 16*4882a593Smuzhiyun var layerSubDirInput = $('#layer-subdir'); 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun targetTab.on('show.bs.tab', targetsTabShow); 19*4882a593Smuzhiyun detailsTab.on('show.bs.tab', detailsTabShow); 20*4882a593Smuzhiyun machineTab.on('show.bs.tab', machinesTabShow); 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun /* setup the dependencies typeahead */ 23*4882a593Smuzhiyun libtoaster.makeTypeahead(layerDepInput, 24*4882a593Smuzhiyun libtoaster.ctx.layersTypeAheadUrl, 25*4882a593Smuzhiyun { include_added: "true" }, function(item){ 26*4882a593Smuzhiyun currentLayerDepSelection = item; 27*4882a593Smuzhiyun layerDepBtn.removeAttr("disabled"); 28*4882a593Smuzhiyun }); 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* disable the add layer button if its input field is empty */ 31*4882a593Smuzhiyun layerDepInput.on("keyup",function(){ 32*4882a593Smuzhiyun if ($(this).val().length === 0) { 33*4882a593Smuzhiyun layerDepBtn.attr("disabled", "disabled"); 34*4882a593Smuzhiyun } 35*4882a593Smuzhiyun }); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun function addRemoveDep(depLayerId, add, doneCb) { 38*4882a593Smuzhiyun var data = { layer_version_id : ctx.layerVersion.id }; 39*4882a593Smuzhiyun if (add) 40*4882a593Smuzhiyun data.add_dep = depLayerId; 41*4882a593Smuzhiyun else 42*4882a593Smuzhiyun data.rm_dep = depLayerId; 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun $.ajax({ 45*4882a593Smuzhiyun type: "POST", 46*4882a593Smuzhiyun url: ctx.xhrUpdateLayerUrl, 47*4882a593Smuzhiyun data: data, 48*4882a593Smuzhiyun headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, 49*4882a593Smuzhiyun success: function (data) { 50*4882a593Smuzhiyun if (data.error != "ok") { 51*4882a593Smuzhiyun console.warn(data.error); 52*4882a593Smuzhiyun } else { 53*4882a593Smuzhiyun doneCb(); 54*4882a593Smuzhiyun } 55*4882a593Smuzhiyun }, 56*4882a593Smuzhiyun error: function (data) { 57*4882a593Smuzhiyun console.warn("Call failed"); 58*4882a593Smuzhiyun console.warn(data); 59*4882a593Smuzhiyun } 60*4882a593Smuzhiyun }); 61*4882a593Smuzhiyun } 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun function layerDepRemoveClick() { 64*4882a593Smuzhiyun var toRemove = $(this).parent().data('layer-id'); 65*4882a593Smuzhiyun var layerDepItem = $(this); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun addRemoveDep(toRemove, false, function(){ 68*4882a593Smuzhiyun layerDepItem.parent().fadeOut(function (){ 69*4882a593Smuzhiyun layerDepItem.remove(); 70*4882a593Smuzhiyun }); 71*4882a593Smuzhiyun }); 72*4882a593Smuzhiyun } 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* Add dependency layer button click handler */ 75*4882a593Smuzhiyun layerDepBtn.click(function(){ 76*4882a593Smuzhiyun if (currentLayerDepSelection === undefined) 77*4882a593Smuzhiyun return; 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun addRemoveDep(currentLayerDepSelection.id, true, function(){ 80*4882a593Smuzhiyun /* Make a list item for the new layer dependency */ 81*4882a593Smuzhiyun var newLayerDep = $("<li><a></a><span class=\"glyphicon glyphicon-trash\" data-toggle=\"tooltip\" title=\"Delete\"></span></li>"); 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun newLayerDep.data('layer-id', currentLayerDepSelection.id); 84*4882a593Smuzhiyun newLayerDep.children("span").tooltip(); 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun var link = newLayerDep.children("a"); 87*4882a593Smuzhiyun link.attr("href", currentLayerDepSelection.layerdetailurl); 88*4882a593Smuzhiyun link.text(currentLayerDepSelection.name); 89*4882a593Smuzhiyun link.tooltip({title: currentLayerDepSelection.tooltip, placement: "right"}); 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun /* Connect up the tash icon */ 92*4882a593Smuzhiyun var trashItem = newLayerDep.children("span"); 93*4882a593Smuzhiyun trashItem.click(layerDepRemoveClick); 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun layerDepsList.append(newLayerDep); 96*4882a593Smuzhiyun /* Clear the current selection */ 97*4882a593Smuzhiyun layerDepInput.val(""); 98*4882a593Smuzhiyun currentLayerDepSelection = undefined; 99*4882a593Smuzhiyun layerDepBtn.attr("disabled", "disabled"); 100*4882a593Smuzhiyun }); 101*4882a593Smuzhiyun }); 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun $(".glyphicon-edit").click(function (){ 104*4882a593Smuzhiyun var mParent = $(this).parent("dd"); 105*4882a593Smuzhiyun mParent.prev().css("margin-top", "10px"); 106*4882a593Smuzhiyun mParent.children("form").slideDown(); 107*4882a593Smuzhiyun var currentVal = mParent.children(".current-value"); 108*4882a593Smuzhiyun currentVal.hide(); 109*4882a593Smuzhiyun /* Set the current value to the input field */ 110*4882a593Smuzhiyun mParent.find("textarea,input").val(currentVal.text()); 111*4882a593Smuzhiyun /* If the input field is empty, disable the submit button */ 112*4882a593Smuzhiyun if ( mParent.find("textarea,input").val().length == 0 ) { 113*4882a593Smuzhiyun mParent.find(".change-btn").attr("disabled", "disabled"); 114*4882a593Smuzhiyun } 115*4882a593Smuzhiyun /* Hides the "Not set" text */ 116*4882a593Smuzhiyun mParent.children(".text-muted").hide(); 117*4882a593Smuzhiyun /* We're editing so hide the delete icon */ 118*4882a593Smuzhiyun mParent.children(".delete-current-value").hide(); 119*4882a593Smuzhiyun mParent.find(".cancel").show(); 120*4882a593Smuzhiyun $(this).hide(); 121*4882a593Smuzhiyun }); 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun $(".delete-current-value").click(function(){ 124*4882a593Smuzhiyun var mParent = $(this).parent("dd"); 125*4882a593Smuzhiyun mParent.find("input").val(""); 126*4882a593Smuzhiyun mParent.find("textarea").val(""); 127*4882a593Smuzhiyun mParent.find(".change-btn").click(); 128*4882a593Smuzhiyun }); 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun $(".cancel").click(function(){ 131*4882a593Smuzhiyun var mParent = $(this).parents("dd"); 132*4882a593Smuzhiyun $(this).hide(); 133*4882a593Smuzhiyun mParent.children("form").slideUp(function(){ 134*4882a593Smuzhiyun mParent.children(".current-value").show(); 135*4882a593Smuzhiyun /* Show the "Not set" text if we ended up with no value */ 136*4882a593Smuzhiyun if (!mParent.children(".current-value").html()){ 137*4882a593Smuzhiyun mParent.children(".text-muted").fadeIn(); 138*4882a593Smuzhiyun mParent.children(".delete-current-value").hide(); 139*4882a593Smuzhiyun } else { 140*4882a593Smuzhiyun mParent.children(".delete-current-value").show(); 141*4882a593Smuzhiyun } 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun mParent.children(".glyphicon-edit").show(); 144*4882a593Smuzhiyun mParent.prev().css("margin-top", "0"); 145*4882a593Smuzhiyun }); 146*4882a593Smuzhiyun }); 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun function defaultAddBtnText(){ 150*4882a593Smuzhiyun var text = " Add the "+ctx.layerVersion.name+" layer to your project"; 151*4882a593Smuzhiyun addRmLayerBtn.text(text); 152*4882a593Smuzhiyun addRmLayerBtn.prepend("<span class=\"glyphicon glyphicon-plus\"></span>"); 153*4882a593Smuzhiyun addRmLayerBtn.removeClass("btn-danger"); 154*4882a593Smuzhiyun } 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun function detailsTabShow(){ 157*4882a593Smuzhiyun if (!ctx.layerVersion.inCurrentPrj) 158*4882a593Smuzhiyun defaultAddBtnText(); 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun window.location.hash = "information"; 161*4882a593Smuzhiyun } 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun function targetsTabShow(){ 164*4882a593Smuzhiyun if (!ctx.layerVersion.inCurrentPrj){ 165*4882a593Smuzhiyun if (ctx.numTargets > 0) { 166*4882a593Smuzhiyun var text = " Add the "+ctx.layerVersion.name+" layer to your project "+ 167*4882a593Smuzhiyun "to enable these recipes"; 168*4882a593Smuzhiyun addRmLayerBtn.text(text); 169*4882a593Smuzhiyun addRmLayerBtn.prepend("<span class=\"glyphicon glyphicon-plus\"></span>"); 170*4882a593Smuzhiyun } else { 171*4882a593Smuzhiyun defaultAddBtnText(); 172*4882a593Smuzhiyun } 173*4882a593Smuzhiyun } 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun window.location.hash = "recipes"; 176*4882a593Smuzhiyun } 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun $("#recipestable").on('table-done', function(e, total, tableParams){ 179*4882a593Smuzhiyun ctx.numTargets = total; 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun if (total === 0 && !tableParams.search) { 182*4882a593Smuzhiyun $("#no-recipes-yet").show(); 183*4882a593Smuzhiyun } else { 184*4882a593Smuzhiyun $("#no-recipes-yet").hide(); 185*4882a593Smuzhiyun } 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun targetTab.removeClass("text-muted"); 188*4882a593Smuzhiyun if (window.location.hash === "#recipes"){ 189*4882a593Smuzhiyun /* re run the machinesTabShow to update the text */ 190*4882a593Smuzhiyun targetsTabShow(); 191*4882a593Smuzhiyun } 192*4882a593Smuzhiyun }); 193*4882a593Smuzhiyun 194*4882a593Smuzhiyun $("#machinestable").on('table-done', function(e, total, tableParams){ 195*4882a593Smuzhiyun ctx.numMachines = total; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun if (total === 0 && !tableParams.search) 198*4882a593Smuzhiyun $("#no-machines-yet").show(); 199*4882a593Smuzhiyun else 200*4882a593Smuzhiyun $("#no-machines-yet").hide(); 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun machineTab.removeClass("text-muted"); 203*4882a593Smuzhiyun if (window.location.hash === "#machines"){ 204*4882a593Smuzhiyun /* re run the machinesTabShow to update the text */ 205*4882a593Smuzhiyun machinesTabShow(); 206*4882a593Smuzhiyun } 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun $(".select-machine-btn").click(function(e){ 209*4882a593Smuzhiyun if ($(this).hasClass("disabled")) 210*4882a593Smuzhiyun e.preventDefault(); 211*4882a593Smuzhiyun }); 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun }); 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun function machinesTabShow(){ 217*4882a593Smuzhiyun if (!ctx.layerVersion.inCurrentPrj) { 218*4882a593Smuzhiyun if (ctx.numMachines > 0){ 219*4882a593Smuzhiyun var text = " Add the "+ctx.layerVersion.name+" layer to your project " + 220*4882a593Smuzhiyun "to enable these machines"; 221*4882a593Smuzhiyun addRmLayerBtn.text(text); 222*4882a593Smuzhiyun addRmLayerBtn.prepend("<span class=\"glyphicon glyphicon-plus\"></span>"); 223*4882a593Smuzhiyun } else { 224*4882a593Smuzhiyun defaultAddBtnText(); 225*4882a593Smuzhiyun } 226*4882a593Smuzhiyun } 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun window.location.hash = "machines"; 229*4882a593Smuzhiyun } 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun $(".pagesize").change(function(){ 232*4882a593Smuzhiyun var search = libtoaster.parseUrlParams(); 233*4882a593Smuzhiyun search.limit = this.value; 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun window.location.search = libtoaster.dumpsUrlParams(search); 236*4882a593Smuzhiyun }); 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun /* Enables the Build target and Select Machine buttons and switches the 239*4882a593Smuzhiyun * add/remove button 240*4882a593Smuzhiyun */ 241*4882a593Smuzhiyun function setLayerInCurrentPrj(added) { 242*4882a593Smuzhiyun ctx.layerVersion.inCurrentPrj = added; 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun if (added){ 245*4882a593Smuzhiyun /* enable and switch all the button states */ 246*4882a593Smuzhiyun $(".build-recipe-btn").removeClass("disabled"); 247*4882a593Smuzhiyun $(".select-machine-btn").removeClass("disabled"); 248*4882a593Smuzhiyun addRmLayerBtn.addClass("btn-danger"); 249*4882a593Smuzhiyun addRmLayerBtn.data('directive', "remove"); 250*4882a593Smuzhiyun addRmLayerBtn.text(" Remove the "+ctx.layerVersion.name+" layer from your project"); 251*4882a593Smuzhiyun addRmLayerBtn.prepend("<span class=\"glyphicon glyphicon-trash\"></span>"); 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun } else { 254*4882a593Smuzhiyun /* disable and switch all the button states */ 255*4882a593Smuzhiyun $(".build-recipe-btn").addClass("disabled"); 256*4882a593Smuzhiyun $(".select-machine-btn").addClass("disabled"); 257*4882a593Smuzhiyun addRmLayerBtn.removeClass("btn-danger"); 258*4882a593Smuzhiyun addRmLayerBtn.data('directive', "add"); 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun /* "special" handler so that we get the correct button text which depends 261*4882a593Smuzhiyun * on which tab is currently visible. Unfortunately we can't just call 262*4882a593Smuzhiyun * tab('show') as if it's already visible it doesn't run the event. 263*4882a593Smuzhiyun */ 264*4882a593Smuzhiyun switch ($(".nav-tabs .active a").prop('id')){ 265*4882a593Smuzhiyun case 'machines-tab': 266*4882a593Smuzhiyun machinesTabShow(); 267*4882a593Smuzhiyun break; 268*4882a593Smuzhiyun case 'targets-tab': 269*4882a593Smuzhiyun targetsTabShow(); 270*4882a593Smuzhiyun break; 271*4882a593Smuzhiyun default: 272*4882a593Smuzhiyun defaultAddBtnText(); 273*4882a593Smuzhiyun break; 274*4882a593Smuzhiyun } 275*4882a593Smuzhiyun } 276*4882a593Smuzhiyun } 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun $("#dismiss-alert").click(function(){ 279*4882a593Smuzhiyun $(this).parent().fadeOut(); 280*4882a593Smuzhiyun }); 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun /* Add or remove this layer from the project */ 283*4882a593Smuzhiyun addRmLayerBtn.click(function() { 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun var add = ($(this).data('directive') === "add"); 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun libtoaster.addRmLayer(ctx.layerVersion, add, function (layersList){ 288*4882a593Smuzhiyun var alertMsg = $("#alert-msg"); 289*4882a593Smuzhiyun alertMsg.html(libtoaster.makeLayerAddRmAlertMsg(ctx.layerVersion, layersList, add)); 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun setLayerInCurrentPrj(add); 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun libtoaster.showChangeNotification(alertMsg); 294*4882a593Smuzhiyun }); 295*4882a593Smuzhiyun }); 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /* Handler for all of the Change buttons */ 298*4882a593Smuzhiyun $(".change-btn").click(function(){ 299*4882a593Smuzhiyun var mParent = $(this).parent(); 300*4882a593Smuzhiyun var prop = $(this).data('layer-prop'); 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun /* We have inputs, select and textareas to potentially grab the value 303*4882a593Smuzhiyun * from. 304*4882a593Smuzhiyun */ 305*4882a593Smuzhiyun var entryElement = mParent.find("input"); 306*4882a593Smuzhiyun if (entryElement.length === 0) 307*4882a593Smuzhiyun entryElement = mParent.find("textarea"); 308*4882a593Smuzhiyun if (entryElement.length === 0) { 309*4882a593Smuzhiyun console.warn("Could not find element to get data from for this change"); 310*4882a593Smuzhiyun return; 311*4882a593Smuzhiyun } 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun var data = { layer_version_id: ctx.layerVersion.id }; 314*4882a593Smuzhiyun data[prop] = entryElement.val(); 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun $.ajax({ 317*4882a593Smuzhiyun type: "POST", 318*4882a593Smuzhiyun url: ctx.xhrUpdateLayerUrl, 319*4882a593Smuzhiyun data: data, 320*4882a593Smuzhiyun headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, 321*4882a593Smuzhiyun success: function (data) { 322*4882a593Smuzhiyun if (data.error != "ok") { 323*4882a593Smuzhiyun console.warn(data.error); 324*4882a593Smuzhiyun } else { 325*4882a593Smuzhiyun /* success layer property changed */ 326*4882a593Smuzhiyun var inputArea = mParent.parents("dd"); 327*4882a593Smuzhiyun var text; 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun text = entryElement.val(); 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun /* Hide the "Not set" text if it's visible */ 332*4882a593Smuzhiyun inputArea.find(".text-muted").hide(); 333*4882a593Smuzhiyun inputArea.find(".current-value").text(text); 334*4882a593Smuzhiyun /* Same behaviour as cancel in that we hide the form/show current 335*4882a593Smuzhiyun * value. 336*4882a593Smuzhiyun */ 337*4882a593Smuzhiyun inputArea.find(".cancel").click(); 338*4882a593Smuzhiyun } 339*4882a593Smuzhiyun }, 340*4882a593Smuzhiyun error: function (data) { 341*4882a593Smuzhiyun console.warn("Call failed"); 342*4882a593Smuzhiyun console.warn(data); 343*4882a593Smuzhiyun } 344*4882a593Smuzhiyun }); 345*4882a593Smuzhiyun }); 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun /* Disable the change button when we have no data in the input */ 348*4882a593Smuzhiyun $("dl input, dl textarea").on("input",function() { 349*4882a593Smuzhiyun if ($(this).val().length === 0) 350*4882a593Smuzhiyun $(this).parent().next(".change-btn").attr("disabled", "disabled"); 351*4882a593Smuzhiyun else 352*4882a593Smuzhiyun $(this).parent().next(".change-btn").removeAttr("disabled"); 353*4882a593Smuzhiyun }); 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun /* This checks to see if the dt's dd has data in it or if the change data 356*4882a593Smuzhiyun * form is visible, otherwise hide it 357*4882a593Smuzhiyun */ 358*4882a593Smuzhiyun $("dl").children().each(function (){ 359*4882a593Smuzhiyun if ($(this).is("dt")) { 360*4882a593Smuzhiyun var dd = $(this).next("dd"); 361*4882a593Smuzhiyun if (!dd.children("form:visible")|| !dd.find(".current-value").html()){ 362*4882a593Smuzhiyun if (ctx.layerVersion.layer_source == ctx.layerSourceTypes.TYPE_IMPORTED || 363*4882a593Smuzhiyun ctx.layerVersion.layer_source == ctx.layerSourceTypes.TYPE_LOCAL) { 364*4882a593Smuzhiyun /* There's no current value and the layer is editable 365*4882a593Smuzhiyun * so show the "Not set" and hide the delete icon 366*4882a593Smuzhiyun */ 367*4882a593Smuzhiyun dd.find(".text-muted").show(); 368*4882a593Smuzhiyun dd.find(".delete-current-value").hide(); 369*4882a593Smuzhiyun } else { 370*4882a593Smuzhiyun /* We're not viewing an editable layer so hide the empty dd/dl pair */ 371*4882a593Smuzhiyun $(this).hide(); 372*4882a593Smuzhiyun dd.hide(); 373*4882a593Smuzhiyun } 374*4882a593Smuzhiyun } 375*4882a593Smuzhiyun } 376*4882a593Smuzhiyun }); 377*4882a593Smuzhiyun 378*4882a593Smuzhiyun /* Hide the right column if it contains no information */ 379*4882a593Smuzhiyun if ($("dl.item-info").children(':visible').length === 0) { 380*4882a593Smuzhiyun $("dl.item-info").parent().hide(); 381*4882a593Smuzhiyun } 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun /* Clear the current search selection and reload the results */ 384*4882a593Smuzhiyun $(".target-search-clear").click(function(){ 385*4882a593Smuzhiyun $("#target-search").val(""); 386*4882a593Smuzhiyun $(this).parents("form").submit(); 387*4882a593Smuzhiyun }); 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun $(".machine-search-clear").click(function(){ 390*4882a593Smuzhiyun $("#machine-search").val(""); 391*4882a593Smuzhiyun $(this).parents("form").submit(); 392*4882a593Smuzhiyun }); 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun $("#layer-delete-confirmed").click(function(){ 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun $("#delete-layer-modal button[data-dismiss='modal']").hide(); 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun var message = $('<span>You have deleted <strong>1</strong> layer from your project: <strong id="deleted-layer-name"></strong>'); 399*4882a593Smuzhiyun message.find("#deleted-layer-name").text(ctx.layerVersion.name); 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun $.ajax({ 402*4882a593Smuzhiyun type: "DELETE", 403*4882a593Smuzhiyun url: ctx.xhrUpdateLayerUrl, 404*4882a593Smuzhiyun headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, 405*4882a593Smuzhiyun success: function(data) { 406*4882a593Smuzhiyun if (data.error != "ok") { 407*4882a593Smuzhiyun console.warn(data.error); 408*4882a593Smuzhiyun } else { 409*4882a593Smuzhiyun libtoaster.setNotification("layer-deleted", message.html()); 410*4882a593Smuzhiyun window.location.replace(data.gotoUrl); 411*4882a593Smuzhiyun } 412*4882a593Smuzhiyun }, 413*4882a593Smuzhiyun error: function(data) { 414*4882a593Smuzhiyun console.warn("Call failed"); 415*4882a593Smuzhiyun console.warn(data); 416*4882a593Smuzhiyun } 417*4882a593Smuzhiyun }); 418*4882a593Smuzhiyun }); 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun layerDepsList.find(".glyphicon-trash").click(layerDepRemoveClick); 421*4882a593Smuzhiyun layerDepsList.find("a").tooltip(); 422*4882a593Smuzhiyun $(".glyphicon-trash").tooltip(); 423*4882a593Smuzhiyun $(".commit").tooltip(); 424*4882a593Smuzhiyun 425*4882a593Smuzhiyun editLayerSource.click(function() { 426*4882a593Smuzhiyun /* Kindly bring the git layers imported from layerindex to normal page 427*4882a593Smuzhiyun * and not this new page :( 428*4882a593Smuzhiyun */ 429*4882a593Smuzhiyun $(this).hide(); 430*4882a593Smuzhiyun saveSourceChangesBtn.attr("disabled", "disabled"); 431*4882a593Smuzhiyun 432*4882a593Smuzhiyun $("#git-repo-info, #directory-info").hide(); 433*4882a593Smuzhiyun $("#edit-layer-source-form").fadeIn(); 434*4882a593Smuzhiyun if ($("#layer-dir-path-in-details").val() == "") { 435*4882a593Smuzhiyun //Local dir path is empty... 436*4882a593Smuzhiyun $("#repo").prop("checked", true); 437*4882a593Smuzhiyun $("#layer-git").fadeIn(); 438*4882a593Smuzhiyun $("#layer-dir").hide(); 439*4882a593Smuzhiyun } else { 440*4882a593Smuzhiyun $("#layer-git").hide(); 441*4882a593Smuzhiyun $("#layer-dir").fadeIn(); 442*4882a593Smuzhiyun } 443*4882a593Smuzhiyun }); 444*4882a593Smuzhiyun 445*4882a593Smuzhiyun $('input:radio[name="source-location"]').change(function() { 446*4882a593Smuzhiyun if ($('input[name=source-location]:checked').val() == "repo") { 447*4882a593Smuzhiyun $("#layer-git").fadeIn(); 448*4882a593Smuzhiyun $("#layer-dir").hide(); 449*4882a593Smuzhiyun if ($("#layer-git-repo-url").val().length === 0 && layerGitRefInput.val().length === 0) { 450*4882a593Smuzhiyun saveSourceChangesBtn.attr("disabled", "disabled"); 451*4882a593Smuzhiyun } 452*4882a593Smuzhiyun } else { 453*4882a593Smuzhiyun $("#layer-dir").fadeIn(); 454*4882a593Smuzhiyun $("#layer-git").hide(); 455*4882a593Smuzhiyun } 456*4882a593Smuzhiyun }); 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun $("#layer-dir-path-in-details").keyup(function() { 459*4882a593Smuzhiyun saveSourceChangesBtn.removeAttr("disabled"); 460*4882a593Smuzhiyun }); 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun $("#layer-git-repo-url").keyup(function() { 463*4882a593Smuzhiyun if ($("#layer-git-repo-url").val().length > 0 && layerGitRefInput.val().length > 0) { 464*4882a593Smuzhiyun saveSourceChangesBtn.removeAttr("disabled"); 465*4882a593Smuzhiyun } 466*4882a593Smuzhiyun }); 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun layerGitRefInput.keyup(function() { 469*4882a593Smuzhiyun if ($("#layer-git-repo-url").val().length > 0 && layerGitRefInput.val().length > 0) { 470*4882a593Smuzhiyun saveSourceChangesBtn.removeAttr("disabled"); 471*4882a593Smuzhiyun } 472*4882a593Smuzhiyun }); 473*4882a593Smuzhiyun 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun layerSubDirInput.keyup(function(){ 476*4882a593Smuzhiyun if ($(this).val().length > 0){ 477*4882a593Smuzhiyun saveSourceChangesBtn.removeAttr("disabled"); 478*4882a593Smuzhiyun } 479*4882a593Smuzhiyun }); 480*4882a593Smuzhiyun 481*4882a593Smuzhiyun $('#cancel-changes-for-switch').click(function() { 482*4882a593Smuzhiyun $("#edit-layer-source-form").hide(); 483*4882a593Smuzhiyun $("#directory-info, #git-repo-info").fadeIn(); 484*4882a593Smuzhiyun editLayerSource.show(); 485*4882a593Smuzhiyun }); 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun saveSourceChangesBtn.click(function() { 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun var layerData = { 490*4882a593Smuzhiyun vcs_url: $('#layer-git-repo-url').val(), 491*4882a593Smuzhiyun commit: layerGitRefInput.val(), 492*4882a593Smuzhiyun dirpath: layerSubDirInput.val(), 493*4882a593Smuzhiyun local_source_dir: $('#layer-dir-path-in-details').val(), 494*4882a593Smuzhiyun }; 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun if ($('input[name=source-location]:checked').val() == "repo") { 497*4882a593Smuzhiyun layerData.local_source_dir = ""; 498*4882a593Smuzhiyun } else { 499*4882a593Smuzhiyun layerData.vcs_url = ""; 500*4882a593Smuzhiyun layerData.git_ref = ""; 501*4882a593Smuzhiyun } 502*4882a593Smuzhiyun 503*4882a593Smuzhiyun $.ajax({ 504*4882a593Smuzhiyun type: "POST", 505*4882a593Smuzhiyun url: ctx.xhrUpdateLayerUrl, 506*4882a593Smuzhiyun data: layerData, 507*4882a593Smuzhiyun headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, 508*4882a593Smuzhiyun success: function (data) { 509*4882a593Smuzhiyun if (data.error != "ok") { 510*4882a593Smuzhiyun console.warn(data.error); 511*4882a593Smuzhiyun } else { 512*4882a593Smuzhiyun /* success layer property changed */ 513*4882a593Smuzhiyun window.location.reload(); 514*4882a593Smuzhiyun } 515*4882a593Smuzhiyun }, 516*4882a593Smuzhiyun error: function (data) { 517*4882a593Smuzhiyun console.warn("Call failed"); 518*4882a593Smuzhiyun console.warn(data); 519*4882a593Smuzhiyun } 520*4882a593Smuzhiyun }); 521*4882a593Smuzhiyun }); 522*4882a593Smuzhiyun} 523