1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-09 05:29:32 +00:00

bitbake: toaster: disable/enable "Add layer" button according to input's content

In the import layer page, the "Add layer" button in the layer dependencies
section doesn't accurately reflect whether the layer name in the
corresponding input can be added. A partial or empty layer name can
leave the button active, such that when it is clicked, a
previously-selected layer can be accidentally added.

Fix by keeping track of the items currently available in the typeahead,
only activating the "Add layer" button when the input matches the name
of one of those items.

[YOCTO #8511]

(Bitbake rev: dbb4f0282ded361baf9e5a0346e134bece5314b9)

Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Elliot Smith
2016-04-19 17:28:40 +01:00
committed by Richard Purdie
parent 040dbf6988
commit 3036413000
2 changed files with 35 additions and 2 deletions
@@ -18,10 +18,38 @@ function importLayerPageInit (ctx) {
libtoaster.makeTypeahead(layerDepInput, libtoaster.ctx.layersTypeAheadUrl, { include_added: "true" }, function(item){
currentLayerDepSelection = item;
layerDepBtn.removeAttr("disabled");
});
// choices available in the typeahead
var layerDepsChoices = {};
// when the typeahead choices change, store an array of the available layer
// choices locally, to use for enabling/disabling the "Add layer" button
layerDepInput.on("typeahead-choices-change", function (event, data) {
layerDepsChoices = {};
if (data.choices) {
data.choices.forEach(function (item) {
layerDepsChoices[item.name] = item;
});
}
});
// disable the "Add layer" button when the layer input typeahead is empty
// or not in the typeahead choices
layerDepInput.on("input change", function () {
// get the choices from the typeahead
var choice = layerDepsChoices[$(this).val()];
if (choice) {
layerDepBtn.removeAttr("disabled");
currentLayerDepSelection = choice;
}
else {
layerDepBtn.attr("disabled", "disabled");
currentLayerDepSelection = undefined;
}
});
/* We automatically add "openembedded-core" layer for convenience as a
* dependency as pretty much all layers depend on this one
@@ -21,6 +21,9 @@ var libtoaster = (function (){
var xhrReq;
jQElement.typeahead({
// each time the typeahead's choices change, a
// "typeahead-choices-change" event is fired with an object
// containing the available choices in a "choices" property
source: function(query, process){
xhrParams.search = query;
@@ -36,6 +39,8 @@ var libtoaster = (function (){
xhrReq = null;
jQElement.trigger("typeahead-choices-change", {choices: data.results});
return process(data.results);
});
},