From 3d7f5af97379a28f4ee4937b0a654c6d1f345fd6 Mon Sep 17 00:00:00 2001 From: Christopher Lenz Date: Fri, 16 Jan 2009 21:27:43 +0000 Subject: Some cleanup of the suggest and editinline jQuery plugins. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@735146 13f79535-47bb-0310-9956-ffa450edef68 --- share/www/script/jquery.editinline.js | 136 +++++++++++++++++----------------- 1 file changed, 70 insertions(+), 66 deletions(-) (limited to 'share/www/script/jquery.editinline.js') diff --git a/share/www/script/jquery.editinline.js b/share/www/script/jquery.editinline.js index bd91e7e1..3f1f85e3 100644 --- a/share/www/script/jquery.editinline.js +++ b/share/www/script/jquery.editinline.js @@ -12,6 +12,74 @@ (function($) { + function startEditing(elem, options) { + var editable = $(elem); + var origHtml = editable.html(); + var origText = options.populate($.trim(editable.text())); + + if (!options.begin.apply(elem, [origText])) { + return; + } + + var input = options.createInput.apply(elem, [origText]) + .addClass("editinline").val(origText) + .dblclick(function() { return false; }) + .keydown(function(evt) { + switch (evt.keyCode) { + case 13: { // return + if (!input.is("textarea")) applyChange(evt.keyCode); + break; + } + case 27: { // escape + cancelChange(evt.keyCode); + break; + } + case 9: { // tab + if (!input.is("textarea")) { + applyChange(evt.keyCode); + return false; + } + } + } + }); + + function applyChange(keyCode) { + var newText = input.val(); + if (newText == origText) { + cancelChange(keyCode); + return true; + } + if ((!options.allowEmpty && !newText.length) || + !options.validate.apply(elem, [newText])) { + input.addClass("invalid"); + return false; + } + input.remove(); + tools.remove(); + options.accept.apply(elem, [newText, origText]); + editable.removeClass("editinline-container") + options.end.apply(elem, [keyCode]); + return true; + } + + function cancelChange(keyCode) { + options.cancel.apply(elem, [origText]); + editable.html(origHtml).removeClass("editinline-container"); + options.end.apply(elem, [keyCode]); + } + + var tools = $(""); + $("") + .text(options.acceptLabel).click(applyChange).appendTo(tools); + $("") + .text(options.cancelLabel).click(cancelChange).appendTo(tools) + + editable.html("").append(tools).append(input) + .addClass("editinline-container"); + options.prepareInput.apply(elem, [input[0]]); + input.each(function() { this.focus(); this.select(); }); + } + $.fn.makeEditable = function(options) { options = $.extend({ allowEmpty: true, @@ -31,72 +99,8 @@ }, options || {}); return this.each(function() { - var elem = $(this); - elem.attr("title", options.toolTip).dblclick(function() { - var oldHtml = elem.html(); - var oldText = options.populate($.trim(elem.text())); - - if (!options.begin.apply(elem[0], [oldText])) { - return; - } - - var input = options.createInput.apply(elem[0], [oldText]) - .addClass("editinline").val(oldText) - .dblclick(function() { return false; }) - .keydown(function(evt) { - switch (evt.keyCode) { - case 13: { // return - if (!input.is("textarea")) applyChange(evt.keyCode); - break; - } - case 27: { // escape - cancelChange(evt.keyCode); - break; - } - case 9: { // tab - if (!input.is("textarea")) { - applyChange(evt.keyCode); - return false; - } - } - } - }); - - function applyChange(keyCode) { - var newText = input.val(); - if (newText == oldText) { - cancelChange(keyCode); - return true; - } - if ((!options.allowEmpty && !newText.length) || - !options.validate.apply(elem[0], [newText])) { - input.addClass("invalid"); - return false; - } - input.remove(); - tools.remove(); - options.accept.apply(elem[0], [newText, oldText]); - elem.removeClass("editinline-container") - options.end.apply(elem[0], [keyCode]); - return true; - } - - function cancelChange(keyCode) { - options.cancel.apply(elem[0], [oldText]); - elem.html(oldHtml).removeClass("editinline-container"); - options.end.apply(elem[0], [keyCode]); - } - - var tools = $(""); - $("") - .text(options.acceptLabel).click(applyChange).appendTo(tools); - $("") - .text(options.cancelLabel).click(cancelChange).appendTo(tools) - - elem.html("").append(tools).append(input) - .addClass("editinline-container"); - options.prepareInput.apply(elem[0], [input[0]]); - input.each(function() { this.focus(); this.select(); }); + $(this).attr("title", options.toolTip).dblclick(function() { + startEditing(this, options); }); }); } -- cgit v1.2.3