/** * Created by jeong on 2018-01-13. */ 'use strict'; define(['app', 'angular'], function (app, angular) { app.directive('dateRangePicker', ["$log", "$rootScope", "$translate", function ($log, $rootScope, $translate) { return { restrict: 'A', scope: { ngModel: "=", parentEl : "=" }, controller: function ($scope, $element, $attrs) { $scope.fn = { makeDateRangePicker : makeDateRangePicker }; // 마일스톤에서 프로젝트 기간 내에서만 날짜를 선택할 수 있도록 해주는 기능 $scope.$on("makeDateRangePicker", function (event, args) { $($element).empty(); $scope.fn.makeDateRangePicker($translate.use(), args.startDate, args.endDate); }); // 언어 변경시 새로 고침 $scope.$on("languageChange", function (event, args) { $scope.fn.makeDateRangePicker(args.language); }); function makeDateRangePicker(language, minDate, maxDate) { var options = { applyLabel : "", cancelLabel : "", daysOfWeek : [], monthNames : [] }; switch(language) { case "ko" : options.applyLabel = "적용"; options.cancelLabel = "취소"; options.daysOfWeek = ["일", "월", "화", "수", "목", "금", "토"]; options.monthNames = ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"]; break; case "en" : options.applyLabel = "Apply"; options.cancelLabel = "Cancel"; options.daysOfWeek = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]; options.monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; break; } if (angular.isDefined($attrs["rangeType"])) { if ($attrs["rangeType"] === "date") { $($element).daterangepicker({ timePicker: false, autoUpdateInput: true, autoApply: true, minDate: minDate, maxDate: maxDate, parentEl: $scope.parentEl !== undefined ? $scope.parentEl : "body", locale: { format: 'YYYY-MM-DD', separator: " ~ ", applyLabel: options.applyLabel, cancelLabel: options.cancelLabel, daysOfWeek: options.daysOfWeek, monthNames: options.monthNames }, opens: "center" }); } else if ($attrs["rangeType"] === "singleDate") { $($element).daterangepicker({ timePicker: true, timePickerSeconds : true, autoUpdateInput: true, autoApply : true, singleDatePicker : true, isSingle : true, //parentEl : $scope.parentEl !== undefined ? $scope.parentEl : "", locale: { format: 'YYYY-MM-DD hh:mm:ss', separator: "~", applyLabel: options.applyLabel, cancelLabel: options.cancelLabel, daysOfWeek: options.daysOfWeek, monthNames: options.monthNames }, opens : "center" }); // singleDate 취소 버튼 (값 초기화) $($element).on('cancel.daterangepicker', function(ev, picker) { $scope.ngModel = ""; }); } else if ($attrs["rangeType"] === "multiDate") { $($element).daterangepicker({ timePicker: true, timePickerSeconds : true, autoUpdateInput: true, autoApply : true, singleDatePicker : false, isSingle : false, //parentEl : $scope.parentEl !== undefined ? $scope.parentEl : "", locale: { format: 'YYYY-MM-DD hh:mm:ss', separator: "~", applyLabel: options.applyLabel, cancelLabel: options.cancelLabel, daysOfWeek: options.daysOfWeek, monthNames: options.monthNames }, opens : "center" }); // singleDate 취소 버튼 (값 초기화) $($element).on('cancel.daterangepicker', function(ev, picker) { $scope.ngModel = ""; }); } } else { $($element).daterangepicker({ timePicker: false, autoUpdateInput: false, autoApply : false, parentEl : $scope.parentEl !== undefined ? $scope.parentEl : "body", locale: { format: $attrs["dateFormat"], // 'YY-MM-DD HH:mm' separator: " ~ ", applyLabel: options.applyLabel, cancelLabel: options.cancelLabel, daysOfWeek: options.daysOfWeek, monthNames: options.monthNames }, opens : "center" }); $($element).on('apply.daterangepicker', function(ev, picker) { $scope.ngModel = picker.startDate.format($attrs["dateFormat"]) + ' ~ ' + picker.endDate.format($attrs["dateFormat"]); }); $($element).on('cancel.daterangepicker', function(ev, picker) { $scope.ngModel = ""; }); } } $scope.fn.makeDateRangePicker($translate.use()); }, link: function (scope, element, attrs) { } } }]) });