From 09700a5d76a00533445a31a5a464692063986466 Mon Sep 17 00:00:00 2001 From: pollen8 Date: Thu, 25 Apr 2013 13:08:23 +0200 Subject: [PATCH] possible js error from element js in inline edit, and selection fix now applied cross browser --- media/com_fabrik/js/element-min.js | 2 +- media/com_fabrik/js/element.js | 4 +++- plugins/fabrik_list/inlineedit/inlineedit-min.js | 2 +- plugins/fabrik_list/inlineedit/inlineedit.js | 16 ++++++++++------ 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/media/com_fabrik/js/element-min.js b/media/com_fabrik/js/element-min.js index e4b548a9d3d..bdab9d7d14b 100644 --- a/media/com_fabrik/js/element-min.js +++ b/media/com_fabrik/js/element-min.js @@ -1 +1 @@ -var FbElement=new Class({Implements:[Events,Options],options:{element:null,defaultVal:"",value:"",label:"",editable:false,isJoin:false,joinId:0},initialize:function(b,a){this.plugin="";a.element=b;this.strElement=b;this.loadEvents=[];this.events=$H({});this.setOptions(a);return this.setElement()},destroy:function(){},setElement:function(){if(document.id(this.options.element)){this.element=document.id(this.options.element);this.setorigId();return true}return false},get:function(a){if(a==="value"){return this.getValue()}},getFormElementsKey:function(a){return a},attachedToForm:function(){this.setElement();if(Fabrik.bootstrapped){this.alertImage=new Element("i.icon-warning");this.successImage=new Element("i.icon-checkmark",{styles:{color:"green"}})}else{this.alertImage=new Asset.image(this.form.options.images.alert);this.alertImage.setStyle("cursor","pointer");this.successImage=new Asset.image(this.form.options.images.action_check)}this.loadingImage=new Asset.image(this.form.options.images.ajax_loader)},fireEvents:function(a){if(this.hasSubElements()){this._getSubElements().each(function(b){Array.from(a).each(function(c){b.fireEvent(c)}.bind(this))}.bind(this))}else{Array.from(a).each(function(b){this.element.fireEvent(b)}.bind(this))}},getElement:function(){if(typeOf(this.element)==="null"){this.element=document.id(this.options.element)}return this.element},_getSubElements:function(){var a=this.getElement();if(typeOf(a)==="null"){return false}this.subElements=a.getElements(".fabrikinput");return this.subElements},hasSubElements:function(){this._getSubElements();if(typeOf(this.subElements)==="array"||typeOf(this.subElements)==="elements"){return this.subElements.length>0?true:false}return false},unclonableProperties:function(){return["form"]},cloneUpdateIds:function(a){this.element=document.id(a);this.options.element=a},runLoadEvent:function(js,delay){delay=delay?delay:0;if(typeOf(js)==="function"){js.delay(delay)}else{if(delay===0){eval(js)}else{(function(){eval(js)}.bind(this)).delay(delay)}}},removeCustomEvents:function(){},renewEvents:function(){this.events.each(function(a,b){this.element.removeEvents(b);a.each(function(c){this.addNewEventAux(b,c)}.bind(this))}.bind(this))},addNewEventAux:function(action,js){this.element.addEvent(action,function(e){e.stop();typeOf(js)==="function"?js.delay(0,this,this):eval(js)}.bind(this))},addNewEvent:function(a,b){if(a==="load"){this.loadEvents.push(b);this.runLoadEvent(b)}else{if(!this.element){this.element=document.id(this.strElement)}if(this.element){if(!Object.keys(this.events).contains(a)){this.events[a]=[]}this.events[a].push(b);this.addNewEventAux(a,b)}}},validate:function(){},addNewOption:function(h,c){var b;var g=document.id(this.options.element+"_additions").value;var e={val:h,label:c};if(g!==""){b=JSON.decode(g)}else{b=[]}b.push(e);var f="[";for(var d=0;d=1&&b>f){b--}d.splice(d.length-1,1,b);var c=d.join("_");if(a){c+=e}this.options.element=c;return c},_decreaseName:function(f,e,d){suffixFound=false;d=d?d:false;if(d!==false){if(f.contains(d)){f=f.replace(d,"");suffixFound=true}}var a=f.split("][");var b=a[2].replace("]","").toInt();if(b>=1&&b>e){b--}if(a.length===3){b=b+"]"}a.splice(2,1,b);var c=a.join("][");if(suffixFound){c+=d}return c},getRepeatNum:function(){if(this.options.inRepeatGroup===false){return false}return this.element.id.split("_").getLast()},getBlurEvent:function(){return this.element.get("tag")==="select"?"change":"blur"},select:function(){},focus:function(){},getCloneName:function(){return this.options.element}});var FbFileElement=new Class({Extends:FbElement,ajaxFolder:function(){this.folderlist=[];if(typeOf(this.element)==="null"){return}var a=this.element.getParent(".fabrikElement");this.breadcrumbs=a.getElement(".breadcrumbs");this.folderdiv=a.getElement(".folderselect");this.slider=new Fx.Slide(this.folderdiv,{duration:500});this.slider.hide();this.hiddenField=a.getElement(".folderpath");a.getElement(".toggle").addEvent("click",function(b){b.stop();this.slider.toggle()}.bind(this));this.watchAjaxFolderLinks()},watchAjaxFolderLinks:function(){this.folderdiv.getElements("a").addEvent("click",function(a){this.browseFolders(a)}.bind(this));this.breadcrumbs.getElements("a").addEvent("click",function(a){this.useBreadcrumbs(a)}.bind(this))},browseFolders:function(b){b.stop();this.folderlist.push(b.target.get("text"));var a=this.options.dir+this.folderlist.join(this.options.ds);this.addCrumb(b.target.get("text"));this.doAjaxBrowse(a)},useBreadcrumbs:function(f){f.stop();var d=false;var h=f.target.className;this.folderlist=[];var b=this.breadcrumbs.getElements("a").every(function(c){if(c.className===h){return false}this.folderlist.push(f.target.innerHTML);return true},this);var g=[this.breadcrumbs.getElements("a").shift().clone(),this.breadcrumbs.getElements("span").shift().clone()];this.breadcrumbs.empty();this.breadcrumbs.adopt(g);this.folderlist.each(function(c){this.addCrumb(c)},this);var a=this.options.dir+this.folderlist.join(this.options.ds);this.doAjaxBrowse(a)},doAjaxBrowse:function(a){var b={dir:a,option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"fileupload",method:"ajax_getFolders",element_id:this.options.id};new Request({url:"",data:b,onComplete:function(c){c=JSON.decode(c);this.folderdiv.empty();c.each(function(d){new Element("li",{"class":"fileupload_folder"}).adopt(new Element("a",{href:"#"}).set("text",d)).inject(this.folderdiv)}.bind(this));if(c.length===0){this.slider.hide()}else{this.slider.slideIn()}this.watchAjaxFolderLinks();this.hiddenField.value="/"+this.folderlist.join("/")+"/";this.fireEvent("onBrowse")}.bind(this)}).send()},addCrumb:function(a){this.breadcrumbs.adopt(new Element("a",{href:"#","class":"crumb"+this.folderlist.length}).set("text",a),new Element("span").set("text"," / "))}}); \ No newline at end of file +var FbElement=new Class({Implements:[Events,Options],options:{element:null,defaultVal:"",value:"",label:"",editable:false,isJoin:false,joinId:0},initialize:function(b,a){this.plugin="";a.element=b;this.strElement=b;this.loadEvents=[];this.events=$H({});this.setOptions(a);return this.setElement()},destroy:function(){},setElement:function(){if(document.id(this.options.element)){this.element=document.id(this.options.element);this.setorigId();return true}return false},get:function(a){if(a==="value"){return this.getValue()}},getFormElementsKey:function(a){return a},attachedToForm:function(){this.setElement();if(Fabrik.bootstrapped){this.alertImage=new Element("i.icon-warning");this.successImage=new Element("i.icon-checkmark",{styles:{color:"green"}})}else{this.alertImage=new Asset.image(this.form.options.images.alert);this.alertImage.setStyle("cursor","pointer");this.successImage=new Asset.image(this.form.options.images.action_check)}this.loadingImage=new Asset.image(this.form.options.images.ajax_loader)},fireEvents:function(a){if(this.hasSubElements()){this._getSubElements().each(function(b){Array.from(a).each(function(c){b.fireEvent(c)}.bind(this))}.bind(this))}else{Array.from(a).each(function(b){if(this.element){this.element.fireEvent(b)}}.bind(this))}},getElement:function(){if(typeOf(this.element)==="null"){this.element=document.id(this.options.element)}return this.element},_getSubElements:function(){var a=this.getElement();if(typeOf(a)==="null"){return false}this.subElements=a.getElements(".fabrikinput");return this.subElements},hasSubElements:function(){this._getSubElements();if(typeOf(this.subElements)==="array"||typeOf(this.subElements)==="elements"){return this.subElements.length>0?true:false}return false},unclonableProperties:function(){return["form"]},cloneUpdateIds:function(a){this.element=document.id(a);this.options.element=a},runLoadEvent:function(js,delay){delay=delay?delay:0;if(typeOf(js)==="function"){js.delay(delay)}else{if(delay===0){eval(js)}else{(function(){eval(js)}.bind(this)).delay(delay)}}},removeCustomEvents:function(){},renewEvents:function(){this.events.each(function(a,b){this.element.removeEvents(b);a.each(function(c){this.addNewEventAux(b,c)}.bind(this))}.bind(this))},addNewEventAux:function(action,js){this.element.addEvent(action,function(e){e.stop();typeOf(js)==="function"?js.delay(0,this,this):eval(js)}.bind(this))},addNewEvent:function(a,b){if(a==="load"){this.loadEvents.push(b);this.runLoadEvent(b)}else{if(!this.element){this.element=document.id(this.strElement)}if(this.element){if(!Object.keys(this.events).contains(a)){this.events[a]=[]}this.events[a].push(b);this.addNewEventAux(a,b)}}},validate:function(){},addNewOption:function(h,c){var b;var g=document.id(this.options.element+"_additions").value;var e={val:h,label:c};if(g!==""){b=JSON.decode(g)}else{b=[]}b.push(e);var f="[";for(var d=0;d=1&&b>f){b--}d.splice(d.length-1,1,b);var c=d.join("_");if(a){c+=e}this.options.element=c;return c},_decreaseName:function(f,e,d){suffixFound=false;d=d?d:false;if(d!==false){if(f.contains(d)){f=f.replace(d,"");suffixFound=true}}var a=f.split("][");var b=a[2].replace("]","").toInt();if(b>=1&&b>e){b--}if(a.length===3){b=b+"]"}a.splice(2,1,b);var c=a.join("][");if(suffixFound){c+=d}return c},getRepeatNum:function(){if(this.options.inRepeatGroup===false){return false}return this.element.id.split("_").getLast()},getBlurEvent:function(){return this.element.get("tag")==="select"?"change":"blur"},select:function(){},focus:function(){},getCloneName:function(){return this.options.element}});var FbFileElement=new Class({Extends:FbElement,ajaxFolder:function(){this.folderlist=[];if(typeOf(this.element)==="null"){return}var a=this.element.getParent(".fabrikElement");this.breadcrumbs=a.getElement(".breadcrumbs");this.folderdiv=a.getElement(".folderselect");this.slider=new Fx.Slide(this.folderdiv,{duration:500});this.slider.hide();this.hiddenField=a.getElement(".folderpath");a.getElement(".toggle").addEvent("click",function(b){b.stop();this.slider.toggle()}.bind(this));this.watchAjaxFolderLinks()},watchAjaxFolderLinks:function(){this.folderdiv.getElements("a").addEvent("click",function(a){this.browseFolders(a)}.bind(this));this.breadcrumbs.getElements("a").addEvent("click",function(a){this.useBreadcrumbs(a)}.bind(this))},browseFolders:function(b){b.stop();this.folderlist.push(b.target.get("text"));var a=this.options.dir+this.folderlist.join(this.options.ds);this.addCrumb(b.target.get("text"));this.doAjaxBrowse(a)},useBreadcrumbs:function(f){f.stop();var d=false;var h=f.target.className;this.folderlist=[];var b=this.breadcrumbs.getElements("a").every(function(c){if(c.className===h){return false}this.folderlist.push(f.target.innerHTML);return true},this);var g=[this.breadcrumbs.getElements("a").shift().clone(),this.breadcrumbs.getElements("span").shift().clone()];this.breadcrumbs.empty();this.breadcrumbs.adopt(g);this.folderlist.each(function(c){this.addCrumb(c)},this);var a=this.options.dir+this.folderlist.join(this.options.ds);this.doAjaxBrowse(a)},doAjaxBrowse:function(a){var b={dir:a,option:"com_fabrik",format:"raw",task:"plugin.pluginAjax",plugin:"fileupload",method:"ajax_getFolders",element_id:this.options.id};new Request({url:"",data:b,onComplete:function(c){c=JSON.decode(c);this.folderdiv.empty();c.each(function(d){new Element("li",{"class":"fileupload_folder"}).adopt(new Element("a",{href:"#"}).set("text",d)).inject(this.folderdiv)}.bind(this));if(c.length===0){this.slider.hide()}else{this.slider.slideIn()}this.watchAjaxFolderLinks();this.hiddenField.value="/"+this.folderlist.join("/")+"/";this.fireEvent("onBrowse")}.bind(this)}).send()},addCrumb:function(a){this.breadcrumbs.adopt(new Element("a",{href:"#","class":"crumb"+this.folderlist.length}).set("text",a),new Element("span").set("text"," / "))}}); \ No newline at end of file diff --git a/media/com_fabrik/js/element.js b/media/com_fabrik/js/element.js index ae7191c54ec..ac33e21b2ac 100644 --- a/media/com_fabrik/js/element.js +++ b/media/com_fabrik/js/element.js @@ -98,7 +98,9 @@ var FbElement = new Class({ }.bind(this)); } else { Array.from(evnts).each(function (e) { - this.element.fireEvent(e); + if (this.element) { + this.element.fireEvent(e); + } }.bind(this)); } }, diff --git a/plugins/fabrik_list/inlineedit/inlineedit-min.js b/plugins/fabrik_list/inlineedit/inlineedit-min.js index 9b35fcfc91b..9ad578b0177 100644 --- a/plugins/fabrik_list/inlineedit/inlineedit-min.js +++ b/plugins/fabrik_list/inlineedit/inlineedit-min.js @@ -1 +1 @@ -var FbListInlineEdit=new Class({Extends:FbListPlugin,initialize:function(a){this.parent(a);this.defaults={};this.editors={};this.inedit=false;this.saving=false;head.ready(function(){if(typeOf(this.getList().getForm())==="null"){return false}this.listid=this.options.listid;this.setUp()}.bind(this));Fabrik.addEvent("fabrik.list.clearrows",function(){this.cancel()}.bind(this));Fabrik.addEvent("fabrik.list.inlineedit.stopEditing",function(){this.stopEditing()}.bind(this));Fabrik.addEvent("fabrik.list.updaterows",function(){this.watchCells()}.bind(this));Fabrik.addEvent("fabrik.list.ini",function(){var b=this.getList();var c=b.form.toQueryString().toObject();c.format="raw";c.listref=this.options.ref;var d=new Request.JSON({url:"",data:c,onComplete:function(){console.log("complete")},onSuccess:function(e){console.log("success");e=Json.evaluate(e.stripScripts());b.options.data=e.data}.bind(this),onFailure:function(e){console.log("ajax inline edit failure",e)},onException:function(f,e){console.log("ajax inline edit exception",f,e)}}).send()}.bind(this));Fabrik.addEvent("fabrik.element.click",function(){if(Object.getLength(this.options.elements)===1&&this.options.showSave===false){this.save(null,this.editing)}}.bind(this));Fabrik.addEvent("fabrik.list.inlineedit.setData",function(){if(typeOf(this.editOpts)==="null"){return}$H(this.editOpts.plugins).each(function(b){var c=Fabrik["inlineedit_"+this.editOpts.elid].elements[b];delete c.element;c.update(this.editData[b]);c.select()}.bind(this));this.watchControls(this.editCell);this.setFocus(this.editCell)}.bind(this))},setUp:function(){if(typeOf(this.getList().getForm())==="null"){return}this.scrollFx=new Fx.Scroll(window,{wait:false});this.watchCells();document.addEvent("keydown",function(a){this.checkKey(a)}.bind(this))},watchCells:function(){var a=false;this.getList().getForm().getElements(".fabrik_element").each(function(c,b){if(this.canEdit(c)){if(!a&&this.options.loadFirst){a=this.edit(null,c);if(a){this.select(null,c)}}if(!this.isEditable(c)){return}this.setCursor(c);c.removeEvents();c.addEvent(this.options.editEvent,function(d){this.edit(d,c)}.bind(this));c.addEvent("click",function(d){this.select(d,c)}.bind(this));c.addEvent("mouseenter",function(d){if(!this.isEditable(c)){c.setStyle("cursor","pointer")}}.bind(this));c.addEvent("mouseleave",function(d){c.setStyle("cursor","")})}}.bind(this))},checkKey:function(d){var c,f,a;if(typeOf(this.td)!=="element"){return}switch(d.code){case 39:if(this.inedit){return}if(typeOf(this.td.getNext())==="element"){d.stop();this.select(d,this.td.getNext())}break;case 9:if(this.inedit){if(this.options.tabSave){if(typeOf(this.editing)==="element"){this.save(d,this.editing)}else{this.edit(d,this.td)}}var b=d.shift?this.getPreviousEditable(this.td):this.getNextEditable(this.td);if(typeOf(b)==="element"){d.stop();this.select(d,b);this.edit(d,this.td)}return}d.stop();if(d.shift){if(typeOf(this.td.getPrevious())==="element"){this.select(d,this.td.getPrevious())}}else{if(typeOf(this.td.getNext())==="element"){this.select(d,this.td.getNext())}}break;case 37:if(this.inedit){return}if(typeOf(this.td.getPrevious())==="element"){d.stop();this.select(d,this.td.getPrevious())}break;case 40:if(this.inedit){return}f=this.td.getParent();if(typeOf(f)==="null"){return}a=f.getElements("td").indexOf(this.td);if(typeOf(f.getNext())==="element"){d.stop();c=f.getNext().getElements("td");this.select(d,c[a])}break;case 38:if(this.inedit){return}f=this.td.getParent();if(typeOf(f)==="null"){return}a=f.getElements("td").indexOf(this.td);if(typeOf(f.getPrevious())==="element"){d.stop();c=f.getPrevious().getElements("td");this.select(d,c[a])}break;case 27:d.stop();this.select(d,this.editing);this.cancel(d);break;case 13:d.stop();if(typeOf(this.editing)==="element"){if(this.editors[this.activeElementId].contains("=0;a--){if(c){if(this.canEdit(b[a])){return b[a]}}if(b[a]===d){c=true}}return false},getNextEditable:function(c){var b=false;var a=this.getList().getForm().getElements(".fabrik_element").filter(function(e,d){if(b){if(this.canEdit(e)){b=false;return true}}if(e===c){b=true}return false}.bind(this));return a.getLast()},canEdit:function(c){if(!this.isEditable(c)){return false}var a=this.getElementName(c);var b=this.options.elements[a];if(typeOf(b)==="null"){return false}return true},edit:function(e,td){if(this.saving){return}Fabrik.fireEvent("fabrik.plugin.inlineedit.editing");if(this.inedit){if(this.options.editEvent==="mouseover"){if(td===this.editing){return}this.select(e,this.editing);this.cancel()}else{return}}if(!this.canEdit(td)){return false}if(typeOf(e)!=="null"){e.stop()}var element=this.getElementName(td);var rowid=this.getRowId(td);var opts=this.options.elements[element];if(typeOf(opts)==="null"){return}this.inedit=true;this.editing=td;this.activeElementId=opts.elid;this.defaults[rowid+"."+opts.elid]=td.innerHTML;var data=this.getDataFromTable(td);if(typeOf(this.editors[opts.elid])==="null"||typeOf(Fabrik["inlineedit_"+opts.elid])==="null"){Fabrik.loader.start(td.getParent());var inline=this.options.showSave?1:0;var editRequest=new Request({evalScripts:function(script,text){this.javascript=script}.bind(this),evalResponse:false,url:"",data:{element:element,elid:opts.elid,elementid:Object.values(opts.plugins),rowid:rowid,listref:this.options.ref,formid:this.options.formid,listid:this.options.listid,inlinesave:inline,inlinecancel:this.options.showCancel,option:"com_fabrik",task:"form.inlineedit",format:"raw"},onSuccess:function(r){Fabrik.loader.stop(td.getParent());(function(){Browser.exec(this.javascript);Fabrik.tips.attach(".fabrikTip")}.bind(this)).delay(1000);td.empty().set("html",r);if(document.selection){document.selection.empty()}r=r+''; this.editors[opts.elid] = r; this.watchControls(td); @@ -453,9 +451,7 @@ var FbListInlineEdit = new Class({ // Make a new instance of the element js class which will use the new html eval(this.javascript); - if (document.selection) { - document.selection.empty(); - } + this.clearSelection(); Fabrik.tips.attach('.fabrikTip'); // Set some options for use in 'fabrik.list.inlineedit.setData' @@ -466,6 +462,14 @@ var FbListInlineEdit = new Class({ return true; }, + clearSelection: function () { + if (document.selection) { + document.selection.empty(); + } else { + window.getSelection().removeAllRanges(); + } + }, + getDataFromTable: function (td) { var groupedData = this.getList().options.data; var element = this.getElementName(td);