Index: /Users/team/fluid-repos/fluid-components/src/webapp/fluid-components/js/fluid/InlineEdit.js =================================================================== --- /Users/team/fluid-repos/fluid-components/src/webapp/fluid-components/js/fluid/InlineEdit.js (revision 5211) +++ /Users/team/fluid-repos/fluid-components/src/webapp/fluid-components/js/fluid/InlineEdit.js (working copy) @@ -17,8 +17,9 @@ (function ($, fluid) { // Is paddings doing what we want? Should it be in the CSS file instead? - function edit(text, editContainer, editField, invitationStyle, focusStyle, paddings, selectOnEdit) { - editField.val(text.text()); + function edit(text, editContainer, editField, invitationStyle, focusStyle, paddings, invitationText, selectOnEdit) { + var displayText = text.text(); + editField.val(displayText === invitationText ? "" : displayText); editField.width(Math.max(text.width() + paddings.add, paddings.minimum)); text.removeClass(invitationStyle); text.removeClass(focusStyle); @@ -40,9 +41,14 @@ text.show(); } - function finish(editContainer, editField, text, finishedFn) { + function finish(editContainer, editField, text, finishedFn, invitationText) { finishedFn(editField[0], text[0]); - text.text(editField.val()); + var editVal = editField.val(); + if (!editVal) { + text.text(invitationText); + } else { + text.text(editVal); + } view(editContainer, text); text.focus(); } @@ -47,9 +53,9 @@ text.focus(); } - function editHandler(text, editContainer, editField, invitationStyle, focusStyle, paddings, selectOnEdit) { + function editHandler(text, editContainer, editField, invitationStyle, focusStyle, paddings, invitationText, selectOnEdit) { return function () { - edit(text, editContainer, editField, invitationStyle, focusStyle, paddings, selectOnEdit); + edit(text, editContainer, editField, invitationStyle, focusStyle, paddings, invitationText, selectOnEdit); return false; }; } @@ -65,9 +71,9 @@ text.hover(over, out); } - function mouse(text, editContainer, editField, styles, paddings, finishFn, selectOnEdit) { + function mouse(text, editContainer, editField, styles, paddings, finishFn, invitationText, selectOnEdit) { bindHoverHandlers(text, styles.invitation); - text.click(editHandler(text, editContainer, editField, styles.invitation, styles.focus, paddings, selectOnEdit)); + text.click(editHandler(text, editContainer, editField, styles.invitation, styles.focus, paddings, invitationText, selectOnEdit)); } function bindKeyHighlight(text, focusStyle) { @@ -82,13 +88,13 @@ text.blur(focusOff); } - function keyNav(text, editContainer, editField, styles, paddings, selectOnEdit) { + function keyNav(text, editContainer, editField, styles, paddings, invitationText, selectOnEdit) { text.tabbable(); bindKeyHighlight(text, styles.focus); - text.activatable(editHandler(text, editContainer, editField, styles.invitation, styles.focus, paddings, selectOnEdit)); + text.activatable(editHandler(text, editContainer, editField, styles.invitation, styles.focus, paddings, invitationText, selectOnEdit)); } - function bindEditFinish(editContainer, editField, text, finishedFn) { + function bindEditFinish(editContainer, editField, text, finishedFn, invitationText) { var finishHandler = function (evt) { // Fix for handling arrow key presses see FLUID-760 var code = (evt.keyCode ? evt.keyCode : (evt.which ? evt.which : 0)); @@ -96,7 +102,7 @@ return true; } - finish(editContainer, editField, text, finishedFn); + finish(editContainer, editField, text, finishedFn, invitationText); return false; }; @@ -122,6 +128,7 @@ instance.paddings = $.extend({}, defaults.paddings, options.paddings); instance.finishedEditing = options.finishedEditing || function () {}; instance.editModeInjector = options.editModeInjector || defaults.editModeInjector; + instance.invitationText = options.invitationText || defaults.invitationText; }; var bindToDom = function (instance, container) { @@ -128,6 +135,10 @@ // Bind to the DOM. instance.container = fluid.container(container); instance.text = $(instance.selectors.text, instance.container); + var displayText = instance.text.text(); + if (!displayText) { + instance.text.text(instance.invitationText); + } // If an edit container is found in the markup, use it. Otherwise generate one based on the view text. instance.editContainer = $(instance.selectors.editContainer, instance.container); @@ -144,7 +155,7 @@ var defaultEditModeInjector = function (componentContainerId, view) { // Template strings. - var editModeTemplate = "
"; + var editModeTemplate = ""; // Create the edit container and pull out the textfield. var editContainer = $(editModeTemplate); @@ -183,9 +194,9 @@ bindToDom(this, componentContainer); // Add event handlers. - mouse(this.text, this.editContainer, this.editField, this.styles, this.paddings, this.finishedEditing, options.selectOnEdit); - keyNav(this.text, this.editContainer, this.editField, this.styles, this.paddings, options.selectOnEdit); - bindEditFinish(this.editContainer, this.editField, this.text, this.finishedEditing); + mouse(this.text, this.editContainer, this.editField, this.styles, this.paddings, this.finishedEditing, this.invitationText, options.selectOnEdit); + keyNav(this.text, this.editContainer, this.editField, this.styles, this.paddings, this.invitationText, options.selectOnEdit); + bindEditFinish(this.editContainer, this.editField, this.text, this.finishedEditing, this.invitationText); bindBlurHandler(this.editContainer, this.editField, this.text, this.finishedEditing); // Add ARIA support. @@ -196,11 +207,11 @@ }; fluid.InlineEdit.prototype.edit = function () { - edit(this.text, this.editContainer, this.editField, this.styles.invitation, this.styles.focus, this.paddings); + edit(this.text, this.editContainer, this.editField, this.styles.invitation, this.styles.focus, this.paddings, this.invitationText); }; fluid.InlineEdit.prototype.finish = function () { - finish(this.editContainer, this.editField, this.text, this.finishedEditing); + finish(this.editContainer, this.editField, this.text, this.finishedEditing, this.invitationText); }; fluid.InlineEdit.prototype.defaults = { @@ -222,6 +233,8 @@ editModeInjector: defaultEditModeInjector, + invitationText: "Click here to edit", + selectOnEdit: false }; Index: /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/InlineEdit-test.html =================================================================== --- /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/InlineEdit-test.html (revision 5211) +++ /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/InlineEdit-test.html (working copy) @@ -22,7 +22,7 @@ - +

InlineEdit Test Suite

@@ -56,7 +56,12 @@
Click me to edit...
- + + +
+
+
+ Index: /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/js/InlineEditTests.js =================================================================== --- /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/js/InlineEditTests.js (revision 5211) +++ /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/js/InlineEditTests.js (working copy) @@ -78,6 +78,40 @@ jqUnit.notVisible("Edit field is hidden", "#edit-container-custom"); }); + inlineEditTests.test("Invitation text (Default)", function () { + jqUnit.expect(5); + + var display = $("#empty-display"); + jqUnit.assertEquals("Before initialization of empty display, display is empty", "", display.text()); + var inlineEditor = new fluid.InlineEdit("empty-inline-edit"); + jqUnit.assertEquals("After initialization of empty display, display has invitation text: ", fluid.InlineEdit.prototype.defaults.invitationText, display.text()); + + var testText = "This is test text."; + var edit = $("#empty-inline-edit-edit"); + inlineEditor.edit(); + jqUnit.assertEquals("After switching into edit mode, edit field should be empty: ", "", edit.val()); + edit.attr("value", testText); + inlineEditor.finish(); + jqUnit.assertEquals("After editing the field, display should have test text ", testText, display.text()); + + inlineEditor.edit(); + edit.attr("value", ""); + inlineEditor.finish(); + jqUnit.assertEquals("After clearing the field, display should have invitation text again: ", fluid.InlineEdit.prototype.defaults.invitationText, display.text()); + + }); + + inlineEditTests.test("Invitation text (custom)", function () { + jqUnit.expect(2); + + var display = $("#empty-display"); + var customInvitation = "This is custom invitation text"; + jqUnit.assertEquals("Before initialization, display is empty", "", display.text()); + + var inlineEditor = new fluid.InlineEdit("empty-inline-edit", {invitationText: customInvitation}); + jqUnit.assertEquals("After initialization, display has custom invitation text.", customInvitation, display.text()); + }); + inlineEditTests.test("Edit-Finish", function () { jqUnit.expect(8); Index: /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/manual/inline-edit/InlineEdit.html =================================================================== --- /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/manual/inline-edit/InlineEdit.html (revision 5211) +++ /Users/team/fluid-repos/fluid-components/src/webapp/tests/fluid-tests/manual/inline-edit/InlineEdit.html (working copy) @@ -35,17 +35,27 @@
- I don't have a built-in input field. + I don't have a built-in input field.
-
- We are all - setup with - a single +

The following line is an empty inline edit with default invitation text: + +

+ +

The following line is an empty inline edit with custom invitation text: + +

+ +

+ These edit fields + are all set up + with a single function call. -

+