-
Notifications
You must be signed in to change notification settings - Fork 0
/
datepicker.js
89 lines (83 loc) · 2.68 KB
/
datepicker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
Backbone-Forms jQuery UI datepicker editor 1.0.0
Copyright (c) 2016 Tomasz Jakub Rup
https://github.com/tomi77/backbone-forms-jquery-ui
Released under the MIT license
*/
(function(root, factory) {
/* istanbul ignore next */
switch (false) {
case !(typeof define === 'function' && define.amd):
define(['underscore', 'backbone-forms', 'jquery-ui/widgets/datepicker'], factory);
break;
case typeof exports !== 'object':
require('jquery-ui/widgets/datepicker');
factory(require('underscore'), require('backbone-forms'));
break;
default:
factory(root._, root.Backbone.Form);
}
})(this, function(_, Form) {
Form.editors['jqueryui.datepicker'] = Form.Editor.extend({
className: 'bbf-jui-datepicker',
tagName: 'input',
initialize: function(options) {
var prevBeforeShow, prevOnClose, prevOnSelect;
Form.editors.Base.prototype.initialize.call(this, options);
this.editorOptions = this.schema.editorOptions || {};
prevOnSelect = this.editorOptions.onSelect;
this.editorOptions.onSelect = (function(_this) {
return function(dateText, inst) {
_this.trigger('change', _this, dateText, inst);
if (prevOnSelect) {
prevOnSelect.call(_this.el, dateText, inst);
}
};
})(this);
prevOnClose = this.editorOptions.onClose;
this.editorOptions.onClose = (function(_this) {
return function(dateText, inst) {
_this.trigger('blur', _this, dateText, inst);
if (prevOnClose) {
prevOnClose.call(_this.el, dateText, inst);
}
};
})(this);
prevBeforeShow = this.editorOptions.beforeShow;
this.editorOptions.beforeShow = (function(_this) {
return function(input, inst) {
_this.trigger('focus', _this, input, inst);
if (prevBeforeShow) {
return prevBeforeShow.call(_this.el, input, inst);
}
return {};
};
})(this);
this.value = (function() {
switch (false) {
case !(this.value && _.isDate(this.value)):
return this.value;
case !(this.value && _.isString(this.value)):
return new Date(this.value);
default:
return new Date();
}
}).call(this);
this.$el.attr('type', 'text');
},
render: function() {
this.$el.datepicker(this.editorOptions);
this.setValue(this.value);
return this;
},
/*
@return {Date} Selected date
*/
getValue: function() {
return this.$el.datepicker('getDate');
},
setValue: function(value) {
this.$el.datepicker('setDate', value);
}
});
});