bitbake: toaster: Fix stale layer state buttons

Move the "is available to the project" state computation to the template
for the Layer add/remove buttons, Recipe build/Add layer as done for the
Package add/remove. This is more reliable as we can get an inconsistent
state on the front end JS as there are many opportunities for hitting
out of date project information.

[YOCTO #8294]

(Bitbake rev: 43469c3360566ad4897785f14f8717a9bc8b6078)

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>
This commit is contained in:
Michael Wood 2015-10-09 10:32:42 +01:00 committed by Richard Purdie
parent 41a5f82b4a
commit ab896df63b
7 changed files with 27 additions and 18 deletions

View File

@ -1,6 +1,6 @@
"use strict";
function layerBtnsInit(ctx) {
function layerBtnsInit() {
/* Remove any current bindings to avoid duplicated binds */
$(".layerbtn").unbind('click');
@ -80,11 +80,4 @@ function layerBtnsInit(ctx) {
imgCustomModal.data('recipe', $(this).data('recipe'));
imgCustomModal.modal('show');
});
/* Setup the initial state of the buttons */
for (var i in ctx.projectLayers){
$(".layer-exists-" + ctx.projectLayers[i]).show();
$(".layer-add-" + ctx.projectLayers[i]).hide();
}
}

View File

@ -130,7 +130,7 @@ function tableInit(ctx){
tableBody.append(row);
/* If we have layerbtns then initialise them */
layerBtnsInit(ctx);
layerBtnsInit();
/* If we have popovers initialise them now */
$('td > a.btn').popover({

View File

@ -152,7 +152,7 @@ QUnit.test("Layer details page init", function(assert){
});
QUnit.test("Layer btns init", function(assert){
assert.throws(layerBtnsInit({ projectLayers : [] }));
assert.throws(layerBtnsInit());
});
QUnit.test("Table init", function(assert){

View File

@ -57,9 +57,7 @@ class LayersTable(ToasterTable):
context = super(LayersTable, self).get_context_data(**kwargs)
project = Project.objects.get(pk=kwargs['pid'])
context['project'] = project
context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=project))
return context
@ -93,7 +91,10 @@ class LayersTable(ToasterTable):
def setup_queryset(self, *args, **kwargs):
prj = Project.objects.get(pk = kwargs['pid'])
compatible_layers = prj.compatible_layerversions()
compatible_layers = prj.get_all_compatible_layer_versions()
self.static_context_extra['current_layers'] = \
prj.get_project_layer_versions(pk=True)
self.queryset = compatible_layers.order_by(self.default_orderby)

View File

@ -1,8 +1,16 @@
<button class="btn btn-danger btn-block layer-exists-{{data.pk}} layerbtn" style="display:none;" data-layer='{ "id": {{data.pk}}, "name": "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="remove" >
<button class="btn btn-danger btn-block layer-exists-{{data.pk}} layerbtn" data-layer='{ "id": {{data.pk}}, "name": "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="remove"
{% if data.pk not in extra.current_layers %}
style="display:none;"
{% endif %}
>
<i class="icon-trash"></i>
Delete layer
</button>
<button class="btn btn-block layer-add-{{data.pk}} layerbtn" data-layer='{ "id": {{data.pk}}, "name": "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="add">
<button class="btn btn-block layer-add-{{data.pk}} layerbtn" data-layer='{ "id": {{data.pk}}, "name": "{{data.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.pk%}"}' data-directive="add"
{% if data.pk in extra.current_layers %}
style="display:none;"
{% endif %}
>
<i class="icon-plus"></i>
Add layer
</button>

View File

@ -1,7 +1,15 @@
<button data-recipe-name="{{data.name}}" class="btn btn-block layer-exists-{{data.layer_version.pk}} build-recipe-btn" style="display:none; margin-top: 5px;" >
<button data-recipe-name="{{data.name}}" class="btn btn-block layer-exists-{{data.layer_version.pk}} build-recipe-btn" style="margin-top: 5px;
{% if data.layer_version.pk not in extra.current_layers %}
display:none;
{% endif %}"
>
Build recipe
</button>
<button class="btn btn-block layerbtn layer-add-{{data.layer_version.pk}}" data-layer='{ "id": {{data.layer_version.pk}}, "name": "{{data.layer_version.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.layer_version.pk%}"}' data-directive="add">
<button class="btn btn-block layerbtn layer-add-{{data.layer_version.pk}}" data-layer='{ "id": {{data.layer_version.pk}}, "name": "{{data.layer_version.layer.name}}", "layerdetailurl": "{%url 'layerdetails' extra.pid data.layer_version.pk%}"}' data-directive="add"
{% if data.layer_version.pk in extra.current_layers %}
style="display:none;"
{% endif %}
>
<i class="icon-plus"></i>
Add layer
<i title="" class="icon-question-sign get-help" data-original-title="To build this target, you must first add the {{data.layer_version.layer.name}} layer to your project"></i>

View File

@ -12,7 +12,6 @@
tableName : "{{table_name}}",
url : "{{ xhr_table_url }}?format=json",
title : "{{title}}",
projectLayers : {{projectlayers|json}},
};
try {