diff options
Diffstat (limited to 'bitbake')
4 files changed, 82 insertions, 23 deletions
diff --git a/bitbake/lib/toaster/toastergui/static/js/importlayer.js b/bitbake/lib/toaster/toastergui/static/js/importlayer.js index e2bc1ab607..15830dded5 100644 --- a/bitbake/lib/toaster/toastergui/static/js/importlayer.js +++ b/bitbake/lib/toaster/toastergui/static/js/importlayer.js | |||
@@ -78,8 +78,14 @@ function importLayerPageInit (ctx) { | |||
78 | }); | 78 | }); |
79 | 79 | ||
80 | importAndAddBtn.click(function(){ | 80 | importAndAddBtn.click(function(){ |
81 | /* This is a list of the names from layerDeps for the layer deps | ||
82 | * modal dialog body | ||
83 | */ | ||
84 | var depNames = []; | ||
85 | |||
81 | /* arrray of all layer dep ids includes parent and child deps */ | 86 | /* arrray of all layer dep ids includes parent and child deps */ |
82 | var allDeps = []; | 87 | var allDeps = []; |
88 | |||
83 | /* temporary object to use to do a reduce on the dependencies for each | 89 | /* temporary object to use to do a reduce on the dependencies for each |
84 | * layer dependency added | 90 | * layer dependency added |
85 | */ | 91 | */ |
@@ -96,6 +102,7 @@ function importLayerPageInit (ctx) { | |||
96 | depDeps[layer.id] = layer; | 102 | depDeps[layer.id] = layer; |
97 | } | 103 | } |
98 | } | 104 | } |
105 | depNames.push(layerDeps[key].name); | ||
99 | allDeps.push(layerDeps[key].id); | 106 | allDeps.push(layerDeps[key].id); |
100 | } | 107 | } |
101 | 108 | ||
@@ -106,10 +113,14 @@ function importLayerPageInit (ctx) { | |||
106 | 113 | ||
107 | if (depDepsArray.length > 0) { | 114 | if (depDepsArray.length > 0) { |
108 | var layer = { name: layerNameInput.val(), url: "#", id: -1 }; | 115 | var layer = { name: layerNameInput.val(), url: "#", id: -1 }; |
109 | show_layer_deps_modal(ctx.projectId, layer, depDepsArray, function(selected){ | 116 | var title = "Layer"; |
117 | var body = "<strong>"+layer.name+"</strong>'s dependencies ("+ | ||
118 | depNames.join(", ")+"</span>) require some layers that are not added to your project. Select the ones you want to add:</p>"; | ||
119 | |||
120 | show_layer_deps_modal(ctx.projectId, layer, depDepsArray, title, body, false, function(selected){ | ||
110 | /* Add the accepted dependencies to the allDeps array */ | 121 | /* Add the accepted dependencies to the allDeps array */ |
111 | if (selected.length > 0){ | 122 | if (selected.length > 0){ |
112 | allDeps.concat (selected); | 123 | allDeps = allDeps.concat (selected); |
113 | } | 124 | } |
114 | import_and_add (); | 125 | import_and_add (); |
115 | }); | 126 | }); |
@@ -141,8 +152,10 @@ function importLayerPageInit (ctx) { | |||
141 | show_error_message(data, layerData); | 152 | show_error_message(data, layerData); |
142 | console.log(data.error); | 153 | console.log(data.error); |
143 | } else { | 154 | } else { |
155 | layerData.layersAdded = data.layers_added; | ||
144 | /* Success layer import now go to the project page */ | 156 | /* Success layer import now go to the project page */ |
145 | window.location.replace(ctx.projectPageUrl+'#/layerimported='+layerData.name); | 157 | $.cookie('layer-imported-alert', JSON.stringify(layerData), { path: '/'}); |
158 | window.location.replace(ctx.projectPageUrl+'#/layerimported'); | ||
146 | } | 159 | } |
147 | }, | 160 | }, |
148 | error: function (data) { | 161 | error: function (data) { |
diff --git a/bitbake/lib/toaster/toastergui/static/js/projectapp.js b/bitbake/lib/toaster/toastergui/static/js/projectapp.js index 8e3499a94c..94c24f4a56 100644 --- a/bitbake/lib/toaster/toastergui/static/js/projectapp.js +++ b/bitbake/lib/toaster/toastergui/static/js/projectapp.js | |||
@@ -128,7 +128,7 @@ projectApp.filter('timediff', function() { | |||
128 | 128 | ||
129 | 129 | ||
130 | // main controller for the project page | 130 | // main controller for the project page |
131 | projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $location, $cookies, $q, $sce, $anchorScroll, $animate, $sanitize) { | 131 | projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $location, $cookies, $cookieStore, $q, $sce, $anchorScroll, $animate, $sanitize) { |
132 | 132 | ||
133 | $scope.getSuggestions = function(type, currentValue) { | 133 | $scope.getSuggestions = function(type, currentValue) { |
134 | var deffered = $q.defer(); | 134 | var deffered = $q.defer(); |
@@ -572,9 +572,28 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc | |||
572 | }); | 572 | }); |
573 | 573 | ||
574 | _cmdExecuteWithParam("/layerimported", function (layer) { | 574 | _cmdExecuteWithParam("/layerimported", function (layer) { |
575 | $scope.displayAlert($scope.zone2alerts, | 575 | var imported = $cookieStore.get("layer-imported-alert"); |
576 | "You have imported <strong>" + layer + | 576 | var text; |
577 | "</strong> and added it to your project.", "alert-success"); | 577 | |
578 | if (!imported) | ||
579 | return; | ||
580 | |||
581 | if (imported.layersAdded.length == 0) { | ||
582 | text = "You have imported <strong>"+imported.name+ | ||
583 | "</strong> and added it to your project."; | ||
584 | } else { | ||
585 | text = "You have imported <strong>"+imported.name+ | ||
586 | "</strong> and added <strong>"+imported.layersAdded.length+ | ||
587 | "</strong> layers to your project. <strong>"+ | ||
588 | imported.layersAdded.join(", ")+"</strong>"; | ||
589 | } | ||
590 | |||
591 | $scope.displayAlert($scope.zone2alerts, text, "alert-info"); | ||
592 | |||
593 | // This doesn't work | ||
594 | $cookieStore.remove("layer-imported-alert"); | ||
595 | //use jquery plugin instead | ||
596 | $.removeCookie("layer-imported-alert", { path: "/"}); | ||
578 | }); | 597 | }); |
579 | 598 | ||
580 | _cmdExecuteWithParam("/targetbuild=", function (targets) { | 599 | _cmdExecuteWithParam("/targetbuild=", function (targets) { |
diff --git a/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html b/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html index 821bbda296..b03fd0b218 100644 --- a/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html +++ b/bitbake/lib/toaster/toastergui/templates/layers_dep_modal.html | |||
@@ -3,10 +3,10 @@ | |||
3 | <form id="dependencies_modal_form"> | 3 | <form id="dependencies_modal_form"> |
4 | <div class="modal-header"> | 4 | <div class="modal-header"> |
5 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button> | 5 | <button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button> |
6 | <h3><span class="layer-name"></span> dependencies</h3> | 6 | <h3><span id="title"></span> dependencies</h3> |
7 | </div> | 7 | </div> |
8 | <div class="modal-body"> | 8 | <div class="modal-body"> |
9 | <p><strong class="layer-name"></strong> depends on some layers that are not added to your project. Select the ones you want to add:</p> | 9 | <p id="body-text"> <strong id="layer-name"></strong> depends on some layers that are not added to your project. Select the ones you want to add:</p> |
10 | <ul class="unstyled" id="dependencies_list"> | 10 | <ul class="unstyled" id="dependencies_list"> |
11 | </ul> | 11 | </ul> |
12 | </div> | 12 | </div> |
@@ -18,9 +18,20 @@ | |||
18 | </div> | 18 | </div> |
19 | 19 | ||
20 | <script> | 20 | <script> |
21 | function show_layer_deps_modal(projectId, layer, dependencies, successAdd) { | 21 | function show_layer_deps_modal(projectId, layer, dependencies, title, body, addToProject, successAdd) { |
22 | // update layer name | 22 | // update layer name |
23 | $('.layer-name').text(layer.name); | 23 | if (title) { |
24 | $('#dependencies_modal #title').text(title); | ||
25 | } else { | ||
26 | $('#dependencies_modal #title').text(layer.name); | ||
27 | } | ||
28 | |||
29 | if (body) { | ||
30 | $("#dependencies_modal #body-text").html(body); | ||
31 | } else { | ||
32 | $("#dependencies_modal #layer-name").text(layer.name); | ||
33 | } | ||
34 | |||
24 | var deplistHtml = ""; | 35 | var deplistHtml = ""; |
25 | for (var i = 0; i < dependencies.length; i++) { | 36 | for (var i = 0; i < dependencies.length; i++) { |
26 | deplistHtml += "<li><label class=\"checkbox\"><input name=\"dependencies\" value=\""; | 37 | deplistHtml += "<li><label class=\"checkbox\"><input name=\"dependencies\" value=\""; |
@@ -31,7 +42,13 @@ function show_layer_deps_modal(projectId, layer, dependencies, successAdd) { | |||
31 | } | 42 | } |
32 | $('#dependencies_list').html(deplistHtml); | 43 | $('#dependencies_list').html(deplistHtml); |
33 | 44 | ||
34 | var selected = [layer.id]; | 45 | var selected = []; |
46 | /* -1 is a special dummy Id which we use when the layer isn't yet in the | ||
47 | * system, normally we would add the current layer to the selection. | ||
48 | */ | ||
49 | if (layer.id != -1) | ||
50 | selected.push(layer.id); | ||
51 | |||
35 | var layer_link_list = "<a href='"+layer.url+"'>"+layer.name+"</a>"; | 52 | var layer_link_list = "<a href='"+layer.url+"'>"+layer.name+"</a>"; |
36 | 53 | ||
37 | $("#dependencies_modal_form").submit(function (e) { | 54 | $("#dependencies_modal_form").submit(function (e) { |
@@ -54,15 +71,20 @@ function show_layer_deps_modal(projectId, layer, dependencies, successAdd) { | |||
54 | 71 | ||
55 | $('#dependencies_modal').modal('hide'); | 72 | $('#dependencies_modal').modal('hide'); |
56 | 73 | ||
57 | var editProjectUrl = "{% url 'xhr_projectedit' project.id %}"; | 74 | if (addToProject) { |
58 | libtoaster.editProject(editProjectUrl, projectId, { 'layerAdd': selected.join(",") }, function () { | 75 | var editProjectUrl = "{% url 'xhr_projectedit' project.id %}"; |
59 | if (successAdd) { | 76 | libtoaster.editProject(editProjectUrl, projectId, { 'layerAdd': selected.join(",") }, function () { |
60 | successAdd(selected); | 77 | if (successAdd) { |
61 | } | 78 | successAdd(selected); |
62 | }, function () { | 79 | } |
63 | console.log ("Adding layers to project failed"); | 80 | }, function () { |
64 | }); | 81 | console.log ("Adding layers to project failed"); |
82 | }); | ||
83 | } else { | ||
84 | successAdd(selected); | ||
85 | } | ||
65 | }); | 86 | }); |
87 | |||
66 | $('#dependencies_modal').modal('show'); | 88 | $('#dependencies_modal').modal('show'); |
67 | } | 89 | } |
68 | </script> | 90 | </script> |
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index ec055d392a..dd430805b1 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py | |||
@@ -2253,6 +2253,8 @@ if toastermain.settings.MANAGED: | |||
2253 | not request.POST.has_key('project_id')): | 2253 | not request.POST.has_key('project_id')): |
2254 | return HttpResponse(jsonfilter({"error": "Missing parameters; requires vcs_url, name, git_ref and project_id"}), content_type = "application/json") | 2254 | return HttpResponse(jsonfilter({"error": "Missing parameters; requires vcs_url, name, git_ref and project_id"}), content_type = "application/json") |
2255 | 2255 | ||
2256 | layers_added = []; | ||
2257 | |||
2256 | # Rudimentary check for any possible html tags | 2258 | # Rudimentary check for any possible html tags |
2257 | if "<" in request.POST: | 2259 | if "<" in request.POST: |
2258 | return HttpResponse(jsonfilter({"error": "Invalid character <"}), content_type = "application/json") | 2260 | return HttpResponse(jsonfilter({"error": "Invalid character <"}), content_type = "application/json") |
@@ -2315,9 +2317,12 @@ if toastermain.settings.MANAGED: | |||
2315 | # if the project now contains the exact | 2317 | # if the project now contains the exact |
2316 | # dependency already (like modified on another page) | 2318 | # dependency already (like modified on another page) |
2317 | try: | 2319 | try: |
2318 | ProjectLayer.objects.get_or_create(layercommit=layer_dep_obj, project=prj) | 2320 | prj_layer, prj_layer_created = ProjectLayer.objects.get_or_create(layercommit=layer_dep_obj, project=prj) |
2319 | except: | 2321 | except: |
2320 | pass | 2322 | continue |
2323 | |||
2324 | if prj_layer_created: | ||
2325 | layers_added.append(Layer.objects.get(id=layer_dep_obj.layer_id).name) | ||
2321 | 2326 | ||
2322 | 2327 | ||
2323 | # If an old layer version exists in our project then remove it | 2328 | # If an old layer version exists in our project then remove it |
@@ -2337,7 +2342,7 @@ if toastermain.settings.MANAGED: | |||
2337 | return HttpResponse(jsonfilter({"error": "Uncaught error: Could not create layer version"}), content_type = "application/json") | 2342 | return HttpResponse(jsonfilter({"error": "Uncaught error: Could not create layer version"}), content_type = "application/json") |
2338 | 2343 | ||
2339 | 2344 | ||
2340 | return HttpResponse(jsonfilter({"error": "ok"}), content_type = "application/json") | 2345 | return HttpResponse(jsonfilter({"error": "ok", "layers_added": layers_added}), content_type = "application/json") |
2341 | 2346 | ||
2342 | 2347 | ||
2343 | 2348 | ||