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 2014/10/24 13:42:06 UTC

[03/10] git commit: ISIS-537 Further simplification of ScalarPanels' markup. Use inheritance and fragments to reduce the number of the HTML files to minimum

ISIS-537 Further simplification of ScalarPanels' markup. Use inheritance and fragments to reduce the number of the HTML files to minimum


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

Branch: refs/heads/master
Commit: 3f3050414cdef080eb2fe57702d0e94d827e990a
Parents: 830154f
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu Oct 23 16:33:31 2014 +0300
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Fri Oct 24 12:30:52 2014 +0100

----------------------------------------------------------------------
 .../entity/properties/EntityPropertiesForm.java |  9 ++++
 .../components/scalars/ScalarPanelAbstract.html | 57 ++++++++++++++++++++
 .../components/scalars/ScalarPanelAbstract.java | 36 ++++++++++++-
 .../scalars/ScalarPanelTextFieldAbstract.html   | 28 ++++++----
 .../scalars/ScalarPanelTextFieldAbstract.java   | 23 ++++----
 .../ScalarPanelTextFieldDatePickerAbstract.html | 41 --------------
 .../ScalarPanelTextFieldDatePickerAbstract.java | 16 ++++--
 .../scalars/ScalarPanelTextFieldNumeric.java    |  9 ++--
 .../scalars/jodatime/JodaLocalDatePanel.html    | 45 ----------------
 .../scalars/primitive/BooleanPanel.html         | 14 ++---
 .../scalars/primitive/BooleanPanel.java         | 16 ++----
 .../components/scalars/primitive/BytePanel.java |  1 -
 .../scalars/primitive/ShortPanel.java           |  2 -
 .../scalars/string/MultiLineStringPanel.java    | 19 +++----
 .../valuechoices/ValueChoicesSelect2Panel.html  | 18 +++----
 .../valuechoices/ValueChoicesSelect2Panel.java  | 22 +++-----
 .../wicket/ui/pages/bootstrap-overrides.css     | 34 ++++++++++++
 17 files changed, 217 insertions(+), 173 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
index c77fded..9598f6b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesForm.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.entity.properties;
 
+import de.agilecoders.wicket.core.util.Attributes;
+
 import java.util.List;
 import java.util.Map;
 import org.apache.wicket.Component;
@@ -26,6 +28,7 @@ import org.apache.wicket.Session;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+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.Button;
@@ -256,6 +259,12 @@ public class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
         return Filters.and(ObjectAssociation.Filters.PROPERTIES, ObjectAssociation.Filters.dynamicallyVisible(getAuthenticationSession(), adapter, where));
     }
 
