You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2013/06/10 14:24:14 UTC

git commit: WICKET-5220 editable label prevent default on enter key

Updated Branches:
  refs/heads/master 16629ed9f -> 66aceb954


WICKET-5220 editable label prevent default on enter key

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/66aceb95
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/66aceb95
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/66aceb95

Branch: refs/heads/master
Commit: 66aceb954cdf8381300d2508a03c170f9ced36b0
Parents: 16629ed
Author: svenmeier <sv...@meiers.net>
Authored: Mon Jun 10 14:22:37 2013 +0200
Committer: svenmeier <sv...@meiers.net>
Committed: Mon Jun 10 14:22:37 2013 +0200

----------------------------------------------------------------------
 .../ajax/builtin/EditableLabelPage.html         |  3 ++
 .../ajax/builtin/EditableLabelPage.java         | 20 ++++---
 .../ajax/markup/html/AjaxEditableLabel.java     | 56 ++++++++++----------
 3 files changed, 42 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/66aceb95/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html
index a9962d4..778f93a 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.html
@@ -4,6 +4,8 @@
 	span.inline-edit { border: 1px solid green; padding: 4px; }
 	span.inline-edit input { border:0; margin:0; padding:0; }
 </style>
+
+<form wicket:id="form">
 <br/>
 Click on the area with a green outline to begin an inplace edit. Press enter or outside the area to save, pless esc to cancel.
 <br/><br/>
@@ -16,5 +18,6 @@ click to select another site: <span wicket:id="site">[[site selection]]</span>
 <br/><br/>
 This page has been refreshed: <span wicket:id="refresh-counter">[[refresh count]]</span> times.
 <a href="#" wicket:id="refresh-link">refresh</a>
+</form>
 
 </wicket:extend>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/66aceb95/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
index bdee0a6..8073cb7 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/EditableLabelPage.java
@@ -23,6 +23,7 @@ import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableChoiceLabel;
 import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
 import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableMultiLineLabel;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.Link;
 import org.apache.wicket.model.AbstractReadOnlyModel;
 import org.apache.wicket.model.CompoundPropertyModel;
