xref: /OK3568_Linux_fs/yocto/bitbake/lib/toaster/toastergui/static/js/layerDepsModal.js (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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