Skip to content

Commit cf6fe0a

Browse files
committed
logbon72#107 full 24 hour clock face
1 parent ffc71fe commit cf6fe0a

File tree

3 files changed

+51
-37
lines changed

3 files changed

+51
-37
lines changed

dist/angular-material-datetimepicker.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/angular-material-datetimepicker.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/angular-material-datetimepicker.js

Lines changed: 49 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@
4444
' <mdc-datetime-picker-calendar date="picker.currentDate" picker="picker" class="dtp-picker-calendar" ng-show="picker.currentView === picker.VIEWS.DATE"></mdc-datetime-picker-calendar>' +
4545
' <div class="dtp-picker-datetime" ng-cloak ng-if="picker.currentView !== picker.VIEWS.DATE">' +
4646
' <div class="dtp-actual-meridien">' +
47-
' <div class="left p20">' +
47+
' <div ng-if="picker.params.shortTime" class="left p20">' +
4848
' <a id="time-periods-am" href="#" mdc-dtp-noclick class="dtp-meridien-am" ng-class="{selected: picker.meridien == \'AM\'}" ng-click="picker.selectAM()">{{picker.params.amText}}</a>' +
4949
' </div>' +
5050
' <div ng-show="!picker.timeMode" class="dtp-actual-time p60">{{picker.currentNearest5Minute().format(picker.params.shortTime ? "hh:mm" : "HH:mm")}}</div>' +
51-
' <div class="right p20">' +
51+
' <div ng-if="picker.params.shortTime" class="right p20">' +
5252
' <a id="time-periods-pm" href="#" mdc-dtp-noclick class="dtp-meridien-pm" ng-class="{selected: picker.meridien == \'PM\'}" ng-click="picker.selectPM()">{{picker.params.pmText}}</a>' +
5353
' </div>' +
5454
' <div class="clearfix"></div>' +
@@ -486,7 +486,11 @@
486486
},
487487
isHourAvailable: function (hour) {
488488
var _date = moment(this.currentDate);
489-
_date.hour(this.convertHours(hour)).minute(0).second(0);
489+
if (this.params.shortTime) {
490+
_date.hour(this.convertHours(hour)).minute(0).second(0);
491+
} else {
492+
_date.hour(hour).minute(0).second(0);
493+
}
490494
return this.isAfterMinDate(_date, true, false) && this.isBeforeMaxDate(_date, true, false);
491495
},
492496
isMinuteAvailable: function (minute) {
@@ -842,10 +846,14 @@
842846

843847
var template =
844848
'<div class="dtp-picker-clock"><span ng-if="!points || points.length < 1">&nbsp;</span>' +
845-
'<div ng-repeat="point in points" class="dtp-picker-time" ng-style="point.style">' +
849+
'<div ng-repeat="point in points" class="dtp-picker-time noselect" ng-style="point.style">' +
846850
' <a href="#" id="time-{{mode}}-{{point.display}}" mdc-dtp-noclick ng-class="{selected: point.value===currentValue}" class="dtp-select-hour" ng-click="setTime(point.value)" ng-if="pointAvailable(point)">{{point.display}}</a>' +
847851
' <a href="#" mdc-dtp-noclick class="disabled dtp-select-hour" ng-if="!pointAvailable(point)">{{point.display}}</a>' +
848852
'</div>' +
853+
'<div ng-if="points24.length" ng-repeat="point24 in points24" class="dtp-picker-time noselect" ng-style="point24.style">' +
854+
' <a href="#" id="time-24hours-{{point24.display}}" mdc-dtp-noclick ng-class="{selected: point24.value===currentValue}" class="dtp-select-hour" ng-click="setTime(point24.value)" ng-if="pointAvailable(point24)">{{point24.display}}</a>' +
855+
' <a href="#" mdc-dtp-noclick class="disabled dtp-select-hour" ng-if="!pointAvailable(point24)">{{point24.display}}</a>' +
856+
'</div>' +
849857
'<div class="dtp-hand dtp-hour-hand"></div>' +
850858
'<div class="dtp-hand dtp-minute-hand"></div>' +
851859
'<div class="dtp-clock-center"></div>' +
@@ -878,8 +886,8 @@
878886
var mT = parseInt(css(clock, 'marginTop').replace('px', '')) || 0;
879887

880888
var r = (clockWidth / 2);
881-
var j = r / 1.2; //???
882-
889+
var j = r / 1.2; // radius for low number
890+
883891
var points = [];
884892

885893
for (var h = 0; h < 12; ++h) {
@@ -902,23 +910,46 @@
902910
if (picker.params.shortTime) {
903911
hour.display = (h === 0) ? 12 : h;
904912
} else {
905-
hour.display = picker.isPM() ? h + 12 : h;
913+
hour.display = h;
906914
}
907915
}
908916

909-
910917
points.push(hour);
911918
}
912-
913919
scope.points = points;
920+
921+
if (!picker.params.shortTime && !minuteMode) {
922+
var points24 = [];
923+
924+
var j24 = r / 1.8; // radius for high number
925+
for (var h24 = 12; h24 < 24; ++h24) {
926+
var x24 = j24 * Math.sin(Math.PI * 2 * (h24 / 12));
927+
var y24 = j24 * Math.cos(Math.PI * 2 * (h24 / 12));
928+
var left24 = (r + x24 + pL / 2) - (pL + mL);
929+
var top24 = (r - y24 - mT / 2) - (pT + mT);
930+
931+
var hour24 = {
932+
left: left24,
933+
top: top24,
934+
value: h24,
935+
style: {'margin-left': left24 + 'px', 'margin-top': top24 + 'px'}
936+
};
937+
938+
hour24.display = h24;
939+
940+
points24.push(hour24);
941+
}
942+
scope.points24 = points24;
943+
}
944+
914945
scope.mode = attrs.mode;
915946
setCurrentValue();
916947
clock.css('height', clockWidth + 'px');
917948

