/*! Angular Moment Picker - v0.10.2 - http://indrimuska.github.io/angular-moment-picker - (c) 2015 Indri Muska - MIT */
/******/ (function (modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if (installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/
}
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/
};
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/
}
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // identity function for calling harmony imports with the correct context
/******/ __webpack_require__.i = function (value) { return value; };
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function (exports, name, getter) {
/******/ if (!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/
});
/******/
}
/******/
};
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function (module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/
};
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function (object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 17);
/******/
})
/************************************************************************/
/******/([
/* 0 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var angular = __webpack_require__(1);
var moment = __webpack_require__(2);
exports.KEYS = { up: 38, down: 40, left: 37, right: 39, escape: 27, enter: 13 };
exports.isValidMoment = function (value) {
return moment.isMoment(value) && value.isValid();
};
exports.toValue = function (date, format, locale) {
var momentDate = date;
if (!exports.isValidMoment(date))
momentDate = exports.toMoment(date, format, locale);
return exports.momentToValue(momentDate, format);
};
exports.toMoment = function (date, format, locale) {
var momentDate = moment(date, format, locale);
if (!exports.isValidMoment(momentDate))
momentDate = undefined;
return momentDate;
};
exports.momentToValue = function (momentObject, format) {
if (!exports.isValidMoment(momentObject))
return undefined;
return !format ? momentObject.valueOf() : momentObject.format(format);
};
exports.valueToMoment = function (formattedValue, $scope) {
var momentValue;
if (!formattedValue)
return momentValue;
if (!$scope.format)
momentValue = moment(formattedValue);
else
momentValue = moment(formattedValue, $scope.format, $scope.locale);
if ($scope.model) {
// set value for each view precision (from Decade View to minView)
var views = $scope.views.all.slice(0, $scope.views.all.indexOf($scope.detectedMinView));
angular.forEach(views, function (view) {
var precision = $scope.views.precisions[view];
momentValue[precision]($scope.model[precision]());
});
}
return momentValue;
};
exports.setValue = function (value, $scope, $ctrl, $attrs) {
var modelValue = exports.isValidMoment(value) ? value.clone() : exports.valueToMoment(value, $scope), viewValue = exports.momentToValue(modelValue, $scope.format);
$scope.model = exports.updateMoment($scope.model, modelValue, $scope);
$ctrl.$modelValue = exports.updateMoment($ctrl.$modelValue, modelValue, $scope);
if ($attrs['ngModel'] != $attrs['momentPicker'])
$scope.value = viewValue;
if ($attrs['ngModel']) {
$ctrl.$setViewValue(viewValue);
$ctrl.$render(); // render input value
}
};
exports.updateMoment = function (model, value, $scope) {
if (!exports.isValidMoment(model) || !value)
model = value;
else {
if (!model.isSame(value)) {
// set value for each view precision (from Decade View to maxView)
var views = $scope.views.all.slice(0, $scope.views.all.indexOf($scope.detectedMaxView) + 1);
angular.forEach(views, function (view) {
var precision = $scope.views.precisions[view];
model[precision](value[precision]());
});
}
}
return model;
};
/***/
}),
/* 1 */
/***/ (function (module, exports) {
module.exports = angular;
/***/
}),
/* 2 */
/***/ (function (module, exports) {
module.exports = moment;
/***/
}),
/* 3 */
/***/ (function (module, exports) {
// removed by extract-text-webpack-plugin
/***/
}),
/* 4 */
/***/ (function (module, exports) {
// removed by extract-text-webpack-plugin
/***/
}),
/* 5 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var angular = __webpack_require__(1);
var provider_1 = __webpack_require__(9);
exports.Provider = provider_1["default"];
var directive_1 = __webpack_require__(7);
exports.Directive = directive_1["default"];
angular
.module('moment-picker', [])
.provider('momentPicker', [function () { return new provider_1["default"](); }])
.directive('momentPicker', [
'$timeout', '$sce', '$log', '$window', 'momentPicker', '$compile', '$templateCache',
function ($timeout, $sce, $log, $window, momentPicker, $compile, $templateCache) {
return new directive_1["default"]($timeout, $sce, $log, $window, momentPicker, $compile, $templateCache);
}
]);
/***/
}),
/* 6 */
/***/ (function (module, exports) {
module.exports = "
";
/***/
}),
/* 7 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var angular = __webpack_require__(1);
var moment = __webpack_require__(2);
var helpers_1 = __webpack_require__(8);
var views_1 = __webpack_require__(13);
var utility_1 = __webpack_require__(0);
var templateHtml = __webpack_require__(6);
var Directive = (function () {
function Directive($timeout, $sce, $log, $window, provider, $compile, $templateCache) {
var _this = this;
this.$timeout = $timeout;
this.$sce = $sce;
this.$log = $log;
this.$window = $window;
this.provider = provider;
this.$compile = $compile;
this.$templateCache = $templateCache;
this.restrict = 'A';
this.require = '?ngModel';
this.transclude = true;
this.template = templateHtml;
this.scope = {
value: '=?momentPicker',
model: '=?ngModel',
locale: '@?',
format: '@?',
minView: '@?',
maxView: '@?',
startView: '@?',
minDate: '=?',
maxDate: '=?',
startDate: '=?',
disabled: '=?disable',
position: '@?',
inline: '@?',
validate: '=?',
autoclose: '=?',
setOnSelect: '=?',
isOpen: '=?',
today: '=?',
keyboard: '=?',
showHeader: '=?',
additions: '=?',
change: '&?',
selectable: '&?'
};
this.link = function ($scope, $element, $attrs, $ctrl, $transclude) {
$transclude(function ($transElement) {
// one-way binding attributes
angular.forEach([
'locale', 'format', 'minView', 'maxView', 'startView', 'position', 'inline', 'validate', 'autoclose', 'setOnSelect', 'today',
'keyboard', 'showHeader', 'leftArrow', 'rightArrow', 'additions'
], function (attr) {
if (!angular.isDefined($scope[attr]))
$scope[attr] = _this.provider[attr];
if (!angular.isDefined($attrs[attr]))
$attrs[attr] = $scope[attr];
});
// check if ngModel has been set
if (!$attrs['ngModel'])
$ctrl = {};
// limits
$scope.limits = {
minDate: utility_1.toMoment($scope.minDate, $scope.format, $scope.locale),
maxDate: utility_1.toMoment($scope.maxDate, $scope.format, $scope.locale),
isAfterOrEqualMin: function (value, precision) {
return !angular.isDefined($scope.limits.minDate) || value.isAfter($scope.limits.minDate, precision) || value.isSame($scope.limits.minDate, precision);
},
isBeforeOrEqualMax: function (value, precision) {
return !angular.isDefined($scope.limits.maxDate) || value.isBefore($scope.limits.maxDate, precision) || value.isSame($scope.limits.maxDate, precision);
},
isSelectable: function (value, precision) {
var selectable = true;
try {
if (angular.isFunction($scope.selectable) && $attrs['selectable'])
selectable = $scope.selectable({ date: value, type: precision });
}
catch (e) {
_this.$log.error(e);
}
return $scope.limits.isAfterOrEqualMin(value, precision) && $scope.limits.isBeforeOrEqualMax(value, precision) && selectable;
},
checkValue: function () {
if (!utility_1.isValidMoment($ctrl.$modelValue) || !$scope.validate)
return;
if (!$scope.limits.isAfterOrEqualMin($ctrl.$modelValue))
utility_1.setValue($scope.limits.minDate, $scope, $ctrl, $attrs);
if (!$scope.limits.isBeforeOrEqualMax($ctrl.$modelValue))
utility_1.setValue($scope.limits.maxDate, $scope, $ctrl, $attrs);
},
checkView: function () {
if (!angular.isDefined($scope.view.moment))
$scope.view.moment = moment().locale($scope.locale);
if (!$scope.limits.isAfterOrEqualMin($scope.view.moment))
$scope.view.moment = $scope.limits.minDate.clone();
if (!$scope.limits.isBeforeOrEqualMax($scope.view.moment))
$scope.view.moment = $scope.limits.maxDate.clone();
$scope.view.update();
$scope.view.render();
}
};
$scope.views = {
all: ['decade', 'year', 'month', 'day', 'hour', 'minute'],
precisions: { decade: 'year', year: 'month', month: 'date', day: 'hour', hour: 'minute', minute: 'second' },
// for each view, `$scope.views.formats` object contains the available moment formats
// formats present in more views are used to perform min/max view detection (i.e. 'LTS', 'LT', ...)
formats: {
decade: 'Y{1,2}(?!Y)|YYYY|[Ll]{1,4}(?!T)',
/* formats: Y,YY,YYYY,L,LL,LLL,LLLL,l,ll,lll,llll */
year: 'M{1,4}(?![Mo])|Mo|Q',
/* formats: M,MM,MMM,MMM,Mo,Q */
month: '[Dd]{1,4}(?![Ddo])|DDDo|[Dd]o|[Ww]{1,2}(?![Wwo])|[Ww]o|[Ee]|L{1,2}(?!T)|l{1,2}',
/* formats: D,DD,DDD,DDDD,d,dd,ddd,dddd,DDDo,Do,do,W,WW,w,ww,Wo,wo,E,e,L,LL,l,ll */
day: '[Hh]{1,2}|LTS?',
/* formats: H,HH,h,hh,LT,LTS */
hour: 'm{1,2}|[Ll]{3,4}|LT(?!S)',
/* formats: m,mm,LLL,LLLL,lll,llll,LT */
minute: 's{1,2}|S{1,}|X|LTS'
/* formats: s,ss,S,SS,SSS..,X,LTS */
},
detectMinMax: function () {
$scope.detectedMinView = $scope.detectedMaxView = undefined;
if (!$scope.format)
return;
var minView, maxView;
angular.forEach($scope.views.formats, function (formats, view) {
var regexp = new RegExp('(' + formats + ')(?![^\[]*\])', 'g');
if (!$scope.format.match(regexp))
return;
if (!angular.isDefined(minView))
minView = view;
maxView = view;
});
if (!angular.isDefined(minView))
minView = 0;
else
minView = Math.max(0, $scope.views.all.indexOf(minView));
if (!angular.isDefined(maxView))
maxView = $scope.views.all.length - 1;
else
maxView = Math.min($scope.views.all.length - 1, $scope.views.all.indexOf(maxView));
if (minView > $scope.views.all.indexOf($scope.minView))
$scope.minView = $scope.views.all[minView];
if (maxView < $scope.views.all.indexOf($scope.maxView))
$scope.maxView = $scope.views.all[maxView];
// save detected min/max view to use them to update the model value properly
$scope.detectedMinView = $scope.views.all[minView];
$scope.detectedMaxView = $scope.views.all[maxView];
},
// specific views
decade: new views_1.DecadeView($scope, $ctrl, _this.provider),
year: new views_1.YearView($scope, $ctrl, _this.provider),
month: new views_1.MonthView($scope, $ctrl, _this.provider),
day: new views_1.DayView($scope, $ctrl, _this.provider),
hour: new views_1.HourView($scope, $ctrl, _this.provider),
minute: new views_1.MinuteView($scope, $ctrl, _this.provider)
};
$scope.view = {
moment: undefined,
value: undefined,
isOpen: false,
selected: $scope.startView,
update: function () { $scope.view.value = utility_1.momentToValue($scope.view.moment, $scope.format); },
toggle: function () { $scope.view.isOpen ? $scope.view.close() : $scope.view.open(); },
open: function () {
if ($scope.disabled || $scope.view.isOpen || $scope.inline)
return;
$scope.isOpen = true;
$scope.view.isOpen = true;
document.body.appendChild($scope.picker[0]);
$scope.view.position();
},
close: function () {
if (!$scope.view.isOpen || $scope.inline)
return;
$scope.isOpen = false;
$scope.view.isOpen = false;
$scope.view.selected = $scope.startView;
$scope.picker[0].parentNode.removeChild($scope.picker[0]);
},
position: function () {
if (!$scope.view.isOpen || $scope.position || $scope.inline)
return;
var element = $element[0], picker = $scope.picker.children()[0], hasClassTop = $scope.picker.hasClass('top'), hasClassRight = $scope.picker.hasClass('right'), offset = helpers_1.getOffset($element[0]), top = offset.top - _this.$window.pageYOffset, left = offset.left - _this.$window.pageXOffset, winWidth = _this.$window.innerWidth, winHeight = _this.$window.innerHeight, shouldHaveClassTop = top + _this.$window.pageYOffset - picker.offsetHeight > 0 && top > winHeight / 2, shouldHaveClassRight = left + picker.offsetWidth > winWidth, pickerTop = offset.top + (shouldHaveClassTop ? 0 : element.offsetHeight) + 'px', pickerLeft = offset.left + 'px', pickerWidth = element.offsetWidth + 'px';
if (!hasClassTop && shouldHaveClassTop)
$scope.picker.addClass('top');
if (hasClassTop && !shouldHaveClassTop)
$scope.picker.removeClass('top');
if (!hasClassRight && shouldHaveClassRight)
$scope.picker.addClass('right');
if (hasClassRight && !shouldHaveClassRight)
$scope.picker.removeClass('right');
if ($scope.picker.css('top') !== pickerTop)
$scope.picker.css('top', pickerTop);
if ($scope.picker.css('left') !== pickerLeft)
$scope.picker.css('left', pickerLeft);
if ($scope.picker.css('width') !== pickerWidth)
$scope.picker.css('width', pickerWidth);
},
keydown: function (e) {
var view = $scope.views[$scope.view.selected], precision = $scope.views.precisions[$scope.view.selected].replace('date', 'day'), singleUnit = _this.provider[precision + 'sStep'] || 1, operation = [utility_1.KEYS.up, utility_1.KEYS.left].indexOf(e.keyCode) >= 0 ? 'subtract' : 'add', highlight = function (vertical) {
var unitMultiplier = vertical ? view.perLine : 1, nextDate = $scope.view.moment.clone()[operation](singleUnit * unitMultiplier, precision);
if ($scope.limits.isSelectable(nextDate, precision)) {
$scope.view.moment = nextDate;
$scope.view.update();
$scope.view.render();
}
};
switch (e.keyCode) {
case utility_1.KEYS.up:
case utility_1.KEYS.down:
e.preventDefault();
if (!$scope.view.isOpen)
$scope.view.open();
else
highlight(true);
break;
case utility_1.KEYS.left:
case utility_1.KEYS.right:
if (!$scope.view.isOpen)
break;
e.preventDefault();
highlight();
break;
case utility_1.KEYS.enter:
if (!$scope.view.isOpen)
break;
$scope.view.change(precision);
e.preventDefault();
break;
case utility_1.KEYS.escape:
$scope.view.toggle();
break;
}
$scope.$evalAsync();
},
// utility
unit: function () { return $scope.view.selected == 'decade' ? 10 : 1; },
precision: function () { return $scope.view.selected.replace('decade', 'year'); },
// header
title: '',
previous: {
label: _this.$sce.trustAsHtml($scope.leftArrow),
selectable: true,
set: function () {
if ($scope.view.previous.selectable) {
$scope.view.moment.subtract($scope.view.unit(), $scope.view.precision());
$scope.view.update();
$scope.view.render();
}
}
},
next: {
selectable: true,
label: _this.$sce.trustAsHtml($scope.rightArrow),
set: function () {
if ($scope.view.next.selectable) {
$scope.view.moment.add($scope.view.unit(), $scope.view.precision());
$scope.view.update();
$scope.view.render();
}
}
},
setParentView: function () { $scope.view.change($scope.views.all[Math.max(0, $scope.views.all.indexOf($scope.view.selected) - 1)]); },
// body
render: function () {
var momentPrevious = $scope.view.moment.clone().startOf($scope.view.precision()).subtract($scope.view.unit(), $scope.view.precision()), momentNext = $scope.view.moment.clone().endOf($scope.view.precision()).add($scope.view.unit(), $scope.view.precision());
$scope.view.previous.selectable = $scope.limits.isAfterOrEqualMin(momentPrevious, $scope.view.precision());
$scope.view.previous.label = _this.$sce.trustAsHtml($scope.view.previous.selectable ? $scope.leftArrow : ' ');
$scope.view.next.selectable = $scope.limits.isBeforeOrEqualMax(momentNext, $scope.view.precision());
$scope.view.next.label = _this.$sce.trustAsHtml($scope.view.next.selectable ? $scope.rightArrow : ' ');
$scope.view.title = $scope.views[$scope.view.selected].render();
},
change: function (view) {
var nextView = $scope.views.all.indexOf(view), minView = $scope.views.all.indexOf($scope.minView), maxView = $scope.views.all.indexOf($scope.maxView);
var update = function () {
utility_1.setValue($scope.view.moment, $scope, $ctrl, $attrs);
$scope.view.update();
if ($attrs['ngModel'])
$ctrl.$commitViewValue();
};
if ($scope.setOnSelect)
update();
if (nextView < 0 || nextView > maxView) {
if (!$scope.setOnSelect)
update();
if ($scope.autoclose)
_this.$timeout($scope.view.close);
}
else if (nextView >= minView)
$scope.view.selected = view;
}
};
// creation
$element.prepend($transElement);
$scope.picker = angular.element($element[0].querySelectorAll('.moment-picker'));
$scope.container = angular.element($scope.picker[0].querySelectorAll('.moment-picker-container'));
$scope.input = $element[0].tagName.toLowerCase() != 'input' && $element[0].querySelectorAll('input').length > 0
? angular.element($element[0].querySelectorAll('input'))
: angular.element($element[0]);
$scope.input.addClass('moment-picker-input').attr('tabindex', 0);
($scope.position || '').split(' ').forEach(function (className) { return $scope.picker.addClass(className); });
if (!$scope.inline)
$scope.picker[0].parentNode.removeChild($scope.picker[0]);
else {
$element.after($scope.picker);
$scope.picker.addClass('inline');
}
// transclude scope to template additions
_this.$timeout(function () {
angular.forEach($scope.additions || {}, function (tempalteUrl, key) {
var placeholder = angular.element($scope.container[0].querySelector('.moment-picker-addition.' + key));
var template = _this.$templateCache.get(tempalteUrl);
var compiled = _this.$compile(template)($scope.$parent);
placeholder.append(compiled);
});
});
// initialization
$scope.views.detectMinMax();
$scope.limits.checkView();
// model controller is initialized after linking function
_this.$timeout(function () {
if ($attrs['ngModel']) {
if (!$ctrl.$modelValue && $scope.value)
$ctrl.$setViewValue($scope.value);
$ctrl.$commitViewValue();
$ctrl.$render();
}
else {
if ($scope.value)
$ctrl.$modelValue = utility_1.valueToMoment($scope.value, $scope);
}
// view initialization
if ($scope.startDate)
$scope.view.moment = utility_1.toMoment($scope.startDate, $scope.format, $scope.locale);
else if (utility_1.isValidMoment($ctrl.$modelValue))
$scope.view.moment = $ctrl.$modelValue.clone();
$scope.view.update();
$scope.view.render();
});
// model <-> view conversion
if ($attrs['ngModel']) {
$ctrl.$parsers.push(function (viewValue) { return utility_1.updateMoment($ctrl.$modelValue, utility_1.valueToMoment(viewValue, $scope), $scope) || true; });
$ctrl.$formatters.push(function (modelValue) { return utility_1.momentToValue(modelValue, $scope.format) || ''; });
$ctrl.$viewChangeListeners.push(function () {
if ($attrs['ngModel'] != $attrs['momentPicker'])
$scope.value = $ctrl.$viewValue;
});
$ctrl.$validators.minDate = function (value) { return $scope.validate || !utility_1.isValidMoment(value) || $scope.limits.isAfterOrEqualMin(value); };
$ctrl.$validators.maxDate = function (value) { return $scope.validate || !utility_1.isValidMoment(value) || $scope.limits.isBeforeOrEqualMax(value); };
}
// properties listeners
if ($attrs['ngModel'] != $attrs['momentPicker'])
$scope.$watch('value', function (newValue, oldValue) {
if (newValue !== oldValue)
utility_1.setValue(newValue, $scope, $ctrl, $attrs);
});
$scope.$watch(function () { return utility_1.momentToValue($ctrl.$modelValue, $scope.format); }, function (newViewValue, oldViewValue) {
if (newViewValue == oldViewValue)
return;
var newModelValue = utility_1.valueToMoment(newViewValue, $scope);
utility_1.setValue(newModelValue, $scope, $ctrl, $attrs);
$scope.limits.checkValue();
$scope.view.moment = (newModelValue || moment().locale($scope.locale)).clone();
$scope.view.update();
$scope.view.render();
if (angular.isFunction($scope.change) && $attrs['change']) {
var oldModelValue_1 = utility_1.valueToMoment(oldViewValue, $scope);
$scope.$evalAsync(function () { return $scope.change({ newValue: newModelValue, oldValue: oldModelValue_1 }); });
}
});
$scope.$watch(function () { return $ctrl.$modelValue && $ctrl.$modelValue.valueOf(); }, function () {
var viewMoment = (utility_1.isValidMoment($ctrl.$modelValue) ? $ctrl.$modelValue : moment().locale($scope.locale)).clone();
if (!viewMoment.isSame($scope.view.moment)) {
$scope.view.moment = viewMoment;
$scope.view.update();
$scope.view.render();
}
});
$scope.$watch('view.selected', function () { return $scope.view.render(); });
$scope.$watchGroup(['minView', 'maxView'], function () {
// auto-detect minView/maxView
$scope.views.detectMinMax();
// limit startView
$scope.startView = $scope.views.all[Math.max(Math.min($scope.views.all.indexOf($scope.startView), $scope.views.all.indexOf($scope.maxView)), $scope.views.all.indexOf($scope.minView))];
$scope.view.selected = $scope.startView;
});
$scope.$watchGroup([
function () { return utility_1.toValue($scope.minDate, $scope.format, $scope.locale); },
function () { return utility_1.toValue($scope.maxDate, $scope.format, $scope.locale); }
], function () {
angular.forEach(['minDate', 'maxDate'], function (field) {
$scope.limits[field] = utility_1.toMoment($scope[field], $scope.format, $scope.locale);
});
$scope.limits.checkValue();
$scope.limits.checkView();
$scope.view.render();
});
$scope.$watch(function () { return utility_1.toValue($scope.startDate, $scope.format, $scope.locale); }, function (newViewValue, oldViewValue) {
if (newViewValue == oldViewValue)
return;
$scope.view.moment = utility_1.valueToMoment(newViewValue, $scope);
$scope.view.update();
$scope.view.render();
});
$attrs.$observe('locale', function (locale) { return $scope.locale = locale; });
$scope.$watch('locale', function (locale, previous) {
if (!angular.isDefined(previous) || locale == previous)
return;
if (utility_1.isValidMoment($ctrl.$modelValue))
utility_1.setValue($ctrl.$modelValue.locale(locale), $scope, $ctrl, $attrs);
if (utility_1.isValidMoment($scope.view.moment))
$scope.view.moment = $scope.view.moment.locale(locale);
if (utility_1.isValidMoment($scope.limits.minDate))
$scope.limits.minDate = $scope.limits.minDate.locale(locale);
if (utility_1.isValidMoment($scope.limits.maxDate))
$scope.limits.maxDate = $scope.limits.maxDate.locale(locale);
$scope.view.render();
});
$scope.$watch('validate', $scope.limits.checkValue);
$scope.$watch('isOpen', function (isOpen) {
if ($scope.inline)
$scope.view.isOpen = true;
else if (angular.isDefined(isOpen) && isOpen != $scope.view.isOpen)
$scope.view.toggle();
});
// event listeners
var focusInput = function (e) {
if (e)
e.preventDefault();
$scope.input[0].focus();
};
// use `touchstart` for iOS Safari, where click events aren't propogated under most circumstances.
$scope.input
.on('focus click touchstart', function () { return $scope.$evalAsync($scope.view.open); })
.on('blur', function () { return $scope.$evalAsync($scope.view.close); })
.on('keydown', function (e) {
if ($scope.keyboard)
$scope.view.keydown(e);
});
$element.on('click touchstart', function () { return focusInput(); });
$scope.container.on('mousedown', function (e) { return focusInput(e); });
angular.element(_this.$window).on('resize scroll', $scope.view.position);
// unbind events on destroy
$scope.$on('$destroy', function () {
$scope.input.off('focus click touchstart blur keydown');
$element.off('click touchstart');
$scope.container.off('mousedown');
$scope.picker.remove();
angular.element(_this.$window).off('resize scroll', $scope.view.position);
});
});
};
}
return Directive;
}());
exports["default"] = Directive;
/***/
}),
/* 8 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
/**
* Offset getter method from jQuery: https://github.com/jquery/jquery/blob/3.1.1/src/offset.js#L78
*/
exports.getOffset = function (element) {
if (!element)
return;
if (!element.getClientRects().length)
return { top: 0, left: 0 };
// https://github.com/jquery/jquery/blob/3.1.1/src/core.js#L220
var isWindow = function (obj) { return obj != null && obj === obj.window; };
var getWindow = function (elem) { return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; }; // tslint:disable-line:no-any
var rect = element.getBoundingClientRect();
if (!rect.width && !rect.height)
return rect;
var doc = element.ownerDocument;
var win = getWindow(doc);
var docElem = doc.documentElement;
return {
top: rect.top + win.pageYOffset - docElem.clientTop,
left: rect.left + win.pageXOffset - docElem.clientLeft
};
};
/***/
}),
/* 9 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var angular = __webpack_require__(1);
var Provider = (function () {
function Provider() {
this.settings = {
locale: 'en',
format: 'L LTS',
minView: 'decade',
maxView: 'minute',
startView: 'year',
inline: false,
validate: true,
autoclose: true,
setOnSelect: false,
today: false,
keyboard: false,
showHeader: true,
leftArrow: '←',
rightArrow: '→',
// Decade View
yearsFormat: 'YYYY',
// Year View
monthsFormat: 'MMM',
// Month View
daysFormat: 'D',
// Day View
hoursFormat: 'HH:[00]',
hoursStart: 0,
hoursEnd: 23,
// Hour View
minutesStep: 5,
minutesStart: 0,
minutesEnd: 59,
// Minute View
secondsFormat: 'ss',
secondsStep: 1,
secondsStart: 0,
secondsEnd: 59
};
}
Provider.prototype.options = function (options) {
angular.extend(this.settings, options);
return angular.copy(this.settings);
};
Provider.prototype.$get = function () {
return this.settings;
};
return Provider;
}());
exports["default"] = Provider;
/***/
}),
/* 10 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var utility_1 = __webpack_require__(0);
var DayView = (function () {
function DayView($scope, $ctrl, provider) {
this.$scope = $scope;
this.$ctrl = $ctrl;
this.provider = provider;
this.perLine = 4;
this.rows = {};
}
DayView.prototype.render = function () {
var hour = this.$scope.view.moment.clone().startOf('day').hour(this.provider.hoursStart);
this.rows = {};
for (var h = 0; h <= this.provider.hoursEnd - this.provider.hoursStart; h++) {
var index = Math.floor(h / this.perLine), selectable = this.$scope.limits.isSelectable(hour, 'hour');
if (!this.rows[index])
this.rows[index] = [];
this.rows[index].push({
index: h,
label: hour.format(this.provider.hoursFormat),
year: hour.year(),
month: hour.month(),
date: hour.date(),
hour: hour.hour(),
"class": [
this.$scope.keyboard && hour.isSame(this.$scope.view.moment, 'hour') ? 'highlighted' : '',
!selectable ? 'disabled' : utility_1.isValidMoment(this.$ctrl.$modelValue) && hour.isSame(this.$ctrl.$modelValue, 'hour') ? 'selected' : ''
].join(' ').trim(),
selectable: selectable
});
hour.add(1, 'hours');
}
// return title
return this.$scope.view.moment.format('LL');
};
DayView.prototype.set = function (hour) {
if (!hour.selectable)
return;
this.$scope.view.moment.year(hour.year).month(hour.month).date(hour.date).hour(hour.hour);
this.$scope.view.update();
this.$scope.view.change('hour');
};
return DayView;
}());
exports["default"] = DayView;
/***/
}),
/* 11 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var utility_1 = __webpack_require__(0);
var DecadeView = (function () {
function DecadeView($scope, $ctrl, provider) {
this.$scope = $scope;
this.$ctrl = $ctrl;
this.provider = provider;
this.perLine = 4;
this.rows = {};
}
DecadeView.prototype.render = function () {
var year = this.$scope.view.moment.clone(), firstYear = Math.floor(year.year() / 10) * 10 - 1;
this.rows = {};
year.year(firstYear);
for (var y = 0; y < 12; y++) {
var index = Math.floor(y / this.perLine), selectable = this.$scope.limits.isSelectable(year, 'year');
if (!this.rows[index])
this.rows[index] = [];
this.rows[index].push({
index: year.year(),
label: year.format(this.provider.yearsFormat),
year: year.year(),
"class": [
this.$scope.keyboard && year.isSame(this.$scope.view.moment, 'year') ? 'highlighted' : '',
!selectable || [0, 11].indexOf(y) >= 0 ? 'disabled' : utility_1.isValidMoment(this.$ctrl.$modelValue) && year.isSame(this.$ctrl.$modelValue, 'year') ? 'selected' : ''
].join(' ').trim(),
selectable: selectable
});
year.add(1, 'years');
}
// return title
return [year.subtract(2, 'years').format('YYYY'), year.subtract(9, 'years').format('YYYY')].reverse().join(' - ');
};
DecadeView.prototype.set = function (year) {
if (!year.selectable)
return;
this.$scope.view.moment.year(year.year);
this.$scope.view.update();
this.$scope.view.change('year');
};
return DecadeView;
}());
exports["default"] = DecadeView;
/***/
}),
/* 12 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var angular = __webpack_require__(1);
var moment = __webpack_require__(2);
var utility_1 = __webpack_require__(0);
var HourView = (function () {
function HourView($scope, $ctrl, provider) {
this.$scope = $scope;
this.$ctrl = $ctrl;
this.provider = provider;
this.perLine = 4;
this.rows = {};
}
HourView.prototype.render = function () {
var i = 0, minute = this.$scope.view.moment.clone().startOf('hour').minute(this.provider.minutesStart), minutesFormat = this.provider.minutesFormat || moment.localeData(this.$scope.locale).longDateFormat('LT').replace(/[aA]/, '').trim();
this.rows = {};
for (var m = 0; m <= this.provider.minutesEnd - this.provider.minutesStart; m += this.provider.minutesStep) {
var index = Math.floor(i / this.perLine), selectable = this.$scope.limits.isSelectable(minute, 'minute');
if (!this.rows[index])
this.rows[index] = [];
this.rows[index].push({
index: minute.minute(),
label: minute.format(minutesFormat),
year: minute.year(),
month: minute.month(),
date: minute.date(),
hour: minute.hour(),
minute: minute.minute(),
"class": [
this.$scope.keyboard && minute.isSame(this.$scope.view.moment, 'minute') ? 'highlighted' : '',
!selectable ? 'disabled' : utility_1.isValidMoment(this.$ctrl.$modelValue) && minute.isSame(this.$ctrl.$modelValue, 'minute') ? 'selected' : ''
].join(' ').trim(),
selectable: selectable
});
i++;
minute.add(this.provider.minutesStep, 'minutes');
}
if (this.$scope.keyboard)
this.highlightClosest();
// return title
return this.$scope.view.moment.clone().startOf('hour').format('DD MMMM YYYY HH:mm')//.format('lll');
};
HourView.prototype.set = function (minute) {
if (!minute.selectable)
return;
this.$scope.view.moment.year(minute.year).month(minute.month).date(minute.date).hour(minute.hour).minute(minute.minute);
this.$scope.view.update();
this.$scope.view.change('minute');
};
HourView.prototype.highlightClosest = function () {
var _this = this;
var minutes = [], minute;
angular.forEach(this.rows, function (row) {
angular.forEach(row, function (value) {
if (Math.abs(value.minute - _this.$scope.view.moment.minute()) < _this.provider.minutesStep)
minutes.push(value);
});
});
minute = minutes.sort(function (value1, value2) {
return Math.abs(value1.minute - _this.$scope.view.moment.minute()) > Math.abs(value2.minute - _this.$scope.view.moment.minute()) ? 1 : 0;
})[0];
if (!minute || minute.minute - this.$scope.view.moment.minute() == 0)
return;
this.$scope.view.moment.year(minute.year).month(minute.month).date(minute.date).hour(minute.hour).minute(minute.minute);
this.$scope.view.update();
if (minute.selectable)
minute["class"] = (minute["class"] + ' highlighted').trim();
};
return HourView;
}());
exports["default"] = HourView;
/***/
}),
/* 13 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var decadeView_1 = __webpack_require__(11);
exports.DecadeView = decadeView_1["default"];
var yearView_1 = __webpack_require__(16);
exports.YearView = yearView_1["default"];
var monthView_1 = __webpack_require__(15);
exports.MonthView = monthView_1["default"];
var dayView_1 = __webpack_require__(10);
exports.DayView = dayView_1["default"];
var hourView_1 = __webpack_require__(12);
exports.HourView = hourView_1["default"];
var minuteView_1 = __webpack_require__(14);
exports.MinuteView = minuteView_1["default"];
/***/
}),
/* 14 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var angular = __webpack_require__(1);
var utility_1 = __webpack_require__(0);
var MinuteView = (function () {
function MinuteView($scope, $ctrl, provider) {
this.$scope = $scope;
this.$ctrl = $ctrl;
this.provider = provider;
this.perLine = 6;
this.rows = {};
}
MinuteView.prototype.render = function () {
var i = 0, second = this.$scope.view.moment.clone().startOf('minute').second(this.provider.secondsStart);
this.rows = {};
for (var s = 0; s <= this.provider.secondsEnd - this.provider.secondsStart; s += this.provider.secondsStep) {
var index = Math.floor(i / this.perLine), selectable = this.$scope.limits.isSelectable(second, 'second');
if (!this.rows[index])
this.rows[index] = [];
this.rows[index].push({
index: second.second(),
label: second.format(this.provider.secondsFormat),
year: second.year(),
month: second.month(),
date: second.date(),
hour: second.hour(),
minute: second.minute(),
second: second.second(),
"class": [
this.$scope.keyboard && second.isSame(this.$scope.view.moment, 'second') ? 'highlighted' : '',
!selectable ? 'disabled' : utility_1.isValidMoment(this.$ctrl.$modelValue) && second.isSame(this.$ctrl.$modelValue, 'second') ? 'selected' : ''
].join(' ').trim(),
selectable: selectable
});
i++;
second.add(this.provider.secondsStep, 'seconds');
}
if (this.$scope.keyboard)
this.highlightClosest();
// return title
return this.$scope.view.moment.clone().startOf('minute').format('lll');
};
MinuteView.prototype.set = function (second) {
if (!second.selectable)
return;
this.$scope.view.moment.year(second.year).month(second.month).date(second.date).hour(second.hour).minute(second.minute).second(second.second);
this.$scope.view.update();
this.$scope.view.change();
};
MinuteView.prototype.highlightClosest = function () {
var _this = this;
var seconds = [], second;
angular.forEach(this.rows, function (row) {
angular.forEach(row, function (value) {
if (Math.abs(value.second - _this.$scope.view.moment.second()) < _this.provider.secondsStep)
seconds.push(value);
});
});
second = seconds.sort(function (value1, value2) {
return Math.abs(value1.second - _this.$scope.view.moment.second()) > Math.abs(value2.second - _this.$scope.view.moment.second()) ? 1 : 0;
})[0];
if (!second || second.second - this.$scope.view.moment.second() == 0)
return;
this.$scope.view.moment.year(second.year).month(second.month).date(second.date).hour(second.hour).minute(second.minute).second(second.second);
this.$scope.view.update();
if (second.selectable)
second["class"] = (second["class"] + ' highlighted').trim();
};
return MinuteView;
}());
exports["default"] = MinuteView;
/***/
}),
/* 15 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var angular = __webpack_require__(1);
var moment = __webpack_require__(2);
var utility_1 = __webpack_require__(0);
var MonthView = (function () {
function MonthView($scope, $ctrl, provider) {
this.$scope = $scope;
this.$ctrl = $ctrl;
this.provider = provider;
this.perLine = moment.weekdays().length;
this.rows = [];
}
MonthView.prototype.render = function () {
var _this = this;
var month = this.$scope.view.moment.month(), day = this.$scope.view.moment.clone().startOf('month').startOf('week').hour(12), rows = {}, firstWeek = day.week(), lastWeek = firstWeek + 5;
this.rows = [];
for (var week = firstWeek; week <= lastWeek; week++)
rows[week] = Array.apply(null, Array(this.perLine)).map(function () {
var selectable = _this.$scope.limits.isSelectable(day, 'day');
var date = {
index: day.date(),
label: day.format(_this.provider.daysFormat),
year: day.year(),
month: day.month(),
date: day.date(),
"class": [
_this.$scope.keyboard && day.isSame(_this.$scope.view.moment, 'day') ? 'highlighted' : '',
!!_this.$scope.today && day.isSame(new Date(), 'day') ? 'today' : '',
!selectable || day.month() != month ? 'disabled' : utility_1.isValidMoment(_this.$ctrl.$modelValue) && day.isSame(_this.$ctrl.$modelValue, 'day') ? 'selected' : ''
].join(' ').trim(),
selectable: selectable
};
day.add(1, 'days');
return date;
});
// object to array - see https://github.com/indrimuska/angular-moment-picker/issues/9
angular.forEach(rows, function (row) { return _this.rows.push(row); });
// render headers
this.headers = moment.weekdays().map(function (d, i) { return moment().locale(_this.$scope.locale).startOf('week').add(i, 'day').format('dd'); });
// return title
return this.$scope.view.moment.format('MMMM YYYY');
};
MonthView.prototype.set = function (day) {
if (!day.selectable)
return;
this.$scope.view.moment.year(day.year).month(day.month).date(day.date);
this.$scope.view.update();
this.$scope.view.change('day');
};
return MonthView;
}());
exports["default"] = MonthView;
/***/
}),
/* 16 */
/***/ (function (module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var moment = __webpack_require__(2);
var utility_1 = __webpack_require__(0);
var YearView = (function () {
function YearView($scope, $ctrl, provider) {
this.$scope = $scope;
this.$ctrl = $ctrl;
this.provider = provider;
this.perLine = 4;
this.rows = {};
}
YearView.prototype.render = function () {
var _this = this;
var month = this.$scope.view.moment.clone().startOf('year'), months = moment.monthsShort();
this.rows = {};
months.forEach(function (label, i) {
var index = Math.floor(i / _this.perLine), selectable = _this.$scope.limits.isSelectable(month, 'month');
if (!_this.rows[index])
_this.rows[index] = [];
_this.rows[index].push({
index: month.month(),
label: month.format(_this.provider.monthsFormat),
year: month.year(),
month: month.month(),
"class": [
_this.$scope.keyboard && month.isSame(_this.$scope.view.moment, 'month') ? 'highlighted' : '',
!selectable ? 'disabled' : utility_1.isValidMoment(_this.$ctrl.$modelValue) && month.isSame(_this.$ctrl.$modelValue, 'month') ? 'selected' : ''
].join(' ').trim(),
selectable: selectable
});
month.add(1, 'months');
});
// return title
return this.$scope.view.moment.format('YYYY');
};
YearView.prototype.set = function (month) {
if (!month.selectable)
return;
this.$scope.view.moment.year(month.year).month(month.month);
this.$scope.view.update();
this.$scope.view.change('month');
};
return YearView;
}());
exports["default"] = YearView;
/***/
}),
/* 17 */
/***/ (function (module, exports, __webpack_require__) {
__webpack_require__(5);
__webpack_require__(3);
module.exports = __webpack_require__(4);
/***/
})
/******/]);