[Fixed Position] Improve button support

Improve button support from toolbars by adding a click
function when generating structures for mct-toolbar based
on view definitions. WTD-879.
This commit is contained in:
Victor Woeltjen 2015-02-17 16:20:02 -08:00
parent 7fced99390
commit db2f2eb098
2 changed files with 23 additions and 3 deletions

View File

@ -15,6 +15,8 @@ view's scope.) These additional properties are:
then that function is assumed to be an accessor-mutator function
(that is, it will be called with no arguments to get, and with
an argument to set.)
* `method`: Name of a method to invoke upon a selected object when
a control is activated, e.g. on a button click.
* `inclusive`: Optional; true if this control should be considered
applicable whenever at least one element in the selection has
the associated property. Otherwise, all members of the current

View File

@ -106,23 +106,41 @@ define(
// to the current selection.
function isApplicable(item) {
var property = (item || {}).property,
method = (item || {}).method,
exclusive = !(item || {}).inclusive;
// Check if a selected item defines this property
function hasProperty(selected) {
return selected[property] !== undefined;
return (property && (selected[property] !== undefined)) ||
(method && (typeof selected[method] === 'function'));
}
return property && selection.map(hasProperty).reduce(
return selection.map(hasProperty).reduce(
exclusive ? and : or,
exclusive
) && isConsistent(property);
}
// Invoke all functions in selections with the given name
function invoke(method, value) {
if (method) {
selection.forEach(function (selected) {
if (typeof selected[method] === 'function') {
selected[method](value);
}
});
}
}
// Prepare a toolbar item based on current selection
function convertItem(item) {
var converted = Object.create(item || {});
if (item.property) {
converted.key = addKey(item.property);
}
if (item.method) {
converted.click = function (v) { invoke(item.method, v); };
}
return converted;
}