diff options
author | Michael Wood <michael.g.wood@intel.com> | 2016-08-22 16:42:31 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-09-02 18:09:50 +0100 |
commit | 50a8d3a34ca89862b41fbe27f87bbe85a772db8b (patch) | |
tree | 930cafe5c7aae5263175c0902d9da8168ac1dc65 /bitbake/lib/toaster | |
parent | e99b4cd625ca812cdd88a818a1ad11aa93b28d78 (diff) | |
download | poky-50a8d3a34ca89862b41fbe27f87bbe85a772db8b.tar.gz |
bitbake: toaster: layerdetails clean ups after integrating local layer changes
A few clean ups for the work done to integrate editing imported local layers
into the layer detail page.
(Bitbake rev: 092ef32e695b43c3337b7116722c4c6eba981396)
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster')
4 files changed, 72 insertions, 81 deletions
diff --git a/bitbake/lib/toaster/toastergui/api.py b/bitbake/lib/toaster/toastergui/api.py index 8dde1288fd..09fb02b8fc 100644 --- a/bitbake/lib/toaster/toastergui/api.py +++ b/bitbake/lib/toaster/toastergui/api.py | |||
@@ -135,7 +135,8 @@ class XhrLayer(View): | |||
135 | Method: POST | 135 | Method: POST |
136 | 136 | ||
137 | Args: | 137 | Args: |
138 | vcs_url, dirpath, commit, up_branch, summary, description, local_source_dir | 138 | vcs_url, dirpath, commit, up_branch, summary, description, |
139 | local_source_dir | ||
139 | 140 | ||
140 | add_dep = append a layerversion_id as a dependency | 141 | add_dep = append a layerversion_id as a dependency |
141 | rm_dep = remove a layerversion_id as a depedency | 142 | rm_dep = remove a layerversion_id as a depedency |
@@ -167,7 +168,8 @@ class XhrLayer(View): | |||
167 | if "description" in request.POST: | 168 | if "description" in request.POST: |
168 | layer_version.layer.description = request.POST["description"] | 169 | layer_version.layer.description = request.POST["description"] |
169 | if "local_source_dir" in request.POST: | 170 | if "local_source_dir" in request.POST: |
170 | layer_version.layer.local_source_dir = request.POST["local_source_dir"] | 171 | layer_version.layer.local_source_dir = \ |
172 | request.POST["local_source_dir"] | ||
171 | 173 | ||
172 | if "add_dep" in request.POST: | 174 | if "add_dep" in request.POST: |
173 | lvd = LayerVersionDependency( | 175 | lvd = LayerVersionDependency( |
diff --git a/bitbake/lib/toaster/toastergui/static/css/default.css b/bitbake/lib/toaster/toastergui/static/css/default.css index f71b37e7fc..a56bb8cbff 100644 --- a/bitbake/lib/toaster/toastergui/static/css/default.css +++ b/bitbake/lib/toaster/toastergui/static/css/default.css | |||
@@ -316,6 +316,8 @@ h2.panel-title { font-size: 30px; } | |||
316 | /* Make the help in tables insivisble until you hover over the right cell */ | 316 | /* Make the help in tables insivisble until you hover over the right cell */ |
317 | .hover-help { visibility: hidden; } | 317 | .hover-help { visibility: hidden; } |
318 | 318 | ||
319 | #add-remove-layer-btn { margin-bottom: 20px; } | ||
320 | |||
319 | /* Blue hightlight animation for tasks and directory structure tables */ | 321 | /* Blue hightlight animation for tasks and directory structure tables */ |
320 | .highlight { -webkit-animation: target-fade 15s 1; -moz-animation: target-fade 15s 1; animation: target-fade 15s 1; } | 322 | .highlight { -webkit-animation: target-fade 15s 1; -moz-animation: target-fade 15s 1; animation: target-fade 15s 1; } |
321 | @-webkit-keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } } | 323 | @-webkit-keyframes target-fade { 0% { background-color: #D9EDF7; } 25% { background-color: #D9EDF7; } 100% { background-color: white; } } |
diff --git a/bitbake/lib/toaster/toastergui/static/js/layerdetails.js b/bitbake/lib/toaster/toastergui/static/js/layerdetails.js index 2ff8e598a9..5fd7274894 100644 --- a/bitbake/lib/toaster/toastergui/static/js/layerdetails.js +++ b/bitbake/lib/toaster/toastergui/static/js/layerdetails.js | |||
@@ -11,11 +11,19 @@ function layerDetailsPageInit (ctx) { | |||
11 | var machineTab = $("#machines-tab"); | 11 | var machineTab = $("#machines-tab"); |
12 | var detailsTab = $("#details-tab"); | 12 | var detailsTab = $("#details-tab"); |
13 | var editLayerSource = $("#edit-layer-source"); | 13 | var editLayerSource = $("#edit-layer-source"); |
14 | var saveSourceChangesBtn = $("#save-changes-for-switch"); | ||
15 | var layerGitRefInput = $("#layer-git-ref"); | ||
16 | var layerSubDirInput = $('#layer-subdir'); | ||
17 | |||
18 | targetTab.on('show.bs.tab', targetsTabShow); | ||
19 | detailsTab.on('show.bs.tab', detailsTabShow); | ||
20 | machineTab.on('show.bs.tab', machinesTabShow); | ||
14 | 21 | ||
15 | /* setup the dependencies typeahead */ | 22 | /* setup the dependencies typeahead */ |
16 | libtoaster.makeTypeahead(layerDepInput, libtoaster.ctx.layersTypeAheadUrl, { include_added: "true" }, function(item){ | 23 | libtoaster.makeTypeahead(layerDepInput, |
24 | libtoaster.ctx.layersTypeAheadUrl, | ||
25 | { include_added: "true" }, function(item){ | ||
17 | currentLayerDepSelection = item; | 26 | currentLayerDepSelection = item; |
18 | |||
19 | layerDepBtn.removeAttr("disabled"); | 27 | layerDepBtn.removeAttr("disabled"); |
20 | }); | 28 | }); |
21 | 29 | ||
@@ -26,20 +34,6 @@ function layerDetailsPageInit (ctx) { | |||
26 | } | 34 | } |
27 | }); | 35 | }); |
28 | 36 | ||
29 | $(window).on('hashchange', function(e){ | ||
30 | switch(window.location.hash){ | ||
31 | case '#machines': | ||
32 | machineTab.tab('show'); | ||
33 | break; | ||
34 | case '#recipes': | ||
35 | targetTab.tab('show'); | ||
36 | break; | ||
37 | default: | ||
38 | detailsTab.tab('show'); | ||
39 | break; | ||
40 | } | ||
41 | }); | ||
42 | |||
43 | function addRemoveDep(depLayerId, add, doneCb) { | 37 | function addRemoveDep(depLayerId, add, doneCb) { |
44 | var data = { layer_version_id : ctx.layerVersion.id }; | 38 | var data = { layer_version_id : ctx.layerVersion.id }; |
45 | if (add) | 39 | if (add) |
@@ -151,6 +145,7 @@ function layerDetailsPageInit (ctx) { | |||
151 | }); | 145 | }); |
152 | }); | 146 | }); |
153 | 147 | ||
148 | |||
154 | function defaultAddBtnText(){ | 149 | function defaultAddBtnText(){ |
155 | var text = " Add the "+ctx.layerVersion.name+" layer to your project"; | 150 | var text = " Add the "+ctx.layerVersion.name+" layer to your project"; |
156 | addRmLayerBtn.text(text); | 151 | addRmLayerBtn.text(text); |
@@ -158,12 +153,12 @@ function layerDetailsPageInit (ctx) { | |||
158 | addRmLayerBtn.removeClass("btn-danger"); | 153 | addRmLayerBtn.removeClass("btn-danger"); |
159 | } | 154 | } |
160 | 155 | ||
161 | detailsTab.on('show', function(){ | 156 | function detailsTabShow(){ |
162 | if (!ctx.layerVersion.inCurrentPrj) | 157 | if (!ctx.layerVersion.inCurrentPrj) |
163 | defaultAddBtnText(); | 158 | defaultAddBtnText(); |
164 | 159 | ||
165 | window.location.hash = "details"; | 160 | window.location.hash = "information"; |
166 | }); | 161 | } |
167 | 162 | ||
168 | function targetsTabShow(){ | 163 | function targetsTabShow(){ |
169 | if (!ctx.layerVersion.inCurrentPrj){ | 164 | if (!ctx.layerVersion.inCurrentPrj){ |
@@ -217,7 +212,6 @@ function layerDetailsPageInit (ctx) { | |||
217 | 212 | ||
218 | }); | 213 | }); |
219 | 214 | ||
220 | targetTab.on('show.bs.tab', targetsTabShow); | ||
221 | 215 | ||
222 | function machinesTabShow(){ | 216 | function machinesTabShow(){ |
223 | if (!ctx.layerVersion.inCurrentPrj) { | 217 | if (!ctx.layerVersion.inCurrentPrj) { |
@@ -234,8 +228,6 @@ function layerDetailsPageInit (ctx) { | |||
234 | window.location.hash = "machines"; | 228 | window.location.hash = "machines"; |
235 | } | 229 | } |
236 | 230 | ||
237 | machineTab.on('show.bs.tab', machinesTabShow); | ||
238 | |||
239 | $(".pagesize").change(function(){ | 231 | $(".pagesize").change(function(){ |
240 | var search = libtoaster.parseUrlParams(); | 232 | var search = libtoaster.parseUrlParams(); |
241 | search.limit = this.value; | 233 | search.limit = this.value; |
@@ -425,9 +417,11 @@ function layerDetailsPageInit (ctx) { | |||
425 | $(".commit").tooltip(); | 417 | $(".commit").tooltip(); |
426 | 418 | ||
427 | editLayerSource.click(function() { | 419 | editLayerSource.click(function() { |
428 | // Kindly bring the git layers imported from layerindex to normal page and not this new page :( | 420 | /* Kindly bring the git layers imported from layerindex to normal page |
421 | * and not this new page :( | ||
422 | */ | ||
429 | $(this).hide(); | 423 | $(this).hide(); |
430 | $("#save-changes-for-switch").attr("disabled", "disabled"); | 424 | saveSourceChangesBtn.attr("disabled", "disabled"); |
431 | 425 | ||
432 | $("#git-repo-info", "#directory-info").hide(); | 426 | $("#git-repo-info", "#directory-info").hide(); |
433 | $("#edit-layer-source-form").fadeIn(); | 427 | $("#edit-layer-source-form").fadeIn(); |
@@ -446,9 +440,9 @@ function layerDetailsPageInit (ctx) { | |||
446 | if ($('input[name=source-location]:checked').val() == "repo") { | 440 | if ($('input[name=source-location]:checked').val() == "repo") { |
447 | $("#layer-git").fadeIn(); | 441 | $("#layer-git").fadeIn(); |
448 | $("#layer-dir").hide(); | 442 | $("#layer-dir").hide(); |
449 | if ($("#layer-git-repo-url").val().length === 0 && $("#layer-git-ref").val().length === 0) { | 443 | if ($("#layer-git-repo-url").val().length === 0 && layerGitRefInput.val().length === 0) { |
450 | $("#save-changes-for-switch").attr("disabled", "disabled"); | 444 | saveSourceChangesBtn.attr("disabled", "disabled"); |
451 | } | 445 | } |
452 | } else { | 446 | } else { |
453 | $("#layer-dir").fadeIn(); | 447 | $("#layer-dir").fadeIn(); |
454 | $("#layer-git").hide(); | 448 | $("#layer-git").hide(); |
@@ -456,42 +450,40 @@ function layerDetailsPageInit (ctx) { | |||
456 | }); | 450 | }); |
457 | 451 | ||
458 | $("#layer-dir-path-in-details").keyup(function() { | 452 | $("#layer-dir-path-in-details").keyup(function() { |
459 | $("#save-changes-for-switch").removeAttr("disabled"); | 453 | saveSourceChangesBtn.removeAttr("disabled"); |
460 | }); | 454 | }); |
461 | 455 | ||
462 | $("#layer-git-repo-url").keyup(function() { | 456 | $("#layer-git-repo-url").keyup(function() { |
463 | if ($("#layer-git-repo-url").val().length > 0 && $("#layer-git-ref").val().length > 0) { | 457 | if ($("#layer-git-repo-url").val().length > 0 && layerGitRefInput.val().length > 0) { |
464 | $("#save-changes-for-switch").removeAttr("disabled"); | 458 | saveSourceChangesBtn.removeAttr("disabled"); |
465 | } | 459 | } |
466 | }); | 460 | }); |
467 | 461 | ||
468 | $("#layer-git-ref").keyup(function() { | 462 | layerGitRefInput.keyup(function() { |
469 | if ($("#layer-git-repo-url").val().length > 0 && $("#layer-git-ref").val().length > 0) { | 463 | if ($("#layer-git-repo-url").val().length > 0 && layerGitRefInput.val().length > 0) { |
470 | $("#save-changes-for-switch").removeAttr("disabled"); | 464 | saveSourceChangesBtn.removeAttr("disabled"); |
471 | } | 465 | } |
472 | }); | 466 | }); |
473 | 467 | ||
474 | $('#cancel-changes-for-switch').click(function() { | ||
475 | editLayerSource.show(); | ||
476 | $("#git-repo-info", "#directory-info").fadeIn(); | ||
477 | $("#edit-layer-source-form").fadeOut(); | ||
478 | 468 | ||
479 | if ($("#layer-dir-path-in-details").val().length) { | 469 | layerSubDirInput.keyup(function(){ |
480 | $("#dir").prop("checked", true); | 470 | if ($(this).val().length > 0){ |
481 | $("#layer-git").fadeOut(); | 471 | saveSourceChangesBtn.removeAttr("disabled"); |
482 | $("#layer-dir").fadeIn(); | ||
483 | } else { | ||
484 | $("#layer-git").fadeIn(); | ||
485 | $("#layer-dir").fadeOut(); | ||
486 | } | 472 | } |
487 | }); | 473 | }); |
488 | 474 | ||
489 | $('#save-changes-for-switch').click(function() { | 475 | $('#cancel-changes-for-switch').click(function() { |
476 | $("#edit-layer-source-form").add("#layer-git").add("#layer-dir").fadeOut().promise().done(function(){ | ||
477 | editLayerSource.show(); | ||
478 | }); | ||
479 | }); | ||
480 | |||
481 | saveSourceChangesBtn.click(function() { | ||
490 | 482 | ||
491 | var layerData = { | 483 | var layerData = { |
492 | vcs_url: $('#layer-git-repo-url').val(), | 484 | vcs_url: $('#layer-git-repo-url').val(), |
493 | commit: $('#layer-git-ref').val(), | 485 | commit: layerGitRefInput.val(), |
494 | dirpath: $('#layer-subdir').val(), | 486 | dirpath: layerSubDirInput.val(), |
495 | local_source_dir: $('#layer-dir-path-in-details').val(), | 487 | local_source_dir: $('#layer-dir-path-in-details').val(), |
496 | }; | 488 | }; |
497 | 489 | ||
diff --git a/bitbake/lib/toaster/toastergui/templates/layerdetails.html b/bitbake/lib/toaster/toastergui/templates/layerdetails.html index 3e1375617d..08e41ce75c 100644 --- a/bitbake/lib/toaster/toastergui/templates/layerdetails.html +++ b/bitbake/lib/toaster/toastergui/templates/layerdetails.html | |||
@@ -103,7 +103,6 @@ | |||
103 | <span id="alert-msg"></span> | 103 | <span id="alert-msg"></span> |
104 | </div> | 104 | </div> |
105 | 105 | ||
106 | <span class="button-place"> | ||
107 | {% if layerversion.id not in projectlayers %} | 106 | {% if layerversion.id not in projectlayers %} |
108 | <button id="add-remove-layer-btn" data-directive="add" class="btn btn-default btn-lg btn-block"> | 107 | <button id="add-remove-layer-btn" data-directive="add" class="btn btn-default btn-lg btn-block"> |
109 | <span class="glyphicon glyphicon-plus"></span> | 108 | <span class="glyphicon glyphicon-plus"></span> |
@@ -115,7 +114,6 @@ | |||
115 | Remove the {{layerversion.layer.name}} layer from your project | 114 | Remove the {{layerversion.layer.name}} layer from your project |
116 | </button> | 115 | </button> |
117 | {% endif %} | 116 | {% endif %} |
118 | </span> | ||
119 | 117 | ||
120 | <ul class="nav nav-tabs"> | 118 | <ul class="nav nav-tabs"> |
121 | <li class="active"> | 119 | <li class="active"> |
@@ -159,7 +157,7 @@ | |||
159 | </div> | 157 | </div> |
160 | </form> | 158 | </form> |
161 | </dd> | 159 | </dd> |
162 | {% if layerversion.dirpath %} | 160 | {% if layerversion.dirpath %} |
163 | <dt> | 161 | <dt> |
164 | <span class="glyphicon glyphicon-question-sign get-help" title="Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)"></span> | 162 | <span class="glyphicon glyphicon-question-sign get-help" title="Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)"></span> |
165 | Repository subdirectory | 163 | Repository subdirectory |
@@ -176,7 +174,7 @@ | |||
176 | </div> | 174 | </div> |
177 | </form> | 175 | </form> |
178 | </dd> | 176 | </dd> |
179 | {% endif %} | 177 | {% endif %} |
180 | <dt> | 178 | <dt> |
181 | <span class="glyphicon glyphicon-question-sign get-help" title="The Git branch, tag or commit"></span> | 179 | <span class="glyphicon glyphicon-question-sign get-help" title="The Git branch, tag or commit"></span> |
182 | Git revision | 180 | Git revision |
@@ -221,7 +219,7 @@ | |||
221 | Git repository URL | 219 | Git repository URL |
222 | <span class="glyphicon glyphicon-question-sign get-help" title="Fetch/clone URL of the repository. Currently, Toaster only supports Git repositories." ></span> | 220 | <span class="glyphicon glyphicon-question-sign get-help" title="Fetch/clone URL of the repository. Currently, Toaster only supports Git repositories." ></span> |
223 | </label> | 221 | </label> |
224 | <input type="text" id="layer-git-repo-url" class="form-control"> | 222 | <input type="text" id="layer-git-repo-url" class="form-control" value="{{layerversion.layer.vcs_url|default_if_none:''}}"> |
225 | </div> | 223 | </div> |
226 | <div class="form-group"> | 224 | <div class="form-group"> |
227 | <label for="layer-subdir"> | 225 | <label for="layer-subdir"> |
@@ -229,13 +227,13 @@ | |||
229 | <span class="text-muted">(optional)</span> | 227 | <span class="text-muted">(optional)</span> |
230 | <span class="glyphicon glyphicon-question-sign get-help" title="Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)"></span> | 228 | <span class="glyphicon glyphicon-question-sign get-help" title="Subdirectory within the repository where the layer is located, if not in the root (usually only used if the repository contains more than one layer)"></span> |
231 | </label> | 229 | </label> |
232 | <input type="text" class="form-control" id="layer-subdir"> | 230 | <input type="text" class="form-control" id="layer-subdir" value="{{layerversion.dirpath|default_if_none:''}}"> |
233 | </div> | 231 | </div> |
234 | <div class="form-group" id="layer-revision-ctrl"> | 232 | <div class="form-group" id="layer-revision-ctrl"> |
235 | <label for="layer-git-ref">Git revision | 233 | <label for="layer-git-ref">Git revision |
236 | <span class="glyphicon glyphicon-question-sign get-help" title="You can provide a Git branch, a tag or a commit SHA as the revision"></span> | 234 | <span class="glyphicon glyphicon-question-sign get-help" title="You can provide a Git branch, a tag or a commit SHA as the revision"></span> |
237 | </label> | 235 | </label> |
238 | <input type="text" class="form-control" id="layer-git-ref"> | 236 | <input type="text" class="form-control" id="layer-git-ref" value="{{layerversion.get_vcs_reference|default_if_none:''}}"> |
239 | <span class="help-inline" style="display:none;" id="invalid-layer-revision-hint"></span> | 237 | <span class="help-inline" style="display:none;" id="invalid-layer-revision-hint"></span> |
240 | </div> | 238 | </div> |
241 | </fieldset> | 239 | </fieldset> |
@@ -256,31 +254,28 @@ | |||
256 | </div> | 254 | </div> |
257 | </form> | 255 | </form> |
258 | 256 | ||
259 | <dt> | 257 | <h3 class="top-air">Layer dependencies |
260 | <span class="glyphicon glyphicon-question-sign get-help" title="Other layers this layer depends upon"></span> | 258 | <span class="glyphicon glyphicon-question-sign get-help" title="Other layers this layer depends upon"></span> |
261 | Layer dependencies | 259 | </h3> |
262 | </dt> | 260 | |
263 | <dd> | 261 | <ul class="list-unstyled current-value" id="layer-deps-list"> |
264 | <ul class="list-unstyled current-value" id="layer-deps-list"> | 262 | {% for ld in layerversion.dependencies.all %} |
265 | {% for ld in layerversion.dependencies.all %} | 263 | <li data-layer-id="{{ld.depends_on.id}}"> |
266 | <li data-layer-id="{{ld.depends_on.id}}"> | 264 | <a data-toggle="tooltip" title="{{ld.depends_on.layer.vcs_url}} | {{ld.depends_on.get_vcs_reference}}" href="{% url 'layerdetails' project.id ld.depends_on.id %}">{{ld.depends_on.layer.name}}</a> |
267 | <a data-toggle="tooltip" title="{{ld.depends_on.layer.vcs_url}} | {{ld.depends_on.get_vcs_reference}}" href="{% url 'layerdetails' project.id ld.depends_on.id %}">{{ld.depends_on.layer.name}}</a> | 265 | <span class="glyphicon glyphicon-trash " data-toggle="tooltip" title="Delete"></span> |
268 | <span class="glyphicon glyphicon-trash " data-toggle="tooltip" title="Delete"></span> | 266 | </li> |
269 | </li> | 267 | {% endfor %} |
270 | {% endfor %} | 268 | </ul> |
271 | </ul> | 269 | <form class="form-inline add-deps"> |
272 | <form class="form-inline add-deps"> | 270 | <div class="form-group"> |
273 | <div class="form-group"> | 271 | <input class="form-control" type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" placeholder="Type a layer name" id="layer-dep-input"> |
274 | <input class="form-control" type="text" autocomplete="off" data-minLength="1" data-autocomplete="off" placeholder="Type a layer name" id="layer-dep-input"> | 272 | </div> |
275 | </div> | 273 | <a class="btn btn-default" id="add-layer-dependency-btn" disabled="disabled"> |
276 | <a class="btn btn-default" id="add-layer-dependency-btn" disabled="disabled"> | 274 | Add layer |
277 | Add layer | 275 | </a> |
278 | </a> | 276 | <span class="help-block add-deps">You can only add layers Toaster knows about</span> |
279 | <span class="help-block add-deps">You can only add layers Toaster knows about</span> | 277 | </form> |
280 | </form> | 278 | </div> |
281 | </dd> | ||
282 | </dl> | ||
283 | </div> | ||
284 | <!-- end layerdetails tab --> | 279 | <!-- end layerdetails tab --> |
285 | <!-- targets tab --> | 280 | <!-- targets tab --> |
286 | <div id="recipes" class="tab-pane"> | 281 | <div id="recipes" class="tab-pane"> |