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/07/19 12:16:56 UTC
[2/3] git commit: ISIS-468: new @MemberGroupLayout annotation ...
ISIS-468: new @MemberGroupLayout annotation ...
... and implementation in the wicket viewer
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/ec1646f2
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/ec1646f2
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/ec1646f2
Branch: refs/heads/master
Commit: ec1646f271e7950788c238691161db8de30d423e
Parents: 4c47263
Author: Dan Haywood <da...@apache.org>
Authored: Fri Jul 19 07:18:58 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Fri Jul 19 07:18:58 2013 +0100
----------------------------------------------------------------------
.../viewer/wicket/model/models/EntityModel.java | 18 +-
.../wicket/model/util/ObjectSpecifications.java | 30 +-
.../entity/combined/EntityCombinedPanel.html | 13 +-
.../entity/combined/EntityCombinedPanel.java | 28 +-
.../entity/properties/EntityPropertiesForm.java | 3 +-
.../properties/EntityPropertiesPanel.java | 2 -
.../viewer/wicket/ui/pages/PageAbstract.html | 3 +-
.../viewer/wicket/ui/pages/PageAbstract.java | 3 +
.../wicket/ui/pages/bootstrap/css/bootstrap.css | 1563 ++++++++++++++++++
.../ui/pages/bootstrap/css/bootstrap.min.css | 114 ++
.../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes
.../bootstrap/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes
.../applib/annotation/MemberGroupLayout.java | 116 ++
.../isis/applib/annotation/MemberGroups.java | 29 +-
.../membergroups/MemberGroupLayoutFacet.java | 46 +
.../object/membergroups/MemberGroupsFacet.java | 41 -
.../MemberGroupLayoutFacetAbstract.java | 72 +
.../MemberGroupLayoutFacetFactory.java | 60 +
.../membergroups/MemberGroupsFacetAbstract.java | 23 +-
.../MemberGroupLayoutFacetAnnotation.java | 39 +
.../MemberGroupLayoutFacetFallback.java | 39 +
...roupsAnnotationElseFallbackFacetFactory.java | 53 -
.../annotation/MemberGroupsFacetAnnotation.java | 20 +-
.../annotation/MemberGroupsFacetFallback.java | 34 -
.../dflt/ProgrammingModelFacetsJava5.java | 4 +-
.../MemberGroupLayoutFacetFactoryTest.java | 139 ++
...sAnnotationElseFallbackFacetFactoryTest.java | 103 --
.../dom/src/main/java/dom/todo/ToDoItem.java | 4 +-
28 files changed, 2319 insertions(+), 280 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 2942e94..23358e3 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -20,6 +20,7 @@
package org.apache.isis.viewer.wicket.model.models;
import java.io.Serializable;
+import java.util.List;
import java.util.Map;
import com.google.common.collect.Maps;
@@ -43,6 +44,7 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
+import org.apache.isis.viewer.wicket.model.util.ObjectSpecifications.MemberGroupLayoutHint;
/**
* Backing model to represent a {@link ObjectAdapter}.
@@ -128,13 +130,19 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
private Mode mode = Mode.VIEW;
private RenderingHint renderingHint = RenderingHint.REGULAR;
private final Map<PropertyMemento, ScalarModel> propertyScalarModels = Maps.newHashMap();
+ private MemberGroupLayoutHint memberGroupLayoutHint;
/**
* Toggled by 'entityDetailsButton'.
*/
private boolean entityDetailsVisible;
-
+
+ /**
+ * Set by {@link #setMemberGroupsHint(List)}
+ */
+ private List<String> memberGroupsHint;
+
/**
* {@link ConcurrencyException}, if any, that might have occurred previously
*/
@@ -375,6 +383,13 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
entityDetailsVisible = !entityDetailsVisible;
}
+ public MemberGroupLayoutHint getMemberGroupLayoutHint() {
+ return memberGroupLayoutHint;
+ }
+ public void setMemberGroupLayoutHint(MemberGroupLayoutHint memberGroupLayoutHint) {
+ this.memberGroupLayoutHint = memberGroupLayoutHint;
+ }
+
// //////////////////////////////////////////////////////////
// concurrency exceptions
@@ -505,4 +520,5 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
return IsisContext.getSpecificationLoader();
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectSpecifications.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectSpecifications.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectSpecifications.java
index 627c799..b2f2cfb 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectSpecifications.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/util/ObjectSpecifications.java
@@ -24,7 +24,7 @@ import java.util.Set;
import com.google.common.collect.Lists;
-import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupsFacet;
+import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -33,17 +33,33 @@ public final class ObjectSpecifications {
private ObjectSpecifications() {
}
- public static List<String> orderByMemberGroups(ObjectSpecification objSpec, Set<String> groupNamesToOrder) {
- final MemberGroupsFacet facet = objSpec.getFacet(MemberGroupsFacet.class);
- final List<String> groupNames = Lists.newArrayList(groupNamesToOrder);
+ public enum MemberGroupLayoutHint {
+ LEFT,
+ MIDDLE;
+ public List<String> getValue(MemberGroupLayoutFacet facet) {
+ return this == LEFT? facet.getLeft(): facet.getMiddle();
+ }
+ }
+
+ public static List<String> orderByMemberGroups(ObjectSpecification objSpec, Set<String> groupNamesToOrder, MemberGroupLayoutHint memberGroupLayoutHint) {
+ final MemberGroupLayoutFacet facet = objSpec.getFacet(MemberGroupLayoutFacet.class);
+ final List<String> leftColumnGroupNames = Lists.newArrayList(groupNamesToOrder);
// not expected to happen
if(facet == null) {
- return groupNames;
+ return leftColumnGroupNames;
}
- final List<String> groupNamedInRequiredOrder = facet.value();
- return order(groupNames, groupNamedInRequiredOrder);
+ if(memberGroupLayoutHint == MemberGroupLayoutHint.LEFT) {
+ // per the requested order, including any groups not mentioned in either list, excluding any groups in the middle column
+ final List<String> groupNamedInRequiredOrder = facet.getLeft();
+ final List<String> order = order(leftColumnGroupNames, groupNamedInRequiredOrder);
+ order.removeAll(facet.getMiddle());
+ return order;
+ } else {
+ // strictly those listed for the middle column.
+ return facet.getMiddle();
+ }
}
static List<String> order(final List<String> valuesToOrder, final List<String> valuesInRequiredOrder) {
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
index fba10c0..ff610d1 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.html
@@ -21,13 +21,14 @@
<body>
<wicket:panel>
<div class="entityCombined">
- <div wicket:id="entitySummary" />
- <div id="entityPropertiesForLayout">
- <div wicket:id="entityProperties"/>
- </div>
- <div id="entityCollectionsForLayout">
+ <div class="row-fluid">
+ <div wicket:id="entitySummary" />
+ </div>
+ <div class="row-fluid">
+ <div wicket:id="entityPropertiesLeft"/>
+ <div wicket:id="entityPropertiesMiddle"/>
<div wicket:id="entityCollections"/>
- </div>
+ </div>
</div>
</wicket:panel>
</body>
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
index 2bb55be..2403d5e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/combined/EntityCombinedPanel.java
@@ -19,8 +19,13 @@
package org.apache.isis.viewer.wicket.ui.components.entity.combined;
+import org.apache.wicket.Component;
+
+import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
+import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.model.util.ObjectSpecifications.MemberGroupLayoutHint;
import org.apache.isis.viewer.wicket.ui.ComponentType;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
@@ -45,8 +50,27 @@ public class EntityCombinedPanel extends PanelAbstract<EntityModel> {
this.add(new CssClassAppender(facet.value()));
}
+ final MemberGroupLayoutFacet mglFacet = model.getObject().getSpecification().getFacet(MemberGroupLayoutFacet.class);
+ final ColumnSpans columnSpans = mglFacet.getColumnSpans();
+
addOrReplace(ComponentType.ENTITY_SUMMARY, model);
- addOrReplace(ComponentType.ENTITY_PROPERTIES, model);
- addOrReplace(ComponentType.ENTITY_COLLECTIONS, model);
+ model.setMemberGroupLayoutHint(MemberGroupLayoutHint.LEFT);
+
+ final Component leftColumn = getComponentFactoryRegistry().addOrReplaceComponent(this, "entityPropertiesLeft", ComponentType.ENTITY_PROPERTIES, model);
+ addClassForSpan(leftColumn, columnSpans.getLeft());
+
+ if(!mglFacet.getMiddle().isEmpty()) {
+ model.setMemberGroupLayoutHint(MemberGroupLayoutHint.MIDDLE);
+ final Component middleColumn = getComponentFactoryRegistry().addOrReplaceComponent(this, "entityPropertiesMiddle", ComponentType.ENTITY_PROPERTIES, model);
+ addClassForSpan(middleColumn, columnSpans.getMiddle());
+ } else {
+ permanentlyHide("entityPropertiesMiddle");
+ }
+ final Component rightColumn = addOrReplace(ComponentType.ENTITY_COLLECTIONS, model);
+ addClassForSpan(rightColumn, columnSpans.getRight());
+ }
+
+ private static void addClassForSpan(final Component component, final int numGridCols) {
+ component.add(new CssClassAppender("span"+numGridCols));
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/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 9eccf45..49c5dc3 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
@@ -119,7 +119,7 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
add(memberGroupRv);
Map<String, List<ObjectAssociation>> associationsByGroup = ObjectAssociations.groupByMemberOrderName(associations);
- final List<String> groupNames = ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet());
+ final List<String> groupNames = ObjectSpecifications.orderByMemberGroups(objSpec, associationsByGroup.keySet(), entityModel.getMemberGroupLayoutHint());
for(String groupName: groupNames) {
final List<ObjectAssociation> associationsInGroup = associationsByGroup.get(groupName);
@@ -128,7 +128,6 @@ class EntityPropertiesForm extends FormAbstract<ObjectAdapter> {
memberGroupRv.add(memberGroupRvContainer);
memberGroupRvContainer.add(new Label(ID_MEMBER_GROUP_NAME, groupName));
-
final RepeatingView propertyRv = new RepeatingView(ID_PROPERTIES);
final EvenOrOddCssClassAppenderFactory eo = new EvenOrOddCssClassAppenderFactory();
memberGroupRvContainer.add(propertyRv);
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.java
index 81a2310..fe9366a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/properties/EntityPropertiesPanel.java
@@ -19,8 +19,6 @@
package org.apache.isis.viewer.wicket.ui.components.entity.properties;
-
-
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
index e22405a..b6ecb04 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.html
@@ -25,6 +25,7 @@
<wicket:head>
<wicket:link>
<link href="cssreset.css" rel="stylesheet" type="text/css"/>
+ <link href="bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css"/>
<link href="PageAbstract.css" rel="stylesheet" type="text/css"/>
<link href="isis-wicket-theme/jquery-ui-1.10.2.custom.css" rel="stylesheet" type="text/css"/>
<link href="jquery.jgrowl.css" rel="stylesheet" type="text/css"/>
@@ -32,7 +33,7 @@
<title wicket:id="pageTitle"></title>
</wicket:head>
<body>
- <div id="container" class="page">
+ <div id="container" class="page container-fluid">
<div class="headerContainer">
<div>
<h1>
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 3a5185b..0635c75 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -87,6 +87,8 @@ public abstract class PageAbstract extends WebPage {
private static final JavaScriptResourceReference JQUERY_JGROWL_JS = new JavaScriptResourceReference(PageAbstract.class, "jquery.jgrowl.js");
private static final JavaScriptResourceReference JQUERY_ISIS_WICKET_VIEWER_JS = new JavaScriptResourceReference(PageAbstract.class, "jquery.isis.wicket.viewer.js");
+
+ //private static final JavaScriptResourceReference BOOTSTRAP_JS = new JavaScriptResourceReference(PageAbstract.class, "bootstrap/js/bootstrap.min.js");
/**
* This is a bit hacky, but best way I've found to pass an exception over to the WicketSignInPage
@@ -170,6 +172,7 @@ public abstract class PageAbstract extends WebPage {
response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference())));
response.render(new PriorityHeaderItem(JavaScriptReferenceHeaderItem.forReference(JQUERY_JGROWL_JS)));
response.render(new PriorityHeaderItem(JavaScriptReferenceHeaderItem.forReference(JQUERY_ISIS_WICKET_VIEWER_JS)));
+ //response.render(new PriorityHeaderItem(JavaScriptReferenceHeaderItem.forReference(BOOTSTRAP_JS)));
final String feedbackMsg = JGrowlUtil.asJGrowlCalls(getMessageBroker());
if (!StringUtils.isEmpty(feedbackMsg)) {
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.css
new file mode 100644
index 0000000..4f2027e
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.css
@@ -0,0 +1,1563 @@
+/*!
+ * Bootstrap v2.3.2
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+.clearfix {
+ *zoom: 1;
+}
+.clearfix:before,
+.clearfix:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.clearfix:after {
+ clear: both;
+}
+.hide-text {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.input-block-level {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+ display: block;
+}
+audio,
+canvas,
+video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+audio:not([controls]) {
+ display: none;
+}
+html {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+a:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+a:hover,
+a:active {
+ outline: 0;
+}
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+img {
+ /* Responsive images (ensure images don't scale beyond their parents) */
+
+ max-width: 100%;
+ /* Part 1: Set a maxium relative to the parent */
+
+ width: auto\9;
+ /* IE7-8 need help adjusting responsive images */
+
+ height: auto;
+ /* Part 2: Scale the height according to the width, otherwise you get stretching */
+
+ vertical-align: middle;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+#map_canvas img,
+.google-maps img {
+ max-width: none;
+}
+button,
+input,
+select,
+textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+button,
+input {
+ *overflow: visible;
+ line-height: normal;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+label,
+select,
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"],
+input[type="radio"],
+input[type="checkbox"] {
+ cursor: pointer;
+}
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-decoration,
+input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+textarea {
+ overflow: auto;
+ vertical-align: top;
+}
+@media print {
+ * {
+ text-shadow: none !important;
+ color: #000 !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ .ir a:after,
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ @page {
+ margin: 0.5cm;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+}
+.row {
+ margin-left: -10px;
+ *zoom: 1;
+}
+.row:before,
+.row:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.row:after {
+ clear: both;
+}
+[class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 10px;
+}
+.container,
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+ width: 939.92px;
+}
+.span12 {
+ width: 939.92px;
+}
+.span11 {
+ width: 860.76px;
+}
+.span10 {
+ width: 781.5999999999999px;
+}
+.span9 {
+ width: 702.4399999999999px;
+}
+.span8 {
+ width: 623.28px;
+}
+.span7 {
+ width: 544.12px;
+}
+.span6 {
+ width: 464.96px;
+}
+.span5 {
+ width: 385.79999999999995px;
+}
+.span4 {
+ width: 306.64px;
+}
+.span3 {
+ width: 227.48px;
+}
+.span2 {
+ width: 148.32px;
+}
+.span1 {
+ width: 69.16px;
+}
+.offset12 {
+ margin-left: 959.92px;
+}
+.offset11 {
+ margin-left: 880.76px;
+}
+.offset10 {
+ margin-left: 801.5999999999999px;
+}
+.offset9 {
+ margin-left: 722.4399999999999px;
+}
+.offset8 {
+ margin-left: 643.28px;
+}
+.offset7 {
+ margin-left: 564.12px;
+}
+.offset6 {
+ margin-left: 484.96px;
+}
+.offset5 {
+ margin-left: 405.79999999999995px;
+}
+.offset4 {
+ margin-left: 326.64px;
+}
+.offset3 {
+ margin-left: 247.48px;
+}
+.offset2 {
+ margin-left: 168.32px;
+}
+.offset1 {
+ margin-left: 89.16px;
+}
+.row-fluid {
+ width: 100%;
+ *zoom: 1;
+}
+.row-fluid:before,
+.row-fluid:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.row-fluid:after {
+ clear: both;
+}
+.row-fluid [class*="span"] {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ float: left;
+ margin-left: 1.0639203336454166%;
+ *margin-left: 1.0107243169631457%;
+}
+.row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+}
+.row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 1.0639203336454166%;
+}
+.row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680398331774%;
+}
+.row-fluid .span11 {
+ width: 91.57800663886289%;
+ *width: 91.52481062218062%;
+}
+.row-fluid .span10 {
+ width: 83.15601327772576%;
+ *width: 83.1028172610435%;
+}
+.row-fluid .span9 {
+ width: 74.73401991658865%;
+ *width: 74.68082389990639%;
+}
+.row-fluid .span8 {
+ width: 66.31202655545152%;
+ *width: 66.25883053876926%;
+}
+.row-fluid .span7 {
+ width: 57.89003319431441%;
+ *width: 57.83683717763214%;
+}
+.row-fluid .span6 {
+ width: 49.468039833177286%;
+ *width: 49.414843816495015%;
+}
+.row-fluid .span5 {
+ width: 41.046046472040175%;
+ *width: 40.9928504553579%;
+}
+.row-fluid .span4 {
+ width: 32.624053110903056%;
+ *width: 32.570857094220784%;
+}
+.row-fluid .span3 {
+ width: 24.202059749765937%;
+ *width: 24.148863733083665%;
+}
+.row-fluid .span2 {
+ width: 15.78006638862882%;
+ *width: 15.726870371946548%;
+}
+.row-fluid .span1 {
+ width: 7.3580730274917014%;
+ *width: 7.304877010809431%;
+}
+.row-fluid .offset12 {
+ margin-left: 102.12784066729083%;
+ *margin-left: 102.02144863392631%;
+}
+.row-fluid .offset12:first-child {
+ margin-left: 101.06392033364541%;
+ *margin-left: 100.95752830028088%;
+}
+.row-fluid .offset11 {
+ margin-left: 93.70584730615371%;
+ *margin-left: 93.5994552727892%;
+}
+.row-fluid .offset11:first-child {
+ margin-left: 92.6419269725083%;
+ *margin-left: 92.53553493914377%;
+}
+.row-fluid .offset10 {
+ margin-left: 85.2838539450166%;
+ *margin-left: 85.17746191165206%;
+}
+.row-fluid .offset10:first-child {
+ margin-left: 84.21993361137118%;
+ *margin-left: 84.11354157800665%;
+}
+.row-fluid .offset9 {
+ margin-left: 76.86186058387949%;
+ *margin-left: 76.75546855051495%;
+}
+.row-fluid .offset9:first-child {
+ margin-left: 75.79794025023406%;
+ *margin-left: 75.69154821686953%;
+}
+.row-fluid .offset8 {
+ margin-left: 68.43986722274235%;
+ *margin-left: 68.33347518937784%;
+}
+.row-fluid .offset8:first-child {
+ margin-left: 67.37594688909694%;
+ *margin-left: 67.26955485573241%;
+}
+.row-fluid .offset7 {
+ margin-left: 60.017873861605246%;
+ *margin-left: 59.9114818282407%;
+}
+.row-fluid .offset7:first-child {
+ margin-left: 58.953953527959825%;
+ *margin-left: 58.84756149459529%;
+}
+.row-fluid .offset6 {
+ margin-left: 51.59588050046812%;
+ *margin-left: 51.48948846710358%;
+}
+.row-fluid .offset6:first-child {
+ margin-left: 50.5319601668227%;
+ *margin-left: 50.425568133458164%;
+}
+.row-fluid .offset5 {
+ margin-left: 43.17388713933101%;
+ *margin-left: 43.067495105966465%;
+}
+.row-fluid .offset5:first-child {
+ margin-left: 42.10996680568559%;
+ *margin-left: 42.00357477232105%;
+}
+.row-fluid .offset4 {
+ margin-left: 34.75189377819389%;
+ *margin-left: 34.645501744829346%;
+}
+.row-fluid .offset4:first-child {
+ margin-left: 33.687973444548476%;
+ *margin-left: 33.581581411183926%;
+}
+.row-fluid .offset3 {
+ margin-left: 26.32990041705677%;
+ *margin-left: 26.223508383692227%;
+}
+.row-fluid .offset3:first-child {
+ margin-left: 25.265980083411353%;
+ *margin-left: 25.15958805004681%;
+}
+.row-fluid .offset2 {
+ margin-left: 17.90790705591965%;
+ *margin-left: 17.801515022555108%;
+}
+.row-fluid .offset2:first-child {
+ margin-left: 16.843986722274238%;
+ *margin-left: 16.737594688909695%;
+}
+.row-fluid .offset1 {
+ margin-left: 9.485913694782536%;
+ *margin-left: 9.379521661417993%;
+}
+.row-fluid .offset1:first-child {
+ margin-left: 8.421993361137119%;
+ *margin-left: 8.315601327772576%;
+}
+[class*="span"].hide,
+.row-fluid [class*="span"].hide {
+ display: none;
+}
+[class*="span"].pull-right,
+.row-fluid [class*="span"].pull-right {
+ float: right;
+}
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ *zoom: 1;
+}
+.container:before,
+.container:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.container:after {
+ clear: both;
+}
+.container-fluid {
+ padding-right: 10px;
+ padding-left: 10px;
+ *zoom: 1;
+}
+.container-fluid:before,
+.container-fluid:after {
+ display: table;
+ content: "";
+ line-height: 0;
+}
+.container-fluid:after {
+ clear: both;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.hidden {
+ display: none;
+ visibility: hidden;
+}
+.visible-phone {
+ display: none !important;
+}
+.visible-tablet {
+ display: none !important;
+}
+.hidden-desktop {
+ display: none !important;
+}
+.visible-desktop {
+ display: inherit !important;
+}
+@media (min-width: 768px) and (max-width: 979px) {
+ .hidden-desktop {
+ display: inherit !important;
+ }
+ .visible-desktop {
+ display: none !important ;
+ }
+ .visible-tablet {
+ display: inherit !important;
+ }
+ .hidden-tablet {
+ display: none !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-desktop {
+ display: inherit !important;
+ }
+ .visible-desktop {
+ display: none !important;
+ }
+ .visible-phone {
+ display: inherit !important;
+ }
+ .hidden-phone {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: inherit !important;
+ }
+ .hidden-print {
+ display: none !important;
+ }
+}
+@media (max-width: 767px) {
+ body {
+ padding-left: 20px;
+ padding-right: 20px;
+ }
+ .navbar-fixed-top,
+ .navbar-fixed-bottom,
+ .navbar-static-top {
+ margin-left: -20px;
+ margin-right: -20px;
+ }
+ .container-fluid {
+ padding: 0;
+ }
+ .dl-horizontal dt {
+ float: none;
+ clear: none;
+ width: auto;
+ text-align: left;
+ }
+ .dl-horizontal dd {
+ margin-left: 0;
+ }
+ .container {
+ width: auto;
+ }
+ .row-fluid {
+ width: 100%;
+ }
+ .row,
+ .thumbnails {
+ margin-left: 0;
+ }
+ .thumbnails > li {
+ float: none;
+ margin-left: 0;
+ }
+ [class*="span"],
+ .uneditable-input[class*="span"],
+ .row-fluid [class*="span"] {
+ float: none;
+ display: block;
+ width: 100%;
+ margin-left: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .span12,
+ .row-fluid .span12 {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .row-fluid [class*="offset"]:first-child {
+ margin-left: 0;
+ }
+ .input-large,
+ .input-xlarge,
+ .input-xxlarge,
+ input[class*="span"],
+ select[class*="span"],
+ textarea[class*="span"],
+ .uneditable-input {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ .input-prepend input,
+ .input-append input,
+ .input-prepend input[class*="span"],
+ .input-append input[class*="span"] {
+ display: inline-block;
+ width: auto;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 0;
+ }
+ .modal {
+ position: fixed;
+ top: 20px;
+ left: 20px;
+ right: 20px;
+ width: auto;
+ margin: 0;
+ }
+ .modal.fade {
+ top: -100px;
+ }
+ .modal.fade.in {
+ top: 20px;
+ }
+}
+@media (max-width: 480px) {
+ .nav-collapse {
+ -webkit-transform: translate3d(0, 0, 0);
+ }
+ .page-header h1 small {
+ display: block;
+ line-height: 20px;
+ }
+ input[type="checkbox"],
+ input[type="radio"] {
+ border: 1px solid #ccc;
+ }
+ .form-horizontal .control-label {
+ float: none;
+ width: auto;
+ padding-top: 0;
+ text-align: left;
+ }
+ .form-horizontal .controls {
+ margin-left: 0;
+ }
+ .form-horizontal .control-list {
+ padding-top: 0;
+ }
+ .form-horizontal .form-actions {
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+ .media .pull-left,
+ .media .pull-right {
+ float: none;
+ display: block;
+ margin-bottom: 10px;
+ }
+ .media-object {
+ margin-right: 0;
+ margin-left: 0;
+ }
+ .modal {
+ top: 10px;
+ left: 10px;
+ right: 10px;
+ }
+ .modal-header .close {
+ padding: 10px;
+ margin: -10px;
+ }
+ .carousel-caption {
+ position: static;
+ }
+}
+@media (min-width: 768px) and (max-width: 979px) {
+ .row {
+ margin-left: -10px;
+ *zoom: 1;
+ }
+ .row:before,
+ .row:after {
+ display: table;
+ content: "";
+ line-height: 0;
+ }
+ .row:after {
+ clear: both;
+ }
+ [class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 10px;
+ }
+ .container,
+ .navbar-static-top .container,
+ .navbar-fixed-top .container,
+ .navbar-fixed-bottom .container {
+ width: 759.92px;
+ }
+ .span12 {
+ width: 759.92px;
+ }
+ .span11 {
+ width: 695.76px;
+ }
+ .span10 {
+ width: 631.5999999999999px;
+ }
+ .span9 {
+ width: 567.4399999999999px;
+ }
+ .span8 {
+ width: 503.28px;
+ }
+ .span7 {
+ width: 439.12px;
+ }
+ .span6 {
+ width: 374.96px;
+ }
+ .span5 {
+ width: 310.79999999999995px;
+ }
+ .span4 {
+ width: 246.64px;
+ }
+ .span3 {
+ width: 182.48px;
+ }
+ .span2 {
+ width: 118.32px;
+ }
+ .span1 {
+ width: 54.16px;
+ }
+ .offset12 {
+ margin-left: 779.92px;
+ }
+ .offset11 {
+ margin-left: 715.76px;
+ }
+ .offset10 {
+ margin-left: 651.5999999999999px;
+ }
+ .offset9 {
+ margin-left: 587.4399999999999px;
+ }
+ .offset8 {
+ margin-left: 523.28px;
+ }
+ .offset7 {
+ margin-left: 459.12px;
+ }
+ .offset6 {
+ margin-left: 394.96px;
+ }
+ .offset5 {
+ margin-left: 330.79999999999995px;
+ }
+ .offset4 {
+ margin-left: 266.64px;
+ }
+ .offset3 {
+ margin-left: 202.48px;
+ }
+ .offset2 {
+ margin-left: 138.32px;
+ }
+ .offset1 {
+ margin-left: 74.16px;
+ }
+ .row-fluid {
+ width: 100%;
+ *zoom: 1;
+ }
+ .row-fluid:before,
+ .row-fluid:after {
+ display: table;
+ content: "";
+ line-height: 0;
+ }
+ .row-fluid:after {
+ clear: both;
+ }
+ .row-fluid [class*="span"] {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ float: left;
+ margin-left: 1.315927992420255%;
+ *margin-left: 1.262731975737984%;
+ }
+ .row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+ }
+ .row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 1.315927992420255%;
+ }
+ .row-fluid .span12 {
+ width: 100.00000000000001%;
+ *width: 99.94680398331775%;
+ }
+ .row-fluid .span11 {
+ width: 91.55700600063165%;
+ *width: 91.50380998394938%;
+ }
+ .row-fluid .span10 {
+ width: 83.11401200126329%;
+ *width: 83.06081598458103%;
+ }
+ .row-fluid .span9 {
+ width: 74.67101800189494%;
+ *width: 74.61782198521267%;
+ }
+ .row-fluid .span8 {
+ width: 66.22802400252658%;
+ *width: 66.17482798584432%;
+ }
+ .row-fluid .span7 {
+ width: 57.785030003158234%;
+ *width: 57.73183398647596%;
+ }
+ .row-fluid .span6 {
+ width: 49.34203600378988%;
+ *width: 49.28883998710761%;
+ }
+ .row-fluid .span5 {
+ width: 40.89904200442152%;
+ *width: 40.845845987739246%;
+ }
+ .row-fluid .span4 {
+ width: 32.45604800505316%;
+ *width: 32.40285198837089%;
+ }
+ .row-fluid .span3 {
+ width: 24.01305400568481%;
+ *width: 23.95985798900254%;
+ }
+ .row-fluid .span2 {
+ width: 15.570060006316455%;
+ *width: 15.516863989634183%;
+ }
+ .row-fluid .span1 {
+ width: 7.1270660069481%;
+ *width: 7.0738699902658295%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 102.63185598484053%;
+ *margin-left: 102.525463951476%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 101.31592799242027%;
+ *margin-left: 101.20953595905574%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 94.18886198547216%;
+ *margin-left: 94.08246995210763%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 92.8729339930519%;
+ *margin-left: 92.76654195968737%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 85.7458679861038%;
+ *margin-left: 85.63947595273928%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 84.42993999368355%;
+ *margin-left: 84.32354796031902%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 77.30287398673545%;
+ *margin-left: 77.19648195337092%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 75.98694599431519%;
+ *margin-left: 75.88055396095066%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 68.8598799873671%;
+ *margin-left: 68.75348795400257%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 67.54395199494684%;
+ *margin-left: 67.43755996158231%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 60.41688598799875%;
+ *margin-left: 60.310493954634204%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 59.10095799557849%;
+ *margin-left: 58.99456596221395%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 51.97389198863039%;
+ *margin-left: 51.86749995526585%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 50.657963996210135%;
+ *margin-left: 50.55157196284559%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 43.53089798926203%;
+ *margin-left: 43.42450595589749%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.21496999684177%;
+ *margin-left: 42.10857796347723%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 35.087903989893675%;
+ *margin-left: 34.98151195652913%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 33.77197599747342%;
+ *margin-left: 33.665583964108876%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 26.64490999052532%;
+ *margin-left: 26.538517957160778%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.328981998105068%;
+ *margin-left: 25.222589964740525%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 18.201915991156966%;
+ *margin-left: 18.095523957792423%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 16.88598799873671%;
+ *margin-left: 16.779595965372167%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 9.75892199178861%;
+ *margin-left: 9.652529958424068%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.442993999368355%;
+ *margin-left: 8.336601966003814%;
+ }
+ input,
+ textarea,
+ .uneditable-input {
+ margin-left: 0;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 10px;
+ }
+ input.span12,
+ textarea.span12,
+ .uneditable-input.span12 {
+ width: 745.92px;
+ }
+ input.span11,
+ textarea.span11,
+ .uneditable-input.span11 {
+ width: 681.76px;
+ }
+ input.span10,
+ textarea.span10,
+ .uneditable-input.span10 {
+ width: 617.5999999999999px;
+ }
+ input.span9,
+ textarea.span9,
+ .uneditable-input.span9 {
+ width: 553.4399999999999px;
+ }
+ input.span8,
+ textarea.span8,
+ .uneditable-input.span8 {
+ width: 489.28px;
+ }
+ input.span7,
+ textarea.span7,
+ .uneditable-input.span7 {
+ width: 425.12px;
+ }
+ input.span6,
+ textarea.span6,
+ .uneditable-input.span6 {
+ width: 360.96px;
+ }
+ input.span5,
+ textarea.span5,
+ .uneditable-input.span5 {
+ width: 296.79999999999995px;
+ }
+ input.span4,
+ textarea.span4,
+ .uneditable-input.span4 {
+ width: 232.64px;
+ }
+ input.span3,
+ textarea.span3,
+ .uneditable-input.span3 {
+ width: 168.48px;
+ }
+ input.span2,
+ textarea.span2,
+ .uneditable-input.span2 {
+ width: 104.32px;
+ }
+ input.span1,
+ textarea.span1,
+ .uneditable-input.span1 {
+ width: 40.16px;
+ }
+}
+@media (min-width: 1200px) {
+ .row {
+ margin-left: -10px;
+ *zoom: 1;
+ }
+ .row:before,
+ .row:after {
+ display: table;
+ content: "";
+ line-height: 0;
+ }
+ .row:after {
+ clear: both;
+ }
+ [class*="span"] {
+ float: left;
+ min-height: 1px;
+ margin-left: 10px;
+ }
+ .container,
+ .navbar-static-top .container,
+ .navbar-fixed-top .container,
+ .navbar-fixed-bottom .container {
+ width: 1169.96px;
+ }
+ .span12 {
+ width: 1169.96px;
+ }
+ .span11 {
+ width: 1071.63px;
+ }
+ .span10 {
+ width: 973.3px;
+ }
+ .span9 {
+ width: 874.97px;
+ }
+ .span8 {
+ width: 776.64px;
+ }
+ .span7 {
+ width: 678.31px;
+ }
+ .span6 {
+ width: 579.98px;
+ }
+ .span5 {
+ width: 481.65px;
+ }
+ .span4 {
+ width: 383.32px;
+ }
+ .span3 {
+ width: 284.99px;
+ }
+ .span2 {
+ width: 186.66px;
+ }
+ .span1 {
+ width: 88.33px;
+ }
+ .offset12 {
+ margin-left: 1189.96px;
+ }
+ .offset11 {
+ margin-left: 1091.63px;
+ }
+ .offset10 {
+ margin-left: 993.3px;
+ }
+ .offset9 {
+ margin-left: 894.97px;
+ }
+ .offset8 {
+ margin-left: 796.64px;
+ }
+ .offset7 {
+ margin-left: 698.31px;
+ }
+ .offset6 {
+ margin-left: 599.98px;
+ }
+ .offset5 {
+ margin-left: 501.65px;
+ }
+ .offset4 {
+ margin-left: 403.32px;
+ }
+ .offset3 {
+ margin-left: 304.99px;
+ }
+ .offset2 {
+ margin-left: 206.66px;
+ }
+ .offset1 {
+ margin-left: 108.33px;
+ }
+ .row-fluid {
+ width: 100%;
+ *zoom: 1;
+ }
+ .row-fluid:before,
+ .row-fluid:after {
+ display: table;
+ content: "";
+ line-height: 0;
+ }
+ .row-fluid:after {
+ clear: both;
+ }
+ .row-fluid [class*="span"] {
+ display: block;
+ width: 100%;
+ min-height: 30px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ float: left;
+ margin-left: 0.8547300762419228%;
+ *margin-left: 0.801534059559652%;
+ }
+ .row-fluid [class*="span"]:first-child {
+ margin-left: 0;
+ }
+ .row-fluid .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 0.8547300762419228%;
+ }
+ .row-fluid .span12 {
+ width: 100%;
+ *width: 99.94680398331774%;
+ }
+ .row-fluid .span11 {
+ width: 91.59543916031316%;
+ *width: 91.5422431436309%;
+ }
+ .row-fluid .span10 {
+ width: 83.19087832062634%;
+ *width: 83.13768230394408%;
+ }
+ .row-fluid .span9 {
+ width: 74.78631748093952%;
+ *width: 74.73312146425725%;
+ }
+ .row-fluid .span8 {
+ width: 66.3817566412527%;
+ *width: 66.32856062457043%;
+ }
+ .row-fluid .span7 {
+ width: 57.97719580156586%;
+ *width: 57.92399978488359%;
+ }
+ .row-fluid .span6 {
+ width: 49.57263496187904%;
+ *width: 49.51943894519677%;
+ }
+ .row-fluid .span5 {
+ width: 41.16807412219221%;
+ *width: 41.11487810550994%;
+ }
+ .row-fluid .span4 {
+ width: 32.763513282505386%;
+ *width: 32.710317265823114%;
+ }
+ .row-fluid .span3 {
+ width: 24.35895244281856%;
+ *width: 24.305756426136288%;
+ }
+ .row-fluid .span2 {
+ width: 15.95439160313173%;
+ *width: 15.90119558644946%;
+ }
+ .row-fluid .span1 {
+ width: 7.549830763444904%;
+ *width: 7.496634746762633%;
+ }
+ .row-fluid .offset12 {
+ margin-left: 101.70946015248384%;
+ *margin-left: 101.60306811911931%;
+ }
+ .row-fluid .offset12:first-child {
+ margin-left: 100.85473007624192%;
+ *margin-left: 100.74833804287739%;
+ }
+ .row-fluid .offset11 {
+ margin-left: 93.304899312797%;
+ *margin-left: 93.19850727943248%;
+ }
+ .row-fluid .offset11:first-child {
+ margin-left: 92.45016923655508%;
+ *margin-left: 92.34377720319056%;
+ }
+ .row-fluid .offset10 {
+ margin-left: 84.90033847311018%;
+ *margin-left: 84.79394643974565%;
+ }
+ .row-fluid .offset10:first-child {
+ margin-left: 84.04560839686826%;
+ *margin-left: 83.93921636350373%;
+ }
+ .row-fluid .offset9 {
+ margin-left: 76.49577763342336%;
+ *margin-left: 76.38938560005883%;
+ }
+ .row-fluid .offset9:first-child {
+ margin-left: 75.64104755718144%;
+ *margin-left: 75.53465552381691%;
+ }
+ .row-fluid .offset8 {
+ margin-left: 68.09121679373654%;
+ *margin-left: 67.984824760372%;
+ }
+ .row-fluid .offset8:first-child {
+ margin-left: 67.23648671749461%;
+ *margin-left: 67.13009468413009%;
+ }
+ .row-fluid .offset7 {
+ margin-left: 59.686655954049705%;
+ *margin-left: 59.58026392068516%;
+ }
+ .row-fluid .offset7:first-child {
+ margin-left: 58.831925877807784%;
+ *margin-left: 58.72553384444324%;
+ }
+ .row-fluid .offset6 {
+ margin-left: 51.28209511436288%;
+ *margin-left: 51.17570308099834%;
+ }
+ .row-fluid .offset6:first-child {
+ margin-left: 50.42736503812096%;
+ *margin-left: 50.32097300475642%;
+ }
+ .row-fluid .offset5 {
+ margin-left: 42.87753427467605%;
+ *margin-left: 42.77114224131151%;
+ }
+ .row-fluid .offset5:first-child {
+ margin-left: 42.02280419843413%;
+ *margin-left: 41.91641216506959%;
+ }
+ .row-fluid .offset4 {
+ margin-left: 34.47297343498923%;
+ *margin-left: 34.366581401624686%;
+ }
+ .row-fluid .offset4:first-child {
+ margin-left: 33.61824335874731%;
+ *margin-left: 33.511851325382764%;
+ }
+ .row-fluid .offset3 {
+ margin-left: 26.068412595302405%;
+ *margin-left: 25.962020561937862%;
+ }
+ .row-fluid .offset3:first-child {
+ margin-left: 25.21368251906048%;
+ *margin-left: 25.107290485695938%;
+ }
+ .row-fluid .offset2 {
+ margin-left: 17.663851755615575%;
+ *margin-left: 17.557459722251032%;
+ }
+ .row-fluid .offset2:first-child {
+ margin-left: 16.809121679373654%;
+ *margin-left: 16.70272964600911%;
+ }
+ .row-fluid .offset1 {
+ margin-left: 9.25929091592875%;
+ *margin-left: 9.152898882564207%;
+ }
+ .row-fluid .offset1:first-child {
+ margin-left: 8.404560839686827%;
+ *margin-left: 8.298168806322284%;
+ }
+ input,
+ textarea,
+ .uneditable-input {
+ margin-left: 0;
+ }
+ .controls-row [class*="span"] + [class*="span"] {
+ margin-left: 10px;
+ }
+ input.span12,
+ textarea.span12,
+ .uneditable-input.span12 {
+ width: 1155.96px;
+ }
+ input.span11,
+ textarea.span11,
+ .uneditable-input.span11 {
+ width: 1057.63px;
+ }
+ input.span10,
+ textarea.span10,
+ .uneditable-input.span10 {
+ width: 959.3px;
+ }
+ input.span9,
+ textarea.span9,
+ .uneditable-input.span9 {
+ width: 860.97px;
+ }
+ input.span8,
+ textarea.span8,
+ .uneditable-input.span8 {
+ width: 762.64px;
+ }
+ input.span7,
+ textarea.span7,
+ .uneditable-input.span7 {
+ width: 664.31px;
+ }
+ input.span6,
+ textarea.span6,
+ .uneditable-input.span6 {
+ width: 565.98px;
+ }
+ input.span5,
+ textarea.span5,
+ .uneditable-input.span5 {
+ width: 467.65px;
+ }
+ input.span4,
+ textarea.span4,
+ .uneditable-input.span4 {
+ width: 369.32px;
+ }
+ input.span3,
+ textarea.span3,
+ .uneditable-input.span3 {
+ width: 270.99px;
+ }
+ input.span2,
+ textarea.span2,
+ .uneditable-input.span2 {
+ width: 172.66px;
+ }
+ input.span1,
+ textarea.span1,
+ .uneditable-input.span1 {
+ width: 74.33px;
+ }
+ .thumbnails {
+ margin-left: -10px;
+ }
+ .thumbnails > li {
+ margin-left: 10px;
+ }
+ .row-fluid .thumbnails {
+ margin-left: 0;
+ }
+}
+@media (max-width: 979px) {
+ body {
+ padding-top: 0;
+ }
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ position: static;
+ }
+ .navbar-fixed-top {
+ margin-bottom: 20px;
+ }
+ .navbar-fixed-bottom {
+ margin-top: 20px;
+ }
+ .navbar-fixed-top .navbar-inner,
+ .navbar-fixed-bottom .navbar-inner {
+ padding: 5px;
+ }
+ .navbar .container {
+ width: auto;
+ padding: 0;
+ }
+ .navbar .brand {
+ padding-left: 10px;
+ padding-right: 10px;
+ margin: 0 0 0 -5px;
+ }
+ .nav-collapse {
+ clear: both;
+ }
+ .nav-collapse .nav {
+ float: none;
+ margin: 0 0 10px;
+ }
+ .nav-collapse .nav > li {
+ float: none;
+ }
+ .nav-collapse .nav > li > a {
+ margin-bottom: 2px;
+ }
+ .nav-collapse .nav > .divider-vertical {
+ display: none;
+ }
+ .nav-collapse .nav .nav-header {
+ color: #777777;
+ text-shadow: none;
+ }
+ .nav-collapse .nav > li > a,
+ .nav-collapse .dropdown-menu a {
+ padding: 9px 15px;
+ font-weight: bold;
+ color: #777777;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ }
+ .nav-collapse .btn {
+ padding: 4px 10px 4px;
+ font-weight: normal;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ }
+ .nav-collapse .dropdown-menu li + li a {
+ margin-bottom: 2px;
+ }
+ .nav-collapse .nav > li > a:hover,
+ .nav-collapse .nav > li > a:focus,
+ .nav-collapse .dropdown-menu a:hover,
+ .nav-collapse .dropdown-menu a:focus {
+ background-color: #f2f2f2;
+ }
+ .navbar-inverse .nav-collapse .nav > li > a,
+ .navbar-inverse .nav-collapse .dropdown-menu a {
+ color: #999999;
+ }
+ .navbar-inverse .nav-collapse .nav > li > a:hover,
+ .navbar-inverse .nav-collapse .nav > li > a:focus,
+ .navbar-inverse .nav-collapse .dropdown-menu a:hover,
+ .navbar-inverse .nav-collapse .dropdown-menu a:focus {
+ background-color: #111111;
+ }
+ .nav-collapse.in .btn-group {
+ margin-top: 5px;
+ padding: 0;
+ }
+ .nav-collapse .dropdown-menu {
+ position: static;
+ top: auto;
+ left: auto;
+ float: none;
+ display: none;
+ max-width: none;
+ margin: 0 15px;
+ padding: 0;
+ background-color: transparent;
+ border: none;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ }
+ .nav-collapse .open > .dropdown-menu {
+ display: block;
+ }
+ .nav-collapse .dropdown-menu:before,
+ .nav-collapse .dropdown-menu:after {
+ display: none;
+ }
+ .nav-collapse .dropdown-menu .divider {
+ display: none;
+ }
+ .nav-collapse .nav > li > .dropdown-menu:before,
+ .nav-collapse .nav > li > .dropdown-menu:after {
+ display: none;
+ }
+ .nav-collapse .navbar-form,
+ .nav-collapse .navbar-search {
+ float: none;
+ padding: 10px 15px;
+ margin: 10px 0;
+ border-top: 1px solid #f2f2f2;
+ border-bottom: 1px solid #f2f2f2;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
+ -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
+ box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
+ }
+ .navbar-inverse .nav-collapse .navbar-form,
+ .navbar-inverse .nav-collapse .navbar-search {
+ border-top-color: #111111;
+ border-bottom-color: #111111;
+ }
+ .navbar .nav-collapse .nav.pull-right {
+ float: none;
+ margin-left: 0;
+ }
+ .nav-collapse,
+ .nav-collapse.collapse {
+ overflow: hidden;
+ height: 0;
+ }
+ .navbar .btn-navbar {
+ display: block;
+ }
+ .navbar-static .navbar-inner {
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+}
+@media (min-width: 980px) {
+ .nav-collapse.collapse {
+ height: auto !important;
+ overflow: visible !important;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.min.css
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.min.css b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.min.css
new file mode 100644
index 0000000..b5ab0a4
--- /dev/null
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/css/bootstrap.min.css
@@ -0,0 +1,114 @@
+/*!
+ * Bootstrap v2.3.2
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0;}
+.clearfix:after{clear:both;}
+.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;}
+.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
+article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
+audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
+audio:not([controls]){display:none;}
+html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
+a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
+a:hover,a:active{outline:0;}
+sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
+sup{top:-0.5em;}
+sub{bottom:-0.25em;}
+img{max-width:100%;width:auto\9;height:auto;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic;}
+#map_canvas img,.google-maps img{max-width:none;}
+button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
+button,input{*overflow:visible;line-height:normal;}
+button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
+button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;}
+label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer;}
+input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield;}
+input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
+textarea{overflow:auto;vertical-align:top;}
+@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important;} a,a:visited{text-decoration:underline;} a[href]:after{content:" (" attr(href) ")";} abbr[title]:after{content:" (" attr(title) ")";} .ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:"";} pre,blockquote{border:1px solid #999;page-break-inside:avoid;} thead{display:table-header-group;} tr,img{page-break-inside:avoid;} img{max-width:100% !important;} @page {margin:0.5cm;}p,h2,h3{orphans:3;widows:3;} h2,h3{page-break-after:avoid;}}.row{margin-left:-10px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;}
+.row:after{clear:both;}
+[class*="span"]{float:left;min-height:1px;margin-left:10px;}
+.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:939.92px;}
+.span12{width:939.92px;}
+.span11{width:860.76px;}
+.span10{width:781.5999999999999px;}
+.span9{width:702.4399999999999px;}
+.span8{width:623.28px;}
+.span7{width:544.12px;}
+.span6{width:464.96px;}
+.span5{width:385.79999999999995px;}
+.span4{width:306.64px;}
+.span3{width:227.48px;}
+.span2{width:148.32px;}
+.span1{width:69.16px;}
+.offset12{margin-left:959.92px;}
+.offset11{margin-left:880.76px;}
+.offset10{margin-left:801.5999999999999px;}
+.offset9{margin-left:722.4399999999999px;}
+.offset8{margin-left:643.28px;}
+.offset7{margin-left:564.12px;}
+.offset6{margin-left:484.96px;}
+.offset5{margin-left:405.79999999999995px;}
+.offset4{margin-left:326.64px;}
+.offset3{margin-left:247.48px;}
+.offset2{margin-left:168.32px;}
+.offset1{margin-left:89.16px;}
+.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;}
+.row-fluid:after{clear:both;}
+.row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:1.0639203336454166%;*margin-left:1.0107243169631457%;}
+.row-fluid [class*="span"]:first-child{margin-left:0;}
+.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:1.0639203336454166%;}
+.row-fluid .span12{width:100%;*width:99.94680398331774%;}
+.row-fluid .span11{width:91.57800663886289%;*width:91.52481062218062%;}
+.row-fluid .span10{width:83.15601327772576%;*width:83.1028172610435%;}
+.row-fluid .span9{width:74.73401991658865%;*width:74.68082389990639%;}
+.row-fluid .span8{width:66.31202655545152%;*width:66.25883053876926%;}
+.row-fluid .span7{width:57.89003319431441%;*width:57.83683717763214%;}
+.row-fluid .span6{width:49.468039833177286%;*width:49.414843816495015%;}
+.row-fluid .span5{width:41.046046472040175%;*width:40.9928504553579%;}
+.row-fluid .span4{width:32.624053110903056%;*width:32.570857094220784%;}
+.row-fluid .span3{width:24.202059749765937%;*width:24.148863733083665%;}
+.row-fluid .span2{width:15.78006638862882%;*width:15.726870371946548%;}
+.row-fluid .span1{width:7.3580730274917014%;*width:7.304877010809431%;}
+.row-fluid .offset12{margin-left:102.12784066729083%;*margin-left:102.02144863392631%;}
+.row-fluid .offset12:first-child{margin-left:101.06392033364541%;*margin-left:100.95752830028088%;}
+.row-fluid .offset11{margin-left:93.70584730615371%;*margin-left:93.5994552727892%;}
+.row-fluid .offset11:first-child{margin-left:92.6419269725083%;*margin-left:92.53553493914377%;}
+.row-fluid .offset10{margin-left:85.2838539450166%;*margin-left:85.17746191165206%;}
+.row-fluid .offset10:first-child{margin-left:84.21993361137118%;*margin-left:84.11354157800665%;}
+.row-fluid .offset9{margin-left:76.86186058387949%;*margin-left:76.75546855051495%;}
+.row-fluid .offset9:first-child{margin-left:75.79794025023406%;*margin-left:75.69154821686953%;}
+.row-fluid .offset8{margin-left:68.43986722274235%;*margin-left:68.33347518937784%;}
+.row-fluid .offset8:first-child{margin-left:67.37594688909694%;*margin-left:67.26955485573241%;}
+.row-fluid .offset7{margin-left:60.017873861605246%;*margin-left:59.9114818282407%;}
+.row-fluid .offset7:first-child{margin-left:58.953953527959825%;*margin-left:58.84756149459529%;}
+.row-fluid .offset6{margin-left:51.59588050046812%;*margin-left:51.48948846710358%;}
+.row-fluid .offset6:first-child{margin-left:50.5319601668227%;*margin-left:50.425568133458164%;}
+.row-fluid .offset5{margin-left:43.17388713933101%;*margin-left:43.067495105966465%;}
+.row-fluid .offset5:first-child{margin-left:42.10996680568559%;*margin-left:42.00357477232105%;}
+.row-fluid .offset4{margin-left:34.75189377819389%;*margin-left:34.645501744829346%;}
+.row-fluid .offset4:first-child{margin-left:33.687973444548476%;*margin-left:33.581581411183926%;}
+.row-fluid .offset3{margin-left:26.32990041705677%;*margin-left:26.223508383692227%;}
+.row-fluid .offset3:first-child{margin-left:25.265980083411353%;*margin-left:25.15958805004681%;}
+.row-fluid .offset2{margin-left:17.90790705591965%;*margin-left:17.801515022555108%;}
+.row-fluid .offset2:first-child{margin-left:16.843986722274238%;*margin-left:16.737594688909695%;}
+.row-fluid .offset1{margin-left:9.485913694782536%;*margin-left:9.379521661417993%;}
+.row-fluid .offset1:first-child{margin-left:8.421993361137119%;*margin-left:8.315601327772576%;}
+[class*="span"].hide,.row-fluid [class*="span"].hide{display:none;}
+[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right;}
+.container{margin-right:auto;margin-left:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";line-height:0;}
+.container:after{clear:both;}
+.container-fluid{padding-right:10px;padding-left:10px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";line-height:0;}
+.container-fluid:after{clear:both;}
+@-ms-viewport{width:device-width;}.hidden{display:none;visibility:hidden;}
+.visible-phone{display:none !important;}
+.visible-tablet{display:none !important;}
+.hidden-desktop{display:none !important;}
+.visible-desktop{display:inherit !important;}
+@media (min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important ;} .visible-tablet{display:inherit !important;} .hidden-tablet{display:none !important;}}@media (max-width:767px){.hidden-desktop{display:inherit !important;} .visible-desktop{display:none !important;} .visible-phone{display:inherit !important;} .hidden-phone{display:none !important;}}.visible-print{display:none !important;}
+@media print{.visible-print{display:inherit !important;} .hidden-print{display:none !important;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-left:-20px;margin-right:-20px;} .container-fluid{padding:0;} .dl-horizontal dt{float:none;clear:none;width:auto;text-align:left;} .dl-horizontal dd{margin-left:0;} .container{width:auto;} .row-fluid{width:100%;} .row,.thumbnails{margin-left:0;} .thumbnails>li{float:none;margin-left:0;} [class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{float:none;display:block;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .row-fluid [class*="offset"]:first-child{margin-left:0;} .input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[cl
ass*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;} .input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto;} .controls-row [class*="span"]+[class*="span"]{margin-left:0;} .modal{position:fixed;top:20px;left:20px;right:20px;width:auto;margin:0;}.modal.fade{top:-100px;} .modal.fade.in{top:20px;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:20px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .media .pull-left,.media .pull-right{float:none;display:block;ma
rgin-bottom:10px;} .media-object{margin-right:0;margin-left:0;} .modal{top:10px;left:10px;right:10px;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-10px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:left;min-height:1px;margin-left:10px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:759.92px;} .span12{width:759.92px;} .span11{width:695.76px;} .span10{width:631.5999999999999px;} .span9{width:567.4399999999999px;} .span8{width:503.28px;} .span7{width:439.12px;} .span6{width:374.96px;} .span5{width:310.79999999999995px;} .span4{width:246.64px;} .span3{width:182.48px;} .span2{width:118.32px;} .span1{width:54.16px;} .offset12{margin-left:779.92px;} .offset11{margin-left:715.76px;} .offset10{margin-left:651.5999999999999px;} .offset9{margin-left:587.439
9999999999px;} .offset8{margin-left:523.28px;} .offset7{margin-left:459.12px;} .offset6{margin-left:394.96px;} .offset5{margin-left:330.79999999999995px;} .offset4{margin-left:266.64px;} .offset3{margin-left:202.48px;} .offset2{margin-left:138.32px;} .offset1{margin-left:74.16px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="span"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:1.315927992420255%;*margin-left:1.262731975737984%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:1.315927992420255%;} .row-fluid .span12{width:100.00000000000001%;*width:99.94680398331775%;} .row-fluid .span11{width:91.55700600063165%;*width:91.50380998394938%;} .row-fluid .span10{width:83.11401200126329%;*width:83.06081598458
103%;} .row-fluid .span9{width:74.67101800189494%;*width:74.61782198521267%;} .row-fluid .span8{width:66.22802400252658%;*width:66.17482798584432%;} .row-fluid .span7{width:57.785030003158234%;*width:57.73183398647596%;} .row-fluid .span6{width:49.34203600378988%;*width:49.28883998710761%;} .row-fluid .span5{width:40.89904200442152%;*width:40.845845987739246%;} .row-fluid .span4{width:32.45604800505316%;*width:32.40285198837089%;} .row-fluid .span3{width:24.01305400568481%;*width:23.95985798900254%;} .row-fluid .span2{width:15.570060006316455%;*width:15.516863989634183%;} .row-fluid .span1{width:7.1270660069481%;*width:7.0738699902658295%;} .row-fluid .offset12{margin-left:102.63185598484053%;*margin-left:102.525463951476%;} .row-fluid .offset12:first-child{margin-left:101.31592799242027%;*margin-left:101.20953595905574%;} .row-fluid .offset11{margin-left:94.18886198547216%;*margin-left:94.08246995210763%;} .row-fluid .offset11:first-child{margin-left:92.8729339930519%;*margin-left:
92.76654195968737%;} .row-fluid .offset10{margin-left:85.7458679861038%;*margin-left:85.63947595273928%;} .row-fluid .offset10:first-child{margin-left:84.42993999368355%;*margin-left:84.32354796031902%;} .row-fluid .offset9{margin-left:77.30287398673545%;*margin-left:77.19648195337092%;} .row-fluid .offset9:first-child{margin-left:75.98694599431519%;*margin-left:75.88055396095066%;} .row-fluid .offset8{margin-left:68.8598799873671%;*margin-left:68.75348795400257%;} .row-fluid .offset8:first-child{margin-left:67.54395199494684%;*margin-left:67.43755996158231%;} .row-fluid .offset7{margin-left:60.41688598799875%;*margin-left:60.310493954634204%;} .row-fluid .offset7:first-child{margin-left:59.10095799557849%;*margin-left:58.99456596221395%;} .row-fluid .offset6{margin-left:51.97389198863039%;*margin-left:51.86749995526585%;} .row-fluid .offset6:first-child{margin-left:50.657963996210135%;*margin-left:50.55157196284559%;} .row-fluid .offset5{margin-left:43.53089798926203%;*margin-left:
43.42450595589749%;} .row-fluid .offset5:first-child{margin-left:42.21496999684177%;*margin-left:42.10857796347723%;} .row-fluid .offset4{margin-left:35.087903989893675%;*margin-left:34.98151195652913%;} .row-fluid .offset4:first-child{margin-left:33.77197599747342%;*margin-left:33.665583964108876%;} .row-fluid .offset3{margin-left:26.64490999052532%;*margin-left:26.538517957160778%;} .row-fluid .offset3:first-child{margin-left:25.328981998105068%;*margin-left:25.222589964740525%;} .row-fluid .offset2{margin-left:18.201915991156966%;*margin-left:18.095523957792423%;} .row-fluid .offset2:first-child{margin-left:16.88598799873671%;*margin-left:16.779595965372167%;} .row-fluid .offset1{margin-left:9.75892199178861%;*margin-left:9.652529958424068%;} .row-fluid .offset1:first-child{margin-left:8.442993999368355%;*margin-left:8.336601966003814%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:10px;} input.span12,textarea.span12,.
uneditable-input.span12{width:745.92px;} input.span11,textarea.span11,.uneditable-input.span11{width:681.76px;} input.span10,textarea.span10,.uneditable-input.span10{width:617.5999999999999px;} input.span9,textarea.span9,.uneditable-input.span9{width:553.4399999999999px;} input.span8,textarea.span8,.uneditable-input.span8{width:489.28px;} input.span7,textarea.span7,.uneditable-input.span7{width:425.12px;} input.span6,textarea.span6,.uneditable-input.span6{width:360.96px;} input.span5,textarea.span5,.uneditable-input.span5{width:296.79999999999995px;} input.span4,textarea.span4,.uneditable-input.span4{width:232.64px;} input.span3,textarea.span3,.uneditable-input.span3{width:168.48px;} input.span2,textarea.span2,.uneditable-input.span2{width:104.32px;} input.span1,textarea.span1,.uneditable-input.span1{width:40.16px;}}@media (min-width:1200px){.row{margin-left:-10px;*zoom:1;}.row:before,.row:after{display:table;content:"";line-height:0;} .row:after{clear:both;} [class*="span"]{float:l
eft;min-height:1px;margin-left:10px;} .container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1169.96px;} .span12{width:1169.96px;} .span11{width:1071.63px;} .span10{width:973.3px;} .span9{width:874.97px;} .span8{width:776.64px;} .span7{width:678.31px;} .span6{width:579.98px;} .span5{width:481.65px;} .span4{width:383.32px;} .span3{width:284.99px;} .span2{width:186.66px;} .span1{width:88.33px;} .offset12{margin-left:1189.96px;} .offset11{margin-left:1091.63px;} .offset10{margin-left:993.3px;} .offset9{margin-left:894.97px;} .offset8{margin-left:796.64px;} .offset7{margin-left:698.31px;} .offset6{margin-left:599.98px;} .offset5{margin-left:501.65px;} .offset4{margin-left:403.32px;} .offset3{margin-left:304.99px;} .offset2{margin-left:206.66px;} .offset1{margin-left:108.33px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";line-height:0;} .row-fluid:after{clear:both;} .row-fluid [class*="spa
n"]{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;float:left;margin-left:0.8547300762419228%;*margin-left:0.801534059559652%;} .row-fluid [class*="span"]:first-child{margin-left:0;} .row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:0.8547300762419228%;} .row-fluid .span12{width:100%;*width:99.94680398331774%;} .row-fluid .span11{width:91.59543916031316%;*width:91.5422431436309%;} .row-fluid .span10{width:83.19087832062634%;*width:83.13768230394408%;} .row-fluid .span9{width:74.78631748093952%;*width:74.73312146425725%;} .row-fluid .span8{width:66.3817566412527%;*width:66.32856062457043%;} .row-fluid .span7{width:57.97719580156586%;*width:57.92399978488359%;} .row-fluid .span6{width:49.57263496187904%;*width:49.51943894519677%;} .row-fluid .span5{width:41.16807412219221%;*width:41.11487810550994%;} .row-fluid .span4{width:32.763513282505386%;*width:32.710317265823114%;} .row-fluid .span3{widt
h:24.35895244281856%;*width:24.305756426136288%;} .row-fluid .span2{width:15.95439160313173%;*width:15.90119558644946%;} .row-fluid .span1{width:7.549830763444904%;*width:7.496634746762633%;} .row-fluid .offset12{margin-left:101.70946015248384%;*margin-left:101.60306811911931%;} .row-fluid .offset12:first-child{margin-left:100.85473007624192%;*margin-left:100.74833804287739%;} .row-fluid .offset11{margin-left:93.304899312797%;*margin-left:93.19850727943248%;} .row-fluid .offset11:first-child{margin-left:92.45016923655508%;*margin-left:92.34377720319056%;} .row-fluid .offset10{margin-left:84.90033847311018%;*margin-left:84.79394643974565%;} .row-fluid .offset10:first-child{margin-left:84.04560839686826%;*margin-left:83.93921636350373%;} .row-fluid .offset9{margin-left:76.49577763342336%;*margin-left:76.38938560005883%;} .row-fluid .offset9:first-child{margin-left:75.64104755718144%;*margin-left:75.53465552381691%;} .row-fluid .offset8{margin-left:68.09121679373654%;*margin-left:67.98
4824760372%;} .row-fluid .offset8:first-child{margin-left:67.23648671749461%;*margin-left:67.13009468413009%;} .row-fluid .offset7{margin-left:59.686655954049705%;*margin-left:59.58026392068516%;} .row-fluid .offset7:first-child{margin-left:58.831925877807784%;*margin-left:58.72553384444324%;} .row-fluid .offset6{margin-left:51.28209511436288%;*margin-left:51.17570308099834%;} .row-fluid .offset6:first-child{margin-left:50.42736503812096%;*margin-left:50.32097300475642%;} .row-fluid .offset5{margin-left:42.87753427467605%;*margin-left:42.77114224131151%;} .row-fluid .offset5:first-child{margin-left:42.02280419843413%;*margin-left:41.91641216506959%;} .row-fluid .offset4{margin-left:34.47297343498923%;*margin-left:34.366581401624686%;} .row-fluid .offset4:first-child{margin-left:33.61824335874731%;*margin-left:33.511851325382764%;} .row-fluid .offset3{margin-left:26.068412595302405%;*margin-left:25.962020561937862%;} .row-fluid .offset3:first-child{margin-left:25.21368251906048%;*mar
gin-left:25.107290485695938%;} .row-fluid .offset2{margin-left:17.663851755615575%;*margin-left:17.557459722251032%;} .row-fluid .offset2:first-child{margin-left:16.809121679373654%;*margin-left:16.70272964600911%;} .row-fluid .offset1{margin-left:9.25929091592875%;*margin-left:9.152898882564207%;} .row-fluid .offset1:first-child{margin-left:8.404560839686827%;*margin-left:8.298168806322284%;} input,textarea,.uneditable-input{margin-left:0;} .controls-row [class*="span"]+[class*="span"]{margin-left:10px;} input.span12,textarea.span12,.uneditable-input.span12{width:1155.96px;} input.span11,textarea.span11,.uneditable-input.span11{width:1057.63px;} input.span10,textarea.span10,.uneditable-input.span10{width:959.3px;} input.span9,textarea.span9,.uneditable-input.span9{width:860.97px;} input.span8,textarea.span8,.uneditable-input.span8{width:762.64px;} input.span7,textarea.span7,.uneditable-input.span7{width:664.31px;} input.span6,textarea.span6,.uneditable-input.span6{width:565.98px;}
input.span5,textarea.span5,.uneditable-input.span5{width:467.65px;} input.span4,textarea.span4,.uneditable-input.span4{width:369.32px;} input.span3,textarea.span3,.uneditable-input.span3{width:270.99px;} input.span2,textarea.span2,.uneditable-input.span2{width:172.66px;} input.span1,textarea.span1,.uneditable-input.span1{width:74.33px;} .thumbnails{margin-left:-10px;} .thumbnails>li{margin-left:10px;} .row-fluid .thumbnails{margin-left:0;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top,.navbar-fixed-bottom{position:static;} .navbar-fixed-top{margin-bottom:20px;} .navbar-fixed-bottom{margin-top:20px;} .navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .nav-collapse{clear:both;} .nav-collapse .nav{float:none;margin:0 0 10px;} .nav-collapse .nav>li{float:none;} .nav-collapse .nav>li>a{margin-bottom:2px;} .nav-collapse .nav>.div
ider-vertical{display:none;} .nav-collapse .nav .nav-header{color:#777777;text-shadow:none;} .nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .nav-collapse .dropdown-menu li+li a{margin-bottom:2px;} .nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2;} .navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999999;} .navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111111;} .nav-collapse.in .btn-group{margin-top:5px;padding:0;} .na
v-collapse .dropdown-menu{position:static;top:auto;left:auto;float:none;display:none;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .nav-collapse .open>.dropdown-menu{display:block;} .nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none;} .nav-collapse .dropdown-menu .divider{display:none;} .nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none;} .nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);} .navbar-inver
se .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111111;border-bottom-color:#111111;} .navbar .nav-collapse .nav.pull-right{float:none;margin-left:0;} .nav-collapse,.nav-collapse.collapse{overflow:hidden;height:0;} .navbar .btn-navbar{display:block;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings-white.png
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings-white.png b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings-white.png
new file mode 100644
index 0000000..3bf6484
Binary files /dev/null and b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings-white.png differ
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings.png
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings.png b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings.png
new file mode 100644
index 0000000..a996999
Binary files /dev/null and b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap/img/glyphicons-halflings.png differ
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
new file mode 100644
index 0000000..7441e86
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroupLayout.java
@@ -0,0 +1,116 @@
+/*
+ * 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.
+ */
+
+package org.apache.isis.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * A successor to {@link MemberGroups}, specifying the (groups of) members in a page,
+ * column by column.
+ *
+ * <p>
+ * The left column and middle column determine the ordering of the entity's properties. The
+ * value of the {@link #left() left} list and {@link #middle() middle} list specify the order
+ * of the property groups (inferred from each property's {@link MemberOrder#name() MemberOrder.name} attribute.
+ *
+ * <p>
+ * The right column is for the entity's collections. The order of this collections is simply as
+ * determined by the collection's {@link MemberOrder#sequence() MemberOrder.sequence} attribute
+ *
+ * <p>
+ * If both this annotation, {@link MemberGroupLayout}, and {@link MemberGroups} annotation
+ * are present on an entity, then this one takes precedence.
+ */
+@Inherited
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface MemberGroupLayout {
+
+ public enum ColumnSpans {
+ _2_0_10(2,0,10),
+ _3_0_9(3,0,9),
+ _4_0_8(4,0,8),
+ _5_0_7(5,0,7),
+ _6_0_6(6,0,6),
+ _3_3_6(3,3,6),
+ _2_3_7(2,3,7),
+ _2_4_6(2,4,6),
+ _4_4_4(4,4,4);
+
+ private int left;
+ private int middle;
+ private int right;
+
+ private ColumnSpans(int left, int middle, int right) {
+ this.left = left;
+ this.middle = middle;
+ this.right = right;
+ }
+
+ public int getLeft() {
+ return left;
+ }
+ public int getMiddle() {
+ return middle;
+ }
+ public int getRight() {
+ return right;
+ }
+
+ }
+
+ /**
+ * Specify the spans of each of the <i>left</i>_<i>middle</i>_<i>right</i> columns.
+ *
+ * <p>
+ * The sum of the spans is always 12.
+ */
+ ColumnSpans columnSpans() default ColumnSpans._4_0_8;
+
+ /**
+ * Order of groups of properties as they appear in the left-most column of a webpage,
+ * grouped as they appear as the <tt>name</tt> attribute of the {@link MemberOrder}
+ * annotation.
+ *
+ * <p>
+ * The order in this list determines the order that the property groups will be rendered.
+ * By convention any {@link MemberOrder} that does not have a {@link MemberOrder#name() name} is considered
+ * to be in the default group, whose name is hard-coded as <i>General</i>.
+ *
+ * <p>
+ * Equivalent to {@link MemberGroups#value()} annotation.
+ */
+ String[] left() default {};
+
+ /**
+ * As {@link #left()}, but for the middle column in a page.
+ *
+ * <p>
+ * If the value of this attribute is non-empty but the {@link #columnSpans()} specifies a zero size
+ * (eg {@link ColumnSpans#_2_0_10}, then the framework will not boot and will instead indicate
+ * a meta-model validation exception.
+ */
+ String[] middle() default {};
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroups.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroups.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroups.java
index e643c95..92cc35e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroups.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/MemberGroups.java
@@ -25,22 +25,31 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+/**
+ * Names of groups of properties, as they appear as the <tt>name</tt> attribute
+ * of the {@link MemberOrder} annotation.
+ *
+ * <p>
+ * The order in this list determines the order that the property groups will be
+ * rendered. By convention any {@link MemberOrder} that does not have a
+ * {@link MemberOrder#name() name} is considered to be in the default group,
+ * whose name is hard-coded as <i>General</i>.
+ *
+ * <p>
+ * In the case of the Wicket viewer, these property groups are rendered down the
+ * left hand side.
+ *
+ * @deprecated - use {@link MemberGroupLayout} instead. If both annotations are
+ * present, then {@link MemberGroupLayout} takes precedence.
+ */
@Inherited
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
+@Deprecated
public @interface MemberGroups {
/**
- * Names of groups of properties, as they appear as the <tt>name</tt> attribute of the
- * {@link MemberOrder} annotation.
- *
- * <p>
- * The order in this list determines the order that the property groups will be rendered. By convention
- * any {@link MemberOrder} that does not have a {@link MemberOrder#name() name} is considered
- * to be in the default group, whose name is hard-coded as <i>General</i>.
- *
- * <p>
- * In the case of the Wicket viewer, these property groups are rendered down the left hand side.
+ * Specifies the order of the member groups.
*/
String[] value() default {};
http://git-wip-us.apache.org/repos/asf/isis/blob/ec1646f2/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacet.java
new file mode 100644
index 0000000..409c1ab
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/membergroups/MemberGroupLayoutFacet.java
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ */
+
+package org.apache.isis.core.metamodel.facets.object.membergroups;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.MemberGroupLayout.ColumnSpans;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.members.order.MemberOrderFacet;
+
+/**
+ * Indicates the (column) layout of property groups (as defined by {@link MemberOrderFacet})
+ * and collections.
+ *
+ * <p>
+ * Corresponds to the {@link MemberGroupsFacet} annotation in the applib.
+ */
+public interface MemberGroupLayoutFacet extends Facet {
+
+ /**
+ * The default group for properties if not otherwise specified.
+ */
+ public final static String DEFAULT_GROUP = "General";
+
+ public ColumnSpans getColumnSpans();
+
+ public List<String> getLeft();
+ public List<String> getMiddle();
+}