Hide calendar when input blurs, select 00:00:00 when no time is selected
parent
843ed7c889
commit
8ea8f1511d
|
@ -3,7 +3,7 @@
|
||||||
* Creates a calendar widget which can be used to select the date more easily than using just a text box
|
* Creates a calendar widget which can be used to select the date more easily than using just a text box
|
||||||
*
|
*
|
||||||
* Modified: http://yourcmc.ru/git/vitalif-js/calendar
|
* Modified: http://yourcmc.ru/git/vitalif-js/calendar
|
||||||
* Version: 2018-10-23
|
* Version: 2019-07-18
|
||||||
* License: MIT-like, http://www.openjs.com/license.php
|
* License: MIT-like, http://www.openjs.com/license.php
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
|
@ -46,6 +46,11 @@ export class Calendar extends preact.Component
|
||||||
componentDidMount()
|
componentDidMount()
|
||||||
{
|
{
|
||||||
this.componentDidUpdate();
|
this.componentDidUpdate();
|
||||||
|
this.props.input.addEventListener('blur', () =>
|
||||||
|
{
|
||||||
|
if (!Calendar.stopBlur || Calendar.stopBlur < Date.now()-200)
|
||||||
|
Calendar.hideCalendar();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidUpdate()
|
componentDidUpdate()
|
||||||
|
@ -77,8 +82,8 @@ export class Calendar extends preact.Component
|
||||||
if (this.props.callback)
|
if (this.props.callback)
|
||||||
{
|
{
|
||||||
// Safari does not understand new Date('YYYY-MM-DD HH:MM:SS')
|
// Safari does not understand new Date('YYYY-MM-DD HH:MM:SS')
|
||||||
t = t ? t.split(/:/) : null;
|
t = t ? t.split(/:/) : [ 0, 0, 0 ];
|
||||||
t = t ? new Date(year-0, month-1, day-0, t[0]-0, t[1]-0, t[2]-0) : new Date(year-0, month-1, day-0);
|
t = new Date(year-0, month-1, day-0, t[0]-0, t[1]-0, t[2]-0);
|
||||||
var c = this.props.callback;
|
var c = this.props.callback;
|
||||||
c(new Date(t));
|
c(new Date(t));
|
||||||
}
|
}
|
||||||
|
@ -323,6 +328,7 @@ export class Calendar extends preact.Component
|
||||||
};
|
};
|
||||||
Calendar.init();
|
Calendar.init();
|
||||||
Calendar.box.style.display = "block";
|
Calendar.box.style.display = "block";
|
||||||
|
Calendar.stopBlur = Date.now();
|
||||||
preact.render(<Calendar {...props} />, Calendar.box.parentNode, Calendar.box);
|
preact.render(<Calendar {...props} />, Calendar.box.parentNode, Calendar.box);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,6 +374,7 @@ export class Calendar extends preact.Component
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
else
|
else
|
||||||
ev.cancelBubble = true;
|
ev.cancelBubble = true;
|
||||||
|
Calendar.stopBlur = Date.now();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
document.getElementsByTagName("body")[0].insertBefore(div, document.getElementsByTagName("body")[0].firstChild);
|
document.getElementsByTagName("body")[0].insertBefore(div, document.getElementsByTagName("body")[0].firstChild);
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
15
calendar.js
15
calendar.js
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
* Original: http://www.openjs.com/scripts/ui/calendar/
|
* Original: http://www.openjs.com/scripts/ui/calendar/
|
||||||
* Modified: http://yourcmc.ru/git/vitalif-js/calendar
|
* Modified: http://yourcmc.ru/git/vitalif-js/calendar
|
||||||
* Version: 2018-11-04
|
* Version: 2019-07-16
|
||||||
* License: MIT-like, http://www.openjs.com/license.php
|
* License: MIT-like, http://www.openjs.com/license.php
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
|
@ -81,12 +81,12 @@ export class Calendar
|
||||||
selectDate(year, month, day)
|
selectDate(year, month, day)
|
||||||
{
|
{
|
||||||
var i = this.input;
|
var i = this.input;
|
||||||
var t = i.value.split(/[\s]+/, 2)[1]||'';
|
var t = i.value.split(/\s+/, 2)[1]||'';
|
||||||
if (this.callback)
|
if (this.callback)
|
||||||
{
|
{
|
||||||
// Safari does not understand new Date('YYYY-MM-DD HH:MM:SS')
|
// Safari does not understand new Date('YYYY-MM-DD HH:MM:SS')
|
||||||
t = t ? t.split(/:/) : null;
|
t = t ? t.split(/:/) : [ 0, 0, 0 ];
|
||||||
t = t ? new Date(year-0, month-1, day-0, t[0]-0, t[1]-0, t[2]-0) : new Date(year-0, month-1, day-0);
|
t = new Date(year-0, month-1, day-0, t[0]-0, t[1]-0, t[2]-0);
|
||||||
var c = this.callback;
|
var c = this.callback;
|
||||||
c(t);
|
c(t);
|
||||||
}
|
}
|
||||||
|
@ -332,6 +332,11 @@ export class Calendar
|
||||||
input_or_id.addEventListener('focus', function(ev) {
|
input_or_id.addEventListener('focus', function(ev) {
|
||||||
instance.showCalendar();
|
instance.showCalendar();
|
||||||
});
|
});
|
||||||
|
input_or_id.addEventListener('blur', function(ev) {
|
||||||
|
if (!instance.stopBlur || instance.stopBlur < Date.now()-200) {
|
||||||
|
instance.hideCalendar();
|
||||||
|
}
|
||||||
|
});
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,6 +354,8 @@ export class Calendar
|
||||||
ev.stopPropagation();
|
ev.stopPropagation();
|
||||||
else
|
else
|
||||||
ev.cancelBubble = true;
|
ev.cancelBubble = true;
|
||||||
|
if (Calendar.instance)
|
||||||
|
Calendar.instance.stopBlur = Date.now();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
document.getElementsByTagName("body")[0].insertBefore(div,document.getElementsByTagName("body")[0].firstChild);
|
document.getElementsByTagName("body")[0].insertBefore(div,document.getElementsByTagName("body")[0].firstChild);
|
||||||
|
|
Loading…
Reference in New Issue