--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/app/jquery/jquery-editable-1.3.3.js Tue Jun 23 20:54:03 2009 +0200
@@ -0,0 +1,161 @@
+(function($){
+/*
+ * Editable 1.3.3
+ *
+ * Copyright (c) 2009 Arash Karimzadeh (arashkarimzadeh.com)
+ * Licensed under the MIT (MIT-LICENSE.txt)
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: Mar 02 2009
+ */
+$.fn.editable = function(options){
+ var defaults = {
+ onEdit: null,
+ onSubmit: null,
+ onCancel: null,
+ editClass: null,
+ submit: null,
+ cancel: null,
+ type: 'text', //text, textarea or select
+ submitBy: 'blur', //blur,change,dblclick,click
+ editBy: 'click',
+ options: null
+}
+ if(options=='disable')
+ return this.unbind(this.data('editable.options').editBy,this.data('editable.options').toEditable);
+ if(options=='enable')
+ return this.bind(this.data('editable.options').editBy,this.data('editable.options').toEditable);
+ if(options=='destroy')
+ return this.unbind(this.data('editable.options').editBy,this.data('editable.options').toEditable)
+ .data('editable.previous',null)
+ .data('editable.current',null)
+ .data('editable.options',null);
+
+ var options = $.extend(defaults, options);
+
+ options.toEditable = function(){
+ $this = $(this);
+ $this.data('editable.current',$this.html());
+ opts = $this.data('editable.options');
+ $.editableFactory[opts.type].toEditable($this.empty(),opts);
+ // Configure events,styles for changed content
+ $this.data('editable.previous',$this.data('editable.current'))
+ .children()
+ .focus()
+ .addClass(opts.editClass);
+ // Submit Event
+ if(opts.submit){
+ $('<button/>').appendTo($this)
+ .html(opts.submit)
+ .one('mouseup',function(){opts.toNonEditable($(this).parent(),true)});
+}else
+ $this.one(opts.submitBy,function(){opts.toNonEditable($(this),true)})
+ .children()
+ .one(opts.submitBy,function(){opts.toNonEditable($(this).parent(),true)});
+ // Cancel Event
+ if(opts.cancel)
+ $('<button/>').appendTo($this)
+ .html(opts.cancel)
+ .one('mouseup',function(){opts.toNonEditable($(this).parent(),false)});
+ // Call User Function
+ if($.isFunction(opts.onEdit))
+ opts.onEdit.apply( $this,
+ [{
+ current:$this.data('editable.current'),
+ previous:$this.data('editable.previous')
+}]
+ );
+}
+ options.toNonEditable = function($this,change){
+ opts = $this.data('editable.options');
+ // Configure events,styles for changed content
+ $this.one(opts.editBy,opts.toEditable)
+ .data( 'editable.current',
+ change
+ ?$.editableFactory[opts.type].getValue($this,opts)
+ :$this.data('editable.current')
+ )
+ .html(
+ opts.type=='password'
+ ?'*****'
+ :$this.data('editable.current')
+ );
+ // Call User Function
+ var func = null;
+ if($.isFunction(opts.onSubmit)&&change==true)
+ func = opts.onSubmit;
+ else if($.isFunction(opts.onCancel)&&change==false)
+ func = opts.onCancel;
+ if(func!=null)
+ func.apply($this,
+ [{
+ current:$this.data('editable.current'),
+ previous:$this.data('editable.previous')
+}]
+ );
+}
+ this.data('editable.options',options);
+ return this.one(options.editBy,options.toEditable);
+}
+$.editableFactory = {
+ 'text': {
+ toEditable: function($this,options){
+ $('<input/>').appendTo($this)
+ .val($this.data('editable.current'));
+},
+ getValue: function($this,options){
+ return $this.children().val();
+}
+},
+ 'password': {
+ toEditable: function($this,options){
+ $this.data('editable.current',$this.data('editable.password'));
+ $this.data('editable.previous',$this.data('editable.password'));
+ $('<input type="password"/>').appendTo($this)
+ .val($this.data('editable.current'));
+},
+ getValue: function($this,options){
+ $this.data('editable.password',$this.children().val());
+ return $this.children().val();
+}
+},
+ 'textarea': {
+ toEditable: function($this,options){
+ $('<textarea/>').appendTo($this)
+ .val($this.data('editable.current'));
+},
+ getValue: function($this,options){
+ return $this.children().val();
+}
+},
+ 'select': {
+ toEditable: function($this,options){
+ $select = $('<select/>').appendTo($this);
+ $.each( options.options,
+ function(key,value){
+ $('<option/>').appendTo($select)
+ .html(value)
+ .attr('value',key);
+}
+ )
+ $select.children().each(
+ function(){
+ var opt = $(this);
+ if(opt.text()==$this.data('editable.current'))
+ return opt.attr('selected', 'selected').text();
+}
+ )
+},
+ getValue: function($this,options){
+ var item = null;
+ $('select', $this).children().each(
+ function(){
+ if($(this).attr('selected'))
+ return item = $(this).text();
+}
+ )
+ return item;
+}
+}
+}
+})(jQuery);
\ No newline at end of file