2 * @license ng-bs-daterangepicker v0.0.5
3 * (c) 2013 Luis Farzati http://github.com/luisfarzati/ng-bs-daterangepicker
11 .module('ngBootstrap', [])
12 .directive('input', ['$compile', '$parse', '$filter', function($compile, $parse, $filter) {
16 link: function($scope, $element, $attributes, ngModel) {
18 if ($attributes.type !== 'daterange' || ngModel === null) {
23 options.format = $attributes.format || 'YYYY-MM-DD';
24 options.separator = $attributes.separator || ' - ';
25 options.minDate = $attributes.minDate && moment($attributes.minDate);
26 options.maxDate = $attributes.maxDate && moment($attributes.maxDate);
27 options.dateLimit = $attributes.limit && moment.duration.apply(this, $attributes.limit.split(' ').map(function(elem, index) {
28 return index === 0 && parseInt(elem, 10) || elem;
30 options.ranges = $attributes.ranges && $parse($attributes.ranges)($scope);
31 options.locale = $attributes.locale && $parse($attributes.locale)($scope);
32 options.opens = $attributes.opens || $parse($attributes.opens)($scope);
34 if ($attributes.enabletimepicker) {
35 options.timePicker = true;
36 angular.extend(options, $parse($attributes.enabletimepicker)($scope));
39 function datify(date) {
40 return moment.isMoment(date) ? date.toDate() : date;
43 function momentify(date) {
44 return (!moment.isMoment(date)) ? moment(date) : date;
47 function format(date) {
48 return $filter('date')(datify(date), options.format.replace(/Y/g, 'y').replace(/D/g, 'd')); //date.format(options.format);
51 function formatted(dates) {
52 return [format(dates.startDate), format(dates.endDate)].join(options.separator);
55 ngModel.$render = function() {
56 if (!ngModel.$viewValue || !ngModel.$viewValue.startDate) {
59 $element.val(formatted(ngModel.$viewValue));
62 $scope.$watch(function() {
63 return $attributes.ngModel;
64 }, function(modelValue, oldModelValue) {
66 if (!ngModel.$modelValue || (!ngModel.$modelValue.startDate)) {
67 ngModel.$setViewValue({
68 startDate: moment().startOf('day'),
69 endDate: moment().startOf('day')
74 if (oldModelValue !== modelValue) {
78 $element.data('daterangepicker').startDate = momentify(ngModel.$modelValue.startDate);
79 $element.data('daterangepicker').endDate = momentify(ngModel.$modelValue.endDate);
80 $element.data('daterangepicker').updateView();
81 $element.data('daterangepicker').updateCalendars();
82 $element.data('daterangepicker').updateInputText();
86 $element.daterangepicker(options, function(start, end, label) {
88 var modelValue = ngModel.$viewValue;
90 if (angular.equals(start, modelValue.startDate) && angular.equals(end, modelValue.endDate)) {
94 $scope.$apply(function() {
95 ngModel.$setViewValue({
96 startDate: (moment.isMoment(modelValue.startDate)) ? start : start.toDate(),
97 endDate: (moment.isMoment(modelValue.endDate)) ? end : end.toDate()