@@ -36,7 +37,8 @@ import org.apache.wicket.model.CompoundPropertyModel;
 public class EditableLabelPage extends BasePage
 {
 	/** available sites for the multiple select. */
-	private static final List<String> SITES = Arrays.asList("The Server Side", "Java Lobby", "Java.Net");
+	private static final List<String> SITES = Arrays.asList("The Server Side", "Java Lobby",
+		"Java.Net");
 	private String site = SITES.get(0);
 	private String text1 = "fox";
 	private String text2 = "dog";
@@ -48,13 +50,15 @@ public class EditableLabelPage extends BasePage
 	 */
 	public EditableLabelPage()
 	{
-		setDefaultModel(new CompoundPropertyModel<EditableLabelPage>(this));
-		add(new AjaxEditableLabel("text1"));
-		add(new AjaxEditableLabel("text2"));
-		add(new AjaxEditableMultiLineLabel("text3"));
-		add(new AjaxEditableChoiceLabel("site", SITES));
+		Form form = new Form("form", new CompoundPropertyModel<EditableLabelPage>(this));
+		add(form);
 
-		add(new Label("refresh-counter", new AbstractReadOnlyModel<String>()
+		form.add(new AjaxEditableLabel("text1"));
+		form.add(new AjaxEditableLabel("text2"));
+		form.add(new AjaxEditableMultiLineLabel("text3"));
+		form.add(new AjaxEditableChoiceLabel("site", SITES));
+
+		form.add(new Label("refresh-counter", new AbstractReadOnlyModel<String>()
 		{
 			@Override
 			public String getObject()
@@ -63,7 +67,7 @@ public class EditableLabelPage extends BasePage
 			}
 		}));
 
-		add(new Link("refresh-link")
+		form.add(new Link("refresh-link")
 		{
 			@Override
 			public void onClick()

http://git-wip-us.apache.org/repos/asf/wicket/blob/66aceb95/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java
index 661ae76..df62188 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxEditableLabel.java
@@ -167,22 +167,22 @@ public class AjaxEditableLabel<T> extends Panel
 	}
 
 	/**
-	 * Gives a chance to the specializations to modify the Ajax attributes for
-	 * the request when this component switches from an editor to a label.
-	 *
+	 * Gives a chance to the specializations to modify the Ajax attributes for the request when this
+	 * component switches from an editor to a label.
+	 * 
 	 * @param attributes
-	 *          The Ajax attributes to modify
+	 *            The Ajax attributes to modify
 	 */
 	protected void updateLabelAjaxAttributes(AjaxRequestAttributes attributes)
 	{
 	}
 
 	/**
-	 * Gives a chance to the specializations to modify the Ajax attributes for
-	 * the request when this component switches from a label to an editor.
-	 *
+	 * Gives a chance to the specializations to modify the Ajax attributes for the request when this
+	 * component switches from a label to an editor.
+	 * 
 	 * @param attributes
-	 *          The Ajax attributes to modify
+	 *            The Ajax attributes to modify
 	 */
 	protected void updateEditorAjaxAttributes(AjaxRequestAttributes attributes)
 	{
@@ -334,31 +334,27 @@ public class AjaxEditableLabel<T> extends Panel
 			protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
 			{
 				super.updateAjaxAttributes(attributes);
-				attributes.setEventNames("blur", "keyup");
+				attributes.setEventNames("blur", "keyup", "keydown");
 
-				CharSequence dynamicExtraParameters = "var result = [], "
-					+ "kc=Wicket.Event.keyCode(attrs.event),"
-					+ "evtType=attrs.event.type;"
-					+ "if (evtType === 'keyup') {"
-					+
-					// ESCAPE key
-					"if (kc===27) { result.push( { name: 'save', value: false } ); }"
-					+
-
-					// ENTER key
-					"else if (kc===13) { result = Wicket.Form.serializeElement(attrs.c); result.push( { name: 'save', value: true } ); }"
-					+ "}"
-					+ "else if (evtType==='blur') { result = Wicket.Form.serializeElement(attrs.c); result.push( { name: 'save', value: true } ); }"
-					+ "return result;";
-				attributes.getDynamicExtraParameters().add(dynamicExtraParameters);
+				// Note: preventDefault is handled selectively below
+				attributes.setPreventDefault(false);
 
+				// Note: escape can be detected on keyup, enter can be detected on keyup
 				CharSequence precondition = "var kc=Wicket.Event.keyCode(attrs.event),"
 					+ "evtType=attrs.event.type,"
 					+ "ret=false;"
-					+ "if(evtType==='blur' || (evtType==='keyup' && (kc===27 || kc===13))) ret = true;"
+					+ "if (evtType==='blur' || (evtType==='keyup' && kc===27) || (evtType==='keydown' && kc===13)) {attrs.event.preventDefault(); ret = true;}"
 					+ "return ret;";
 				AjaxCallListener ajaxCallListener = new AjaxCallListener();
 				ajaxCallListener.onPrecondition(precondition);
+
+				CharSequence dynamicExtraParameters = "var result = [],"
+					+ "evtType=attrs.event.type;"
+					+ "if (evtType === 'keyup') { result.push( { name: 'save', value: false } ); }"
+					+ "else { result = Wicket.Form.serializeElement(attrs.c); result.push( { name: 'save', value: true } ); }"
+					+ "return result;";
+				attributes.getDynamicExtraParameters().add(dynamicExtraParameters);
+
 				attributes.getAjaxCallListeners().add(ajaxCallListener);
 
 			}
@@ -492,8 +488,9 @@ public class AjaxEditableLabel<T> extends Panel
 		label.setVisible(false);
 		editor.setVisible(true);
 		target.add(AjaxEditableLabel.this);
-		String selectScript = String.format("(function(){var el = Wicket.$('%s'); if (el.select) el.select();})()",
-				editor.getMarkupId());
+		String selectScript = String.format(
+			"(function(){var el = Wicket.$('%s'); if (el.select) el.select();})()",
+			editor.getMarkupId());
 		target.appendJavaScript(selectScript);
 		target.focusComponent(editor);
 	}
@@ -512,8 +509,9 @@ public class AjaxEditableLabel<T> extends Panel
 			target.appendJavaScript("window.status='" +
 				JavaScriptUtils.escapeQuotes(errorMessage.toString()) + "';");
 		}
-		String selectAndFocusScript = String.format("(function(){var el=Wicket.$('%s'); if (el.select) el.select(); el.focus();})()",
-				editor.getMarkupId());
+		String selectAndFocusScript = String.format(
+			"(function(){var el=Wicket.$('%s'); if (el.select) el.select(); el.focus();})()",
+			editor.getMarkupId());
 		target.appendJavaScript(selectAndFocusScript);
 	}