|
23 | 23 | clearable: '='
|
24 | 24 | },
|
25 | 25 | link: function($scope, element, attrs, modelCtrl) {
|
26 |
| - var customOpts, el, opts, _clear, _format, _init, _initBoundaryField, _mergeOpts, _picker, _setDatePoint, _setEndDate, _setStartDate, _setViewValue, _validate, _validateMax, _validateMin; |
| 26 | + var _clear, _init, _initBoundaryField, _mergeOpts, _picker, _setDatePoint, _setEndDate, _setStartDate, _validate, _validateMax, _validateMin, customOpts, el, opts; |
27 | 27 | _mergeOpts = function() {
|
28 | 28 | var extend, localeExtend;
|
29 | 29 | localeExtend = angular.extend.apply(angular, Array.prototype.slice.call(arguments).map(function(opt) {
|
|
62 | 62 | }
|
63 | 63 | return _picker.setEndDate(m);
|
64 | 64 | });
|
65 |
| - _format = function(objValue) { |
66 |
| - var f; |
67 |
| - f = function(date) { |
68 |
| - if (!moment.isMoment(date)) { |
69 |
| - return moment(date).format(opts.locale.format); |
70 |
| - } else { |
71 |
| - return date.format(opts.locale.format); |
72 |
| - } |
73 |
| - }; |
74 |
| - if (objValue) { |
75 |
| - if (opts.singleDatePicker) { |
76 |
| - return f(objValue.startDate); |
77 |
| - } else { |
78 |
| - return [f(objValue.startDate), f(objValue.endDate)].join(opts.locale.separator); |
79 |
| - } |
80 |
| - } else { |
81 |
| - return ''; |
82 |
| - } |
83 |
| - }; |
84 |
| - _setViewValue = function(objValue) { |
85 |
| - var value; |
86 |
| - value = _format(objValue); |
87 |
| - el.val(value); |
88 |
| - return modelCtrl.$setViewValue(value); |
89 |
| - }; |
90 | 65 | _validate = function(validator) {
|
91 | 66 | return function(boundary, actual) {
|
92 | 67 | if (boundary && actual) {
|
|
102 | 77 | _validateMax = _validate(function(max, end) {
|
103 | 78 | return max.isAfter(end) || max.isSame(end, 'day');
|
104 | 79 | });
|
105 |
| - modelCtrl.$formatters.push(_format); |
| 80 | + modelCtrl.$formatters.push(function(objValue) { |
| 81 | + var f; |
| 82 | + f = function(date) { |
| 83 | + if (!moment.isMoment(date)) { |
| 84 | + return moment(date).format(opts.locale.format); |
| 85 | + } else { |
| 86 | + return date.format(opts.locale.format); |
| 87 | + } |
| 88 | + }; |
| 89 | + if (opts.singleDatePicker && objValue) { |
| 90 | + return f(objValue); |
| 91 | + } else if (objValue.startDate) { |
| 92 | + return [f(objValue.startDate), f(objValue.endDate)].join(opts.locale.separator); |
| 93 | + } else { |
| 94 | + return ''; |
| 95 | + } |
| 96 | + }); |
106 | 97 | modelCtrl.$render = function() {
|
107 | 98 | if (modelCtrl.$modelValue && modelCtrl.$modelValue.startDate) {
|
108 | 99 | _setStartDate(modelCtrl.$modelValue.startDate);
|
|
136 | 127 | return !(angular.isString(val) && val.length > 0);
|
137 | 128 | };
|
138 | 129 | _init = function() {
|
139 |
| - var eventType, _results; |
| 130 | + var eventType, results; |
140 | 131 | el.daterangepicker(angular.extend(opts, {
|
141 | 132 | autoUpdateInput: false
|
142 | 133 | }), function(start, end) {
|
143 |
| - return _setViewValue({ |
| 134 | + return $scope.model = opts.singleDatePicker ? start : { |
144 | 135 | startDate: start,
|
145 | 136 | endDate: end
|
146 |
| - }); |
| 137 | + }; |
147 | 138 | });
|
148 | 139 | _picker = el.data('daterangepicker');
|
149 |
| - _results = []; |
| 140 | + results = []; |
150 | 141 | for (eventType in opts.eventHandlers) {
|
151 |
| - _results.push(el.on(eventType, function(e) { |
| 142 | + results.push(el.on(eventType, function(e) { |
152 | 143 | var eventName;
|
153 | 144 | eventName = e.type + '.' + e.namespace;
|
154 | 145 | return $scope.$evalAsync(opts.eventHandlers[eventName]);
|
155 | 146 | }));
|
156 | 147 | }
|
157 |
| - return _results; |
| 148 | + return results; |
158 | 149 | };
|
159 | 150 | _init();
|
160 | 151 | $scope.$watch('model.startDate', function(n) {
|
161 |
| - _setStartDate(n); |
162 |
| - return _setViewValue($scope.model); |
| 152 | + return _setStartDate(n); |
163 | 153 | });
|
164 | 154 | $scope.$watch('model.endDate', function(n) {
|
165 |
| - _setEndDate(n); |
166 |
| - return _setViewValue($scope.model); |
| 155 | + return _setEndDate(n); |
167 | 156 | });
|
168 | 157 | _initBoundaryField = function(field, validator, modelField, optName) {
|
169 | 158 | if (attrs[field]) {
|
|
194 | 183 | });
|
195 | 184 | }
|
196 | 185 | _init();
|
197 |
| - return el.on('cancel.daterangepicker', (newClearable ? _setViewValue.bind(this, { |
198 |
| - startDate: null, |
199 |
| - endDate: null |
200 |
| - }) : null)); |
| 186 | + if (newClearable) { |
| 187 | + return el.on('cancel.daterangepicker', function() { |
| 188 | + return $scope.model = opts.singleDatePicker ? null : { |
| 189 | + startDate: null, |
| 190 | + endDate: null |
| 191 | + }; |
| 192 | + }); |
| 193 | + } |
201 | 194 | });
|
202 | 195 | }
|
203 | 196 | return $scope.$on('$destroy', function() {
|
|
0 commit comments