Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/core/behavior-fancy-datepicker.js
/** | /** | ||||
* @provides javelin-behavior-fancy-datepicker | * @provides javelin-behavior-fancy-datepicker | ||||
* @requires javelin-behavior | * @requires javelin-behavior | ||||
* javelin-util | * javelin-util | ||||
* javelin-dom | * javelin-dom | ||||
* javelin-stratcom | * javelin-stratcom | ||||
* javelin-vector | * javelin-vector | ||||
*/ | */ | ||||
JX.behavior('fancy-datepicker', function(config, statics) { | JX.behavior('fancy-datepicker', function(config, statics) { | ||||
if (statics.initialized) { | if (statics.initialized) { | ||||
return; | return; | ||||
} | } | ||||
statics.initialized = true; | statics.initialized = true; | ||||
var picker; | var picker; | ||||
var anchor_node; | |||||
var root; | var root; | ||||
var value_y; | var value_y; | ||||
var value_m; | var value_m; | ||||
var value_d; | var value_d; | ||||
var get_format_separator = function() { | var get_format_separator = function() { | ||||
var format = get_format(); | var format = get_format(); | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | if (picker) { | ||||
} | } | ||||
} | } | ||||
root = e.getNode('phabricator-date-control'); | root = e.getNode('phabricator-date-control'); | ||||
picker = JX.$N( | picker = JX.$N( | ||||
'div', | 'div', | ||||
{className: 'fancy-datepicker', sigil: 'phabricator-datepicker'}, | { | ||||
JX.$N('div', {className: 'fancy-datepicker-core'})); | className: 'fancy-datepicker', | ||||
sigil: 'phabricator-datepicker' | |||||
}, | |||||
JX.$N( | |||||
'div', | |||||
{ | |||||
className: 'fancy-datepicker-core', | |||||
sigil: 'fancy-datepicker-core' | |||||
})); | |||||
document.body.appendChild(picker); | document.body.appendChild(picker); | ||||
var button = e.getNode('calendar-button'); | anchor_node = e.getNode('calendar-button'); | ||||
var p = JX.$V(button); | |||||
var d = JX.Vector.getDim(picker); | |||||
picker.style.left = (p.x - d.x - 2) + 'px'; | |||||
picker.style.top = (p.y) + 'px'; | |||||
JX.DOM.alterClass(root, 'picker-open', true); | JX.DOM.alterClass(root, 'picker-open', true); | ||||
JX.Mask.show('jx-date-mask'); | |||||
read_date(); | read_date(); | ||||
render(); | render(); | ||||
}; | }; | ||||
var onclose = function(e) { | var onclose = function(e) { | ||||
if (!picker) { | if (!picker) { | ||||
return; | return; | ||||
} | } | ||||
JX.Mask.hide('jx-date-mask'); | |||||
JX.DOM.remove(picker); | JX.DOM.remove(picker); | ||||
picker = null; | picker = null; | ||||
JX.DOM.alterClass(root, 'picker-open', false); | JX.DOM.alterClass(root, 'picker-open', false); | ||||
if (e) { | if (e) { | ||||
e.kill(); | e.kill(); | ||||
} | } | ||||
root = null; | root = null; | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | for(var j=0; j < arr_values.length; j++) { | ||||
text_value = text_value + separator + element; | text_value = text_value + separator + element; | ||||
} | } | ||||
} | } | ||||
inputs.d.value = text_value; | inputs.d.value = text_value; | ||||
}; | }; | ||||
var render = function() { | var render = function() { | ||||
if (!picker) { | |||||
return; | |||||
} | |||||
var button = anchor_node; | |||||
var p = JX.$V(button); | |||||
var d = JX.Vector.getDim(picker); | |||||
var b = JX.Vector.getDim(button); | |||||
if (JX.Device.isDesktop()) { | |||||
picker.style.top = (p.y) + 'px'; | |||||
picker.style.left = (p.x - d.x - 2) + 'px'; | |||||
} else { | |||||
picker.style.top = (p.y + b.y) + 'px'; | |||||
picker.style.left = ''; | |||||
} | |||||
JX.DOM.setContent( | JX.DOM.setContent( | ||||
picker.firstChild, | picker.firstChild, | ||||
[ | [ | ||||
render_month(), | render_month(), | ||||
render_day() | render_day() | ||||
]); | ]); | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 194 Lines • ▼ Show 20 Lines | function(e) { | ||||
// Enable the control. | // Enable the control. | ||||
JX.Stratcom.getData(root).disabled = false; | JX.Stratcom.getData(root).disabled = false; | ||||
redraw_inputs(); | redraw_inputs(); | ||||
render(); | render(); | ||||
}); | }); | ||||
JX.Stratcom.listen('click', null, function(e){ | JX.Stratcom.listen('click', null, function(e){ | ||||
if (e.getNode('phabricator-datepicker')) { | if (e.getNode('phabricator-datepicker-core')) { | ||||
return; | return; | ||||
} | } | ||||
onclose(); | onclose(); | ||||
}); | }); | ||||
JX.Stratcom.listen('resize', null, render); | |||||
}); | }); |