UI work for "Automatic Actions" feature. No back end yet.

This commit is contained in:
kiswa 2014-10-10 15:42:21 -04:00
parent 5a3cf70229
commit a45ad075e0
5 changed files with 245 additions and 3 deletions

View File

@ -42,6 +42,7 @@
<script src="js/controllers/boardsItemView.js"></script>
<script src="js/controllers/files.js"></script>
<script src="js/controllers/settings.js"></script>
<script src="js/controllers/settingsAutoActions.js"></script>
<script src="js/controllers/settingsUser.js"></script>
<script src="js/controllers/settingsUserForm.js"></script>
<script src="js/controllers/settingsBoard.js"></script>

View File

@ -0,0 +1,137 @@
taskBoardControllers.controller('AutomaticActionsCtrl',
['$scope', '$interval',
function ($scope, $interval) {
$scope.loadingActions = false; // Change to true once loading is implemented
$scope.actions = [];
$scope.actionData = {
isSaving: false,
board: null,
trigger: 0,
triggerWord: '',
secondary: null,
action: 0,
color: null,
category: null,
assignee: null
};
$scope.actionOptions = {
triggers: [
{
id: 0,
trigger: 'Item moves to lane',
actions: [
{ id: 0, action: 'Set item color' },
{ id: 1, action: 'Set item category'},
{ id: 2, action: 'Set item assignee' },
{ id: 3, action: 'Clear item due date' }
]
},
{
id: 1,
trigger: 'Item assigned to user',
actions: [
{ id: 0, action: 'Set item color' },
{ id: 1, action: 'Set item category'},
{ id: 3, action: 'Clear item due date' }
]
},
{
id: 2,
trigger: 'Item set to category',
actions: [
{ id: 0, action: 'Set item color' },
{ id: 2, action: 'Set item assignee' },
{ id: 3, action: 'Clear item due date' }
]
}
]
};
$scope.addAction = function() {
// TBD
};
$scope.secondarySelection = [];
$scope.updateSecondary = function() {
$scope.secondarySelection = [];
$scope.actionData.secondary = null;
$scope.actionData.action = 0;
var boardData = null;
$scope.boards.forEach(function(board) {
if (board.id === $scope.actionData.board) {
boardData = board;
$scope.boardCategories = board.ownCategory;
$scope.userList = board.sharedUser;
}
});
if (null !== boardData) {
switch($scope.actionData.trigger) {
case 0:
$scope.secondarySelection = boardData.ownLane;
break;
case 1:
$scope.secondarySelection = boardData.sharedUser;
$scope.secondarySelection.forEach(function(user) {
user.name = user.username;
});
break;
case 2:
$scope.secondarySelection = boardData.ownCategory;
break;
}
}
};
$scope.getTriggerWord = function() {
if ($scope.actionData.trigger !== null) {
var word = $scope.actionOptions.triggers[$scope.actionData.trigger].trigger.split(" ").pop();
$scope.actionData.triggerWord = word.charAt(0).toUpperCase() + word.slice(1);
}
$scope.updateSecondary();
};
$scope.getTriggerWord();
$scope.resetActionSecondary = function() {
$scope.actionData.color = null;
$scope.actionData.category = null;
$scope.actionData.assignee = null;
};
var defaultColor = '#ffffe0';
$scope.spectrum = function(color) {
color = color || defaultColor;
$('#spectrum').spectrum({
color: color,
allowEmpty: false,
localStorageKey: 'taskboard.colorPalette',
showPalette: true,
palette: [[]],
showSelectionPalette: true,
showButtons: false,
showInput: true,
preferredFormat: 'hex3',
disabled: $scope.actionData.board === null
});
};
$scope.updateColorpicker = function() {
if (null !== $scope.actionData.board) {
$('#spectrum').spectrum("enable");
return;
}
$('#spectrum').spectrum("disable");
};
// Check every 250ms to see if a board has been chosen.
var updateIfBoardChosen = function() {
if ($scope.actionData.board !== null) {
$interval.cancel($scope.interval); // Stop checking once it has.
$scope.getTriggerWord();
}
};
$scope.interval = $interval(updateIfBoardChosen, 250);
$scope.$on('$destroy', function () { $interval.cancel($scope.interval); });
}]);

View File

