finish dialPlate
This commit is contained in:
@@ -6,17 +6,21 @@ var ccn_datetimepicker_tabType = {
|
||||
minute: 4
|
||||
};
|
||||
|
||||
var ccn_datetimepicker_dialPlateRadius = 200;
|
||||
var ccn_datetimepicker_dialPlateHalfRadius = ccn_datetimepicker_dialPlateRadius / 2;
|
||||
var ccn_datetimepicker_dialPlateWidth = 200;
|
||||
var ccn_datetimepicker_dialPlateRadius = ccn_datetimepicker_dialPlateWidth / 2;
|
||||
var ccn_datetimepicker_dialPlateHourInnerPercent = 0.6;
|
||||
var ccn_datetimepicker_dialPlateHourOutterPercent = 0.8;
|
||||
var ccn_datetimepicker_dialPlateHourDistinguishPercent = 0.7;
|
||||
var ccn_datetimepicker_dialPlateMinutePercent = 0.8;
|
||||
var ccn_datetimepicker_dialPlateHourResolution = Math.PI * 2 / 12;
|
||||
var ccn_datetimepicker_dialPlateMinuteResolution = Math.PI * 2 / 60;
|
||||
|
||||
var ccn_datetimepicker_mode = undefined;
|
||||
var ccn_datetimepicker_pickerIndex = undefined;
|
||||
var ccn_datetimepicker_isUTC = undefined;
|
||||
var ccn_datetimepicker_callbackFunc = undefined;
|
||||
var ccn_datetimepicker_pickerIndex = undefined;
|
||||
|
||||
var ccn_datetimepicker_enableMinuteDrag = false;
|
||||
var ccn_datetimepicker_enableHourDrag = false;
|
||||
|
||||
var ccn_datetimepicker_internalDateTime = new Date();
|
||||
var ccn_datetimepicker_displayCacheDateTime = new Date();
|
||||
@@ -70,13 +74,25 @@ function ccn_datetimepicker_Insert() {
|
||||
$('#ccn-datetimepiacker-panelMonth-table > div > div').click(ccn_datetimepicker_ClickMonth);
|
||||
$('#ccn-datetimepiacker-panelDay-table > div:nth-child(n+1) > div').click(ccn_datetimepicker_ClickDay);
|
||||
|
||||
$('#ccn-datetimepicker-panelHour')
|
||||
.mousedown(ccn_datetimepicker_StartDragHour)
|
||||
.mousemove(ccn_datetimepicker_DraggingHour)
|
||||
.mouseup(ccn_datetimepicker_StopDragHour);
|
||||
|
||||
$('#ccn-datetimepicker-panelMinute')
|
||||
.mousedown(ccn_datetimepicker_StartDragMinute)
|
||||
.mousemove(ccn_datetimepicker_DraggingMinute)
|
||||
.mouseup(ccn_datetimepicker_StopDragMinute);
|
||||
|
||||
$('#ccn-datetimepicker-btnConfirm').click(ccn_datetimepicker_Confirm);
|
||||
$('#ccn-datetimepicker-btnCancel').click(ccn_datetimepicker_Cancel);
|
||||
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_Modal(mode, pickerIndex, isUTC, callbackFunc) {
|
||||
function ccn_datetimepicker_Modal(mode, pickerIndex, isUTC) {
|
||||
ccn_datetimepicker_mode = mode;
|
||||
ccn_datetimepicker_pickerIndex = pickerIndex;
|
||||
ccn_datetimepicker_isUTC = isUTC;
|
||||
ccn_datetimepicker_callbackFunc = callbackFunc;
|
||||
ccn_datetimepicker_pickerIndex = pickerIndex;
|
||||
|
||||
ccn_datetimepicker_internalDateTime = ccn_datetimepicker_Get(pickerIndex, false);
|
||||
|
||||
@@ -96,7 +112,22 @@ function ccn_datetimepicker_Modal(mode, pickerIndex, isUTC, callbackFunc) {
|
||||
}
|
||||
ccn_datetimepicker_SwitchTab(mode);
|
||||
|
||||
$('#ccn-datetimepicker-modal').show();
|
||||
$('#ccn-datetimepicker-modal').addClass('is-active');
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_Confirm() {
|
||||
ccn_datetimepicker_Set(
|
||||
ccn_datetimepicker_pickerIndex,
|
||||
ccn_datetimepicker_internalDateTime,
|
||||
ccn_datetimepicker_isUTC,
|
||||
ccn_datetimepicker_mode
|
||||
);
|
||||
|
||||
$('#ccn-datetimepicker-modal').removeClass('is-active');
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_Cancel() {
|
||||
$('#ccn-datetimepicker-modal').removeClass('is-active');
|
||||
}
|
||||
|
||||
// ========================================= internal func
|
||||
@@ -133,11 +164,11 @@ function ccn_datetimepicker_SwitchTab(newTab) {
|
||||
|
||||
function ccn_datetimepicker_RefreshDisplay(tab) {
|
||||
// header should be refreshed entirely
|
||||
$('ccn-datetimepicker-datetime-year').text(ccn_datetimepicker_internalDateTime.getFullYear());
|
||||
$('ccn-datetimepicker-datetime-month').text(ccn_datetimepicker_internalDateTime.getMonth() + 1);
|
||||
$('ccn-datetimepicker-datetime-day').text(ccn_datetimepicker_internalDateTime.getDate());
|
||||
$('ccn-datetimepicker-datetime-hour').text(ccn_datetimepicker_internalDateTime.getHours());
|
||||
$('ccn-datetimepicker-datetime-minute').text(ccn_datetimepicker_internalDateTime.getMinutes());
|
||||
$('#ccn-datetimepicker-datetime-year').text(ccn_datetimepicker_internalDateTime.getFullYear());
|
||||
$('#ccn-datetimepicker-datetime-month').text(ccn_datetimepicker_internalDateTime.getMonth() + 1);
|
||||
$('#ccn-datetimepicker-datetime-day').text(ccn_datetimepicker_internalDateTime.getDate());
|
||||
$('#ccn-datetimepicker-datetime-hour').text(ccn_datetimepicker_internalDateTime.getHours());
|
||||
$('#ccn-datetimepicker-datetime-minute').text(ccn_datetimepicker_internalDateTime.getMinutes());
|
||||
|
||||
// refresh tab according to specific `tab`
|
||||
switch(tab) {
|
||||
@@ -168,7 +199,7 @@ function ccn_datetimepicker_RefreshDisplay(tab) {
|
||||
$('#ccn-datetimepiacker-panelMonth-table > div > div').attr('picked', 'false');
|
||||
if (ccn_datetimepicker_internalDateTime.getFullYear() == ccn_datetimepicker_displayCacheDateTime.getFullYear()) {
|
||||
var month = ccn_datetimepicker_internalDateTime.getMonth();
|
||||
$('#ccn-datetimepiacker-panelMonth-table > div:nth-child({0}) > div:nth-child({1})'.format(Math.floor(month / 4), month % 4))
|
||||
$('#ccn-datetimepiacker-panelMonth-table > div:nth-child({0}) > div:nth-child({1})'.format(Math.floor(month / 4) + 1, (month % 4) + 1))
|
||||
.attr('picked', 'true');
|
||||
}
|
||||
|
||||
@@ -203,9 +234,9 @@ function ccn_datetimepicker_RefreshDisplay(tab) {
|
||||
var gottenHour = ccn_datetimepicker_displayCacheDateTime.getHours();
|
||||
var newX = Math.cos((15 - gottenHour) * Math.PI * 2 / 60);
|
||||
var newY = Math.sin((15 - gottenHour) * Math.PI * 2 / 60);
|
||||
var radius = ccn_datetimepicker_dialPlateHalfRadius * (gottenHour < 12 ? ccn_datetimepicker_dialPlateHourOutterPercent : ccn_datetimepicker_dialPlateHourInnerPercent);
|
||||
newX = newX * radius + ccn_datetimepicker_dialPlateHalfRadius;
|
||||
newY = (-newY * radius) + ccn_datetimepicker_dialPlateHalfRadius;
|
||||
var radius = ccn_datetimepicker_dialPlateRadius * (gottenHour < 12 ? ccn_datetimepicker_dialPlateHourOutterPercent : ccn_datetimepicker_dialPlateHourInnerPercent);
|
||||
newX = newX * radius + ccn_datetimepicker_dialPlateRadius;
|
||||
newY = (-newY * radius) + ccn_datetimepicker_dialPlateRadius;
|
||||
|
||||
$('#ccn-datetimepicker-panelHour > line')
|
||||
.attr('x2', newX)
|
||||
@@ -220,9 +251,9 @@ function ccn_datetimepicker_RefreshDisplay(tab) {
|
||||
var gottenMinute = ccn_datetimepicker_displayCacheDateTime.getMinutes();
|
||||
var newX = Math.cos((15 - gottenMinute) * Math.PI * 2 / 60);
|
||||
var newY = Math.sin((15 - gottenMinute) * Math.PI * 2 / 60);
|
||||
var radius = ccn_datetimepicker_dialPlateHalfRadius * ccn_datetimepicker_dialPlateMinutePercent;
|
||||
newX = newX * radius + ccn_datetimepicker_dialPlateHalfRadius;
|
||||
newY = (-newY * radius) + ccn_datetimepicker_dialPlateHalfRadius;
|
||||
var radius = ccn_datetimepicker_dialPlateRadius * ccn_datetimepicker_dialPlateMinutePercent;
|
||||
newX = newX * radius + ccn_datetimepicker_dialPlateRadius;
|
||||
newY = (-newY * radius) + ccn_datetimepicker_dialPlateRadius;
|
||||
|
||||
$('#ccn-datetimepicker-panelMinute > line')
|
||||
.attr('x2', newX)
|
||||
@@ -253,15 +284,27 @@ function ccn_datetimepicker_Str2TabType(strl) {
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_PrevNextYear(isPrev) {
|
||||
ccn_datetimepicker_displayCacheDateTime.setFullYear(
|
||||
ccn_datetimepicker_displayCacheDateTime.getFullYear() + (isPrev ? -12 : 12));
|
||||
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_displayCacheDateTime);
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.year);
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_PrevNextMonth(isPrev) {
|
||||
|
||||
ccn_datetimepicker_displayCacheDateTime.setFullYear(
|
||||
ccn_datetimepicker_displayCacheDateTime.getFullYear() + (isPrev ? -1 : 1));
|
||||
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_displayCacheDateTime);
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.month);
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_PrevNextDay(isPrev) {
|
||||
|
||||
ccn_datetimepicker_displayCacheDateTime.setMonth(
|
||||
ccn_datetimepicker_displayCacheDateTime.getMonth() + (isPrev ? -1 : 1));
|
||||
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_displayCacheDateTime);
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.day);
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_ClickYear() {
|
||||
@@ -269,82 +312,125 @@ function ccn_datetimepicker_ClickYear() {
|
||||
if (ele.attr('data') == '') return;
|
||||
|
||||
ccn_datetimepicker_internalDateTime.setFullYear(parseInt(ele.attr('data')));
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_internalDateTime);
|
||||
|
||||
if (ccn_datetimepicker_mode != ccn_datetimepicker_tabType.year)
|
||||
ccn_datetimepicker_SwitchTab(ccn_datetimepicker_tabType.month);
|
||||
else
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.year);
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_ClickMonth() {
|
||||
var ele = $(this);
|
||||
if (ele.attr('data') == '') return;
|
||||
|
||||
ccn_datetimepicker_internalDateTime.setMonth(parseInt(ele.attr('data')));
|
||||
ccn_datetimepicker_internalDateTime.setFullYear(
|
||||
ccn_datetimepicker_displayCacheDateTime.getFullYear(),
|
||||
parseInt(ele.attr('data'))
|
||||
);
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_internalDateTime);
|
||||
|
||||
if (ccn_datetimepicker_mode != ccn_datetimepicker_tabType.month)
|
||||
ccn_datetimepicker_SwitchTab(ccn_datetimepicker_tabType.day);
|
||||
else
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.month);
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_ClickDay() {
|
||||
var ele = $(this);
|
||||
if (ele.attr('data') == '') return;
|
||||
|
||||
ccn_datetimepicker_internalDateTime.setDate(parseInt(ele.attr('data')));
|
||||
ccn_datetimepicker_internalDateTime.setFullYear(
|
||||
ccn_datetimepicker_displayCacheDateTime.getFullYear(),
|
||||
ccn_datetimepicker_displayCacheDateTime.getMonth(),
|
||||
parseInt(ele.attr('data'))
|
||||
);
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_internalDateTime);
|
||||
|
||||
if (ccn_datetimepicker_mode != ccn_datetimepicker_tabType.day)
|
||||
ccn_datetimepicker_SwitchTab(ccn_datetimepicker_tabType.hour);
|
||||
else
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.day);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
function ccn_datetimepicker_Init() {
|
||||
var nowtime = new Date();
|
||||
function ccn_datetimepicker_StartDragHour() { ccn_datetimepicker_enableHourDrag = true; }
|
||||
function ccn_datetimepicker_DraggingHour(e) {
|
||||
var offset = $('#ccn-datetimepicker-panelHour').offset();
|
||||
var x = e.pageX - offset.left - ccn_datetimepicker_dialPlateRadius;
|
||||
var y = -(e.pageY - offset.top - ccn_datetimepicker_dialPlateRadius);
|
||||
|
||||
$('.datetimepicker-year').attr('min', ccn_datetime_MIN_YEAR)
|
||||
.attr('max', ccn_datetime_MAX_YEAR)
|
||||
.attr('step', 1)
|
||||
.val(nowtime.getFullYear())
|
||||
.bind('input propertychange', ccn_datetimepicker_Sync);
|
||||
var distance = Math.sqrt(x * x + y * y);
|
||||
var angle = Math.asin(y / distance);
|
||||
if (x < 0) angle = Math.PI - angle; // correct negative x axis angle
|
||||
|
||||
$('.datetimepicker-month').attr('min', 1)
|
||||
.attr('max', 12)
|
||||
.attr('step', 1)
|
||||
.val(nowtime.getMonth() + 1)
|
||||
.bind('input propertychange', ccn_datetimepicker_Sync);
|
||||
angle += (ccn_datetimepicker_dialPlateHourResolution / 2); // correct offset
|
||||
if (angle > Math.PI * 2)
|
||||
angle -= Math.PI * 2;
|
||||
|
||||
$('.datetimepicker-day').attr('min', 1)
|
||||
.attr('step', 1)
|
||||
.each(function(){
|
||||
ccn_datetimepicker_SyncEx($(this).attr("datetimepicker"));
|
||||
})
|
||||
.val(nowtime.getDate());
|
||||
|
||||
$('.datetimepicker-hour').attr('min', 0)
|
||||
.attr('max', 23)
|
||||
.attr('step', 1)
|
||||
.val(nowtime.getHours());
|
||||
var number = -(Math.floor(angle / (ccn_datetimepicker_dialPlateHourResolution / 2)) - 3);
|
||||
if (number < 0) number += 12;
|
||||
if (distance < ccn_datetimepicker_dialPlateRadius * ccn_datetimepicker_dialPlateHourDistinguishPercent)
|
||||
number += 12;
|
||||
|
||||
$('.datetimepicker-minute').attr('min', 0)
|
||||
.attr('max', 59)
|
||||
.attr('step', 1)
|
||||
.val(nowtime.getMinutes());
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_Sync() {
|
||||
var pickerIndex = $(this).attr("datetimepicker");
|
||||
ccn_datetimepicker_SyncEx(pickerIndex);
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_SyncEx(pickerIndex) {
|
||||
year = parseInt($('.datetimepicker-year[datetimepicker=' + pickerIndex + ']').val());
|
||||
month = parseInt($('.datetimepicker-month[datetimepicker=' + pickerIndex + ']').val());
|
||||
|
||||
dayDOM = $('.datetimepicker-day[datetimepicker=' + pickerIndex + ']');
|
||||
if (typeof(year) == 'undefined' || typeof(month) == 'undefined') {
|
||||
dayDOM.attr('max', 1)
|
||||
.val(1);
|
||||
} else {
|
||||
dayDOM.attr('max', ccn_datetime_monthDayCount[month - 1] + ((month == 2 && ccn_datetime_IsLeapYear(year) ? 1 : 0)))
|
||||
.val(1);
|
||||
// judge
|
||||
if (ccn_datetimepicker_displayCacheDateTime.getHours() != number) {
|
||||
ccn_datetimepicker_displayCacheDateTime.setHours(number);
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.hour);
|
||||
}
|
||||
}
|
||||
*/
|
||||
function ccn_datetimepicker_StopDragHour() {
|
||||
ccn_datetimepicker_enableHourDrag = false;
|
||||
|
||||
ccn_datetimepicker_internalDateTime.setHours(ccn_datetimepicker_displayCacheDateTime.getHours());
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_internalDateTime);
|
||||
|
||||
if (ccn_datetimepicker_mode != ccn_datetimepicker_tabType.hour)
|
||||
ccn_datetimepicker_SwitchTab(ccn_datetimepicker_tabType.minute);
|
||||
}
|
||||
|
||||
|
||||
function ccn_datetimepicker_StartDragMinute() { ccn_datetimepicker_enableMinuteDrag = true; }
|
||||
function ccn_datetimepicker_DraggingMinute(e) {
|
||||
var offset = $('#ccn-datetimepicker-panelMinute').offset();
|
||||
var x = e.pageX - offset.left - ccn_datetimepicker_dialPlateRadius;
|
||||
var y = -(e.pageY - offset.top - ccn_datetimepicker_dialPlateRadius);
|
||||
|
||||
var distance = Math.sqrt(x * x + y * y);
|
||||
var angle = Math.asin(y / distance);
|
||||
if (x < 0) angle = Math.PI - angle; // correct negative x axis angle
|
||||
|
||||
angle += (ccn_datetimepicker_dialPlateMinuteResolution / 2); // correct offset
|
||||
if (angle > Math.PI * 2)
|
||||
angle -= Math.PI * 2;
|
||||
|
||||
var number = -(Math.floor(angle / (ccn_datetimepicker_dialPlateMinuteResolution / 2)) - 3);
|
||||
if (number < 0) number += 12;
|
||||
|
||||
// judge
|
||||
if (ccn_datetimepicker_displayCacheDateTime.getMinutes() != number) {
|
||||
ccn_datetimepicker_displayCacheDateTime.setMinutes(number);
|
||||
ccn_datetimepicker_RefreshDisplay(ccn_datetimepicker_tabType.minute);
|
||||
}
|
||||
}
|
||||
function ccn_datetimepicker_StopDragMinute() {
|
||||
ccn_datetimepicker_enableMinuteDrag = false;
|
||||
|
||||
ccn_datetimepicker_internalDateTime.setMinutes(ccn_datetimepicker_displayCacheDateTime.getMinutes());
|
||||
ccn_datetimepicker_ClampDateTime(ccn_datetimepicker_internalDateTime);
|
||||
|
||||
// no page need to be jumped
|
||||
}
|
||||
|
||||
|
||||
function ccn_datetimepicker_ClampDateTime(dateObj) {
|
||||
if (dateObj < ccn_datetime_MIN_DATETIME)
|
||||
dateObj.setTime(ccn_datetime_MIN_DATETIME.getTime());
|
||||
if (dateObj >= ccn_datetime_MAX_DATETIME)
|
||||
dateObj.setTime(ccn_datetime_MAX_DATETIME.getTime());
|
||||
}
|
||||
|
||||
// ========================================================== universal function
|
||||
|
||||
function ccn_datetimepicker_Set(pickerIndex, dt, isUTC, mode) {
|
||||
var ele = $('[datetimepicker=' + pickerIndex + ']');
|
||||
@@ -358,6 +444,9 @@ function ccn_datetimepicker_Set(pickerIndex, dt, isUTC, mode) {
|
||||
ele.attr('datetimepicker-hour', isUTC ? dt.getUTCHours() : dt.getHours());
|
||||
if (mode < ccn_datetimepicker_tabType.minute) return;
|
||||
ele.attr('datetimepicker-minute', isUTC ? dt.getUTCMinutes() : dt.getMinutes());
|
||||
|
||||
if (typeof(ele.prop('callbackFunc')) == 'function')
|
||||
ele.prop('callbackFunc')();
|
||||
}
|
||||
|
||||
function ccn_datetimepicker_Get(pickerIndex, isUTC) {
|
||||
|
||||
Reference in New Issue
Block a user