918949
var clockCenter = element[0].querySelector('.dtp-clock-center');
919950
var centerWidth = (clockCenter.offsetWidth / 2) || 7.5,
920951
centerHeight = (clockCenter.offsetHeight / 2) || 7.5;
921-
var _hL = r / 1.8;
952+
var _hL = r / (picker.params.shortTime ? 1.8 : 2.3);
922953
var _mL = r / 1.5;
923954

924955
angular.element(element[0].querySelector('.dtp-hour-hand')).css({
@@ -963,7 +994,8 @@
963994

964995
var setCurrentValue = function () {
965996
var date = picker.currentNearest5Minute();
966-
scope.currentValue = minuteMode ? date.minute() : (date.hour() % 12);
997+
var nbH = picker.params.shortTime ? 12 : 24;
998+
scope.currentValue = minuteMode ? date.minute() : (date.hour() % nbH);
967999
};
9681000

9691001
scope.$watch(function () {
@@ -974,36 +1006,18 @@
9741006
animateHands();
9751007
});
9761008

977-
978-
var setDisplayPoints = function (isPM, points) {
979-
for (var i = 0; i < points.length; i++) {
980-
points[i].display = i;
981-
if (isPM) {
982-
points[i].display += 12;
983-
}
984-
}
985-
return points;
986-
};
987-
988-
if (!picker.params.shortTime) {
989-
scope.$watch('picker.meridien', function () {
990-
if (!minuteMode) {
991-
if (scope.points) {
992-
var points = setDisplayPoints(picker.isPM(), angular.copy(scope.points));
993-
scope.points = points;
994-
}
995-
}
996-
});
997-
}
998-
999-
10001009
scope.setTime = function (val) {
10011010
if (val === scope.currentValue) {
10021011
picker.ok();
10031012
}
10041013

10051014
if (!minuteMode) {
1006-
picker.currentDate.hour(picker.isPM() ? (val + 12) : val);
1015+
if (picker.params.shortTime) {
1016+
picker.currentDate.hour(picker.isPM() ? (val + 12) : val);
1017+
} else {
1018+
picker.currentDate.hour(val);
1019+
}
1020+
10071021
} else {
10081022
picker.currentDate.minute(val);
10091023
}

0 commit comments

Comments
 (0)