/** * @author Bruno 'Shine' Figueiredo @ http://brunofigueiredo.com * @version 0.7 */ var editInPlace = new Class({}); editInPlace.implement({ element:null, editElementDiv:null, editElementTextArea:null, editElementSubmit:null, editElementCancel:null, isEditing:false, originalBgColor:"#fff", hoverColor:'#ff8', initialize: function(element) { this.element=$(element).set({events:{ 'click': this.onClick.bindAsEventListener(this,[element]), 'mouseover':this.onMouseHandler.bindAsEventListener(this), 'mouseout':this.onMouseHandler.bindAsEventListener(this)} }); this.originalBgColor=this.element.getStyle("background-color"); }, onMouseHandler:function(event) { if (this.originalBgColor=="transparent")return; new Fx.Styles(this.element, {duration:200, wait:false}).start({ 'background-color':(event.type=="mouseover")?this.hoverColor:this.originalBgColor }); }, onClick: function(event, triggerElement) { if (!this.editElementDiv){this.buildEditor(triggerElement);} this.editElementTextArea.setProperty('size', '39'); this.editElementTextArea.value = this.element.getText(); this.changeMode(true); }, onClickSubmit: function(event, triggerElement) { this.changeMode(false); this.element.setText(this.editElementTextArea.getValue()); this.fireEvent('onCompleted', [this.element, this.element.getText()]); }, onClickCancel: function(event, triggerElement) { this.changeMode(false); this.fireEvent('onCanceled', [this.element, this.element.getText()]); }, changeMode: function(isEditable) { this.fireEvent('onModeChange', isEditable); var action=isEditable?"addClass":"removeClass"; this.element[action]('editMode'); this.editElementDiv[action]('editMode'); }, buildEditor: function(htmlElement) { this.editElementDiv = new Element("div",{'class': 'eip'}); this.editElementTextArea=new Element("input"); this.editElementSubmit=new Element("button",{'type':'button','class':'save'}).setText("Save").addEvent('click', this.onClickSubmit.bindAsEventListener(this,[htmlElement]));; this.editElementCancel=new Element("button",{'type':'button','class':'cancel'}).setText("Cancel").addEvent('click', this.onClickCancel.bindAsEventListener(this,[htmlElement])); this.editElementDiv.adopt([this.editElementTextArea,this.editElementSubmit,this.editElementCancel]); this.editElementDiv.injectBefore(htmlElement); } }); editInPlace.implement(new Events);