Skip to content

Commit b52c2a6

Browse files
authored
Merge pull request #65 from sterliakov/add_jquery_method
Expose djangoDatetimePicker as jQuery method
2 parents 2bbde52 + 213c39e commit b52c2a6

File tree

1 file changed

+74
-51
lines changed

1 file changed

+74
-51
lines changed
Lines changed: 74 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,78 @@
1-
jQuery(function ($) {
2-
var datepickerDict = {};
3-
var isBootstrap4 = $.fn.collapse.Constructor.VERSION.split('.').shift() == "4";
4-
function fixMonthEndDate(e, picker) {
5-
e.date && picker.val().length && picker.val(e.date.endOf('month').format('YYYY-MM-DD'));
1+
(function (factory) {
2+
if (typeof define === 'function' && define.amd)
3+
define(['jquery'], factory)
4+
else if (typeof module === 'object' && module.exports)
5+
module.exports = factory(require('jquery'))
6+
else
7+
factory(jQuery)
8+
}(function ($) {
9+
var datepickerDict = {};
10+
var isBootstrap4 = $.fn.collapse.Constructor.VERSION.split('.').shift() === "4";
11+
function fixMonthEndDate(e, picker) {
12+
e.date && picker.val().length && picker.val(e.date.endOf('month').format('YYYY-MM-DD'));
13+
}
14+
function initOnePicker(element, options) {
15+
var $element = $(element), data = {};
16+
try {
17+
data = JSON.parse($element.attr('dp_config'));
618
}
7-
$("[dp_config]:not([disabled])").each(function (i, element) {
8-
var $element = $(element), data = {};
9-
try {
10-
data = JSON.parse($element.attr('dp_config'));
11-
}
12-
catch (x) { }
13-
if (data.id && data.options) {
14-
data.$element = $element.datetimepicker(data.options);
15-
data.datepickerdata = $element.data("DateTimePicker");
16-
datepickerDict[data.id] = data;
17-
data.$element.next('.input-group-addon').on('click', function(){
18-
data.datepickerdata.show();
19-
});
20-
if(isBootstrap4){
21-
data.$element.on("dp.show", function (e) {
22-
$('.collapse.in').addClass('show');
23-
});
24-
}
25-
}
19+
catch (x) { }
20+
$.extend(1, data.options, options);
21+
if (data.id && data.options) {
22+
data.$element = $element.datetimepicker(data.options);
23+
data.datepickerdata = $element.data("DateTimePicker");
24+
data.$element.next('.input-group-addon').on('click', function() {
25+
data.datepickerdata.show();
26+
});
27+
if (isBootstrap4) {
28+
data.$element.on("dp.show", function(e) {
29+
$('.collapse.in').addClass('show');
30+
});
31+
}
32+
}
33+
return data;
34+
};
35+
function initLinkedPickers(to_picker) {
36+
var from_picker = datepickerDict[to_picker.linked_to];
37+
from_picker.datepickerdata.maxDate(to_picker.datepickerdata.date() || false);
38+
to_picker.datepickerdata.minDate(from_picker.datepickerdata.date() || false);
39+
from_picker.$element.on("dp.change", function (e) {
40+
to_picker.datepickerdata.minDate(e.date || false);
2641
});
27-
$.each(datepickerDict, function (id, to_picker) {
28-
if (to_picker.linked_to) {
29-
var from_picker = datepickerDict[to_picker.linked_to];
30-
from_picker.datepickerdata.maxDate(to_picker.datepickerdata.date() || false);
31-
to_picker.datepickerdata.minDate(from_picker.datepickerdata.date() || false);
32-
from_picker.$element.on("dp.change", function (e) {
33-
to_picker.datepickerdata.minDate(e.date || false);
34-
});
35-
to_picker.$element.on("dp.change", function (e) {
36-
if (to_picker.picker_type == 'MONTH') fixMonthEndDate(e, to_picker.$element);
37-
from_picker.datepickerdata.maxDate(e.date || false);
38-
});
39-
if (to_picker.picker_type == 'MONTH') {
40-
to_picker.$element.on("dp.hide", function (e) {
41-
fixMonthEndDate(e, to_picker.$element);
42-
});
43-
fixMonthEndDate({ date: to_picker.datepickerdata.date() }, to_picker.$element);
44-
}
45-
}
42+
to_picker.$element.on("dp.change", function (e) {
43+
if (to_picker.picker_type == 'MONTH') fixMonthEndDate(e, to_picker.$element);
44+
from_picker.datepickerdata.maxDate(e.date || false);
4645
});
47-
if(isBootstrap4) {
48-
$('body').on('show.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){
49-
$(e.target).addClass('in');
50-
});
51-
$('body').on('hidden.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){
52-
$(e.target).removeClass('in');
53-
});
46+
if (to_picker.picker_type == 'MONTH') {
47+
to_picker.$element.on("dp.hide", function (e) {
48+
fixMonthEndDate(e, to_picker.$element);
49+
});
50+
fixMonthEndDate({ date: to_picker.datepickerdata.date() }, to_picker.$element);
51+
}
52+
};
53+
$.fn.djangoDatetimePicker = function(options){
54+
options = options || {};
55+
var newPickers = {};
56+
$.each(this, function (i, element) {
57+
var picker = initOnePicker($(element), options);
58+
newPickers[picker.id] = picker;
59+
});
60+
$.extend(datepickerDict, newPickers);
61+
$.each(newPickers, function (i, picker) {
62+
if (picker.linked_to)
63+
initLinkedPickers(picker);
64+
});
65+
return this;
66+
}
67+
$(function(){
68+
$("[dp_config]:not([disabled])").djangoDatetimePicker();
69+
if (isBootstrap4) {
70+
$('body').on('show.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){
71+
$(e.target).addClass('in');
72+
});
73+
$('body').on('hidden.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){
74+
$(e.target).removeClass('in');
75+
});
5476
}
55-
});
77+
});
78+
}));

0 commit comments

Comments
 (0)