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));  
+        }  
+    })  
+});