+    @Override
+    protected void onComponentTag(ComponentTag tag) {
+        super.onComponentTag(tag);
+
+        Attributes.addClass(tag, "form-inline");
+    }
 
     abstract class AjaxButtonWithOnError extends AjaxButton {
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
new file mode 100644
index 0000000..b0f1799
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:wicket="http://wicket.apache.org"
+      xml:lang="en"
+      lang="en">
+    <body>
+        <wicket:panel>
+            <div class="scalarNameAndValueComponentType" wicket:id="scalarTypeContainer">
+                <div class="form-group" wicket:id="scalarIfRegular">
+                    <label wicket:id="scalarName" class="scalarName">[Label text]</label>
+                    <span class="scalarValueWrapper">
+                        <wicket:child/>
+                        <span wicket:id="feedback" class="help-block"></span>
+                        <span wicket:id="additionalLinks"></span>
+                    </span>
+                </div>
+                <wicket:container wicket:id="scalarIfCompact"></wicket:container>
+            </div>
+
+            <wicket:fragment wicket:id="compactAsInputText">
+                <input type="text" class="form-control" wicket:id="scalarIfCompact"/>
+            </wicket:fragment>
+
+            <wicket:fragment wicket:id="compactAsInputCheckbox">
+                <input type="checkbox" class="form-control" wicket:id="scalarIfCompact"/>
+            </wicket:fragment>
+
+            <wicket:fragment wicket:id="compactAsLabel">
+                <label wicket:id="scalarIfCompact"/>
+            </wicket:fragment>
+
+            <wicket:fragment wicket:id="compactAsSpan">
+                <span wicket:id="scalarIfCompact"></span>
+            </wicket:fragment>
+
+        </wicket:panel>
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index 05f8612..2fad9fb 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -34,6 +34,7 @@ import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.form.LabeledWebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.Where;
@@ -63,10 +64,23 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> implements ScalarModelProvider {
 
     private static final long serialVersionUID = 1L;
-    
+
+    protected static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
+    protected static final String ID_SCALAR_NAME = "scalarName";
+    protected static final String ID_SCALAR_VALUE = "scalarValue";
+
+    protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
+
     private static final String ID_ADDITIONAL_LINKS = "additionalLinks";
     private static final String ID_FEEDBACK = "feedback";
 
+    public enum CompactType {
+        INPUT_TEXT,
+        INPUT_CHECKBOX,
+        LABEL,
+        SPAN
+    }
+
     public enum Rendering {
         /**
          * Does not show labels, eg for use in tables
@@ -128,6 +142,26 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         this.scalarModel = scalarModel;
     }
 
+    protected Fragment getCompactFragment(CompactType type) {
+        Fragment compactFragment;
+        switch (type) {
+            case INPUT_TEXT:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsInputText", ScalarPanelAbstract.this);
+                break;
+            case INPUT_CHECKBOX:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsInputCheckbox", ScalarPanelAbstract.this);
+                break;
+            case LABEL:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsLabel", ScalarPanelAbstract.this);
+                break;
+            case SPAN:
+            default:
+                compactFragment = new Fragment("scalarIfCompact", "compactAsSpan", ScalarPanelAbstract.this);
+                break;
+        }
+        return compactFragment;
+    }
+
     protected Rendering getRendering() {
         return Rendering.renderingFor(getModel().getRenderingHint());
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
index 4808f09..fba5b53 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.html
@@ -23,16 +23,24 @@
       xml:lang="en"
       lang="en">
     <body>
-        <wicket:panel>
-            <div class="scalarNameAndValueComponentType" wicket:id="scalarTypeContainer">
-                <div class="form-group" wicket:id="scalarIfRegular">
-                    <label wicket:id="scalarName" class="scalarName">[Label text]</label>
-                    <input type="text" name="scalarValue" class="form-control scalarValue" wicket:id="scalarValue" />
-                    <span wicket:id="feedback" class="help-block"></span>
-                    <span wicket:id="additionalLinks"></span>
+        <wicket:extend>
+            <wicket:container wicket:id="scalarValueContainer"/>
+
+            <wicket:fragment wicket:id="text">
+                <input type="text" name="scalarValue" class="form-control scalarValue" wicket:id="scalarValue" />
+            </wicket:fragment>
+
+            <wicket:fragment wicket:id="textarea">
+                <textarea name="scalarValue" class="form-control scalarValue" wicket:id="scalarValue"></textarea>
+            </wicket:fragment>
+
+            <wicket:fragment wicket:id="date">
+                <div class="input-group date">
+                    <input type="text" name="scalarValue" wicket:id="scalarValue" class="form-control"/>
+                    <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
                 </div>
-                <span wicket:id="scalarIfCompact"></span>
-            </div>
-        </wicket:panel>
+            </wicket:fragment>
+
+        </wicket:extend>
     </body>
 </html>

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/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 00e534e..4ff96b4 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
@@ -30,6 +30,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
@@ -49,16 +50,10 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     private static final long serialVersionUID = 1L;
 
     private static final String ID_SCALAR_TYPE_CONTAINER = "scalarTypeContainer";
-    private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
-    private static final String ID_SCALAR_NAME = "scalarName";
-    
-    protected static final String ID_SCALAR_VALUE = "scalarValue";
-
-    protected static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
 
     protected final Class<T> cls;
 
-    private WebMarkupContainer scalarTypeContainer;
+    protected WebMarkupContainer scalarTypeContainer;
     private AbstractTextComponent<T> textField;
 
     public ScalarPanelTextFieldAbstract(final String id, final ScalarModel scalarModel, final Class<T> cls) {
@@ -142,17 +137,23 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
 
 
     private MarkupContainer createFormComponentLabel() {
+        Fragment textFieldFragment = createTextFieldFragment("scalarValueContainer");
         final AbstractTextComponent<T> textField = getTextField();
         final String name = getModel().getName();
         textField.setLabel(Model.of(name));
         
         final WebMarkupContainer scalarNameAndValue = new WebMarkupContainer(ID_SCALAR_IF_REGULAR);
-        
-        scalarNameAndValue.add(textField);
+
+        textFieldFragment.add(textField);
+        scalarNameAndValue.add(textFieldFragment);
 
         return scalarNameAndValue;
     }
 
+    protected Fragment createTextFieldFragment(String id) {
+        return new Fragment(id, "text", ScalarPanelTextFieldAbstract.this);
+    }
+
     protected void addStandardSemantics() {
          textField.setRequired(getModel().isRequired());
          setTextFieldSizeAndMaxLengthIfSpecified(textField);
@@ -191,8 +192,10 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
      */
     @Override
     protected Component addComponentForCompact() {
+        Fragment compactFragment = getCompactFragment(CompactType.SPAN);
         final Label labelIfCompact = new Label(ID_SCALAR_IF_COMPACT, getModel().getObjectAsString());
-        scalarTypeContainer.addOrReplace(labelIfCompact);
+        compactFragment.add(labelIfCompact);
+        scalarTypeContainer.addOrReplace(compactFragment);
         return labelIfCompact;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.html
deleted file mode 100644
index 94289db..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"
-      xml:lang="en"
-      lang="en">
-    <body>
-        <wicket:panel>
-            <div class="scalarNameAndValueComponentType" wicket:id="scalarTypeContainer">
-                <div class="form-group" wicket:id="scalarIfRegular">
-                    <label wicket:id="scalarName" class="scalarName">[Label text]</label>
-                    <div class="input-group date">
-                        <input type="text" name="scalarValue" wicket:id="scalarValue" class="form-control"/>
-                        <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
-                    </div>
-                    <span wicket:id="feedback" class="help-block"></span>
-                    <span wicket:id="additionalLinks"></span>
-                </div>
-                <input type="text" wicket:id="scalarIfCompact" class="form-control"/>
-            </div>
-        </wicket:panel>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/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 106bf3b..63d1cf9 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
@@ -27,6 +27,7 @@ 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.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.validation.IValidatable;
@@ -72,6 +73,11 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
     }
 
     @Override
+    protected Fragment createTextFieldFragment(String id) {
+        return new Fragment(id, "date", ScalarPanelTextFieldDatePickerAbstract.this);
+    }
+
+    @Override
     protected void addSemantics() {
         super.addSemantics();
 
@@ -80,22 +86,24 @@ public abstract class ScalarPanelTextFieldDatePickerAbstract<T extends Serializa
 
     
     protected Component addComponentForCompact() {
+        Fragment compactFragment = getCompactFragment(CompactType.INPUT_TEXT);
         final AbstractTextComponent<T> textField = createTextField(ID_SCALAR_IF_COMPACT);
         final IModel<T> model = textField.getModel();
         final T object = model.getObject();
         model.setObject(object);
         
         textField.setEnabled(false);
-        
-        
+
         // adding an amount because seemed to truncate in tables in certain circumstances
         final int lengthAdjust = 
                 getLengthAdjustHint() != null ? getLengthAdjustHint() : 1; 
         final String dateTimePattern = converter.getDateTimePattern(getLocale());
         final int length = dateTimePattern.length() + lengthAdjust; 
         textField.add(new AttributeModifier("size", Model.of("" + length)));
-        
-        addOrReplace(textField);
+
+        compactFragment.add(textField);
+
+        scalarTypeContainer.addOrReplace(compactFragment);
         return textField;
     }
     

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/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 8984527..92b120d 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
@@ -23,6 +23,7 @@ import java.io.Serializable;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -49,15 +50,17 @@ public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extend
     }
 
     protected Component addComponentForCompact() {
+        Fragment compactFragment = getCompactFragment(CompactType.INPUT_TEXT);
         final AbstractTextComponent<T> textField = createTextField(ID_SCALAR_IF_COMPACT);
         final IModel<T> model = textField.getModel();
-        final T object = (T) model.getObject();
+        final T object = model.getObject();
         model.setObject(object);
         
         textField.setEnabled(false);
         setTextFieldSizeAndMaxLengthIfSpecified(textField);
-        
-        addOrReplace(textField);
+
+        compactFragment.add(textField);
+        scalarTypeContainer.addOrReplace(compactFragment);
         return textField;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
deleted file mode 100644
index b9ae5d3..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/JodaLocalDatePanel.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-  
-         http://www.apache.org/licenses/LICENSE-2.0
-         
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml"  
-      xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"  
-      xml:lang="en"  
-      lang="en">
-    <body>
-        <wicket:panel>
-            <div class="jodaLocalDatePanel scalarNameAndValueComponentType">
-                <div class="row">
-                    <span wicket:id="scalarName" class="scalarName col-xs-3">[Label text]</span>
-                    <span class="scalarValue col-xs-9">
-                        <label wicket:id="scalarIfRegular" style="width: 100%">
-                            <div class="input-group date">
-                                <input type="text" name="scalarValue" wicket:id="scalarValue" class="form-control"/>
-                                <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
-                            </div>
-                            <span wicket:id="feedback" class="help-block"></span>
-                            <span wicket:id="additionalLinks"></span>
-                        </label>
-                    </span>
-                </div>
-                <input type="text" wicket:id="scalarIfCompact" class="form-control"/>
-            </div>
-        </wicket:panel>
-    </body>
-</html>

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
index 25a4b76..7588583 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.html
@@ -25,15 +25,11 @@
     <body>
         <wicket:panel>
             <div class="booleanPanel scalarNameAndValueComponentType">
-                <div class="row">
-                    <span wicket:id="scalarName" class="scalarName col-xs-3">[Label text]</span>
-                    <span class="scalarValue col-xs-9">
-                        <label wicket:id="scalarIfRegular" style="width: 100%">
-                            <input type="checkbox" name="scalarValue" wicket:id="scalarValue" />
-                            <span wicket:id="feedback" class="help-block"></span>
-                            <span wicket:id="additionalLinks"></span>
-                        </label>
-                    </span>
+                <div class="form-group" wicket:id="scalarIfRegular">
+                    <label wicket:id="scalarName" class="scalarName">[Label text]</label>
+                    <input type="checkbox" name="scalarValue" class="form-control scalarValue" wicket:id="scalarValue" />
+                    <span wicket:id="feedback" class="help-block"></span>
+                    <span wicket:id="additionalLinks"></span>
                 </div>
                 <input type="checkbox" wicket:id="scalarIfCompact" />
             </div>

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 1f114bf..b156851 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -24,9 +24,9 @@ import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.Che
 
 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.html.basic.Label;
-import org.apache.wicket.markup.html.form.FormComponentLabel;
 import org.apache.wicket.model.Model;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -49,12 +49,6 @@ public class BooleanPanel extends ScalarPanelAbstract {
 
     private static final long serialVersionUID = 1L;
 
-    private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
-    private static final String ID_SCALAR_NAME = "scalarName";
-    private static final String ID_SCALAR_VALUE = "scalarValue";
-
-    private static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
-
     private CheckBoxX checkBox;
 
     public BooleanPanel(final String id, final ScalarModel scalarModel) {
@@ -62,14 +56,15 @@ public class BooleanPanel extends ScalarPanelAbstract {
     }
 
     @Override
-    protected FormComponentLabel addComponentForRegular() {
+    protected MarkupContainer addComponentForRegular() {
         final String name = getModel().getName();
 
         checkBox = createCheckBox(ID_SCALAR_VALUE);
 
         checkBox.setLabel(Model.of(name));
 
-        final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, checkBox);
+        final MarkupContainer labelIfRegular = new MarkupContainer(ID_SCALAR_IF_REGULAR) {
+        };
         labelIfRegular.add(checkBox);
         if(getModel().isRequired()) {
             labelIfRegular.add(new CssClassAppender("mandatory"));
@@ -81,7 +76,7 @@ public class BooleanPanel extends ScalarPanelAbstract {
         }
         
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(checkBox));
-        addOrReplace(scalarName);
+        labelIfRegular.add(scalarName);
 
         addOrReplace(labelIfRegular);
         
@@ -91,7 +86,6 @@ public class BooleanPanel extends ScalarPanelAbstract {
         return labelIfRegular;
     }
 
-
     /**
      * Mandatory hook method to build the component to render the model when in
      * {@link Rendering#COMPACT compact} format.

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
index 7bf40da..a44b121 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
@@ -58,5 +58,4 @@ public class BytePanel extends ScalarPanelTextFieldNumeric<Byte> {
     protected IModel<String> getScalarPanelType() {
         return Model.of("bytePanel");
     }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
index d548a3a..5a26a16 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
@@ -36,7 +36,6 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 public class ShortPanel extends ScalarPanelTextFieldNumeric<Short> {
 
     private static final long serialVersionUID = 1L;
-    private static final String ID_SCALAR_VALUE = "scalarValue";
 
     public ShortPanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel, Short.class);
@@ -59,5 +58,4 @@ public class ShortPanel extends ScalarPanelTextFieldNumeric<Short> {
     protected IModel<String> getScalarPanelType() {
         return Model.of("shortPanel");
     }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/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 1d60c7a..b475cd1 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
@@ -21,9 +21,9 @@ 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.ComponentTag;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
 import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
@@ -40,8 +40,6 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
 
     private static final long serialVersionUID = 1L;
     
-    private static final String ID_SCALAR_VALUE = "scalarValue";
-    
     public MultiLineStringPanel(final String id, final ScalarModel scalarModel) {
         super(id, ID_SCALAR_VALUE, scalarModel);
     }
@@ -64,15 +62,7 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
                     getModel().setObjectAsString(object);
                 }
             }
-        }) {
-            @Override
-            protected void onComponentTag(ComponentTag tag) {
-                tag.setName("textarea");
-                tag.remove("type");
-                super.onComponentTag(tag);
-            }
-        };
-        
+        });
 
         final MultiLineFacet multiLineFacet = getModel().getFacet(MultiLineFacet.class);
         setAttribute(textField, "rows", multiLineFacet.numberOfLines());
@@ -89,6 +79,11 @@ public class MultiLineStringPanel extends ScalarPanelTextFieldParseableAbstract
     }
 
     @Override
+    protected Fragment createTextFieldFragment(String id) {
+        return new Fragment(id, "textarea", MultiLineStringPanel.this);
+    }
+
+    @Override
     protected IModel<String> getScalarPanelType() {
         return Model.of("multiLineStringPanel");
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
index 304ac92..a615e28 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.html
@@ -25,16 +25,14 @@
     <body>
         <wicket:panel>
             <div class="valueChoicesSelect2Panel scalarNameAndValueComponentType">
-                <div class="row">
-                    <span wicket:id="scalarName" class="scalarName col-xs-3">[Label text]</span>
-                    <div class="scalarValue col-xs-9">
-                        <label wicket:id="scalarIfRegular" style="width: 100%">
-                            <div class="choicesPlaceholder">
-                                <input wicket:id="valueId" type="hidden" class="choices form-control select2-remote" style="width: 100%"/>
-                            </div>
-                            <span wicket:id="feedback" class="help-block"></span>
-                            <span wicket:id="additionalLinks"></span>
-                        </label>
+                <div class="form-group" wicket:id="scalarIfRegular">
+                    <label wicket:id="scalarName" class="scalarName">[Label text]</label>
+                    <div class="scalarValueWrapper">
+                        <div class="choicesPlaceholder">
+                            <input wicket:id="scalarValue" type="hidden" class="choices form-control select2-remote" style="width: 100%"/>
+                        </div>
+                        <span wicket:id="feedback" class="help-block"></span>
+                        <span wicket:id="additionalLinks"></span>
                     </div>
                 </div>
                 <span wicket:id="scalarIfCompact"></span>

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index c143f80..762894c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -26,9 +26,10 @@ import com.vaynberg.wicket.select2.ChoiceProvider;
 import com.vaynberg.wicket.select2.Select2Choice;
 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.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.FormComponentLabel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -45,13 +46,6 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
 
     private static final long serialVersionUID = 1L;
 
-    private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
-    private static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
-
-    private static final String ID_SCALAR_NAME = "scalarName";
-
-    private static final String ID_VALUE_ID = "valueId";
-
     private Select2Choice<ObjectAdapterMemento> select2Field;
     private ObjectAdapterMemento pending;
 
@@ -61,14 +55,14 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     }
 
     @Override
-    protected FormComponentLabel addComponentForRegular() {
+    protected MarkupContainer addComponentForRegular() {
 
         final IModel<ObjectAdapterMemento> modelObject = ScalarModelWithPending.Util.createModel(this);
         final ObjectAdapter[] actionArgsHint = getScalarModel().getActionArgsHint();
         
         // same pattern as in EntityLinkSelect2Panel
         if(select2Field == null) {
-            select2Field = Select2ChoiceUtil.newSelect2Choice(ID_VALUE_ID, modelObject, getScalarModel());
+            select2Field = Select2ChoiceUtil.newSelect2Choice(ID_SCALAR_VALUE, modelObject, getScalarModel());
             setChoices(actionArgsHint);
             addStandardSemantics();
         } else {
@@ -76,7 +70,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         }
 
 
-        final FormComponentLabel labelIfRegular = createFormComponentLabel();
+        final MarkupContainer labelIfRegular = createFormComponentLabel();
         if(getModel().isRequired()) {
             labelIfRegular.add(new CssClassAppender("mandatory"));
         }
@@ -84,7 +78,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         addOrReplace(labelIfRegular);
 
         final Label scalarName = new Label(ID_SCALAR_NAME, getRendering().getLabelCaption(select2Field));
-        addOrReplace(scalarName);
+        labelIfRegular.addOrReplace(scalarName);
 
         addFeedbackTo(labelIfRegular, select2Field);
         addAdditionalLinksTo(labelIfRegular);
@@ -110,11 +104,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
         select2Field.setRequired(required);
     }
 
-    protected FormComponentLabel createFormComponentLabel() {
+    protected MarkupContainer createFormComponentLabel() {
         final String name = getModel().getName();
         select2Field.setLabel(Model.of(name));
 
-        final FormComponentLabel labelIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, select2Field);
+        final MarkupContainer labelIfRegular = new WebMarkupContainer(ID_SCALAR_IF_REGULAR);
 
         final String describedAs = getModel().getDescribedAs();
         if(describedAs != null) {

http://git-wip-us.apache.org/repos/asf/isis/blob/3f305041/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index f2f18e8..1d5fe46 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -90,3 +90,37 @@ label {
 th > a > div > strong {
     float: left;
 }
+
+.form-inline .form-group {
+    width: 100%;
+}
+
+.form-inline label {
+    width: 33%;
+    float: left;
+    padding-top: 9px;
+}
+
+.form-inline .scalarValueWrapper {
+    width: 66%;
+    float: right;
+}
+
+.form-inline .scalarValueWrapper .form-control {
+    width: 100%;
+}
+
+.form-inline .scalarValueWrapper .input-group {
+    width: 100%;
+}
+
+.form-inline .scalarValueWrapper .input-group .input-group-addon {
+    width: 1%;
+}
+
+.form-inline .choicesPlaceholder {
+    display: inline-block;
+    width: 100%;
+    vertical-align: -webkit-baseline-middle;
+    vertical-align: middle;
+}