diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 528b940..39cd0ca 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,7 @@ X-editable changelog Version 1.4.0 wip ---------------------------- +[enh] added `destroy` method, see #61 (vitalets) [enh] textarea: added `rows` property (vitalets) [enh #60] added wysihtml5 input (vitalets) [enh] added IOS-style clear button for text inputs (vitalets) diff --git a/src/containers/editable-container.js b/src/containers/editable-container.js index 600a078..4e1f43d 100644 --- a/src/containers/editable-container.js +++ b/src/containers/editable-container.js @@ -261,6 +261,8 @@ Applied as jQuery method. **/ destroy: function() { this.call('destroy'); + this.$element.off('destroyed'); + this.$element.removeData('editableContainer'); }, /* diff --git a/src/element/editable-element.js b/src/element/editable-element.js index 1faf285..9fcd880 100644 --- a/src/element/editable-element.js +++ b/src/element/editable-element.js @@ -341,7 +341,24 @@ Makes editable any HTML element on the page. Applied as jQuery method. if(this.container) { this.container.activate(); } - } + }, + + /** + Removes editable feature from element + @method destroy() + **/ + destroy: function() { + if(this.options.toggle !== 'manual') { + this.$element.removeClass('editable-click'); + this.$element.off(this.options.toggle + '.editable'); + } + if(this.container) { + this.container.destroy(); + } + this.$element.removeClass('editable'); + this.$element.removeClass('editable-open'); + this.$element.removeData('editable'); + } }; /* EDITABLE PLUGIN DEFINITION diff --git a/test/unit/api.js b/test/unit/api.js index 889e8db..40f7527 100644 --- a/test/unit/api.js +++ b/test/unit/api.js @@ -365,6 +365,28 @@ $(function () { equal(e.data('editable').value, 2, 'new value correct'); equal(e.text(), groups[2], 'new text shown correctly'); - }); + }); + + + test("`destroy` method", function () { + var e = $('<a href="#" data-name="name" data-type="text" data-url="post.php"></a>').appendTo('#qunit-fixture').editable({ + }); + + e.click(); + var p = tip(e); + ok(p.is(':visible'), 'container visible'); + + e.editable('destroy'); + + ok(!p.is(':visible'), 'container closed'); + ok(!e.data('editable'), 'editable instance removed'); + ok(!e.data('editableContainer'), 'editableContainer instance removed'); + ok(!e.hasClass('editable'), 'editable class removed'); + ok(!e.hasClass('editable-click'), 'editable-click class removed'); + + e.click(); + + + }); });