Repository: isis
Updated Branches:
  refs/heads/master f057d29d8 -> 15d87eada


ISIS-1552: now uses 'readonly' rather than 'disabled' tag for disabled text 
fields, provided that the new 'replaceDisabledTagWithReadonlyTag has not been 
set to false.

Also updates the docs


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

Branch: refs/heads/master
Commit: f325400b3fd1e120c67cf8ca909a5763a30f0da0
Parents: fa36da4
Author: Dan Haywood <d...@haywood-associates.co.uk>
Authored: Fri Dec 9 09:00:19 2016 +0000
Committer: Dan Haywood <d...@haywood-associates.co.uk>
Committed: Fri Dec 9 09:00:19 2016 +0000

----------------------------------------------------------------------
 .../guides/_ugvw_configuration-properties.adoc  |  5 +++
 .../settings/WicketViewerSettingsDefault.java   |  5 +++
 .../wicket/model/isis/WicketViewerSettings.java |  7 +++-
 .../components/scalars/ScalarPanelAbstract.java |  1 -
 .../scalars/ScalarPanelTextFieldAbstract.java   | 40 +++++++++++++++++++-
 .../webapp/WEB-INF/viewer_wicket.properties     | 10 ++++-
 6 files changed, 64 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f325400b/adocs/documentation/src/main/asciidoc/guides/_ugvw_configuration-properties.adoc
----------------------------------------------------------------------
diff --git 
a/adocs/documentation/src/main/asciidoc/guides/_ugvw_configuration-properties.adoc
 
b/adocs/documentation/src/main/asciidoc/guides/_ugvw_configuration-properties.adoc
index f01f52d..ea5f3fc 100644
--- 
a/adocs/documentation/src/main/asciidoc/guides/_ugvw_configuration-properties.adoc
+++ 
b/adocs/documentation/src/main/asciidoc/guides/_ugvw_configuration-properties.adoc
@@ -120,6 +120,11 @@ for further details).
 | Ignored for 1.8.0+; in earlier versions forced regular case rather than 
title case in the UI
 
 |`isis.viewer.wicket.` +
+`replaceDisabledTagWithReadonlyTag`
+| `true`,`false` (`_true_`)
+| (`1.13.2-SNAPSHOT`) Whether to replace 'disabled' tag with 'readonly' (for 
link:https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-readonly-attribute[w3
 spec]-compliant browsers such as for Firefox and Chrome 54+) which prevent 
copy from 'disabled' fields.
+
+|`isis.viewer.wicket.` +
 `rememberMe.cookieKey`
 | ascii chars (`_isisWicketRememberMe_`)
 |Cookie key holding the (encrypted) 'rememberMe' user/password.  There is 
generally no need to

http://git-wip-us.apache.org/repos/asf/isis/blob/f325400b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
 
