Y.extend(Filter, Y.QueryBuilder, {
initializer: function() {
},
renderUI: function() {
// Add the Apply button to the end of filter constraints.
Filter.superclass.renderUI.apply(this);
var content = this.get("contentBox");
content.append('<button class="gf-filter-apply" type="button">' + this.get("applyText") + '</button>');
},
count:0,
appendNew:function(){
Filter.superclass.appendNew.apply(this, arguments);
var selectNode=Y.all(".yui3-filter-variable .yui3-filter-field").item(this.count++);
selectNode.on("change",function(e,selectNode){
this.fire("selectChange",{payload:selectNode});
},this,selectNode);
},
destructor : function() {
}
});
//And I am using this new filter something like
this.dateVars=[START_DATE,END_DATE] //this is the array of key that require date
if(this.dateVars){
this._createDatePicker();
this.filter.on("selectChange",function(e){
this._calendarHandling(e.payload,e.payload.get("value"));
},this)
}
_createDatePicker:function(){
var WIDTH = "150px";
var HEIGHT = "150px"
var overlay = new Y.Overlay({
height:HEIGHT,
width:WIDTH,
visible:false
});
overlay.render("#workspace");
overlay.get("boundingBox").addClass("yui3-skin-sam");
this.overlay = overlay;
var currentDate = this.currentDate;
var calendar = new Y.Calendar({
height:HEIGHT,
width:WIDTH,
visible:true,
showPrevMonth: true,
showNextMonth: true,
date:currentDate }).render();
var dtdate = Y.DataType.Date;
var self = this;
calendar.selectDates(currentDate);
calendar.on("selectionChange", function (ev) {
var newDate = ev.newSelection[0];
self.dateNode.set("value",dtdate.format(newDate,{format:"%B %d %Y"}));
overlay.hide();
});
overlay.set("bodyContent",calendar.get("boundingBox"));
},
_calendarHandling:function(node,key){
if(!this._isDateVars(key)){
return;
}
var dtdate = Y.DataType.Date
var textNode = node.get("parentNode").get("parentNode").one("input");
textNode.set("value",dtdate.format(this.currentDate,{format:"%B %d %Y"}));
var WidgetPositionAlign = Y.WidgetPositionAlign;
textNode.on("click",function(e,textNode){
this.overlay.show();
this.overlay.set("align", {node:textNode, points:[WidgetPositionAlign.TC, WidgetPositionAlign.RC]});
this.dateNode = textNode;
},this,textNode);
},
_isDateVars:function(key){
for(i=0;i<this.dateVars.length;i++){
if(this.dateVars[i]==key){
return true;
}
}
return false;
}
ICAgWS5leHRlbmQoRmlsdGVyLCBZLlF1ZXJ5QnVpbGRlciwgewogICAgICAgICBpbml0aWFsaXplcjogZnVuY3Rpb24oKSB7CiAgICAgICAgfSwKICAgICAgICByZW5kZXJVSTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIC8vIEFkZCB0aGUgQXBwbHkgYnV0dG9uIHRvIHRoZSBlbmQgb2YgZmlsdGVyIGNvbnN0cmFpbnRzLgogICAgICAgICAgICBGaWx0ZXIuc3VwZXJjbGFzcy5yZW5kZXJVSS5hcHBseSh0aGlzKTsKICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLmdldCgiY29udGVudEJveCIpOwogICAgICAgICAgICBjb250ZW50LmFwcGVuZCgnPGJ1dHRvbiBjbGFzcz0iZ2YtZmlsdGVyLWFwcGx5IiB0eXBlPSJidXR0b24iPicgKyB0aGlzLmdldCgiYXBwbHlUZXh0IikgKyAnPC9idXR0b24+Jyk7ICAgICAgICAgICAgCiAgICAgICAgfSwgIAogICAgICAgIGNvdW50OjAsCiAgICAgICAgYXBwZW5kTmV3OmZ1bmN0aW9uKCl7CiAgICAgICAgCSBGaWx0ZXIuc3VwZXJjbGFzcy5hcHBlbmROZXcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgIHZhciBzZWxlY3ROb2RlPVkuYWxsKCIueXVpMy1maWx0ZXItdmFyaWFibGUgLnl1aTMtZmlsdGVyLWZpZWxkIikuaXRlbSh0aGlzLmNvdW50KyspOwogICAgICAgICAgICAgc2VsZWN0Tm9kZS5vbigiY2hhbmdlIixmdW5jdGlvbihlLHNlbGVjdE5vZGUpewogICAgICAgICAgICAJIHRoaXMuZmlyZSgic2VsZWN0Q2hhbmdlIix7cGF5bG9hZDpzZWxlY3ROb2RlfSk7CiAgICAgICAgICAgICB9LHRoaXMsc2VsZWN0Tm9kZSk7CiAgICAgICAgfSwKICAgICAgICBkZXN0cnVjdG9yIDogZnVuY3Rpb24oKSB7CiAgICAgICAgfSAgICAgCiAgICB9KTsKLy9BbmQgSSBhbSB1c2luZyB0aGlzIG5ldyBmaWx0ZXIgc29tZXRoaW5nIGxpa2UKCnRoaXMuZGF0ZVZhcnM9W1NUQVJUX0RBVEUsRU5EX0RBVEVdIC8vdGhpcyBpcyB0aGUgYXJyYXkgb2Yga2V5IHRoYXQgcmVxdWlyZSBkYXRlCiBpZih0aGlzLmRhdGVWYXJzKXsKICAgICAgICAgICAgCXRoaXMuX2NyZWF0ZURhdGVQaWNrZXIoKTsKICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyLm9uKCJzZWxlY3RDaGFuZ2UiLGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgCXRoaXMuX2NhbGVuZGFySGFuZGxpbmcoZS5wYXlsb2FkLGUucGF5bG9hZC5nZXQoInZhbHVlIikpOwogICAgICAgICAgICAgICAgfSx0aGlzKQogfQoKICAgICAgICBfY3JlYXRlRGF0ZVBpY2tlcjpmdW5jdGlvbigpewogICAgICAgIAl2YXIgV0lEVEggPSAiMTUwcHgiOwogICAgICAgIAl2YXIgSEVJR0hUID0gIjE1MHB4IgogICAgICAgICAgICB2YXIgb3ZlcmxheSA9IG5ldyBZLk92ZXJsYXkoewogICAgICAgICAgICAgICAgaGVpZ2h0OkhFSUdIVCwKICAgICAgICAgICAgICAgIHdpZHRoOldJRFRILAogICAgICAgICAgICAgICAgdmlzaWJsZTpmYWxzZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgb3ZlcmxheS5yZW5kZXIoIiN3b3Jrc3BhY2UiKTsKICAgICAgICAgICAgb3ZlcmxheS5nZXQoImJvdW5kaW5nQm94IikuYWRkQ2xhc3MoInl1aTMtc2tpbi1zYW0iKTsKICAgICAgICAgICAgdGhpcy5vdmVybGF5ID0gb3ZlcmxheTsKICAgICAgICAgICAgdmFyIGN1cnJlbnREYXRlID0gdGhpcy5jdXJyZW50RGF0ZTsKICAgICAgICAgICAgdmFyIGNhbGVuZGFyID0gbmV3IFkuQ2FsZW5kYXIoewogICAgICAgICAgICAgICAgaGVpZ2h0OkhFSUdIVCwKICAgICAgICAgICAgICAgIHdpZHRoOldJRFRILAogICAgICAgICAgICAgICAgdmlzaWJsZTp0cnVlLAogICAgICAgICAgICAgICAgc2hvd1ByZXZNb250aDogdHJ1ZSwKICAgICAgICAgICAgICAgIHNob3dOZXh0TW9udGg6IHRydWUsCiAgICAgICAgICAgICAgICBkYXRlOmN1cnJlbnREYXRlIH0pLnJlbmRlcigpOwogICAgICAgICAgICB2YXIgZHRkYXRlID0gWS5EYXRhVHlwZS5EYXRlOwogICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgIGNhbGVuZGFyLnNlbGVjdERhdGVzKGN1cnJlbnREYXRlKTsKICAgICAgICAgICAgY2FsZW5kYXIub24oInNlbGVjdGlvbkNoYW5nZSIsIGZ1bmN0aW9uIChldikgewogICAgICAgICAgICAgIHZhciBuZXdEYXRlID0gZXYubmV3U2VsZWN0aW9uWzBdOwogICAgICAgICAgICAgIHNlbGYuZGF0ZU5vZGUuc2V0KCJ2YWx1ZSIsZHRkYXRlLmZvcm1hdChuZXdEYXRlLHtmb3JtYXQ6IiVCICVkICVZIn0pKTsKICAgICAgICAgICAgICBvdmVybGF5LmhpZGUoKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIG92ZXJsYXkuc2V0KCJib2R5Q29udGVudCIsY2FsZW5kYXIuZ2V0KCJib3VuZGluZ0JveCIpKTsKICAgICAgICB9LAogICAgICAgIF9jYWxlbmRhckhhbmRsaW5nOmZ1bmN0aW9uKG5vZGUsa2V5KXsKICAgICAgICAJaWYoIXRoaXMuX2lzRGF0ZVZhcnMoa2V5KSl7CiAgICAgICAgCQlyZXR1cm47CiAgICAgICAgCX0KICAgICAgICAJdmFyIGR0ZGF0ZSA9IFkuRGF0YVR5cGUuRGF0ZQogICAgICAgIAl2YXIgdGV4dE5vZGUgPSBub2RlLmdldCgicGFyZW50Tm9kZSIpLmdldCgicGFyZW50Tm9kZSIpLm9uZSgiaW5wdXQiKTsKICAgICAgICAJdGV4dE5vZGUuc2V0KCJ2YWx1ZSIsZHRkYXRlLmZvcm1hdCh0aGlzLmN1cnJlbnREYXRlLHtmb3JtYXQ6IiVCICVkICVZIn0pKTsKICAgICAgICAJdmFyIFdpZGdldFBvc2l0aW9uQWxpZ24gPSBZLldpZGdldFBvc2l0aW9uQWxpZ247CiAgICAgICAgCXRleHROb2RlLm9uKCJjbGljayIsZnVuY3Rpb24oZSx0ZXh0Tm9kZSl7CiAgICAgICAgCQl0aGlzLm92ZXJsYXkuc2hvdygpOwogICAgICAgIAkJdGhpcy5vdmVybGF5LnNldCgiYWxpZ24iLCB7bm9kZTp0ZXh0Tm9kZSwgcG9pbnRzOltXaWRnZXRQb3NpdGlvbkFsaWduLlRDLCBXaWRnZXRQb3NpdGlvbkFsaWduLlJDXX0pOwogICAgICAgIAkJdGhpcy5kYXRlTm9kZSA9IHRleHROb2RlOwogICAgICAgIAkJfSx0aGlzLHRleHROb2RlKTsKCiAgICAgICAgfSwKICAgICAgICBfaXNEYXRlVmFyczpmdW5jdGlvbihrZXkpewogICAgICAgIAlmb3IoaT0wO2k8dGhpcy5kYXRlVmFycy5sZW5ndGg7aSsrKXsKICAgICAgICAJCWlmKHRoaXMuZGF0ZVZhcnNbaV09PWtleSl7CiAgICAgICAgCQkJcmV0dXJuIHRydWU7CiAgICAgICAgCQl9CiAgICAgICAgCX0KICAgICAgICAJcmV0dXJuIGZhbHNlOwogICAgICAgIH0=