You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/11/15 14:20:42 UTC
git commit: ISIS-587: lengths of text field, text area,
date field in table
Updated Branches:
refs/heads/master ad16b9629 -> a3c11b300
ISIS-587: lengths of text field, text area, date field in table
specifically:
* "size" (typical length) and "maxlength" attributes set on text fields (input type=text)
* "maxlength" set on text area, with JS to support cross-browser
* width of text area set to 70% to better use space
* date field (when in table) given an additional +1 char to (hopefully) avoid truncation in Chrome on Mac.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/a3c11b30
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/a3c11b30
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/a3c11b30
Branch: refs/heads/master
Commit: a3c11b3008ebca99d5fc035e75ee8d4d73215766
Parents: ad16b96
Author: Dan Haywood <da...@apache.org>
Authored: Fri Nov 15 13:20:30 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Nov 15 13:20:30 2013 +0000
----------------------------------------------------------------------
.../scalars/ScalarPanelTextFieldAbstract.java | 40 ++++++++--------
.../ScalarPanelTextFieldDatePickerAbstract.java | 7 ++-
.../scalars/ScalarPanelTextFieldNumeric.java | 2 +-
.../scalars/string/MultiLineStringPanel.css | 4 ++
.../scalars/string/MultiLineStringPanel.java | 48 ++++++++++++++++----
.../scalars/string/StringPanelFactory.java | 17 ++-----
.../ui/pages/jquery.isis.wicket.viewer.js | 14 ++++++
7 files changed, 88 insertions(+), 44 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/a3c11b30/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 2bd7c5e..fcc0d90 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -32,6 +32,7 @@ import org.apache.wicket.model.Model;
import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
import org.apache.isis.core.metamodel.facets.maxlen.MaxLengthFacet;
+import org.apache.isis.core.metamodel.facets.multiline.MultiLineFacet;
import org.apache.isis.core.metamodel.facets.typicallen.TypicalLengthFacet;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -131,6 +132,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
protected void addStandardSemantics() {
setRequiredIfSpecified();
+ setTextFieldSizeAndMaxLengthIfSpecified(textField);
}
private void setRequiredIfSpecified() {
@@ -139,30 +141,28 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
textField.setRequired(required);
}
- protected void setTextFieldSizeIfSpecified(AbstractTextComponent<T> textField) {
- final Integer size = determineSize();
- if (size != null) {
- setTextFieldSize(textField, size);
+ protected void setTextFieldSizeAndMaxLengthIfSpecified(AbstractTextComponent<T> textField) {
+
+ final Integer maxLength = getValueOf(getModel(), MaxLengthFacet.class);
+ Integer typicalLength = getValueOf(getModel(), TypicalLengthFacet.class);
+
+ // doesn't make sense for typical length to be > maxLength
+ if(typicalLength != null && maxLength != null && typicalLength > maxLength) {
+ typicalLength = maxLength;
+ }
+
+ if (typicalLength != null) {
+ textField.add(new AttributeModifier("size", Model.of("" + typicalLength)));
+ }
+
+ if(maxLength != null) {
+ textField.add(new AttributeModifier("maxlength", Model.of("" + maxLength)));
}
}
- protected void setTextFieldSize(AbstractTextComponent<T> textField, int size) {
- textField.add(new AttributeModifier("size", Model.of("" + size)));
- }
-
- @SuppressWarnings("unchecked")
- protected Integer determineSize() {
- return firstValueOf(getModel(), TypicalLengthFacet.class, MaxLengthFacet.class);
- }
-
- private Integer firstValueOf(ScalarModel model, Class<? extends SingleIntValueFacet>... facetTypes) {
- for(Class<? extends SingleIntValueFacet> facetType: facetTypes) {
+ private static Integer getValueOf(ScalarModel model, Class<? extends SingleIntValueFacet> facetType) {
final SingleIntValueFacet facet = model.getFacet(facetType);
- if (facet != null) {
- return facet.value();
- }
- }
- return null;
+ return facet != null ? facet.value() : null;
}
/**
http://git-wip-us.apache.org/repos/asf/isis/blob/a3c11b30/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
index e6539e6..704ee81 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
@@ -23,10 +23,12 @@ import java.io.Serializable;
import com.google.inject.Inject;
+import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.markup.html.form.AbstractTextComponent;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;
@@ -83,7 +85,10 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
model.setObject(object);
textField.setEnabled(false);
- setTextFieldSize(textField, converter.getDateTimePattern(getLocale()).length());
+
+ final String dateTimePattern = converter.getDateTimePattern(getLocale());
+ final int length = dateTimePattern.length() + 1; // adding 1 because seemed to truncate in tables in certain circumstances
+ textField.add(new AttributeModifier("size", Model.of("" + length)));
addOrReplace(textField);
return textField;
http://git-wip-us.apache.org/repos/asf/isis/blob/a3c11b30/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
index 9ce5f9e..8984527 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
@@ -55,7 +55,7 @@ public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extend
model.setObject(object);
textField.setEnabled(false);
- setTextFieldSizeIfSpecified(textField);
+ setTextFieldSizeAndMaxLengthIfSpecified(textField);
addOrReplace(textField);
return textField;
http://git-wip-us.apache.org/repos/asf/isis/blob/a3c11b30/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.css
index ccc9262..bfb5126 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.css
@@ -22,4 +22,8 @@
font-size:14px;
font-family: Arial,'Sans-serif', 'Helvetica', 'Sans-serif', 'sans';
+}
+
+.multiLineStringPanel span.scalarValue {
+ width: 70%;
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/a3c11b30/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
index 323af6d..6b77b4d 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/MultiLineStringPanel.java
@@ -20,10 +20,15 @@
package org.apache.isis.viewer.wicket.ui.components.scalars.string;
import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
import org.apache.wicket.markup.html.form.AbstractTextComponent;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.model.Model;
+import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
+import org.apache.isis.core.metamodel.facets.maxlen.MaxLengthFacet;
+import org.apache.isis.core.metamodel.facets.multiline.MultiLineFacet;
+import org.apache.isis.core.metamodel.facets.typicallen.TypicalLengthFacet;
import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldParseableAbstract;
@@ -35,13 +40,9 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
private static final long serialVersionUID = 1L;
private static final String ID_SCALAR_VALUE = "scalarValue";
- private static final int COLS = 35;
- private int numberOfLines;
-
- public MultiLineStringPanel(final String id, final ScalarModel scalarModel, final int numberOfLines) {
+ public MultiLineStringPanel(final String id, final ScalarModel scalarModel) {
super(id, ID_SCALAR_VALUE, scalarModel);
- this.numberOfLines = numberOfLines;
}
@Override
@@ -63,10 +64,41 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
}
}
});
- textField.add(AttributeModifier.replace("cols", Integer.toString(COLS)));
- textField.add(AttributeModifier.replace("rows", Integer.toString(numberOfLines)));
+
+
+ final MultiLineFacet multiLineFacet = getModel().getFacet(MultiLineFacet.class);
+ setAttribute(textField, "rows", multiLineFacet.numberOfLines());
+
+
+ final Integer maxLength = getValueOf(getModel(), MaxLengthFacet.class);
+ if(maxLength != null) {
+ // in conjunction with javascript in jquery.isis.wicket.viewer.js
+ // see http://stackoverflow.com/questions/4459610/set-maxlength-in-html-textarea
+ setAttribute(textField, "maxlength", maxLength);
+ }
+
return textField;
}
-
+
+ private Component setAttribute(final TextArea<String> textField, final String attributeName, final int i) {
+ return textField.add(AttributeModifier.replace(attributeName, ""+i));
+ }
+
+ private static Integer getValueOf(ScalarModel model, Class<? extends SingleIntValueFacet> facetType) {
+ final SingleIntValueFacet facet = model.getFacet(facetType);
+ return facet != null ? facet.value() : null;
+ }
+
+
+ public int getNumberOfLines(final ScalarModel scalarModel) {
+ final MultiLineFacet multiLineFacet = scalarModel.getFacet(MultiLineFacet.class);
+ int numberOfLines = 1;
+
+ if (multiLineFacet != null) {
+ numberOfLines = multiLineFacet.numberOfLines();
+ }
+
+ return numberOfLines;
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a3c11b30/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanelFactory.java
index 861de34..03f4f27 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanelFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/string/StringPanelFactory.java
@@ -35,22 +35,11 @@ public class StringPanelFactory extends ComponentFactoryScalarAbstract {
@Override
public Component createComponent(final String id, final ScalarModel scalarModel) {
- final int numberOfLines = getNumberOfLines(scalarModel);
- if (numberOfLines > 1) {
- return new MultiLineStringPanel(id, scalarModel, numberOfLines);
- } else {
- return new StringPanel(id, scalarModel);
- }
- }
-
- public int getNumberOfLines(final ScalarModel scalarModel) {
final MultiLineFacet multiLineFacet = scalarModel.getFacet(MultiLineFacet.class);
- int numberOfLines = 1;
-
if (multiLineFacet != null) {
- numberOfLines = multiLineFacet.numberOfLines();
+ return new MultiLineStringPanel(id, scalarModel);
+ } else {
+ return new StringPanel(id, scalarModel);
}
-
- return numberOfLines;
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/a3c11b30/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
index c4afc78..d67a66b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/jquery.isis.wicket.viewer.js
@@ -37,3 +37,17 @@ $(document).ready(function() {
});
});
+
+/**
+ * enables 'maxlength' to work as an attribute on 'textarea'
+ *
+ * as per: see http://stackoverflow.com/questions/4459610/set-maxlength-in-html-textarea
+ */
+$(function() {
+ $("textarea[maxlength]").bind('input propertychange', function() {
+ var maxLength = $(this).attr('maxlength');
+ if ($(this).val().length > maxLength) {
+ $(this).val($(this).val().substring(0, maxLength));
+ }
+ })
+});