b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
index 0771dde..91ef087 100644
--- 
a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
+++ 
b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/settings/WicketViewerSettingsDefault.java
@@ -70,4 +70,9 @@ public class WicketViewerSettingsDefault implements 
WicketViewerSettings {
     public String getTimestampPattern() {
         return 
getConfiguration().getString("isis.viewer.wicket.timestampPattern", "yyyy-MM-dd 
HH:mm:ss.SSS");
     }
+
+    @Override
+    public boolean isReplaceDisabledTagWithReadonlyTag() {
+        return 
getConfiguration().getBoolean("isis.viewer.wicket.replaceDisabledTagWithReadonlyTag",
 true);
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/f325400b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
index 90f4d50..0f00912 100644
--- 
a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
+++ 
b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/isis/WicketViewerSettings.java
@@ -65,5 +65,10 @@ public interface WicketViewerSettings extends Serializable {
      */
     String getTimestampPattern();
 
-
+    /**
+     * in Firefox and more recent versions of Chrome 54+, cannot copy out of 
disabled fields; instead we use the
+     * readonly attribute 
(https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-readonly-attribute)
+     * This behaviour is enabled by default but can be disabled using this flag
+     */
+    boolean isReplaceDisabledTagWithReadonlyTag();
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/f325400b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index bf33953..98b8c55 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -43,7 +43,6 @@ import 
org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 import 
org.apache.isis.core.metamodel.adapter.mgr.AdapterManager.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;

http://git-wip-us.apache.org/repos/asf/isis/blob/f325400b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 311e3ce..e3dbe06 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -28,6 +28,7 @@ import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
@@ -44,6 +45,7 @@ import 
org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
 import 
org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import 
org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.EntityActionUtil;
@@ -62,6 +64,17 @@ public abstract class ScalarPanelTextFieldAbstract<T extends 
Serializable> exten
 
     protected final Class<T> cls;
 
+    protected static class ReplaceDisabledTagWithReadonlyTagBehaviour extends 
Behavior {
+        @Override public void onComponentTag(final Component component, final 
ComponentTag tag) {
+            super.onComponentTag(component, tag);
+            if(component.isEnabled()) {
+                return;
+            }
+            tag.remove("disabled");
+            tag.put("readonly","readonly");
+        }
+    }
+
     protected WebMarkupContainer scalarTypeContainer;
     private AbstractTextComponent<T> textField;
 
@@ -152,7 +165,18 @@ public abstract class ScalarPanelTextFieldAbstract<T 
extends Serializable> exten
         // over the parsing (using custom subclasses of TextField etc)
     }
 
-
+    private void addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(final 
Component component) {
+        if(!getSettings().isReplaceDisabledTagWithReadonlyTag()) {
+            return;
+        }
+        if (component == null) {
+            return;
+        }
+        if 
(!component.getBehaviors(ReplaceDisabledTagWithReadonlyTagBehaviour.class).isEmpty())
 {
+            return;
+        }
+        component.add(new ReplaceDisabledTagWithReadonlyTagBehaviour());
+    }
 
     private MarkupContainer createFormComponentLabel() {
         Fragment textFieldFragment = 
createTextFieldFragment("scalarValueContainer");
@@ -243,12 +267,14 @@ public abstract class ScalarPanelTextFieldAbstract<T 
extends Serializable> exten
     protected void onBeforeRenderWhenViewMode() {
         super.onBeforeRenderWhenViewMode();
         textField.setEnabled(false);
+        addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(textField);
 
         final String disableReasonIfAny = 
scalarModel.disable(getRendering().getWhere());
         if(disableReasonIfAny == null) {
             CssClassAppender.appendCssClassTo(this, "editable");
         }
 
+
         setTitleAttribute("");
     }
 
@@ -256,6 +282,7 @@ public abstract class ScalarPanelTextFieldAbstract<T 
extends Serializable> exten
     protected void onBeforeRenderWhenDisabled(final String disableReason) {
         super.onBeforeRenderWhenDisabled(disableReason);
         textField.setEnabled(false);
+        addReplaceDisabledTagWithReadonlyTagBehaviourIfRequired(textField);
         setTitleAttribute(disableReason);
     }
 
@@ -275,5 +302,16 @@ public abstract class ScalarPanelTextFieldAbstract<T 
extends Serializable> exten
         textField.add(behavior);
     }
 
+
+    //region > dependencies
+
+    @com.google.inject.Inject
+    private WicketViewerSettings settings;
+    protected WicketViewerSettings getSettings() {
+        return settings;
+    }
+
+    //endregion
+
 }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/f325400b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
----------------------------------------------------------------------
diff --git 
a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
 
b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
index 7b72fb1..d6f1ff1 100644
--- 
a/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
+++ 
b/example/application/simpleapp/webapp/src/main/webapp/WEB-INF/viewer_wicket.properties
@@ -31,13 +31,21 @@
 isis.viewer.wicket.maxTitleLengthInStandaloneTables=0
 isis.viewer.wicket.maxTitleLengthInParentedTables=0
 
+
+#
+# in Firefox and more recent versions of Chrome 54+, cannot copy out of 
disabled fields; instead we use the
+# readonly attribute 
(https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-readonly-attribute)
+# This behaviour is enabled by default but can be disabled using this flag
+#
+#isis.viewer.wicket.replaceDisabledTagWithReadonlyTag=true
+
+
 #isis.viewer.wicket.datePicker.minDate=1900-01-01T00:00:00.000Z
 #isis.viewer.wicket.datePicker.maxDate=2100-01-01T00:00:00.000Z
 
 #isis.viewer.wicket.datePattern=dd-MM-yyyy
 #isis.viewer.wicket.dateTimePattern=dd-MM-yyyy HH:mm
 
-
 #isis.viewer.wicket.datePattern=dd/MM/yy
 #isis.viewer.wicket.dateTimePattern=dd/MM/yy HH:mm
 

Reply via email to