summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/toaster/toastergui/static/js/customrecipe.js98
-rw-r--r--bitbake/lib/toaster/toastergui/templates/customrecipe.html5
-rw-r--r--bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html4
-rw-r--r--bitbake/lib/toaster/toastergui/urls.py4
4 files changed, 80 insertions, 31 deletions
diff --git a/bitbake/lib/toaster/toastergui/static/js/customrecipe.js b/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
index 33fcb88e94..a1fe4862e5 100644
--- a/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
+++ b/bitbake/lib/toaster/toastergui/static/js/customrecipe.js
@@ -15,33 +15,33 @@ function customRecipePageInit(ctx) {
15 /* Table is done so now setup the click handler for the package buttons */ 15 /* Table is done so now setup the click handler for the package buttons */
16 $(".add-rm-package-btn").click(function(e){ 16 $(".add-rm-package-btn").click(function(e){
17 e.preventDefault(); 17 e.preventDefault();
18 var pkgBtnData = $(this).data(); 18 var targetPkg = $(this).data();
19 19
20 checkPackageDeps(pkgBtnData, function(pkgData){ 20 checkPackageDeps(targetPkg, function(pkgData){
21 if (pkgBtnData.directive === 'add'){ 21 if (targetPkg.directive === 'add'){
22 /* If we're adding a package we may need to show the modal to advise 22 /* If we're adding a package we may need to show the modal to advise
23 * on dependencies for this package. 23 * on dependencies for this package.
24 */ 24 */
25 if (pkgData.unsatisfied_dependencies.length === 0){ 25 if (pkgData.unsatisfied_dependencies.length === 0){
26 addRemovePackage(pkgBtnData); 26 addRemovePackage(targetPkg);
27 } else { 27 } else {
28 showPackageDepsModal(pkgBtnData, pkgData); 28 showPackageDepsModal(targetPkg, pkgData);
29 } 29 }
30 } else if (pkgBtnData.directive === 'remove') { 30 } else if (targetPkg.directive === 'remove') {
31 if (pkgData.reverse_dependencies.length === 0){ 31 if (pkgData.reverse_dependencies.length === 0){
32 addRemovePackage(pkgBtnData); 32 addRemovePackage(targetPkg);
33 } else { 33 } else {
34 showPackageReverseDepsModal(pkgBtnData, pkgData); 34 showPackageReverseDepsModal(targetPkg, pkgData);
35 } 35 }
36 } 36 }
37 }); 37 });
38 }); 38 });
39 }); 39 });
40 40
41 function checkPackageDeps(pkgBtnData, doneCb){ 41 function checkPackageDeps(targetPkg, doneCb){
42 $.ajax({ 42 $.ajax({
43 type: 'GET', 43 type: 'GET',
44 url: pkgBtnData.packageUrl, 44 url: targetPkg.packageUrl,
45 headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, 45 headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
46 success: function(data){ 46 success: function(data){
47 if (data.error !== 'ok'){ 47 if (data.error !== 'ok'){
@@ -53,12 +53,12 @@ function customRecipePageInit(ctx) {
53 }); 53 });
54 } 54 }
55 55
56 function showPackageDepsModal(pkgBtnData, pkgData){ 56 function showPackageDepsModal(targetPkg, pkgData){
57 var modal = $("#package-deps-modal"); 57 var modal = $("#package-deps-modal");
58 var depsList = modal.find("#package-add-dep-list"); 58 var depsList = modal.find("#package-add-dep-list");
59 var deps = pkgData.unsatisfied_dependencies; 59 var deps = pkgData.unsatisfied_dependencies;
60 60
61 modal.find(".package-to-add-name").text(pkgBtnData.name); 61 modal.find(".package-to-add-name").text(targetPkg.name);
62 62
63 depsList.text(""); 63 depsList.text("");
64 64
@@ -72,7 +72,9 @@ function customRecipePageInit(ctx) {
72 modal.find("#package-deps-total-size").text( 72 modal.find("#package-deps-total-size").text(
73 pkgData.unsatisfied_dependencies_size_formatted); 73 pkgData.unsatisfied_dependencies_size_formatted);
74 74
75 addPkgDepsModalBtn.data(pkgBtnData); 75 targetPkg.depsAdded = deps;
76
77 addPkgDepsModalBtn.data(targetPkg);
76 modal.modal('show'); 78 modal.modal('show');
77 } 79 }
78 80
@@ -82,12 +84,12 @@ function customRecipePageInit(ctx) {
82 addRemovePackage($(this).data(), null); 84 addRemovePackage($(this).data(), null);
83 }); 85 });
84 86
85 function showPackageReverseDepsModal(pkgBtnData, pkgData){ 87 function showPackageReverseDepsModal(targetPkg, pkgData){
86 var modal = $("#package-reverse-deps-modal"); 88 var modal = $("#package-reverse-deps-modal");
87 var depsList = modal.find("#package-reverse-dep-list"); 89 var depsList = modal.find("#package-reverse-dep-list");
88 var deps = pkgData.reverse_dependencies; 90 var deps = pkgData.reverse_dependencies;
89 91
90 modal.find(".package-to-rm-name").text(pkgBtnData.name); 92 modal.find(".package-to-rm-name").text(targetPkg.name);
91 93
92 depsList.text(""); 94 depsList.text("");
93 95
@@ -101,7 +103,7 @@ function customRecipePageInit(ctx) {
101 modal.find("#package-reverse-deps-total-size").text( 103 modal.find("#package-reverse-deps-total-size").text(
102 pkgData.reverse_dependencies_size_formatted); 104 pkgData.reverse_dependencies_size_formatted);
103 105
104 rmdPkgReverseDepsModalBtn.data(pkgBtnData); 106 rmdPkgReverseDepsModalBtn.data(targetPkg);
105 modal.modal('show'); 107 modal.modal('show');
106 } 108 }
107 109
@@ -112,30 +114,58 @@ function customRecipePageInit(ctx) {
112 }); 114 });
113 115
114 116
115 function addRemovePackage(pkgBtnData, tableParams){ 117 function addRemovePackage(targetPkg, tableParams){
116 var method; 118 var method;
117 var msg = "You have "; 119 var msg = "You have ";
118 120
119 var btnCell = $("#package-btn-cell-"+pkgBtnData.package); 121 var btnCell = $("#package-btn-cell-" + targetPkg.id);
120 var inlineNotify = btnCell.children(".inline-notification"); 122 var inlineNotify = btnCell.children(".inline-notification");
121 123
122 if (pkgBtnData.directive === 'add') { 124 if (targetPkg.directive === 'add') {
123 method = 'PUT'; 125 method = 'PUT';
124 msg += "added 1 package to "+ctx.recipe.name+":"; 126 /* If the package had dependencies also notify that they were added */
125 inlineNotify.text("1 package added"); 127 if (targetPkg.hasOwnProperty('depsAdded') &&
126 } else if (pkgBtnData.directive === 'remove') { 128 targetPkg.depsAdded.length > 0) {
129
130 msg += "added " + (targetPkg.depsAdded.length + 1);
131 msg += " packages to " + ctx.recipe.name + ": ";
132 msg += "<strong>" + targetPkg.name + "</strong> and its dependencies";
133
134 for (var i in targetPkg.depsAdded){
135 var dep = targetPkg.depsAdded[i];
136
137 msg += " <strong>" + dep.name + "</strong>";
138
139 /* Add any cells currently in view to the list of cells which get
140 * an inline notification inside them and which change add/rm state
141 */
142 var depBtnCell = $("#package-btn-cell-" + dep.pk);
143 btnCell = btnCell.add(depBtnCell);
144
145 inlineNotify = inlineNotify.add(
146 depBtnCell.children(".inline-notification"));
147 }
148
149 inlineNotify.text(
150 (targetPkg.depsAdded.length + 1) + " packages added");
151
152 } else {
153 msg += ' <strong>' + targetPkg.name + '<strong>';
154 inlineNotify.text("1 package added");
155 }
156
157 } else if (targetPkg.directive === 'remove') {
127 method = 'DELETE'; 158 method = 'DELETE';
128 msg += "removed 1 package from "+ctx.recipe.name+":"; 159 msg += "removed 1 package from "+ctx.recipe.name+":";
160 msg += ' <strong>' + targetPkg.name + '<strong>';
129 inlineNotify.text("1 package removed"); 161 inlineNotify.text("1 package removed");
130 } else { 162 } else {
131 throw("Unknown package directive: should be add or remove"); 163 throw("Unknown package directive: should be add or remove");
132 } 164 }
133 165
134 msg += ' <strong>' + pkgBtnData.name + '<strong>';
135
136 $.ajax({ 166 $.ajax({
137 type: method, 167 type: method,
138 url: pkgBtnData.packageUrl, 168 url: targetPkg.packageUrl,
139 headers: { 'X-CSRFToken' : $.cookie('csrftoken')}, 169 headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
140 success: function(data){ 170 success: function(data){
141 if (data.error !== 'ok'){ 171 if (data.error !== 'ok'){
@@ -145,15 +175,29 @@ function customRecipePageInit(ctx) {
145 175
146 libtoaster.showChangeNotification(msg); 176 libtoaster.showChangeNotification(msg);
147 177
148 /* Also do the in-cell notification */ 178 /* do the in-cell/inline notification to swap buttoms from add to
179 * remove
180 */
149 btnCell.children("button").fadeOut().promise().done(function(){ 181 btnCell.children("button").fadeOut().promise().done(function(){
150 inlineNotify.fadeIn().delay(500).fadeOut(function(){ 182 inlineNotify.fadeIn().delay(500).fadeOut(function(){
151 if (pkgBtnData.directive === 'add') 183 if (targetPkg.directive === 'add')
152 btnCell.children("button[data-directive=remove]").fadeIn(); 184 btnCell.children("button[data-directive=remove]").fadeIn();
153 else 185 else
154 btnCell.children("button[data-directive=add]").fadeIn(); 186 btnCell.children("button[data-directive=add]").fadeIn();
155 }); 187 });
156 }); 188 });
189
190 /* Update the total num packages */
191 $.ajax({
192 type: "GET",
193 url: ctx.recipe.xhrPackageListUrl,
194 headers: { 'X-CSRFToken' : $.cookie('csrftoken')},
195 success: function(data){
196 console.log(data);
197 $("#total-num-packages").text(data.total);
198 $("#total-size-packages").text(data.total_size_formatted);
199 }
200 });
157 } 201 }
158 }); 202 });
159 } 203 }
diff --git a/bitbake/lib/toaster/toastergui/templates/customrecipe.html b/bitbake/lib/toaster/toastergui/templates/customrecipe.html
index 4d88be054d..02ca5be1ca 100644
--- a/bitbake/lib/toaster/toastergui/templates/customrecipe.html
+++ b/bitbake/lib/toaster/toastergui/templates/customrecipe.html
@@ -28,6 +28,7 @@
28 name: "{{recipe.name}}", 28 name: "{{recipe.name}}",
29 includedPackagesCount: {{recipe.includes_set.count}}, 29 includedPackagesCount: {{recipe.includes_set.count}},
30 baseRecipeId: {{recipe.base_recipe.pk}}, 30 baseRecipeId: {{recipe.base_recipe.pk}},
31 xhrPackageListUrl: "{% url 'xhr_customrecipe_packages' recipe.pk %}",
31 } 32 }
32 }; 33 };
33 34
@@ -143,12 +144,12 @@
143 Approx. packages included 144 Approx. packages included
144 <i class="icon-question-sign get-help" title="" data-original-title="The number of packages included is based on information from previous builds and from parsing layers, so we can never be sure it is 100% accurate"></i> 145 <i class="icon-question-sign get-help" title="" data-original-title="The number of packages included is based on information from previous builds and from parsing layers, so we can never be sure it is 100% accurate"></i>
145 </dt> 146 </dt>
146 <dd class="no-packages">{{recipe.get_all_packages.count}}</dd> 147 <dd id="total-num-packages">{{recipe.get_all_packages.count}}</dd>
147 <dt> 148 <dt>
148 Approx. package size 149 Approx. package size
149 <i class="icon-question-sign get-help" title="" data-original-title="Package size is based on information from previous builds, so we can never be sure it is 100% accurate"></i> 150 <i class="icon-question-sign get-help" title="" data-original-title="Package size is based on information from previous builds, so we can never be sure it is 100% accurate"></i>
150 </dt> 151 </dt>
151 <dd>{{approx_pkg_size.size__sum|filtered_filesizeformat}}</dd> 152 <dd id="total-size-packages">{{approx_pkg_size.size__sum|filtered_filesizeformat}}</dd>
152 {% if last_build %} 153 {% if last_build %}
153 <dt>Last build</dt> 154 <dt>Last build</dt>
154 <dd> 155 <dd>
diff --git a/bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html b/bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html
index a3e8546706..0aefc56259 100644
--- a/bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html
+++ b/bitbake/lib/toaster/toastergui/templates/pkg_add_rm_btn.html
@@ -13,7 +13,7 @@
13 13
14<div id="package-btn-cell-{{data.pk}}"> 14<div id="package-btn-cell-{{data.pk}}">
15 <div style="display: none; font-size: 11px; line-height: 1.3;" class="tooltip-inner inline-notification"></div> 15 <div style="display: none; font-size: 11px; line-height: 1.3;" class="tooltip-inner inline-notification"></div>
16 <button class="btn btn-block btn-danger add-rm-package-btn" data-directive="remove" data-package="{{data.pk}}" data-package-url="{% url 'xhr_customrecipe_packages' extra.recipe_id data.pk %}" data-name="{{data.name}}" style=" 16 <button class="btn btn-block btn-danger add-rm-package-btn" data-directive="remove" data-id="{{data.pk}}" data-package-url="{% url 'xhr_customrecipe_packages' extra.recipe_id data.pk %}" data-name="{{data.name}}" style="
17 {% if data.pk not in extra.current_packages %} 17 {% if data.pk not in extra.current_packages %}
18 display:none 18 display:none
19 {% endif %} 19 {% endif %}
@@ -21,7 +21,7 @@
21 <i class="icon-trash no-tooltip"></i> 21 <i class="icon-trash no-tooltip"></i>
22 Remove package 22 Remove package
23 </button> 23 </button>
24 <button class="btn btn-block add-rm-package-btn" data-directive="add" data-package="{{data.pk}}" data-package-url="{% url 'xhr_customrecipe_packages' extra.recipe_id data.pk %}" data-name="{{data.name}}" style=" 24 <button class="btn btn-block add-rm-package-btn" data-directive="add" data-id="{{data.pk}}" data-package-url="{% url 'xhr_customrecipe_packages' extra.recipe_id data.pk %}" data-name="{{data.name}}" style="
25 {% if data.pk in extra.current_packages %} 25 {% if data.pk in extra.current_packages %}
26 display:none 26 display:none
27 {% endif %} 27 {% endif %}
diff --git a/bitbake/lib/toaster/toastergui/urls.py b/bitbake/lib/toaster/toastergui/urls.py
index 4feeebc14a..4aa64887b7 100644
--- a/bitbake/lib/toaster/toastergui/urls.py
+++ b/bitbake/lib/toaster/toastergui/urls.py
@@ -171,6 +171,10 @@ urlpatterns = patterns('toastergui.views',
171 # image customisation functionality 171 # image customisation functionality
172 url(r'^xhr_customrecipe/(?P<recipe_id>\d+)/packages/(?P<package_id>\d+|)$', 172 url(r'^xhr_customrecipe/(?P<recipe_id>\d+)/packages/(?P<package_id>\d+|)$',
173 'xhr_customrecipe_packages', name='xhr_customrecipe_packages'), 173 'xhr_customrecipe_packages', name='xhr_customrecipe_packages'),
174
175 url(r'^xhr_customrecipe/(?P<recipe_id>\d+)/packages/$',
176 'xhr_customrecipe_packages', name='xhr_customrecipe_packages'),
177
174 url(r'^xhr_customrecipe/(?P<recipe_id>\d+)$', 'xhr_customrecipe_id', 178 url(r'^xhr_customrecipe/(?P<recipe_id>\d+)$', 'xhr_customrecipe_id',
175 name='xhr_customrecipe_id'), 179 name='xhr_customrecipe_id'),
176 url(r'^xhr_customrecipe/', 'xhr_customrecipe', 180 url(r'^xhr_customrecipe/', 'xhr_customrecipe',