summaryrefslogtreecommitdiff
path: root/share/www/script/jquery.editinline.js
diff options
context:
space:
mode:
authorChristopher Lenz <cmlenz@apache.org>2009-01-16 21:27:43 +0000
committerChristopher Lenz <cmlenz@apache.org>2009-01-16 21:27:43 +0000
commit3d7f5af97379a28f4ee4937b0a654c6d1f345fd6 (patch)
treebd2819a5918b7d335f62a6463f0685af4ad8576c /share/www/script/jquery.editinline.js
parent4c921ff6730e63a17c5be5b5ac01da44818833a4 (diff)
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
Diffstat (limited to 'share/www/script/jquery.editinline.js')
-rw-r--r--share/www/script/jquery.editinline.js136
1 files changed, 70 insertions, 66 deletions
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 = $("<span class='editinline-tools'></span>");
+ $("<button type='button' class='apply'></button>")
+ .text(options.acceptLabel).click(applyChange).appendTo(tools);
+ $("<button type='button' class='cancel'></button>")
+ .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 = $("<span class='editinline-tools'></span>");
- $("<button type='button' class='apply'></button>")
- .text(options.acceptLabel).click(applyChange).appendTo(tools);
- $("<button type='button' class='cancel'></button>")
- .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);
});
});
}