[Forms] Implement DialogButtonController

Implement controller for dialog buttons sufficient to satisfy
spec; these will be used to launch dialogs to collect user input
for Image Properties et al to complete toolbar for Fixed Position
view, WTD-881.
This commit is contained in:
Victor Woeltjen
2015-02-23 19:06:09 -08:00
parent 3e95a96c69
commit 0030efc29e
2 changed files with 77 additions and 5 deletions

View File

@ -0,0 +1,72 @@
/*global define*/
define(
[],
function () {
'use strict';
/**
* Controller for the `dialog-button` control type. Provides
* structure for a button (embedded via the template) which
* will show a dialog for editing a single property when clicked.
* @constructor
* @param $scope the control's Angular scope
* @param {DialogService} dialogService service to use to prompt
* for user input
*/
function DialogButtonController($scope, dialogService) {
var buttonStructure,
buttonForm,
field;
// Store the result of user input to the model
function storeResult(result) {
$scope.ngModel[$scope.field] = result[$scope.field];
}
// Prompt for user input
function showDialog() {
dialogService.getUserInput(buttonForm, $scope.ngModel)
.then(storeResult);
}
// Refresh state based on structure for this control
function refreshStructure(structure) {
var row = Object.create(structure.dialog || {});
structure = structure || {};
// Add the key, to read back from that row
row.key = $scope.field;
// Prepare the structure for the button itself
buttonStructure = {};
buttonStructure.glyph = structure.glyph;
buttonStructure.name = structure.name;
buttonStructure.description = structure.description;
buttonStructure.click = showDialog;
// Prepare the form; a single row
buttonForm = {
name: structure.title,
sections: [ { rows: [ row ] } ]
};
}
$scope.$watch('structure', refreshStructure);
return {
/**
* Get the structure for an `mct-control` of type
* `button`; a dialog will be launched when this button
* is clicked.
* @returns dialog structure
*/
getButtonStructure: function () {
return buttonStructure;
}
};
}
return DialogButtonController;
}
);