Skip to content
This repository was archived by the owner on Feb 18, 2022. It is now read-only.

Commit 48048d4

Browse files
committed
datepicker-toggle, datepicker-append-to
1 parent 3607e10 commit 48048d4

File tree

4 files changed

+46
-12
lines changed

4 files changed

+46
-12
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ date-set-hidden="" | String(Boolean) | false | Set the default date to be shown
8484
date-disabled-dates="" | String([Date(), Date(), ...]) | false | Disable specific dates using an _Array_ of dates
8585
date-refocus="" | String(Boolean) | false | Set the datepicker to re-focus the input after selecting a date
8686
date-typer="" | String(Boolean) | false | Set the datepicker to update calendar date when user is typing a date
87+
datepicker-append-to="" | String('#id' || '.class' || 'body') | false | Append the datepicker to #id or .class element or to body
8788
datepicker-toggle="" | String(Boolean) | true | Set the datepicker to toggle its visibility on focus and blur
8889

8990
##Options

index.html

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
</div>
2727
<div class="col3">
2828
<div class="datepicker"
29-
datepicker-toggle="false"
29+
date-set-hidden="true"
30+
datepicker-append-to="body"
3031
date-format="MMMM d, y"
3132
date-set="2015/11/26"
3233
date-min-limit="2014/08/07"
@@ -41,7 +42,8 @@
4142
<input ng-model="date4" type="text" class="angular-datepicker-input"/>
4243
</div>
4344
<div class="col3">
44-
<datepicker>
45+
<datepicker
46+
datepicker-toggle="false">
4547
<input ng-model="date3" type="text" class="angular-datepicker-input"/>
4648
</datepicker>
4749
Date 3 is: {{date3}}

src/css/angular-datepicker.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,6 @@ datepicker, .datepicker, [datepicker],
198198
cursor: default;
199199
}
200200
/*options*/
201-
[datepicker-toggle="false"] > ._720kb-datepicker-calendar{
201+
[datepicker-toggle="false"] > ._720kb-datepicker-calendar, ._720kb-datepicker-calendar.no-toggle{
202202
visibility:visible;
203203
}

src/js/angular-datepicker.js

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/*global angular, navigator*/
1+
/*global angular, document, navigator*/
22
(function withAngular(angular, navigator) {
33
'use strict';
44

@@ -116,7 +116,7 @@
116116
, generateHtmlTemplate = function generateHtmlTemplate(prevButton, nextButton) {
117117

118118
var toReturn = [
119-
'<div class="_720kb-datepicker-calendar" ng-blur="hideCalendar()">',
119+
'<div class="_720kb-datepicker-calendar {{datepickerID}} {{classForToggle}}" ng-blur="hideCalendar()">',
120120
'</div>'
121121
]
122122
, monthAndYearHeader = generateMonthAndYearHeader(prevButton, nextButton)
@@ -617,10 +617,10 @@
617617
$scope.dateYearTitle = $scope.dateYearTitle || 'Select year';
618618
$scope.buttonNextTitle = $scope.buttonNextTitle || 'Next';
619619
$scope.buttonPrevTitle = $scope.buttonPrevTitle || 'Prev';
620-
621620
$scope.month = $filter('date')(date, 'MMMM');//december-November like
622621
$scope.monthNumber = Number($filter('date')(date, 'MM')); // 01-12 like
623622
$scope.day = Number($filter('date')(date, 'dd')); //01-31 like
623+
624624
if ($scope.dateMaxLimit) {
625625

626626
$scope.year = Number($filter('date')(new Date($scope.dateMaxLimit), 'yyyy'));//2014 like
@@ -633,12 +633,41 @@
633633

634634
return $filter('date')(new Date(new Date('06/08/2014').valueOf() + A_DAY_IN_MILLISECONDS * el), 'EEE');
635635
});
636+
//can this toggle blur/focus?
637+
if ($scope.datepickerToggle === 'false') {
636638

637-
//create the calendar holder
638-
thisInput.after($compile(angular.element(htmlTemplate))($scope));
639-
//get the calendar as element
640-
theCalendar = element[0].querySelector('._720kb-datepicker-calendar');
639+
$scope.classForToggle = 'no-toggle';
640+
}
641+
//create the calendar holder and append where needed
642+
if ($scope.datepickerAppendTo &&
643+
$scope.datepickerAppendTo.indexOf('.') !== -1) {
644+
645+
$scope.datepickerID = 'datepicker-id-' + new Date().getTime() + (Math.floor(Math.random() * 6) + 8);
646+
angular.element(document.getElementsByClassName($scope.datepickerAppendTo.replace('.', ''))[0]).append($compile(angular.element(htmlTemplate))($scope, function afterCompile(el) {
647+
648+
theCalendar = angular.element(el)[0];
649+
}));
650+
} else if ($scope.datepickerAppendTo &&
651+
$scope.datepickerAppendTo.indexOf('#') !== -1) {
652+
653+
$scope.datepickerID = 'datepicker-id-' + new Date().getTime() + (Math.floor(Math.random() * 6) + 8);
654+
angular.element(document.getElementById($scope.datepickerAppendTo.replace('#', ''))).append($compile(angular.element(htmlTemplate))($scope, function afterCompile(el) {
655+
656+
theCalendar = angular.element(el)[0];
657+
}));
658+
} else if ($scope.datepickerAppendTo &&
659+
$scope.datepickerAppendTo === 'body') {
660+
$scope.datepickerID = 'datepicker-id-' + (new Date().getTime() + (Math.floor(Math.random() * 6) + 8));
661+
angular.element(document).find('body').append($compile(angular.element(htmlTemplate))($scope, function afterCompile(el) {
662+
663+
theCalendar = angular.element(el)[0];
664+
}));
665+
} else {
641666

667+
thisInput.after($compile(angular.element(htmlTemplate))($scope));
668+
//get the calendar as element
669+
theCalendar = element[0].querySelector('._720kb-datepicker-calendar');
670+
}
642671
//some tricky dirty events to fire if click is outside of the calendar and show/hide calendar when needed
643672
thisInput.on('focus click', function onFocusAndClick() {
644673

@@ -666,7 +695,7 @@
666695
isMouseOn = true;
667696
});
668697

669-
angular.element($window).on('click focus', function onClickOnWindow() {
698+
angular.element($window).on('click focus focusin', function onClickOnWindow() {
670699

671700
if (!isMouseOn &&
672701
!isMouseOnInput && theCalendar) {
@@ -716,7 +745,9 @@
716745
'buttonPrevTitle': '@',
717746
'dateDisabledDates': '@',
718747
'dateSetHidden': '@',
719-
'dateTyper': '@'
748+
'dateTyper': '@',
749+
'datepickerAppendTo': '@',
750+
'datepickerToggle': '@'
720751
},
721752
'link': linkingFunction
722753
};

0 commit comments

Comments
 (0)