Use modal from Angular-Strap instead of the one in angular-ui-bootstrap.

This commit is contained in:
Alexis Lahouze 2017-07-07 01:14:18 +02:00
parent 0833536d5e
commit bebe2aa874
5 changed files with 155 additions and 182 deletions

View File

@ -21,3 +21,21 @@
.c3-ygrid-line.overdraft line { .c3-ygrid-line.overdraft line {
stroke: #FF0000; stroke: #FF0000;
} }
// Needed for modal backdrop opacity.
.modal-backdrop.am-fade {
opacity: .5;
transition: opacity .15s linear;
&.ng-enter {
opacity: 0;
&.ng-enter-active {
opacity: .5;
}
}
&.ng-leave {
opacity: .5;
&.ng-leave-active {
opacity: 0;
}
}
}

View File

@ -31,14 +31,12 @@ var balanceChartModule = require('./balance-chart.component.js'),
var ngResource = require('angular-resource'), var ngResource = require('angular-resource'),
ngMessages = require('angular-messages'), ngMessages = require('angular-messages'),
ngUiBootstrap = require('angular-ui-bootstrap'),
ngUiNotification = require('angular-ui-notification'), ngUiNotification = require('angular-ui-notification'),
ngStrap = require('angular-strap'); ngStrap = require('angular-strap');
module.exports = angular.module('accountant.operations', [ module.exports = angular.module('accountant.operations', [
ngResource, ngResource,
ngMessages, ngMessages,
ngUiBootstrap,
ngUiNotification, ngUiNotification,
ngStrap, ngStrap,
accountModule, accountModule,
@ -62,8 +60,8 @@ module.exports = angular.module('accountant.operations', [
/* /*
* Controller for the operations. * Controller for the operations.
*/ */
.controller('OperationController', function($routeParams, $uibModal, .controller('OperationController', function($routeParams, $modal,
Notification, Operation, Account, $log, $q) { Notification, Operation, Account, $log) {
var vm = this; var vm = this;
@ -130,25 +128,36 @@ module.exports = angular.module('accountant.operations', [
Notification.error( Notification.error(
'Error while saving operation: ' + result.message 'Error while saving operation: ' + result.message
); );
return $q.reject(result);
}); });
}; };
/* /*
* Delete an operation and return a promise. * Delete an operation and return a promise.
*/ */
vm.confirmDelete = function(operation) {
var title = "Delete operation #" + operation.id;
$modal({
templateUrl: operationDeleteTmpl,
controller: function($scope, title, operation, $delete) {
$scope.title = title;
$scope.operation = operation;
$scope.$delete = function() {
$scope.$hide();
$delete($scope.operation);
};
},
locals: {
title: title,
operation: operation,
$delete: vm.delete
}
});
};
vm.delete = function(operation) { vm.delete = function(operation) {
var id = operation.id; var id = operation.id;
$uibModal.open({
component: 'operationDeleteModalComponent',
resolve: {
operation: function() {
return operation;
}
}
}).result.then(function(operation) {
return operation.$delete().then(function() { return operation.$delete().then(function() {
Notification.success('Operation #' + id + ' deleted.'); Notification.success('Operation #' + id + ' deleted.');
@ -160,11 +169,6 @@ module.exports = angular.module('accountant.operations', [
'An error occurred while trying to delete operation #' + 'An error occurred while trying to delete operation #' +
id + ':<br />' + result id + ':<br />' + result
); );
return $q.reject(result);
});
}, function() {
return false;
}); });
}; };
@ -173,17 +177,28 @@ module.exports = angular.module('accountant.operations', [
* @returns a promise. * @returns a promise.
*/ */
vm.modify = function(operation) { vm.modify = function(operation) {
return $uibModal.open({ // FIXME Alexis Lahouze 2017-06-15 i18n
component: 'operationModifyModalComponent', var title = "Operation";
resolve: {
operation: function() { if (operation.id) {
return operation; title = title + " #" + operation.id;
} }
$modal({
templateUrl: operationFormTmpl,
controller: function($scope, title, operation, $save) {
$scope.title = title;
$scope.operation = operation;
$scope.$save = function() {
$scope.$hide();
$save($scope.operation);
};
},
locals: {
title: title,
operation: operation,
$save: vm.save
} }
}).result.then(function(operation) {
return vm.save(operation);
}, function() {
return false;
}); });
}; };
@ -194,78 +209,4 @@ module.exports = angular.module('accountant.operations', [
vm.account = Account.get({id: $routeParams.accountId}); vm.account = Account.get({id: $routeParams.accountId});
}) })
.component('operationModifyModalComponent', {
templateUrl: operationFormTmpl,
bindings: {
resolve: '<',
close: '&',
dismiss: '&'
},
controller: function() {
var vm = this;
vm.$onInit = function() {
vm.operation = vm.resolve.operation;
};
vm.ok = function() {
vm.close({
$value: vm.operation
});
};
vm.cancel = function() {
vm.dismiss({
$value: 'cancel'
});
};
vm.title = function() {
// FIXME Alexis Lahouze 2017-06-15 i18n
if (vm.operation.id) {
return "Operation #" + vm.operation.id;
} else {
return "Operation";
}
};
}
})
.component('operationDeleteModalComponent', {
templateUrl: operationDeleteTmpl,
bindings: {
resolve: '<',
close: '&',
dismiss: '&'
},
controller: function() {
var vm = this;
vm.$onInit = function() {
vm.operation = vm.resolve.operation;
};
vm.ok = function() {
vm.close({
$value: vm.operation
});
};
vm.cancel = function() {
vm.dismiss({
$value: 'cancel'
});
};
vm.title = function() {
// FIXME Alexis Lahouze 2017-06-15 i18n
if (vm.operation.id) {
return "Operation #" + vm.operation.id;
} else {
return "Operation";
}
};
}
})
.name; .name;

View File

@ -1,16 +1,24 @@
<div class="modal top am-fade" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h3 class="modal-title" id="modal-title">{{ $ctrl.title() }}</h3> <h3 class="modal-title" id="modal-title">{{ title }}</h3>
</div> </div>
<div class="modal-body" id="modal-body"> <div class="modal-body" id="modal-body">
<p>Voulez-vous supprimer l'opération #{{ $ctrl.operation.id }} ayant pour libellé :<br/>{{ $ctrl.operation.label }} <p>Voulez-vous supprimer l'opération #{{ operation.id }} ayant pour libellé :<br/>{{ operation.label }}
</p> </p>
</div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-danger" type="button" ng-click="$ctrl.ok()"> <button class="btn btn-danger" type="button" ng-click="$delete()">
Supprimer Supprimer
</button> </button>
<button class="btn btn-default" type="button" ng-click="$ctrl.cancel()">
<button class="btn btn-default" type="button" ng-click="$hide()">
Annuler Annuler
</button> </button>
</div> </div>
</div>
</div>
</div>

View File

@ -1,3 +1,5 @@
<!-- vim: set tw=80 ts=2 sw=2 sts=2: -->
<!-- kate: space-indent on; indent-width 2; mixedindent off; -->
<!-- <!--
This file is part of Accountant. This file is part of Accountant.
@ -14,10 +16,11 @@
You should have received a copy of the GNU Affero General Public License You should have received a copy of the GNU Affero General Public License
along with Accountant. If not, see <http://www.gnu.org/licenses/>. along with Accountant. If not, see <http://www.gnu.org/licenses/>.
--> -->
<!-- vim: set tw=80 ts=2 sw=2 sts=2: --> <div class="modal top am-fade" tabindex="-1" role="dialog" aria-hidden="true">
<!-- kate: space-indent on; indent-width 2; mixedindent off; --> <div class="modal-dialog">
<div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h3 class="modal-title" id="modal-title">{{ $ctrl.title() }}</h3> <h3 class="modal-title" id="modal-title">{{ title }}</h3>
</div> </div>
<div class="modal-body" id="modal-body"> <div class="modal-body" id="modal-body">
@ -26,7 +29,7 @@
<label class="col-sm-4 control-label" for="operation-date">Date</label> <label class="col-sm-4 control-label" for="operation-date">Date</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" id="operation-date" name="operation_date" <input class="form-control" id="operation-date" name="operation_date"
type="text" ng-model="$ctrl.operation.operation_date" type="text" ng-model="operation.operation_date"
bs-datepicker data-date-format="yyyy-MM-dd" data-timezone="UTC" bs-datepicker data-date-format="yyyy-MM-dd" data-timezone="UTC"
placeholder="Operation date"> placeholder="Operation date">
</div> </div>
@ -36,7 +39,7 @@
<label class="col-sm-4 control-label" for="label">Label</label> <label class="col-sm-4 control-label" for="label">Label</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" id="label" name="label" <input class="form-control" id="label" name="label"
ng-model="$ctrl.operation.label" type="text" placeholder="Label"> ng-model="operation.label" type="text" placeholder="Label">
</input> </input>
</div> </div>
</div> </div>
@ -45,7 +48,7 @@
<label class="col-sm-4 control-label" for="value">Montant</label> <label class="col-sm-4 control-label" for="value">Montant</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" id="value" name="value" <input class="form-control" id="value" name="value"
ng-model="$ctrl.operation.value" type="number" placeholder="Value"> ng-model="operation.value" type="number" placeholder="Value">
</input> </input>
</div> </div>
</div> </div>
@ -54,7 +57,7 @@
<label class="col-sm-4 control-label" for="category">Catégorie</label> <label class="col-sm-4 control-label" for="category">Catégorie</label>
<div class="col-sm-8"> <div class="col-sm-8">
<input class="form-control" id="category" name="category" <input class="form-control" id="category" name="category"
ng-model="$ctrl.operation.category" type="text" placeholder="Category"> ng-model="operation.category" type="text" placeholder="Category">
</input> </input>
</div> </div>
</div> </div>
@ -62,10 +65,13 @@
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" type="button" ng-click="$ctrl.ok()"> <button class="btn btn-primary" type="button" ng-click="$save()">
OK OK
</button> </button>
<button class="btn btn-default" type="button" ng-click="$ctrl.cancel()"> <button class="btn btn-default" type="button" ng-click="$hide()">
Annuler Annuler
</button> </button>
</div> </div>
</div>
</div>
</div>

View File

@ -103,7 +103,7 @@
<!-- Delete operation, with confirm. --> <!-- Delete operation, with confirm. -->
<button type="button" class="btn btn-default" <button type="button" class="btn btn-default"
ng-if="operation.id && !operation.scheduled_operation_id" ng-if="operation.id && !operation.scheduled_operation_id"
ng-click="operationsCtrl.delete(operation)"> ng-click="operationsCtrl.confirmDelete(operation)">
<span class="fa fa-trash-o"></span> <span class="fa fa-trash-o"></span>
</button> </button>
</div> </div>