1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * layer: Object representing the parent layer { id: .. name: ... url } 3*4882a593Smuzhiyun * dependencies: array of dependency layer objects { id: .. name: ..} 4*4882a593Smuzhiyun * title: optional override for title 5*4882a593Smuzhiyun * body: optional override for body 6*4882a593Smuzhiyun * addToProject: Whether to add layers to project on accept 7*4882a593Smuzhiyun * successAdd: function to run on success 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyunfunction showLayerDepsModal(layer, 10*4882a593Smuzhiyun dependencies, 11*4882a593Smuzhiyun title, 12*4882a593Smuzhiyun body, 13*4882a593Smuzhiyun addToProject, 14*4882a593Smuzhiyun successAdd) { 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun if ($("#dependencies-modal").length === 0) { 17*4882a593Smuzhiyun $.get(libtoaster.ctx.htmlUrl + "/layer_deps_modal.html", function(html){ 18*4882a593Smuzhiyun $("body").append(html); 19*4882a593Smuzhiyun setupModal(); 20*4882a593Smuzhiyun }); 21*4882a593Smuzhiyun } else { 22*4882a593Smuzhiyun setupModal(); 23*4882a593Smuzhiyun } 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun function setupModal(){ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun if (title) { 28*4882a593Smuzhiyun $('#dependencies-modal #title').text(title); 29*4882a593Smuzhiyun } else { 30*4882a593Smuzhiyun $('#dependencies-modal #title').text(layer.name); 31*4882a593Smuzhiyun } 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun if (body) { 34*4882a593Smuzhiyun $("#dependencies-modal #body-text").html(body); 35*4882a593Smuzhiyun } else { 36*4882a593Smuzhiyun $("#dependencies-modal #layer-name").text(layer.name); 37*4882a593Smuzhiyun } 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun var deplistHtml = ""; 40*4882a593Smuzhiyun for (var i = 0; i < dependencies.length; i++) { 41*4882a593Smuzhiyun deplistHtml += "<li><div class=\"checkbox\"><label><input name=\"dependencies\" value=\""; 42*4882a593Smuzhiyun deplistHtml += dependencies[i].id; 43*4882a593Smuzhiyun deplistHtml +="\" type=\"checkbox\" checked=\"checked\"/>"; 44*4882a593Smuzhiyun deplistHtml += dependencies[i].name; 45*4882a593Smuzhiyun deplistHtml += "</label></div></li>"; 46*4882a593Smuzhiyun } 47*4882a593Smuzhiyun $('#dependencies-list').html(deplistHtml); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun $("#dependencies-modal").data("deps", dependencies); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* Clear any alert notifications before showing the modal */ 52*4882a593Smuzhiyun $(".alert").fadeOut(function(){ 53*4882a593Smuzhiyun $('#dependencies-modal').modal('show'); 54*4882a593Smuzhiyun }); 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* Discard the old submission function */ 57*4882a593Smuzhiyun $("#dependencies-modal-form").unbind('submit'); 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun $("#dependencies-modal-form").submit(function (e) { 60*4882a593Smuzhiyun e.preventDefault(); 61*4882a593Smuzhiyun var selectedLayerIds = []; 62*4882a593Smuzhiyun var selectedLayers = []; 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun $("input[name='dependencies']:checked").each(function () { 65*4882a593Smuzhiyun selectedLayerIds.push(parseInt($(this).val())); 66*4882a593Smuzhiyun }); 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* -1 is a special dummy Id which we use when the layer isn't yet in the 69*4882a593Smuzhiyun * system, normally we would add the current layer to the selection. 70*4882a593Smuzhiyun */ 71*4882a593Smuzhiyun if (layer.id != -1) 72*4882a593Smuzhiyun selectedLayerIds.push(layer.id); 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* Find the selected layer objects from our original list */ 75*4882a593Smuzhiyun for (var i = 0; i < selectedLayerIds.length; i++) { 76*4882a593Smuzhiyun for (var j = 0; j < dependencies.length; j++) { 77*4882a593Smuzhiyun if (dependencies[j].id == selectedLayerIds[i]) { 78*4882a593Smuzhiyun selectedLayers.push(dependencies[j]); 79*4882a593Smuzhiyun } 80*4882a593Smuzhiyun } 81*4882a593Smuzhiyun } 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun if (addToProject) { 84*4882a593Smuzhiyun libtoaster.editCurrentProject({ 'layerAdd': selectedLayerIds.join(",") }, function () { 85*4882a593Smuzhiyun if (successAdd) { 86*4882a593Smuzhiyun successAdd(selectedLayers); 87*4882a593Smuzhiyun } 88*4882a593Smuzhiyun }, function () { 89*4882a593Smuzhiyun console.warn("Adding layers to project failed"); 90*4882a593Smuzhiyun }); 91*4882a593Smuzhiyun } else { 92*4882a593Smuzhiyun successAdd(selectedLayers); 93*4882a593Smuzhiyun } 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun $('#dependencies-modal').modal('hide'); 96*4882a593Smuzhiyun }); 97*4882a593Smuzhiyun } 98*4882a593Smuzhiyun} 99