Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Jan 6, 2020. It is now read-only.

Commit f58b871

Browse files
authored
Merge pull request #218 from fireflylearning/sjm-ff_module-date-picker-jumpto-ALT
Date picker wrapped in function to pass options - make more dynamic
2 parents 6e18cf7 + 9522f21 commit f58b871

1 file changed

Lines changed: 81 additions & 69 deletions

File tree

Lines changed: 81 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,93 @@
11
'use strict';
22
var $ = require('jquery');
3+
var docVal = (typeof window !== 'undefined' && window.document) ? window.document : 'document';
34

4-
module.exports = function() {
5-
$(function() {
6-
$.extend($.datepicker,{_checkOffset:function(inst,offset,isFixed){return offset}});
7-
return $('[data-ff="date-picker"]').each(function(index, element) {
8-
var valueFormat = "yy-mm-dd";
9-
10-
var displayElement = $(document.getElementById($(element).attr("data-ff-target-input-id")));
11-
if (displayElement) {
12-
var displayFormat = $(element).attr("data-ff-display-format") || valueFormat;
13-
var valueElement = $("<input type='hidden'>");
14-
valueElement.attr("name", displayElement.attr("name"));
15-
displayElement.attr("name", null);
16-
displayElement.after(valueElement);
17-
18-
updateTarget(displayElement.val());
5+
var _options = {
6+
root: docVal,
7+
selector: 'data-ff=date-picker',
8+
displayElement: 'data-ff-target-input-id'
9+
}
10+
11+
function activateDatePickerJumpTo(options) {
12+
13+
$.extend($.datepicker,{_checkOffset: function(inst, offset, isFixed){return offset}});
14+
15+
return $('['+options.selector+']', options.root).each(function(index, element) {
16+
17+
var valueFormat = "yy-mm-dd";
18+
var displayElement = $(document.getElementById( $(element).attr(options.displayElement)) );
19+
20+
if (displayElement) {
21+
var displayFormat = $(element).attr("data-ff-display-format") || valueFormat;
22+
var valueElement = $("<input type='hidden'>");
23+
valueElement.attr("name", displayElement.attr("name"));
24+
displayElement.attr("name", null);
25+
displayElement.after(valueElement);
26+
updateTarget(displayElement.val());
27+
}
28+
29+
function updateTarget(date) {
30+
if (!isNaN(Date.parse(date))) {
31+
valueElement.val(date);
32+
var displayDate = $.datepicker.formatDate(displayFormat, new Date(date));
33+
displayElement.val(displayDate);
1934
}
20-
21-
function updateTarget(date) {
22-
23-
if (!isNaN(Date.parse(date))) {
24-
valueElement.val(date);
25-
var displayDate = $.datepicker.formatDate(displayFormat, new Date(date));
26-
displayElement.val(displayDate);
35+
}
36+
37+
$(element).datepicker({
38+
dateFormat: valueFormat,
39+
onSelect: function(date) {
40+
if (displayElement) {
41+
updateTarget(date);
2742
}
28-
}
29-
30-
$(element).datepicker({
31-
dateFormat: valueFormat,
32-
onSelect: function(date) {
33-
if (displayElement) {
34-
updateTarget(date);
35-
}
36-
if ($(element).attr("data-ff-url-prefix")) {
37-
location.href = $(element).attr("data-ff-url-prefix") + date;
38-
}
39-
},
40-
beforeShow: function(input, inst) {
41-
$(inst.dpDiv).addClass('ff_module-date-picker-calendar');
42-
setTimeout(function () {
43-
var curr_left = inst.dpDiv.css('left');
44-
var curr_right = inst.dpDiv.css('right');
45-
var curr_top = inst.dpDiv.css('top');
43+
if ($(element).attr("data-ff-url-prefix")) {
44+
location.href = $(element).attr("data-ff-url-prefix") + date;
45+
}
46+
},
47+
beforeShow: function(input, inst) {
48+
$(inst.dpDiv).addClass('ff_module-date-picker-calendar');
49+
setTimeout(function () {
50+
var curr_left = inst.dpDiv.css('left');
51+
var curr_right = inst.dpDiv.css('right');
52+
var curr_top = inst.dpDiv.css('top');
4653

47-
var new_left = 50 + parseInt(curr_left);
48-
var new_right = 50 + parseInt(curr_right);
49-
var new_top = parseInt(curr_top) - 40;
50-
51-
// console.log(new_left,new_right);
54+
var new_left = 50 + parseInt(curr_left);
55+
var new_right = 50 + parseInt(curr_right);
56+
var new_top = parseInt(curr_top) - 40;
57+
58+
// console.log(new_left,new_right);
5259

53-
if(curr_left != 'auto') {inst.dpDiv.css({'left': new_left, 'top': new_top, 'z-index': 5});}
54-
if(curr_right != 'auto') {inst.dpDiv.css({'right': new_right, 'top': new_top, 'z-index': 5});}
60+
if(curr_left != 'auto') {inst.dpDiv.css({'left': new_left, 'top': new_top, 'z-index': 5});}
61+
if(curr_right != 'auto') {inst.dpDiv.css({'right': new_right, 'top': new_top, 'z-index': 5});}
5562

56-
ensureElementIsFullyContainedByWindow(inst.dpDiv);
57-
}, 0);
58-
}
59-
});
63+
ensureElementIsFullyContainedByWindow(inst.dpDiv);
64+
}, 0);
65+
}
6066
});
67+
});
68+
69+
function ensureElementIsFullyContainedByWindow(element) {
70+
var buffer = 20;
71+
var offset = element.offset();
72+
var bottom = offset.top + element.outerHeight();
73+
var right = offset.left + element.outerWidth();
74+
var boundingBox = {
75+
bottom: $(window).scrollTop() + $(window).height() - buffer,
76+
right: $(window).scrollLeft() + $(window).width() - buffer
77+
};
6178

62-
function ensureElementIsFullyContainedByWindow(element) {
63-
var buffer = 20;
64-
var offset = element.offset();
65-
var bottom = offset.top + element.outerHeight();
66-
var right = offset.left + element.outerWidth();
67-
var boundingBox = {
68-
bottom: $(window).scrollTop() + $(window).height() - buffer,
69-
right: $(window).scrollLeft() + $(window).width() - buffer
70-
};
71-
72-
if (bottom > boundingBox.bottom) {
73-
element.css({top: boundingBox.bottom - element.outerHeight()});
74-
}
75-
if (right > boundingBox.right) {
76-
element.css({left: boundingBox.right - element.outerWidth()});
77-
}
79+
if (bottom > boundingBox.bottom) {
80+
element.css({top: boundingBox.bottom - element.outerHeight()});
7881
}
79-
});
82+
if (right > boundingBox.right) {
83+
element.css({left: boundingBox.right - element.outerWidth()});
84+
}
85+
}
86+
}
8087

81-
};
88+
module.exports = function(options) {
89+
options = $.extend({}, _options, options);
90+
$(function() {
91+
activateDatePickerJumpTo(options);
92+
});
93+
};

0 commit comments

Comments
 (0)