@ -40,5 +40,11 @@
<div data-include-replace="partials/settingsBoardTable.html"></div>
</div>
</div>
<div class="min-padding col-md-6">
<div class="settings-widget" data-ng-controller="AutomaticActionsCtrl">
<h3 class="widget-header">Automatic Actions</h3>
<div data-include-replace="partials/settingsAutoActions.html"></div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,98 @@
<div class="widget-content">
<h4>Current Actions</h4>
<div class="table-responsive">
<table class="table tabe-striped">
<thead>
<tr>
<th>Board</th><th>Trigger</th><th>Action</th><th>Remove</th>
</tr>
</thead>
<tbody>
<tr data-ng-if="loadingActions">
<td colspan="4" align="center">
<span class="fa fa-refresh fa-spin"></span> Loading Board Actions...
</td>
</tr>
<tr data-ng-if="!loadingActions && !actions.length">
<td data-ng-if="!currentUser.isAdmin" colspan="4" align="center">
There are no automatic actions. Contact an admin user to create one.
</td>
<td data-ng-if="currentUser.isAdmin" colspan="4" align="center">
There are no current automatic actions. Use the <strong>Add Action</strong> form below to add one.
</td>
</tr>
<tr data-ng-repeat="action in actions">
<td>{{ action.board }}</td>
<td>{{ action.trigger }}</td>
<td>{{ action.action }}</td>
<td>
<span class="links">
<a class="fa fa-trash-o" title="Remove Action" data-ng-click="removeAction(action.id)"></a>
</span>
</td>
</tr>
</tbody>
</table>
</div>
<div data-ng-if="currentUser.isAdmin">
<h4>Add Action</h4>
<fieldset data-ng-disabled="actionData.isSaving || loadingActions || currentBoard.loading">
<div class="form-group col-md-4">
<label for="boards">Select Board:</label>
<select class="form-control" id="boards" data-ng-model="actionData.board"
data-ng-options="board.id as board.name for board in boardNames"
data-ng-change="updateColorpicker()">
<option value="">Select Board...<option>
</select>
</div>
<div class="form-group col-md-4">
<label for="triggerSelect">Select Trigger:</label>
<select class="form-control" id="triggerSelect" data-ng-model="actionData.trigger"
data-ng-options="trigger.id as trigger.trigger for trigger in actionOptions.triggers"
data-ng-disabled="null === actionData.board"
data-ng-change="getTriggerWord()">
</select>
</div>
<div class="form-group col-md-4">
<label for="triggerSelect">Select Action:</label>
<select class="form-control" id="triggerSelect" data-ng-model="actionData.action"
data-ng-options="action.id as action.action for action in actionOptions.triggers[actionData.trigger].actions"
data-ng-disabled="null === actionData.board"
data-ng-change="resetActionSecondary()">
</select>
</div>
<div class="form-group col-md-4 col-md-offset-4">
<select class="form-control" data-ng-model="actionData.secondary"
data-ng-options="select.id as select.name for select in secondarySelection"
data-ng-disabled="null === actionData.board">
<option value="">Select {{ actionData.triggerWord }}</option>
</select>
</div>
<div class="form-group col-md-4 disabled">
<input class="form-control" type="text" id="spectrum" data-ng-model="actionData.color"
data-on-load-callback="spectrum"
data-ng-if="actionData.action === 0">
<select class="form-control" data-ng-model="actionData.category"
data-ng-options="cat.id as cat.name for cat in boardCategories"
data-ng-disabled="null === actionData.board"
data-ng-if="actionData.action === 1">
<option value="">Select Category</option>
</select>
<select class="form-control" data-ng-model="actionData.assignee"
data-ng-options="user.id as user.username for user in userList"
data-ng-disabled="null === actionData.board"
data-ng-if="actionData.action === 2">
<option value="">Select Assignee</option>
</select>
</div>
<div class="col-md-12">
<p>
<a role="button" id="addAction" class="btn btn-info pull-right"
data-ng-click="addAction()" title="Add Action">
Add Action <span class="fa fa-plus"></span>
</a>
</p>
</div>
</fieldset>
</div>
</div>

View File

@ -97,11 +97,11 @@ Count was done from parent directory of TaskBoard as `./cloc-1.62.pl TaskBoard -
Language | Files | Blank Lines | Comments | Code
-------------------|-------:|-------------:|---------:|---------:
Javascript | 21 | 154 | 32 | 1569
HTML | 16 | 7 | 8 | 822
Javascript | 22 | 164 | 34 | 1694
HTML | 17 | 7 | 8 | 927
PHP | 6 | 130 | 54 | 738
CSS | 1 | 12 | 33 | 608
Bourne Again Shell | 4 | 10 | 0 | 53
__SUM:__ | __48__ | __313__ | __127__ | __3790__
__SUM:__ | __50__ | __323__ | __129__ | __4020__
Counts Last Updated: Oct. 10, 2014