From 1e59b675fdb39e978759251e762232713116dd89 Mon Sep 17 00:00:00 2001 From: Hugh Messenger Date: Fri, 6 Feb 2015 15:52:13 -0600 Subject: [PATCH] ixed issue where JS events weren't getting renewed on CDD change. --- .../fabrik_element/cascadingdropdown/cascadingdropdown-min.js | 2 +- plugins/fabrik_element/cascadingdropdown/cascadingdropdown.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/fabrik_element/cascadingdropdown/cascadingdropdown-min.js b/plugins/fabrik_element/cascadingdropdown/cascadingdropdown-min.js index b1103aca5e6..0ae6ffa46f0 100644 --- a/plugins/fabrik_element/cascadingdropdown/cascadingdropdown-min.js +++ b/plugins/fabrik_element/cascadingdropdown/cascadingdropdown-min.js @@ -1 +1 @@ -var FbCascadingdropdown=new Class({Extends:FbDatabasejoin,initialize:function(b,a){this.ignoreAjax=false;this.parent(b,a);this.plugin="cascadingdropdown";if(document.id(this.options.watch)){this.doChangeEvent=this.doChange.bind(this);document.id(this.options.watch).addEvent("change",this.doChangeEvent)}if(this.options.showDesc===true){this.element.addEvent("change",function(c){this.showDesc(c)}.bind(this))}if(typeOf(this.element)!=="null"){this.spinner=new Spinner(this.element.getParent(".fabrikElementContainer"))}},attachedToForm:function(){if(this.ignoreAjax||(this.options.editable&&!this.options.editing)){var a=this.form.formElements.get(this.options.watch).getValue();this.change(a,document.id(this.options.watch).id)}},dowatch:function(b){var a=Fabrik.blocks[this.form.form.id].formElements[this.options.watch].getValue();this.change(a,b.target.id)},doChange:function(a){if(this.options.displayType==="auto-complete"){this.element.value="";this.getAutoCompleteLabelField().value=""}this.dowatch(a)},change:function(b,f){if(window.ie){if(this.options.repeatCounter.toInt()===0){var d=f.substr(f.length-2,1);var c=f.substr(f.length-1,1);if(d==="_"&&typeOf(parseInt(c,10))==="number"&&c!=="0"){return}}}this.spinner.show();var a=this.form.getFormElementData();var e={option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"cascadingdropdown",method:"ajax_getOptions",element_id:this.options.id,v:b,formid:this.form.id,fabrik_cascade_ajax_update:1,lang:this.options.lang};e=Object.append(a,e);if(this.myAjax){this.myAjax.cancel()}this.myAjax=new Request({url:"",method:"post",data:e,onComplete:function(){this.spinner.hide()}.bind(this),onSuccess:function(h){var j=this.options.def,g,m;this.spinner.hide();this.setValue(this.getValue());h=JSON.decode(h);if(this.options.editable){this.destroyElement()}else{this.element.getElements("div").destroy()}if(this.options.showDesc===true){m=this.getContainer().getElement(".dbjoin-description");m.empty()}this.myAjax=null;var l=h.length===1;if(!this.ignoreAjax){h.each(function(n){if(this.options.editable===false){n.text=n.text.replace(/\n/g,"
");new Element("div").set("html",n.text).inject(this.element)}else{g=(n.value!==""&&n.value===this.getValue())||l;this.addOption(n.value,n.text,g)}if(this.options.showDesc===true&&n.description){var o=this.options.showPleaseSelect?"notice description-"+(k):"notice description-"+(k-1);new Element("div",{styles:{display:"none"},"class":o}).set("html",n.description).inject(m)}}.bind(this))}else{if(this.options.showPleaseSelect&&h.length>0){var i=h.shift();if(this.options.editable===false){new Element("div").set("text",i.text).inject(this.element)}else{g=(i.value!==""&&i.value===this.getValue())||l;this.addOption(i.value,i.text,g);new Element("option",{value:i.value,selected:"selected"}).set("text",i.text).inject(this.element)}}}this.ignoreAjax=false;if(this.options.editable&&this.options.displayType==="dropdown"){if(this.element.options.length===1){this.element.addClass("readonly")}else{this.element.removeClass("readonly")}}if(!this.ignoreAjax){this.ingoreShowDesc=true;this.element.fireEvent("change",new Event.Mock(this.element,"change"));this.ingoreShowDesc=false}this.ignoreAjax=false;Fabrik.fireEvent("fabrik.cdd.update",this)}.bind(this),onFailure:function(g){console.log(this.myAjax.getHeader("Status"))}.bind(this)}).send()},destroyElement:function(){switch(this.options.displayType){case"radio":case"checkbox":this.getContainer().getElements(".fabrik_subelement").destroy();break;case"dropdown":default:this.element.empty();break}},cloned:function(a){this.myAjax=null;this.parent(a);this.spinner=new Spinner(this.element.getParent(".fabrikElementContainer"));if(document.id(this.options.watch)){if(this.options.watchInSameGroup===true){if(this.options.watch.test(/_(\d+)$/)){this.options.watch=this.options.watch.replace(/_(\d+)$/,"_"+a)}else{this.options.watch=this.options.watch+"_"+a}}if(document.id(this.options.watch)){if(this.options.watchInSameGroup){document.id(this.options.watch).removeEvent("change",this.doChangeEvent)}this.doChangeEvent=this.doChange.bind(this);document.id(this.options.watch).addEvent("change",this.doChangeEvent)}}if(this.options.watchInSameGroup===true){this.element.empty();this.ignoreAjax=true}if(this.options.showDesc===true){this.element.addEvent("change",function(){this.showDesc()}.bind(this))}Fabrik.fireEvent("fabrik.cdd.update",this)},cloneAutoComplete:function(){var a=this.getAutoCompleteLabelField();a.id=this.element.id+"-auto-complete";a.name=this.element.name.replace("[]","")+"-auto-complete";document.id(a.id).value="";new FabCddAutocomplete(this.element.id,this.options.autoCompleteOpts)},showDesc:function(d){if(this.ingoreShowDesc===true){return}var b=document.id(d.target).selectedIndex;var f=this.getContainer().getElement(".dbjoin-description");var a=f.getElement(".description-"+b);f.getElements(".notice").each(function(e){if(e===a){var c=new Fx.Style(a,"opacity",{duration:400,transition:Fx.Transitions.linear});c.set(0);e.show();c.start(0,1)}else{e.hide()}}.bind(this))}}); \ No newline at end of file +var FbCascadingdropdown=new Class({Extends:FbDatabasejoin,initialize:function(b,a){this.ignoreAjax=false;this.parent(b,a);this.plugin="cascadingdropdown";if(document.id(this.options.watch)){this.doChangeEvent=this.doChange.bind(this);document.id(this.options.watch).addEvent("change",this.doChangeEvent)}if(this.options.showDesc===true){this.element.addEvent("change",function(c){this.showDesc(c)}.bind(this))}if(typeOf(this.element)!=="null"){this.spinner=new Spinner(this.element.getParent(".fabrikElementContainer"))}},attachedToForm:function(){if(this.ignoreAjax||(this.options.editable&&!this.options.editing)){var a=this.form.formElements.get(this.options.watch).getValue();this.change(a,document.id(this.options.watch).id)}},dowatch:function(b){var a=Fabrik.blocks[this.form.form.id].formElements[this.options.watch].getValue();this.change(a,b.target.id)},doChange:function(a){if(this.options.displayType==="auto-complete"){this.element.value="";this.getAutoCompleteLabelField().value=""}this.dowatch(a)},change:function(b,f){if(window.ie){if(this.options.repeatCounter.toInt()===0){var d=f.substr(f.length-2,1);var c=f.substr(f.length-1,1);if(d==="_"&&typeOf(parseInt(c,10))==="number"&&c!=="0"){return}}}this.spinner.show();var a=this.form.getFormElementData();var e={option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"cascadingdropdown",method:"ajax_getOptions",element_id:this.options.id,v:b,formid:this.form.id,fabrik_cascade_ajax_update:1,lang:this.options.lang};e=Object.append(a,e);if(this.myAjax){this.myAjax.cancel()}this.myAjax=new Request({url:"",method:"post",data:e,onComplete:function(){this.spinner.hide()}.bind(this),onSuccess:function(h){var j=this.options.def,g,m;this.spinner.hide();this.setValue(this.getValue());h=JSON.decode(h);if(this.options.editable){this.destroyElement()}else{this.element.getElements("div").destroy()}if(this.options.showDesc===true){m=this.getContainer().getElement(".dbjoin-description");m.empty()}this.myAjax=null;var l=h.length===1;if(!this.ignoreAjax){h.each(function(n){if(this.options.editable===false){n.text=n.text.replace(/\n/g,"
");new Element("div").set("html",n.text).inject(this.element)}else{g=(n.value!==""&&n.value===this.getValue())||l;this.addOption(n.value,n.text,g)}if(this.options.showDesc===true&&n.description){var o=this.options.showPleaseSelect?"notice description-"+(k):"notice description-"+(k-1);new Element("div",{styles:{display:"none"},"class":o}).set("html",n.description).inject(m)}}.bind(this))}else{if(this.options.showPleaseSelect&&h.length>0){var i=h.shift();if(this.options.editable===false){new Element("div").set("text",i.text).inject(this.element)}else{g=(i.value!==""&&i.value===this.getValue())||l;this.addOption(i.value,i.text,g);new Element("option",{value:i.value,selected:"selected"}).set("text",i.text).inject(this.element)}}}this.ignoreAjax=false;if(this.options.editable&&this.options.displayType==="dropdown"){if(this.element.options.length===1){this.element.addClass("readonly")}else{this.element.removeClass("readonly")}}this.renewEvents();if(!this.ignoreAjax){this.ingoreShowDesc=true;this.element.fireEvent("change",new Event.Mock(this.element,"change"));this.ingoreShowDesc=false}this.ignoreAjax=false;Fabrik.fireEvent("fabrik.cdd.update",this)}.bind(this),onFailure:function(g){console.log(this.myAjax.getHeader("Status"))}.bind(this)}).send()},destroyElement:function(){switch(this.options.displayType){case"radio":case"checkbox":this.getContainer().getElements(".fabrik_subelement").destroy();break;case"dropdown":default:this.element.empty();break}},cloned:function(a){this.myAjax=null;this.parent(a);this.spinner=new Spinner(this.element.getParent(".fabrikElementContainer"));if(document.id(this.options.watch)){if(this.options.watchInSameGroup===true){if(this.options.watch.test(/_(\d+)$/)){this.options.watch=this.options.watch.replace(/_(\d+)$/,"_"+a)}else{this.options.watch=this.options.watch+"_"+a}}if(document.id(this.options.watch)){if(this.options.watchInSameGroup){document.id(this.options.watch).removeEvent("change",this.doChangeEvent)}this.doChangeEvent=this.doChange.bind(this);document.id(this.options.watch).addEvent("change",this.doChangeEvent)}}if(this.options.watchInSameGroup===true){this.element.empty();this.ignoreAjax=true}if(this.options.showDesc===true){this.element.addEvent("change",function(){this.showDesc()}.bind(this))}Fabrik.fireEvent("fabrik.cdd.update",this)},cloneAutoComplete:function(){var a=this.getAutoCompleteLabelField();a.id=this.element.id+"-auto-complete";a.name=this.element.name.replace("[]","")+"-auto-complete";document.id(a.id).value="";new FabCddAutocomplete(this.element.id,this.options.autoCompleteOpts)},showDesc:function(d){if(this.ingoreShowDesc===true){return}var b=document.id(d.target).selectedIndex;var f=this.getContainer().getElement(".dbjoin-description");var a=f.getElement(".description-"+b);f.getElements(".notice").each(function(e){if(e===a){var c=new Fx.Style(a,"opacity",{duration:400,transition:Fx.Transitions.linear});c.set(0);e.show();c.start(0,1)}else{e.hide()}}.bind(this))}}); \ No newline at end of file diff --git a/plugins/fabrik_element/cascadingdropdown/cascadingdropdown.js b/plugins/fabrik_element/cascadingdropdown/cascadingdropdown.js index 98d212bb983..dd6f25db7ec 100644 --- a/plugins/fabrik_element/cascadingdropdown/cascadingdropdown.js +++ b/plugins/fabrik_element/cascadingdropdown/cascadingdropdown.js @@ -181,6 +181,7 @@ var FbCascadingdropdown = new Class({ this.element.removeClass('readonly'); } } + this.renewEvents(); // $$$ hugh - need to fire this CDD's 'change' event in case we have another CDD // daisy chained on us. We just don't need to do it if 'ignoreAjax' is true, because // that means we're being added to the form, and everyone will get their change() method