Squashed 'yocto-poky/' content from commit ea562de

git-subtree-dir: yocto-poky
git-subtree-split: ea562de57590c966cd5a75fda8defecd397e6436
diff --git a/bitbake/lib/toaster/toastergui/static/js/layerDepsModal.js b/bitbake/lib/toaster/toastergui/static/js/layerDepsModal.js
new file mode 100644
index 0000000..825f9dc
--- /dev/null
+++ b/bitbake/lib/toaster/toastergui/static/js/layerDepsModal.js
@@ -0,0 +1,90 @@
+/*
+ * layer: Object representing the parent layer { id: .. name: ... url }
+ * dependencies: array of dependency layer objects { id: .. name: ..}
+ * title: optional override for title
+ * body: optional override for body
+ * addToProject: Whether to add layers to project on accept
+ * successAdd: function to run on success
+ */
+function showLayerDepsModal(layer, dependencies, title, body, addToProject, successAdd) {
+
+  if ($("#dependencies-modal").length === 0) {
+    $.get(libtoaster.ctx.htmlUrl + "/layer_deps_modal.html", function(html){
+      $("body").append(html);
+      setupModal();
+    });
+  } else {
+    setupModal();
+  }
+
+  function setupModal(){
+
+    if (title) {
+      $('#dependencies-modal #title').text(title);
+    } else {
+      $('#dependencies-modal #title').text(layer.name);
+    }
+
+    if (body) {
+      $("#dependencies-modal #body-text").html(body);
+    } else {
+      $("#dependencies-modal #layer-name").text(layer.name);
+    }
+
+    var deplistHtml = "";
+    for (var i = 0; i < dependencies.length; i++) {
+      deplistHtml += "<li><label class=\"checkbox\"><input name=\"dependencies\" value=\"";
+      deplistHtml += dependencies[i].id;
+      deplistHtml +="\" type=\"checkbox\" checked=\"checked\"/>";
+      deplistHtml += dependencies[i].name;
+      deplistHtml += "</label></li>";
+    }
+    $('#dependencies-list').html(deplistHtml);
+
+    $("#dependencies-modal").data("deps", dependencies);
+
+    $('#dependencies-modal').modal('show');
+
+    /* Discard the old submission function */
+    $("#dependencies-modal-form").unbind('submit');
+
+    $("#dependencies-modal-form").submit(function (e) {
+      e.preventDefault();
+      var selectedLayerIds = [];
+      var selectedLayers = [];
+
+      $("input[name='dependencies']:checked").each(function () {
+        selectedLayerIds.push(parseInt($(this).val()));
+      });
+
+      /* -1 is a special dummy Id which we use when the layer isn't yet in the
+       * system, normally we would add the current layer to the selection.
+       */
+      if (layer.id != -1)
+        selectedLayerIds.push(layer.id);
+
+      /* Find the selected layer objects from our original list */
+      for (var i = 0; i < selectedLayerIds.length; i++) {
+        for (var j = 0; j < dependencies.length; j++) {
+          if (dependencies[j].id == selectedLayerIds[i]) {
+            selectedLayers.push(dependencies[j]);
+          }
+        }
+      }
+
+      if (addToProject) {
+        libtoaster.editCurrentProject({ 'layerAdd': selectedLayerIds.join(",") }, function () {
+          if (successAdd) {
+            successAdd(selectedLayers);
+          }
+        }, function () {
+          console.warn("Adding layers to project failed");
+        });
+      } else {
+        successAdd(selectedLayers);
+      }
+
+      $('#dependencies-modal').modal('hide');
+    });
+  }
+}