From d9e818d287ab7a29e32c60deefd6ede32946880d Mon Sep 17 00:00:00 2001
From: vitalets <noginsk@rambler.ru>
Date: Wed, 21 Nov 2012 14:29:10 +0400
Subject: [PATCH] preventDefault only if toggle=click

---
 CHANGELOG.txt                    |  7 +++++++
 src/element/editable-element.css | 17 +++++++++++------
 src/element/editable-element.js  | 24 +++++++++++++-----------
 test/unit/api.js                 |  5 ++---
 4 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index a26103b..db08ef0 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,5 +1,12 @@
 X-editable changelog
 =============================
+          
+
+Version 1.0.1 wip
+----------------------------          
+[enh #6] do not preventDetault() in click when toggle='manual'. This allows to have clickable links (vitalets)         
+[bug #3] should not mark element with unsave css if url is user's function (vitalets)         
+          
                  
 Version 1.0.0 Nov 19, 2012 
 ----------------------------
diff --git a/src/element/editable-element.css b/src/element/editable-element.css
index 11d8745..9d9eaf6 100644
--- a/src/element/editable-element.css
+++ b/src/element/editable-element.css
@@ -1,8 +1,18 @@
-.editable-click, a.editable-click, a.editable-click:hover {
+.editable-click, 
+a.editable-click, 
+a.editable-click:hover {
     text-decoration: none;
     border-bottom: dashed 1px #0088cc;
 }
 
+.editable-click.editable-disabled, 
+a.editable-click.editable-disabled, 
+a.editable-click.editable-disabled:hover {
+   color: #585858;  
+   cursor: default;
+   border-bottom: none;
+}
+
 .editable-empty, .editable-empty:hover{
   font-style: italic; 
   color: #DD1144;  
@@ -18,8 +28,3 @@
 /*    content: '*'*/
 }
 
-.editable-disabled, a.editable-disabled, a.editable-disabled:hover {
-  color: black;  
-  cursor: default;
-  text-decoration: none;
-}
\ No newline at end of file
diff --git a/src/element/editable-element.js b/src/element/editable-element.js
index fad35f8..67a8b0c 100644
--- a/src/element/editable-element.js
+++ b/src/element/editable-element.js
@@ -74,8 +74,13 @@ Makes editable any HTML element on the page. Applied as jQuery method.
             //add 'editable' class
             this.$element.addClass('editable');
             
-            //always attach click handler, but in disabled mode it just prevent default action (useful for links)
-            this.$element.on('click.editable', $.proxy(this.click, this));
+            //attach click handler. In disabled mode it just prevent default action (useful for links)
+            if(this.options.toggle === 'click') {
+                this.$element.addClass('editable-click');
+                this.$element.on('click.editable', $.proxy(this.click, this));
+            } else {
+                this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually
+            }
             
             //check conditions for autotext:
             //if value was generated by text or value is empty, no sense to run autotext
@@ -114,8 +119,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
             this.$element.removeClass('editable-disabled');
             this.handleEmpty();
             if(this.options.toggle === 'click') {
-                this.$element.addClass('editable-click');
-                if(this.$element.attr('tabindex') === -1) {
+                if(this.$element.attr('tabindex') === '-1') {    
                     this.$element.removeAttr('tabindex');                                
                 }
             }
@@ -128,12 +132,10 @@ Makes editable any HTML element on the page. Applied as jQuery method.
         disable: function() {
             this.options.disabled = true; 
             this.hide();           
-            this.$element.addClass('editable-disabled');
+            this.$element.addClass('editable-disabled')
             this.handleEmpty();
-            if(this.options.toggle === 'click') {
-                this.$element.removeClass('editable-click');
-                this.$element.attr('tabindex', -1);                
-            }
+            //do not stop focus on this element
+            this.$element.attr('tabindex', -1);                
         },
         
         /**
@@ -196,10 +198,10 @@ Makes editable any HTML element on the page. Applied as jQuery method.
         
         click: function (e) {
             e.preventDefault();
-            if(this.options.disabled || this.options.toggle !== 'click') {
+            if(this.options.disabled) {
                 return;
             }
-            //stop propagation bacause document listen any click to hide all containers
+            //stop propagation bacause document listen any click to hide all editableContainers
             e.stopPropagation();
             this.toggle();
         },
diff --git a/test/unit/api.js b/test/unit/api.js
index 1bc50fb..c3572b3 100644
--- a/test/unit/api.js
+++ b/test/unit/api.js
@@ -238,14 +238,14 @@ $(function () {
             disabled: true
         });
         ok(e.hasClass('editable-disabled'), 'has disabled class');
-        ok(!e.hasClass('editable-click'), 'does not have click class');
+        ok(e.hasClass('editable-click'), 'has click class');
         
         e.click();
         ok(!e.data('editableContainer'), 'nothing on click');
         
         e.editable('enable');
         ok(!e.hasClass('editable-disabled'), 'does not have disabled class');
-        ok(e.hasClass('editable-click'), 'has click class');
+
         e.click();
         var p = tip(e);
         ok(p.is(':visible'), 'popover shown on click');
@@ -253,7 +253,6 @@ $(function () {
         e.editable('disable');
         p = tip(e);
         ok(e.hasClass('editable-disabled'), 'has disabled class');
-        ok(!e.hasClass('editable-click'), 'does not have click class');
         ok(!p.is(':visible'), 'popover closed');
         
         e.editable('toggleDisabled');