forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.7 KiB
174 lines
5.7 KiB
//http://trentrichardson.com/examples/timepicker/#rest_examples
|
|
|
|
// angular: http://docs.angularjs.org/api/ng.filter:date
|
|
|
|
//.net: http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
|
|
|
|
// jquery: http://api.jqueryui.com/datepicker/
|
|
|
|
//http://trentrichardson.com/examples/timepicker/#slider_examples
|
|
|
|
evoapp.directive('datepicker', function($timeout, $filter, globals) {
|
|
|
|
var options;
|
|
options = {};
|
|
|
|
return {
|
|
require:'?ngModel',
|
|
link : function (scope, element, attrs, controller) {
|
|
|
|
//convert angularjs formats to jquery format
|
|
var dateFormat = $dateFormat.convert(globals.settings.dateFormat, $dateFormat.angularjs, $dateFormat.jquery);
|
|
var timeFormat = $dateFormat.convert(globals.settings.timeFormat, $dateFormat.angularjs, $dateFormat.jquery);
|
|
|
|
//parse attributes
|
|
var showTime = attrs.showTime != undefined ? scope.$eval(attrs.showTime) : false,
|
|
timeOnly = attrs.timeOnly != undefined ? scope.$eval(attrs.timeOnly) : false;
|
|
|
|
if (controller) {
|
|
|
|
controller.$formatters.push(function(value) {
|
|
if (angular.isString(value) ) {
|
|
return jQuery.datepicker.parseDate(dateFormat, value);
|
|
}
|
|
return null;
|
|
});
|
|
controller.$parsers.push(function(value){
|
|
if (value) {
|
|
return jQuery.datepicker.formatDate(dateFormat, value);
|
|
}
|
|
return null;
|
|
});
|
|
|
|
//http://jsfiddle.net/FVfSL/
|
|
//// Default to ISO formatting
|
|
//controller.$formatters.push(function(value) {
|
|
// if (angular.isString(value) ) {
|
|
// return new Date(value);
|
|
// }
|
|
// return null;
|
|
//});
|
|
//controller.$parsers.push(function(value){
|
|
// if (value) {
|
|
// return value.toISOString();
|
|
// }
|
|
// return null;
|
|
//});
|
|
|
|
controller.$render = function () {
|
|
|
|
var date = controller.$viewValue;
|
|
|
|
if(angular.isDate(date))
|
|
{
|
|
$(element).datetimepicker('setDate', date);
|
|
|
|
controller.$setViewValue(controller.$viewValue);
|
|
}
|
|
};
|
|
};
|
|
|
|
$(element).datetimepicker('destroy');
|
|
|
|
//TODO: see _defaults line, line 48 !
|
|
|
|
$(element).datetimepicker({
|
|
|
|
separator: showTime ? ' ' : '',
|
|
|
|
firstDay: 1,
|
|
|
|
timeFormat: showTime ? timeFormat : '',
|
|
dateFormat: dateFormat,
|
|
|
|
stepHour: 1,
|
|
stepMinute: 5,
|
|
stepSecond: 10,
|
|
|
|
showButtonPanel: true,
|
|
timeOnly: timeOnly,
|
|
|
|
showHour: null,
|
|
showMinute: null,
|
|
showSecond: null,
|
|
showMillisec: null,
|
|
showMicrosec: null,
|
|
showTimezone: null,
|
|
showTime: showTime,
|
|
|
|
currentText: 'Hoje',
|
|
closeText: '<i class="glyphicon glyphicon-remove text-muted"></i>',
|
|
|
|
beforeShow: function(input, dp_inst){
|
|
|
|
var $datePicker = $(element);
|
|
var zIndexModal = $datePicker.closest(".modal-scrollable").css("z-index");
|
|
|
|
zIndexModal++;
|
|
|
|
setTimeout(function(){
|
|
$('#ui-datepicker-div').css("z-index", zIndexModal);
|
|
}, 0);
|
|
},
|
|
onClose: function(dateText, inst) {
|
|
|
|
scope.$emit('onClose', {dateText: dateText, inst: inst});
|
|
},
|
|
onSelect: function (selectedDateTime){
|
|
|
|
scope.$emit('onSelect', {selectedDateTime: selectedDateTime});
|
|
|
|
//if(!showTime)
|
|
//{
|
|
// $(element).datetimepicker('hide');
|
|
//}
|
|
}
|
|
});
|
|
|
|
$(element).change(function(el){
|
|
|
|
if (controller){
|
|
|
|
var date = $(element).datetimepicker('getDate');
|
|
|
|
if(angular.isDate(date) && !scope.$$phase)
|
|
{
|
|
scope.$apply(function () {
|
|
controller.$setViewValue(date);
|
|
|
|
$(element).blur();
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
scope.domEl = $(element);
|
|
|
|
if(attrs.itemId != undefined)
|
|
{
|
|
//TODO: this might differ - scope might refer to the controller and in other places refer to this only!
|
|
//TODO: we might need to check if 'scope.$parent' is a valid controller
|
|
//TODO: use scope or scope.$parent for creating an instance of this control in the parent controller/view
|
|
|
|
//add reference to this datepicker, in controller
|
|
if(scope.$parent[attrs.itemId] == undefined)
|
|
{
|
|
scope.$parent[attrs.itemId] = scope;
|
|
}
|
|
else
|
|
{
|
|
throw Error('datepicker ' + attrs.itemId + ' already exists!');
|
|
}
|
|
}
|
|
|
|
if (controller) {
|
|
controller.$render();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
|
|
|