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 2018/10/17 05:36:16 UTC

[isis] 02/02: ISIS-2009: allows footer to be customised with multiple credited organisations.

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git

commit a2f7612f9deaddc900789c336cc1f6019f7f48ff
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 17 07:30:06 2018 +0200

    ISIS-2009: allows footer to be customised with multiple credited organisations.
    
    Also updated/refactored the documentation for the Wicket viewer's configuration properties.
---
 .../ugvw/_ugvw_configuration-properties.adoc       | 777 +++++++++++++++------
 ...nfiguration-properties_abbreviating-titles.adoc |  33 -
 ...iguration-properties_showing-theme-chooser.adoc |  43 --
 ...figuration-properties_stripped-wicket-tags.adoc |  26 -
 ...tion-properties_suppressing-password-reset.adoc |  47 --
 ...uration-properties_suppressing-remember-me.adoc |  33 -
 ...nfiguration-properties_suppressing-sign-up.adoc |  49 --
 .../_ugvw_extending_custom-bootstrap-theme.adoc    |  10 +-
 .../ugvw/_ugvw_features_titles-in-tables.adoc      |   2 +-
 .../ugvw/_ugvw_features_user-registration.adoc     |   2 +-
 .../system/context/IsisSystemEnvironment.java      |  32 +-
 .../viewer/wicket/viewer/IsisWicketModule.java     |   2 +-
 .../viewer/wicket/model/models/EntityModel.java    |   4 +-
 .../wicket/ui/components/footer/CreditImage.java   |  45 ++
 .../wicket/ui/components/footer/CreditName.java    |  39 ++
 .../wicket/ui/components/footer/FooterPanel.html   |  19 +-
 .../wicket/ui/components/footer/FooterPanel.java   | 112 +++
 .../viewer/wicket/ui/pages/bootstrap-overrides.css |   7 +-
 .../src/main/webapp/WEB-INF/isis.properties        |   5 +
 .../main/webapp/images/apache-isis/logo-48x48.png  | Bin 0 -> 2622 bytes
 .../manifest/isis-non-changing.properties          |   5 +
 .../main/webapp/images/apache-isis/logo-48x48.png  | Bin 0 -> 2622 bytes
 .../src/main/webapp/images/spinning-icon.gif       | Bin 5266 -> 0 bytes
 23 files changed, 826 insertions(+), 466 deletions(-)

diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties.adoc
index 2ab303d..383ffdf 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties.adoc
@@ -24,7 +24,501 @@ To tell Apache Isis that the Wicket viewer is in use (and should therefore searc
 If you prefer you can place all configuration properties into `WEB-INF/isis.properties` (the configuration properties from all config files are merged together).
 
 
-.Wicket Viewer Configuration Properties
+[[_ugvw_configuration-properties_sign-in]]
+== Sign-in, Sign-up and Remember Me
+
+Configuration properties that influence the behaviour and appearance of the sign-in page.
+
+.Remember Me
+[cols="2a,1,3a", options="header"]
+|===
+|Property
+|Value +
+(_default value_)
+|Description
+
+|
+|
+|
+
+|`isis.viewer.wicket.` +
+`rememberMe.cookieKey`
+| ascii chars +
+(`_isisWicketRememberMe_`)
+|Cookie key holding the (encrypted) 'rememberMe' user/password.  There is generally no need to
+change this.  +
+
+Valid values as per link:http://stackoverflow.com/a/1969339/56880[this StackOverflow answer].
+
+|`isis.viewer.wicket.` +
+`rememberMe.encryptionKey`
+| any string +
+(in prod, a random UUID each time)
+|Encryption key is used to encrypt the rememberMe user/password.  +
+
+Apache Isis leverages link:http://wicket.apache.org[Apache Wicket]'s rememberMe support which holds remembered
+user/passwords in an encrypted cookie.
+
+If a hard-coded and publicly known value were to be used (as was the case prior to `1.13.0`), then it would be possible for rememberMe user/password to be intercepted and decrypted, possibly compromising access.
+This configuration property therefore allows a private key to be specified, baked into the application.
+
+If no value is set then, in production, a random UUID will be used as the encryption key.
+The net effect of this fallback behaviour is that 'rememberMe' will work, but only until the webapp is restarted (after which the end-user will have to log in again.
+In prototype mode, though, a fixed key will still be used; this saves the developer having to login each time.
+
+|`isis.viewer.wicket.` +
+`rememberMe.suppress`
+| `true`,`false` +
+(`_false_`)
+|Whether to suppress "remember me" checkbox on the login page.
+
+Further discussion xref:ugvw.adoc#_ugvw_configuration-properties_sign-in_remember-me[below].
+
+|`isis.viewer.wicket.` +
+`suppressPasswordReset`
+| `true`,`false` +
+(`_false_`)
+|If user registration is enabled, whether to suppress the "password reset" link on the login page.
+
+Further discussion xref:ugvw.adoc#_ugvw_configuration-properties_sign-in_password-reset[below].
+
+|`isis.viewer.wicket.` +
+`suppressRememberMe`
+| `true`,`false` +
+(`_false_`)
+|Whether to suppress "remember me" checkbox on the login page.
+
+Further discussion xref:ugvw.adoc#_ugvw_configuration-properties_sign-in_remember-me[below].
+
+[NOTE]
+====
+(Deprecated in `1.13.0`, replaced by `rememberMe.suppress`).
+====
+
+
+|`isis.viewer.wicket.` +
+`suppressSignUp`
+| `true`,`false` +
+(`_false_`)
+|Whether to suppress "sign-up" link.
+
+Note though that user registration services must also be configured.
+
+Further discussion xref:ugvw.adoc#_ugvw_configuration-properties_sign-in_sign-up[below].
+
+
+|===
+
+
+
+[[_ugvw_configuration-properties_sign-in_remember-me]]
+=== Remember Me
+
+The 'remember me' checkbox on the login page can be suppressed, if required, by setting a configuration flag:
+
+[source,ini]
+----
+isis.viewer.wicket.rememberMe.suppress=true
+----
+
+
+With 'remember me' not suppressed (the default):
+
+image::{_imagesdir}suppress-remember-me/login-page-default.png[width="300px",link="{_imagesdir}suppress-remember-me/login-page-default.png"]
+
+and with the checkbox suppressed:
+
+image::{_imagesdir}suppress-remember-me/login-page-suppress-remember-me.png[width="300px",link="{_imagesdir}suppress-remember-me/login-page-suppress-remember-me.png"]
+
+
+
+
+
+
+[[_ugvw_configuration-properties_sign-in_sign-up]]
+=== Sign-up
+
+If user registration has been configured, then the Wicket viewer allows the user to sign-up a new account and to reset their password from the login page.
+
+The 'sign up' link can be suppressed, if required, by setting a configuration flag.
+
+[source,ini]
+----
+isis.viewer.wicket.suppressSignUp=true
+----
+
+
+With 'sign up' not suppressed (the default):
+
+image::{_imagesdir}suppress-sign-up/login-page-default.png[width="300px",link="{_imagesdir}suppress-sign-up/login-page-default.png"]
+
+and with the link suppressed:
+
+image::{_imagesdir}suppress-sign-up/login-page-suppress-sign-up.png[width="300px",link="{_imagesdir}suppress-sign-up/login-page-suppress-sign-up.png"]
+
+
+
+[[_ugvw_configuration-properties_sign-in_password-reset]]
+=== Password Reset
+
+If user registration has been configured, then the Wicket viewer allows the user to sign-up a new account and to reset their password from the login page.
+
+The 'password reset' link can be suppressed, if required, by setting a configuration flag:
+
+[source,ini]
+----
+isis.viewer.wicket.suppressPasswordReset=true
+----
+
+
+With 'password reset' not suppressed (the default):
+
+image::{_imagesdir}suppress-password-reset/login-page-default.png[width="300px",link="{_imagesdir}suppress-password-reset/login-page-default.png"]
+
+and with the link suppressed:
+
+image::{_imagesdir}suppress-password-reset/login-page-suppress-password-reset.png[width="300px",link="{_imagesdir}suppress-password-reset/login-page-suppress-password-reset.png"]
+
+
+
+
+
+
+[[_ugvw_configuration-properties_header-and-footer]]
+== Header and Footer
+
+Configuration properties that influence the appearance of the header and footer panels.
+
+See also the xref:ugvw.adoc#_ugvw_configuration-properties_bookmarks-and-breadcrumbs[bookmarks and breadcrumbs] and xref:ugvw.adoc#_ugvw_configuration-properties_themes
+[themes] configuration properties, because these also control UI elements that appear on the header/footer panels.
+
+.Header and Footer
+[cols="2a,1,3a", options="header"]
+|===
+|Property
+|Value +
+(_default value_)
+|Description
+
+
+|`isis.viewer.wicket.+`
+`credit.1.image`
+|File path
+|File path to a logo image for the first credited organisation, relative to `src/main/webapp` directory.
+
+For example: +
+`/images/apache-isis/logo-48x48.png`.
+
+Either/both of `name` and `image` must be defined for the credit to be rendered in the footer.
+
+|`isis.viewer.wicket.+`
+`credit.1.name`
+|String
+|Name of the first credited organisation.
+
+For example: "Apache Isis"
+
+Either/both of `name` and `image` must be defined for the credit to be rendered in the footer.
+
+|`isis.viewer.wicket.+`
+`credit.1.url`
+|URL
+|URL to the website of the first credited organisation.
+
+For example: +
+`http://isis.apache.org`.
+
+Optional.
+
+|`isis.viewer.wicket.+`
+`credit.2.image`
+|File path
+|File path to a logo image for the second credited organisation, relative to `src/main/webapp` directory.
+
+Either/both of `name` and `image` must be defined for the credit to be rendered in the footer.
+
+|`isis.viewer.wicket.+`
+`credit.2.name`
+|String
+|Name of the second credited organisation.
+
+Either/both of `name` and `image` must be defined for the credit to be rendered in the footer.
+
+|`isis.viewer.wicket.+`
+`credit.2.url`
+|URL
+|URL to the website of the second credited organisation.
+
+Optional.
+
+|`isis.viewer.wicket.+`
+`credit.3.image`
+|File path
+|File path to a logo image for the third credited organisation, relative to `src/main/webapp` directory.
+
+Either/both of `name` and `image` must be defined for the credit to be rendered in the footer.
+
+|`isis.viewer.wicket.+`
+`credit.3.name`
+|String
+|Name of the third credited organisation.
+
+Either/both of `name` and `image` must be defined for the credit to be rendered in the footer.
+
+|`isis.viewer.wicket.+`
+`credit.3.url`
+|URL
+|URL to the website of the third credited organisation.
+
+Optional.
+
+|
+|
+
+|===
+
+
+
+[[_ugvw_configuration-properties_presentation]]
+== Presentation
+
+These configuration properties that effect the overall presentation and appearance of the viewer.
+
+[NOTE]
+====
+Some of the properties below use the prefix `isis.viewers.` (rather than the usual `isis.viewer.wicket.`).
+====
+
+.Presentation
+[cols="2a,1,3a", options="header"]
+|===
+|Property
+|Value +
+(default value)
+|Description
+
+
+|`isis.viewers.` +
+`collectionLayout.` +
+`defaultView`
+|`hidden`, `table` +
+(`hidden`)
+|Default for the default view for all (parented) collections if not explicitly specified using xref:../rgant/rgant.adoc#_rgant-CollectionLayout_defaultView[`@CollectionLayout#defaultView()`]
+
+By default the framework renders (parented) collections as "hidden", ie collapsed.
+These can be overridden on a case-by-case basis using the xref:../rgant/rgant.adoc#_rgant-CollectionLayout_defaultView[`@CollectionLayout#defaultView()`] or the corresponding `<collectionLayout defaultView="...">` element in the `Xxx.layout.xml` layout file.
+
+If the majority of collections should be displayed as "table" form, then it is more convenient to specify the default view globally.
+
+
+|`isis.viewers.` +
+`paged.parented`
+|positive integer (12)
+|Default page size for parented collections (as owned by an object, eg `Customer#getOrders()`)
+
+
+|`isis.viewers.` +
+`paged.standalone`
+|positive integer (25)
+|Default page size for standalone collections (as returned from an action invocation)
+
+
+|`isis.viewers.` +
+`propertyLayout.` +
+`labelPosition`
+|`TOP`, `LEFT` +
+(`LEFT`)
+|Default for label position for all properties if not explicitly specified using xref:../rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[`@PropertyLayout#labelPosition()`]
+
+
+If you want a consistent look-n-feel throughout the app, eg all property labels to the top, then it'd be rather frustrating to have to annotate every property.
+
+If these are not present then Apache Isis will render according to internal defaults.
+At the time of writing, this means labels are to the left for all datatypes except multiline strings.
+
+
+|`isis.viewer.wicket.` +
+`maxTitleLength` +
+`InParentedTables`
+| +ve integer +
+(`_12_`)
+| See further discussion (immediately below).
+
+|`isis.viewer.wicket.` +
+`maxTitleLength` +
+`InStandaloneTables`
+| +ve integer, +
+(`_12_`)
+| See further discussion (immediately below).
+
+|`isis.viewer.wicket.` +
+`maxTitleLengthInTables`
+| +ve integer, +
+(`_12_`)
+| See further discussion (immediately below).
+
+|`isis.viewer.wicket.` +
+`promptStyle`
+|`dialog`,`inline`, +
+`inline_as_if_edit` +
+(`inline`)
+| whether the prompt for editing a domain object property or invoking an action (associated with a property) is shown inline within the property's form, or instead shown in a modal dialog box.
+For actions, `inline_as_if_edit` will suppress the action's button, and instead let the action be invoked as if editing the property.
+The net effect is that being able to "edit" complex properties with multiple parts (eg a date) using a multi-argument editor (this editor, in fact, being the action's argument panel).
+
+The property can be overridden on a property-by-property basis using xref:../rgant/rgant.adoc#_rgant-PropertyLayout_promptStyle[`@Property#promptStyle()`]) or  xref:../rgant/rgant.adoc#_rgant-ActionLayout_promptStyle[`@Action#promptStyle()`]).
+
+Note that `inline_as_if_edit` does not make sense for a configuration property default, and will instead be interpreted as `inline`.
+
+
+
+
+
+|===
+
+
+Objects whose title is overly long can be cumbersome in titles.
+The Wicket viewer has a xref:../ugvw/ugvw.adoc#_ugvw_features_titles-in-tables[mechanism to automatically shorten] the titles of objects specified using `@Title`.
+As an alternative/in addition, the viewer can also be configured to simply truncate titles longer than a certain length.
+
+The properties themselves are:
+
+[source,ini]
+----
+isis.viewer.wicket.maxTitleLengthInStandaloneTables=20
+isis.viewer.wicket.maxTitleLengthInParentedTables=8
+----
+
+If you wish to use the same value in both cases, you can also specify just:
+
+[source,ini]
+----
+isis.viewer.wicket.maxTitleLengthInTables=15
+----
+
+This is used as a fallback if the more specific properties are not provided.
+
+If no properties are provided, then the Wicket viewer defaults to abbreviating titles to a length of `12`.
+
+
+
+
+
+
+
+[[_ugvw_configuration-properties_bookmarks-and-breadcrumbs]]
+== Bookmarks and Breadcrumbs
+
+These configuration properties enable or disable the mechanisms for locating previously accessed objects.
+
+.Bookmarks and Breadcrumbs
+[cols="2a,1,3a", options="header"]
+|===
+|Property
+|Value +
+(_default value_)
+|Description
+
+|`isis.viewer.wicket.` +
+`bookmarkedPages.maxSize`
+| +ve int +
+(`_15_`)
+| number of pages to bookmark
+
+|`isis.viewer.wicket.` +
+`bookmarkedPages.showChooser`
+| +ve int +
+(`_15_`)
+| whether to show the bookmark panel (top-left in the Wicket viewer)
+
+|`isis.viewer.wicket.` +
+`breadcrumbs.showChooser`
+| `true`,`false` +
+(`_true_`)
+| Whether to show chooser for Breadcrumbs (bottom-left footer in the Wicket viewer)
+
+
+
+|===
+
+
+
+
+[[_ugvw_configuration-properties_themes]]
+== Themes
+
+These configuration properties control the switching of themes.
+
+.Themes
+[cols="2a,1,3a", options="header"]
+|===
+|Property
+|Value +
+(default value)
+|Description
+
+|`isis.viewer.wicket.` +
+`themes.enabled`
+| comma separated list ...
+| ... of bootswatch themes.  Only applies if `themes.showChooser`==`true`.
+
+See further discussion below.
+
+|`isis.viewer.wicket.` +
+`themes.showChooser`
+| `true`,`false` +
+(`_false_`)
+| Whether to show chooser for Bootstrap themes.
+
+See further discussion below.
+
+|===
+
+
+
+The Wicket viewer uses link:http://getbootstrap.com/[Bootstrap] styles and components (courtesy of the https://github.com/l0rdn1kk0n/wicket-bootstrap[Wicket Bootstrap] integration).
+
+Unless a xref:../ugvw/ugvw.adoc#_ugvw_customisation_default-theme[default theme has been specified], the viewer uses the default bootstrap theme.
+However, the viewer can also be configured to allow the end-user to switch theme to another theme, in particular one of those provided by http://bootswatch.com[bootswatch.com].
+
+This is done using the following configuration property (in `WEB-INF/viewer_wicket.properties`):
+
+[source,ini]
+----
+isis.viewer.wicket.themes.showChooser=true
+----
+
+.Example 1
+image::{_imagesdir}theme-chooser/example-1.png[width="720px",link="{_imagesdir}theme-chooser/example-1.png"]
+
+
+.Example 2:
+image::{_imagesdir}theme-chooser/example-2.png[width="720px",link="{_imagesdir}theme-chooser/example-2.png"]
+
+It is also possible to restrict the themes shown to some subset of those in bootswatch. This is done using a further
+property:
+
+[source,ini]
+----
+isis.viewer.wicket.themes.enabled=bootstrap-theme,Cosmo,Flatly,Darkly,Sandstone,United
+----
+
+where the value is the list of themes (from http://bootswatch.com[bootswatch.com]) to be made available.
+
+[TIP]
+====
+You can also develop and install a custom themes (eg to fit your company's look-n-feel/interface guidelines); see the xref:../ugvw/ugvw.adoc#_ugvw_extending_custom-bootstrap-theme[Extending] chapter for further details.
+====
+
+
+
+
+[[_ugvw_configuration-properties_date-formatting]]
+== Date Formatting & Date Picker
+
+These configuration properties influence the way in which date/times are rendered and can be selected using the date/time pickers.
+
+.Date Formatting & Date Picker
 [cols="2a,1,3a", options="header"]
 |===
 |Property
@@ -32,29 +526,6 @@ If you prefer you can place all configuration properties into `WEB-INF/isis.prop
 (_default value_)
 |Description
 
-|`isis.viewer.wicket.` +
-`ajaxDebugMode`
-| `true`,`false` +
-(`_false_`)
-| whether the Wicket debug mode should be enabled.
-
-|`isis.viewer.wicket.` +
-`bookmarkedPages.maxSize`
-| +ve int +
-(`_15_`)
-| number of pages to bookmark
-
-|`isis.viewer.wicket.` +
-`bookmarkedPages.showChooser`
-| +ve int +
-(`_15_`)
-| whether to show the bookmark panel (top-left in the Wicket viewer)
-
-|`isis.viewer.wicket.` +
-`breadcrumbs.showChooser`
-| `true`,`false` +
-(`_true_`)
-| Whether to show chooser for Breadcrumbs (bottom-left in the Wicket viewer)
 
 |`isis.viewer.wicket.` +
 `datePattern`
@@ -89,12 +560,37 @@ See link:http://eonasdan.github.io/bootstrap-datetimepicker/Options/#mindate[dat
 further details.  The string must be in ISO date format (see link:https://github.com/moment/moment/issues/1407[here]
 for further details).
 
+
 |`isis.viewer.wicket.` +
-`disableDependent` +
-`ChoiceAutoSelection`
+`timestampPattern`
+| date/time format +
+(`yyyy-MM-dd HH:mm:ss.SSS`)
+|The `SimpleDateFormat` used to render timestamps.
+
+
+
+
+|===
+
+
+[[_ugvw_configuration-properties_debugging]]
+== Debugging
+
+These configuration properties can assist with debugging the behaviour of the Wicket viewer itself.
+
+.Debugging
+[cols="2a,1,3a", options="header"]
+|===
+|Property
+|Value +
+(_default value_)
+|Description
+
+|`isis.viewer.wicket.` +
+`ajaxDebugMode`
 | `true`,`false` +
 (`_false_`)
-| For dependent choices, whether to automatically select the first dependent (eg subcategory) when the parameter on which it depends (category) changes.
+| whether the Wicket debug mode should be enabled.
 
 |`isis.viewer.wicket.` +
 `developmentUtilities.enable`
@@ -107,38 +603,71 @@ If running in prototyping mode, the development utilities (debug bar) is always
 This feature is primarily just to help track any memory leakage issues that might be suspected when running in production.
 
 |`isis.viewer.wicket.` +
-`disableModalDialogs`
-| `true`,`false` +
-(`_false_`)
-|No longer supported.
-
-|`isis.viewer.wicket.` +
 `liveReloadUrl`
 | URL
 |Specifies the URL if xref:../dg/dg.adoc#__dg_ide_intellij_advanced_gradle-liveReload[live reload] is set up, eg: +
 
 `http://localhost:35729/livereload.js?snipver=1`
 
+|`isis.viewer.wicket.` +
+`stripWicketTags`
+| `true`,`false` +
+(`_true_`)
+| Whether to force Wicket tags to be stripped in prototype/development mode.
+
+[NOTE]
+====
+In 1.7.0 and earlier, the behaviour is different; the Apache Isis Wicket viewer will preserve wicket tags when running in Apache Isis' prototype/development mode, but will still strip wicket tags in Apache Isis' server/deployment mode.
+
+We changed the behaviour in 1.8.0 because we found that Internet Explorer can be sensitive to the presence of Wicket tags.
+====
 
 |`isis.viewer.wicket.` +
-`maxTitleLength` +
-`InParentedTables`
-| +ve integer +
-(`_12_`)
-| See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_abbreviating-titles[below].
+`wicketSourcePlugin`
+| `true`,`false` +
+(`_false_`)
+| Whether the WicketSource plugin should be enabled; by default it is not enabled.
+
+[WARNING]
+====
+Enabling this setting can significantly slow down rendering performance of the Wicket viewer.
+====
+
+|===
+
+
+
+
+
+
+
+
+
+[[_ugvw_configuration-properties_presentation]]
+== Feature Toggles
+
+These configuration properties are used to enable/disable features that are either on the way to becoming the default behaviour (but can temporarily be disabled) or conversely for features that are to be removed (but can temporarily be left as enabled).
+
+.Feature Toggles
+[cols="2a,1,3a", options="header"]
+|===
+|Property
+|Value +
+(_default value_)
+|Description
 
 |`isis.viewer.wicket.` +
-`maxTitleLength` +
-`InStandaloneTables`
-| +ve integer, +
-(`_12_`)
-| See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_abbreviating-titles[below].
+`disableDependent` +
+`ChoiceAutoSelection`
+| `true`,`false` +
+(`_false_`)
+| For dependent choices, whether to automatically select the first dependent (eg subcategory) when the parameter on which it depends (category) changes.
 
 |`isis.viewer.wicket.` +
-`maxTitleLengthInTables`
-| +ve integer, +
-(`_12_`)
-| See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_abbreviating-titles[below].
+`disableModalDialogs`
+| `true`,`false` +
+(`_false_`)
+|No longer supported.
 
 |`isis.viewer.wicket.` +
 `preventDoubleClick` +
@@ -154,18 +683,6 @@ This feature is primarily just to help track any memory leakage issues that migh
 (`_true_`)
 | Whether to disable a no-arg action button after it has been clicked, to prevent users causing an error if they do a double click.
 
-|`isis.viewer.wicket.` +
-`promptStyle`
-|`dialog`,`inline`, +
-`inline_as_if_edit` +
-(`inline`)
-| whether the prompt for editing a domain object property or invoking an action (associated with a property) is shown inline within the property's form, or instead shown in a modal dialog box.
-For actions, `inline_as_if_edit` will suppress the action's button, and instead let the action be invoked as if editing the property.
-The net effect is that being able to "edit" complex properties with multiple parts (eg a date) using a multi-argument editor (this editor, in fact, being the action's argument panel).
-
-The property can be overridden on a property-by-property basis using xref:../rgant/rgant.adoc#_rgant-PropertyLayout_promptStyle[`@Property#promptStyle()`]) or  xref:../rgant/rgant.adoc#_rgant-ActionLayout_promptStyle[`@Action#promptStyle()`]).
-
-Note that `inline_as_if_edit` does not make sense for a configuration property default, and will instead be interpreted as `inline`.
 
 |`isis.viewer.wicket.` +
 `redirectEvenIfSameObject`
@@ -182,7 +699,6 @@ Note that the default behaviour is new in `1.15.0`, providing a better end-user
 Setting this option retains the behaviour of the viewer pre-`1.15.0`.
 ====
 
-
 |`isis.viewer.wicket.` +
 `regularCase`
 | `true`,`false` +
@@ -197,80 +713,6 @@ Setting this option retains the behaviour of the viewer pre-`1.15.0`.
 | Whether to replace 'disabled' tag with 'readonly' (for link:https://www.w3.org/TR/2014/REC-html5-20141028/forms.html#the-readonly-attribute[w3 spec]-compliant browsers such as for Firefox and Chrome 54+) which prevent copy from 'disabled' fields.
 
 |`isis.viewer.wicket.` +
-`rememberMe.cookieKey`
-| ascii chars +
-(`_isisWicketRememberMe_`)
-|Cookie key holding the (encrypted) 'rememberMe' user/password.  There is generally no need to
-change this.  +
-
-Valid values as per link:http://stackoverflow.com/a/1969339/56880[this StackOverflow answer].
-
-|`isis.viewer.wicket.` +
-`rememberMe.encryptionKey`
-| any string +
-(in prod, a random UUID each time)
-|Encryption key is used to encrypt the rememberMe user/password.  +
-
-Apache Isis leverages link:http://wicket.apache.org[Apache Wicket]'s rememberMe support which holds remembered
-user/passwords in an encrypted cookie.
-
-If a hard-coded and publicly known value were to be used (as was the case prior to `1.13.0`), then it would be possible for rememberMe user/password to be intercepted and decrypted, possibly compromising access.
-This configuration property therefore allows a private key to be specified, baked into the application.
-
-If no value is set then, in production, a random UUID will be used as the encryption key.
-The net effect of this fallback behaviour is that 'rememberMe' will work, but only until the webapp is restarted (after which the end-user will have to log in again.
-In prototype mode, though, a fixed key will still be used; this saves the developer having to login each time.
-
-|`isis.viewer.wicket.` +
-`rememberMe.suppress`
-| `true`,`false` +
-(`_false_`)
-|Whether to suppress "remember me" checkbox on the login page.
-
-
-|`isis.viewer.wicket.` +
-`stripWicketTags`
-| `true`,`false` +
-(`_true_`)
-| Whether to force Wicket tags to be stripped in prototype/development mode.  See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_stripped-wicket-tags[below].
-
-|`isis.viewer.wicket.` +
-`suppressPasswordReset`
-| `true`,`false` +
-(`_false_`)
-|If user registration is enabled, whether to suppress the "password reset" link on the login page.  See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_suppressing-password-reset[below].
-
-|`isis.viewer.wicket.` +
-`suppressRememberMe`
-| `true`,`false` +
-(`_false_`)
-|(Deprecated in `1.13.0`, replaced by `rememberMe.suppress`).  Whether to suppress "remember me" checkbox on the login page.
-
-|`isis.viewer.wicket.` +
-`suppressSignUp`
-| `true`,`false` +
-(`_false_`)
-|If user registration is enabled, whether to suppress the "sign up" link on the login page.  See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_suppressing-sign-up[below].
-
-|`isis.viewer.wicket.` +
-`timestampPattern`
-| date/time format +
-(`yyyy-MM-dd HH:mm:ss.SSS`)
-|The `SimpleDateFormat` used to render timestamps.
-
-
-|`isis.viewer.wicket.` +
-`themes.enabled`
-| comma separated list ...
-| ... of bootswatch themes.  Only applies if `themes.showChooser`==`true`.  See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_showing-theme-chooser[below].
-
-|`isis.viewer.wicket.` +
-`themes.showChooser`
-| `true`,`false` +
-(`_false_`)
-| Whether to show chooser for Bootstrap themes.  See discussion xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_showing-theme-chooser[below]
-
-|`isis.viewer.wicket.` +
 `useIndicatorForFormSubmit`
 | `true`,`false` +
 (`_true_`)
@@ -282,75 +724,8 @@ In prototype mode, though, a fixed key will still be used; this saves the develo
 (`_true_`)
 | Whether to show an indicator for a no-arg action button that it has been clicked.
 
-|`isis.viewer.wicket.` +
-`wicketSourcePlugin`
-| `true`,`false` +
-(`_false_`)
-| Whether the WicketSource plugin should be enabled; by default it is not enabled.
-
-[WARNING]
-====
-Enabling this setting can significantly slow down rendering performance of the Wicket viewer.
-====
-
-|===
-
-
-Also:
-
-[cols="2a,1,3a", options="header"]
-|===
-|Property
-|Value +
-(default value)
-|Description
-
-|`isis.viewers.` +
-`paged.parented`
-|positive integer (12)
-|Default page size for parented collections (as owned by an object, eg `Customer#getOrders()`)
-
-
-|`isis.viewers.` +
-`paged.standalone`
-|positive integer (25)
-|Default page size for standalone collections (as returned from an action invocation)
-
-
-|`isis.viewers.` +
-`propertyLayout.` +
-`labelPosition`
-|`TOP`, `LEFT` +
-(`LEFT`)
-|Default for label position for all properties if not explicitly specified using xref:../rgant/rgant.adoc#_rgant-PropertyLayout_labelPosition[`@PropertyLayout#labelPosition()`]
-
-
-If you want a consistent look-n-feel throughout the app, eg all property labels to the top, then it'd be rather frustrating to have to annotate every property.
-
-If these are not present then Apache Isis will render according to internal defaults.
-At the time of writing, this means labels are to the left for all datatypes except multiline strings.
-
-
-|`isis.viewers.` +
-`collectionLayout.` +
-`defaultView`
-|`hidden`, `table` +
-(`hidden`)
-|Default for the default view for all (parented) collections if not explicitly specified using xref:../rgant/rgant.adoc#_rgant-CollectionLayout_defaultView[`@CollectionLayout#defaultView()`]
-
-By default the framework renders (parented) collections as "hidden", ie collapsed.
-These can be overridden on a case-by-case basis using the xref:../rgant/rgant.adoc#_rgant-CollectionLayout_defaultView[`@CollectionLayout#defaultView()`] or the corresponding `<collectionLayout defaultView="...">` element in the `Xxx.layout.xml` layout file.
 
-If the majority of collections should be displayed as "table" form, then it is more convenient to specify the default view globally.
 
 |===
 
 
-
-include::_ugvw_configuration-properties_abbreviating-titles.adoc[leveloffset=+1]
-include::_ugvw_configuration-properties_suppressing-remember-me.adoc[leveloffset=+1]
-include::_ugvw_configuration-properties_suppressing-sign-up.adoc[leveloffset=+1]
-include::_ugvw_configuration-properties_suppressing-password-reset.adoc[leveloffset=+1]
-include::_ugvw_configuration-properties_stripped-wicket-tags.adoc[leveloffset=+1]
-include::_ugvw_configuration-properties_showing-theme-chooser.adoc[leveloffset=+1]
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_abbreviating-titles.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_abbreviating-titles.adoc
deleted file mode 100644
index 1aedb81..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_abbreviating-titles.adoc
+++ /dev/null
@@ -1,33 +0,0 @@
-[[_ugvw_configuration-properties_abbreviating-titles]]
-= Abbreviating/suppressing titles in tables
-:Notice: 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 ag [...]
-:_basedir: ../../
-:_imagesdir: images/
-
-
-
-Objects whose title is overly long can be cumbersome in titles.  The Wicket viewer has a xref:../ugvw/ugvw.adoc#_ugvw_features_titles-in-tables[mechanism to automatically shorten] the titles of objects specified using `@Title`.  As an alternative/in addition, the viewer can also be configured to simply truncate titles longer than a certain length.
-
-The properties themselves are:
-
-[source,ini]
-----
-isis.viewer.wicket.maxTitleLengthInStandaloneTables=20
-isis.viewer.wicket.maxTitleLengthInParentedTables=8
-----
-
-If you wish to use the same value in both cases, you can also specify just:
-
-[source,ini]
-----
-isis.viewer.wicket.maxTitleLengthInTables=15
-----
-
-This is used as a fallback if the more specific properties are not provided.
-
-If no properties are provided, then the Wicket viewer defaults to abbreviating titles to a length of `12`.
-
-
-
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_showing-theme-chooser.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_showing-theme-chooser.adoc
deleted file mode 100644
index c860fc1..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_showing-theme-chooser.adoc
+++ /dev/null
@@ -1,43 +0,0 @@
-[[_ugvw_configuration-properties_showing-theme-chooser]]
-= Showing a theme chooser
-:Notice: 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 ag [...]
-:_basedir: ../../
-:_imagesdir: images/
-
-
-
-The Wicket viewer uses link:http://getbootstrap.com/[Bootstrap] styles and components (courtesy of the https://github.com/l0rdn1kk0n/wicket-bootstrap[Wicket Bootstrap] integration).
-
-Unless a xref:../ugvw/ugvw.adoc#_ugvw_customisation_default-theme[default theme has been specified], the viewer uses the default bootstrap theme. However,
-the viewer can also be configured to allow the end-user to switch theme to another theme, in particular one of those provided by http://bootswatch.com[bootswatch.com].
-
-This is done using the following configuration property (in `WEB-INF/viewer_wicket.properties`):
-
-[source,ini]
-----
-isis.viewer.wicket.themes.showChooser=true
-----
-
-.Example 1
-image::{_imagesdir}theme-chooser/example-1.png[width="720px",link="{_imagesdir}theme-chooser/example-1.png"]
-
-
-.Example 2:
-image::{_imagesdir}theme-chooser/example-2.png[width="720px",link="{_imagesdir}theme-chooser/example-2.png"]
-
-It is also possible to restrict the themes shown to some subset of those in bootswatch. This is done using a further
-property:
-
-[source,ini]
-----
-isis.viewer.wicket.themes.enabled=bootstrap-theme,Cosmo,Flatly,Darkly,Sandstone,United
-----
-
-where the value is the list of themes (from http://bootswatch.com[bootswatch.com]) to be made available.
-
-[TIP]
-====
-You can also develop and install a custom themes (eg to fit your company's look-n-feel/interface guidelines); see the xref:../ugvw/ugvw.adoc#_ugvw_extending_custom-bootstrap-theme[Extending] chapter for further details.
-====
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_stripped-wicket-tags.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_stripped-wicket-tags.adoc
deleted file mode 100644
index 952ed0a..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_stripped-wicket-tags.adoc
+++ /dev/null
@@ -1,26 +0,0 @@
-[[_ugvw_configuration-properties_stripped-wicket-tags]]
-= Stripped Wicket tags
-:Notice: 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 ag [...]
-:_basedir: ../../
-:_imagesdir: images/
-
-
-
-By default the Apache Isis Wicket viewer will always strip wicket tags. However, when running in prototype mode, this behaviour can be overridden using a configuration property:
-
-[source,ini]
-----
-isis.viewer.wicket.stripWicketTags=false
-----
-
-[NOTE]
-====
-In 1.7.0 and earlier, the behaviour is different; the Apache Isis Wicket viewer will preserve wicket tags when running in Apache Isis' prototype/development mode, but will still strip wicket tags in Apache Isis' server/deployment mode.
-
-We changed the behaviour in 1.8.0 because we found that Internet Explorer can be sensitive to the presence of Wicket tags.
-====
-
-
-
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-password-reset.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-password-reset.adoc
deleted file mode 100644
index 22980dd..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-password-reset.adoc
+++ /dev/null
@@ -1,47 +0,0 @@
-[[_ugvw_configuration-properties_suppressing-password-reset]]
-= Suppressing 'password reset'
-:Notice: 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 ag [...]
-:_basedir: ../../
-:_imagesdir: images/
-
-
-
-If user registration has been configured, then the Wicket viewer allows the user to sign-up a new account and to reset their password from the login page.
-
-The 'password reset' link can be suppressed, if required, by setting a configuration flag.
-
-
-
-== Screenshots
-
-With 'password reset' not suppressed (the default):
-
-image::{_imagesdir}suppress-password-reset/login-page-default.png[width="300px",link="{_imagesdir}suppress-password-reset/login-page-default.png"]
-
-and with the link suppressed:
-
-image::{_imagesdir}suppress-password-reset/login-page-suppress-password-reset.png[width="300px",link="{_imagesdir}suppress-password-reset/login-page-suppress-password-reset.png"]
-
-
-
-== Configuration
-
-To suppress the 'password reset' link, add the following configuration flag:
-
-[source,ini]
-----
-isis.viewer.wicket.suppressPasswordReset=true
-----
-
-Typically this should be added to the `viewer_wicket.properties` file (in `WEB-INF`), though you can add to `isis.properties` if you wish.
-
-
-
-== See also
-
-The xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_suppressing-sign-up[sign up link] can be suppressed in a similar manner.
-
-
-
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-remember-me.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-remember-me.adoc
deleted file mode 100644
index 49beb99..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-remember-me.adoc
+++ /dev/null
@@ -1,33 +0,0 @@
-[[_ugvw_configuration-properties_suppressing-remember-me]]
-= Suppressing 'remember me'
-:Notice: 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 ag [...]
-:_basedir: ../../
-:_imagesdir: images/
-
-
-
-The 'remember me' checkbox on the login page can be suppressed, if required, by setting a configuration flag.
-
-
-
-== Screenshots
-
-With 'remember me' not suppressed (the default):
-
-image::{_imagesdir}suppress-remember-me/login-page-default.png[width="300px",link="{_imagesdir}suppress-remember-me/login-page-default.png"]
-
-and with the checkbox suppressed:
-
-image::{_imagesdir}suppress-remember-me/login-page-suppress-remember-me.png[width="300px",link="{_imagesdir}suppress-remember-me/login-page-suppress-remember-me.png"]
-
-
-
-== Configuration
-
-To suppress the 'remember me' checkbox, add the following configuration flag:
-
-[source,ini]
-----
-isis.viewer.wicket.rememberMe.suppress=true
-----
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-sign-up.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-sign-up.adoc
deleted file mode 100644
index de3bcde..0000000
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_configuration-properties_suppressing-sign-up.adoc
+++ /dev/null
@@ -1,49 +0,0 @@
-[[_ugvw_configuration-properties_suppressing-sign-up]]
-= Suppressing 'sign up'
-:Notice: 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 ag [...]
-:_basedir: ../../
-:_imagesdir: images/
-
-
-
-
-
-If user registration has been configured, then the Wicket viewer allows the user to sign-up a new account and to reset their password from the login page.
-
-The 'sign up' link can be suppressed, if required, by setting a configuration flag.
-
-
-
-
-== Screenshots
-
-With 'sign up' not suppressed (the default):
-
-image::{_imagesdir}suppress-sign-up/login-page-default.png[width="300px",link="{_imagesdir}suppress-sign-up/login-page-default.png"]
-
-and with the link suppressed:
-
-image::{_imagesdir}suppress-sign-up/login-page-suppress-sign-up.png[width="300px",link="{_imagesdir}suppress-sign-up/login-page-suppress-sign-up.png"]
-
-
-
-
-== Configuration
-
-To suppress the 'sign up' link, add the following configuration flag:
-
-[source,ini]
-----
-isis.viewer.wicket.suppressSignUp=true
-----
-
-
-
-== See also
-
-The xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_suppressing-password-reset[password reset link] can be suppressed in a similar manner.
-
-
-
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_extending_custom-bootstrap-theme.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_extending_custom-bootstrap-theme.adoc
index b837fa6..b1c6c90 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_extending_custom-bootstrap-theme.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_extending_custom-bootstrap-theme.adoc
@@ -8,16 +8,18 @@
 
 The Apache Isis Wicket viewer uses http://getbootstrap.com/[Bootstrap] styles and components (courtesy of the https://github.com/l0rdn1kk0n/wicket-bootstrap[Wicket Bootstrap] integration).
 
-By default the viewer uses the default bootstrap theme. It is possible to configure the Wicket viewer to allow the user to xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_showing-theme-chooser[select other themes] provided by http://bootswatch.com[bootswatch.com], and if required one of these can be xref:../ugvw/ugvw.adoc#_ugvw_customisation_default-theme[set as the default].
+By default the viewer uses the default bootstrap theme.
+It is possible to configure the Wicket viewer to allow the user to xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_themes[select other themes] provided by http://bootswatch.com[bootswatch.com], and if required one of these can be xref:../ugvw/ugvw.adoc#_ugvw_customisation_default-theme[set as the default].
 
-However, you may instead want to write your own custom theme, for example to fit your company's look-n-feel/interface guidelines. This is done by implementing https://github.com/l0rdn1kk0n/wicket-bootstrap[Wicket Bootstrap]'s `de.agilecoders.wicket.core.settings.ITheme` class. This defines:
+However, you may instead want to write your own custom theme, for example to fit your company's look-n-feel/interface guidelines.
+This is done by implementing https://github.com/l0rdn1kk0n/wicket-bootstrap[Wicket Bootstrap]'s `de.agilecoders.wicket.core.settings.ITheme` class.
+This defines:
 
 * the name of the theme
 * the resources it needs (the CSS and optional JS and/or fonts), and
 * optional urls to load them from a Content Delivery Network (CDN).
 
-To make use of the custom `ITheme` the application should register it by adding the following snippet in
-(your application's subclass of) `IsisWicketApplication`:
+To make use of the custom `ITheme` the application should register it by adding the following snippet in (your application's subclass of) `IsisWicketApplication`:
 
 [source,java]
 ----
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_titles-in-tables.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_titles-in-tables.adoc
index 1ad4efa..d22fbe0 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_titles-in-tables.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_titles-in-tables.adoc
@@ -72,5 +72,5 @@ The above annotations mean that titles usually "just work", altering according t
 
 [TIP]
 ====
-It is also possible to configure the Wicket viewer to xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_abbreviating-titles[abbreviate titles or suppress them] completely.
+It is also possible to configure the Wicket viewer to xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_presentation[abbreviate titles or suppress them] completely.
 ====
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_user-registration.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_user-registration.adoc
index 37f6238..5217f35 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_user-registration.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_features_user-registration.adoc
@@ -74,7 +74,7 @@ There are two prerequisites:
 
 The latter is required if you are using the default email notification service and email service. If you are using your own alternative implementation of the email notification service then it may be omitted (and configure your own alternative implementation as required).
 
-It is also possible to configure the Wicket viewer to suppress xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_suppressing-sign-up[the sign-up page link] and/or the xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_suppressing-password-reset[password reset page].
+It is also possible to configure the Wicket viewer to suppress the sign-up page link and/or the password reset page, see xref:../ugvw/ugvw.adoc#_ugvw_configuration-properties_sign-in[here] for further details.
 
 
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisSystemEnvironment.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisSystemEnvironment.java
index 62cf926..7fc8b13 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisSystemEnvironment.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisSystemEnvironment.java
@@ -35,36 +35,22 @@ public interface IsisSystemEnvironment {
     // -- DEFAULT IMPLEMENTATIONS 
     
     public static IsisSystemEnvironment getDefault() {
-        return new IsisSystemEnvironment() {
-            @Override
-            public DeploymentCategory getDeploymentCategory() {
-                
-                final DeploymentCategory deploymentCategory = 
-                        "true".equalsIgnoreCase(System.getenv("PROTOTYPING"))
-                            ? DeploymentCategory.PROTOTYPING 
-                                    : DeploymentCategory.PRODUCTION;
-                
-                return deploymentCategory;
-            }
+        return () -> {
+            final DeploymentCategory deploymentCategory =
+                    "true".equalsIgnoreCase(System.getenv("PROTOTYPING"))
+                        ? DeploymentCategory.PROTOTYPING
+                                : DeploymentCategory.PRODUCTION;
+
+            return deploymentCategory;
         };
     }
     
     public static IsisSystemEnvironment getPrototyping() {
-        return new IsisSystemEnvironment() {
-            @Override
-            public DeploymentCategory getDeploymentCategory() {
-                return DeploymentCategory.PROTOTYPING;
-            }
-        };
+        return () -> DeploymentCategory.PROTOTYPING;
     }
     
     public static IsisSystemEnvironment getProduction() {
-        return new IsisSystemEnvironment() {
-            @Override
-            public DeploymentCategory getDeploymentCategory() {
-                return DeploymentCategory.PRODUCTION;
-            }
-        };
+        return () -> DeploymentCategory.PRODUCTION;
     }
 
     
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
index 9c9f6e6..cd80b70 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
@@ -87,7 +87,7 @@ public class IsisWicketModule extends AbstractModule {
         bind(EmailService.class).to(EmailServiceWicket.class);
         bind(EmailNotificationService.class).to(EmailNotificationServiceWicket.class);
 
-        bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Apache Isis Wicket Viewer");
+        bind(String.class).annotatedWith(Names.named("applicationName")).toInstance("Apache Isis ™");
         bind(String.class).annotatedWith(Names.named("applicationCss")).toProvider(Providers.of((String) null));
         bind(String.class).annotatedWith(Names.named("applicationJs")).toProvider(Providers.of((String)null));
         bind(String.class).annotatedWith(Names.named("welcomeMessage")).toProvider(Providers.of((String)null));
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 979ee95..4235404 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -39,6 +39,7 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
@@ -399,10 +400,11 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements Obj
     public void resetPropertyModels() {
         adapterMemento.resetVersion(getPersistenceSession(), getSpecificationLoader());
         for (final PropertyMemento pm : propertyScalarModels.keySet()) {
+            OneToOneAssociation otoa = pm.getProperty(getSpecificationLoader());
             final ScalarModel scalarModel = propertyScalarModels.get(pm);
             final ObjectAdapter adapter = getObject();
             final ObjectAdapter associatedAdapter =
-                    pm.getProperty(getSpecificationLoader()).get(adapter, InteractionInitiatedBy.USER);
+                    otoa.get(adapter, InteractionInitiatedBy.USER);
             scalarModel.setObject(associatedAdapter);
         }
     }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditImage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditImage.java
new file mode 100644
index 0000000..912a848
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditImage.java
@@ -0,0 +1,45 @@
+/*
+ *  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.viewer.wicket.ui.components.footer;
+
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.WebComponent;
+
+public class CreditImage extends WebComponent {
+
+    private final String imageUrl;
+
+    public CreditImage(final String id, final String imageUrl) {
+        super(id);
+        this.imageUrl = imageUrl;
+    }
+
+    @Override
+    protected void onComponentTag(final ComponentTag tag) {
+        super.onComponentTag(tag);
+        tag.put("src", imageUrl);
+    }
+
+    @Override
+    protected void onConfigure() {
+        super.onConfigure();
+        setVisible(imageUrl != null);
+    }
+
+}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditName.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditName.java
new file mode 100644
index 0000000..7502691
--- /dev/null
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/CreditName.java
@@ -0,0 +1,39 @@
+/*
+ *  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.viewer.wicket.ui.components.footer;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.Model;
+
+public class CreditName extends Label {
+
+    private String name;
+
+    public CreditName(final String id, final String name) {
+        super(id);
+        this.name = name;
+        setDefaultModel(Model.of(name));
+    }
+
+    @Override
+    protected void onConfigure() {
+        super.onConfigure();
+        setVisible(name != null);
+    }
+}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.html b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.html
index c06f5b5..ac1e968 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.html
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.html
@@ -42,9 +42,24 @@
                     <ul class="nav navbar-nav">
                     </ul>
                     <ul class="nav navbar-nav navbar-right">
-                        <p class="navbar-text powered-by">Powered by:</p>
+                        <p class="navbar-text powered-by"><span  wicket:id="creditsLabel">Credits:</span></p>
                         <li>
-                            <a href="http://isis.apache.org" tabindex="-1" target="_blank">Apache Isis &#8482;</a>
+                            <a tabindex="-1" wicket:id="credit1" >
+                                <img wicket:id="credit1Image" class="footer-image"/>
+                                <span wicket:id="credit1Name"></span>
+                            </a>
+                        </li>
+                        <li>
+                            <a tabindex="-1" wicket:id="credit2" >
+                                <img wicket:id="credit2Image" class="footer-image"/>
+                                <span wicket:id="credit2Name"></span>
+                            </a>
+                        </li>
+                        <li>
+                            <a tabindex="-1" wicket:id="credit3" >
+                                <img wicket:id="credit3Image"  class="footer-image"/>
+                                <span wicket:id="credit3Name"></span>
+                            </a>
                         </li>
                         <li>
                             <a wicket:id="aboutLink" tabindex="-1" id="aboutLink" class="navbar-right">
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
index 42bd4c8..43b8fca 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
@@ -20,20 +20,26 @@ package org.apache.isis.viewer.wicket.ui.components.footer;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.WebComponent;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbPanel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.ThemeChooser;
 import org.apache.isis.viewer.wicket.ui.pages.about.AboutPage;
+import org.apache.isis.viewer.wicket.ui.pages.home.HomePage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.Components;
 
 /**
  * A panel for the default page footer
@@ -47,6 +53,7 @@ public class FooterPanel extends PanelAbstract<Model<String>> {
     private static final String ID_ABOUT_MESSAGE = "aboutMessage";
     private static final String ID_THEME_PICKER = "themePicker";
 
+
     /**
      * Constructor.
      *
@@ -56,15 +63,120 @@ public class FooterPanel extends PanelAbstract<Model<String>> {
         super(id);
     }
 
+    static class Credit {
+        private final int num;
+        private final String url;
+        private final String name;
+        private final String image;
+
+        final boolean defined;
+        private Credit(final int num, final String url, final String name, final String image) {
+            this.num = num;
+            this.url = url;
+            this.name = name;
+            this.image = image;
+            this.defined = name != null || image != null;
+        }
+
+        int getNum() {
+            return num;
+        }
+
+        boolean isDefined() {
+            return defined;
+        }
+
+        String getId() {
+            return idFor("");
+        }
+
+        String getUrl() {
+            return url;
+        }
+        String getUrlId() {
+            return idFor("Url");
+        }
+
+        String getName() {
+            return name;
+        }
+        String getNameId() {
+            return idFor("Name");
+        }
+
+        String getImage() {
+            return image;
+        }
+        String getImageId() {
+            return idFor("Image");
+        }
+
+        private String idFor(final String component) {
+            return "credit" + num + component;
+        }
+
+        public static Credit create(final IsisConfiguration configuration, final int num) {
+            String base = "isis.viewer.wicket.credit." + num + ".";
+            String url = configuration.getString(base + "url");
+            String name = configuration.getString(base + "name");
+            String image = configuration.getString(base + "image");
+            return new Credit(num, url, name, image);
+        }
+    }
+
     @Override
     protected void onInitialize() {
         super.onInitialize();
 
         addBreadcrumbs();
+        addCredits();
         addAboutLink();
         addThemePicker();
     }
 
+    private void addCredits() {
+        boolean credits = false;
+        credits = addCredit(1) || credits;
+        credits = addCredit(2) || credits;
+        credits = addCredit(3) || credits;
+        final Label creditsLabel = new Label("creditsLabel", "Credits: ");
+        add(creditsLabel);
+        creditsLabel.setVisibilityAllowed(credits);
+    }
+
+    private boolean addCredit(final int num) {
+        final Credit credit = Credit.create(getConfiguration(), num);
+        final WebMarkupContainer creditLink = newLink(credit);
+        if(credit.isDefined()) {
+            creditLink.add(new CreditImage(credit.getImageId(), credit.getImage()));
+            creditLink.add(new CreditName(credit.getNameId(), credit.getName()));
+
+            add(creditLink);
+        } else {
+            Components.permanentlyHide(this, credit.getId());
+        }
+        return credit.isDefined();
+    }
+
+    private WebMarkupContainer newLink(final Credit credit) {
+        final WebMarkupContainer creditLink;
+        final String url = credit.getUrl();
+        final String creditId = credit.getId();
+        if(url != null) {
+            creditLink = new ExternalLink(creditId, url) {
+                @Override
+                protected void onComponentTag(ComponentTag tag)
+                {
+                    super.onComponentTag(tag);
+                    tag.put("target", "_blank");
+                }
+            }   ;
+        } else {
+            creditLink = new BookmarkablePageLink<>(creditId, HomePage.class);
+        }
+        return creditLink;
+    }
+
     private void addBreadcrumbs() {
 
         boolean showBreadcrumbs = getConfiguration().getBoolean(
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
index cbc4fac..c60fb75 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/bootstrap-overrides.css
@@ -746,7 +746,7 @@ div.referencePanel.scalarNameAndValueComponentType {
 }
 
 .navbar-header a.navbar-brand {
-    margin-top: -2px;
+    margin-top: 0px;
 }
 
 .valueChoicesSelect2Panel .scalarValueWrapper .choicesPlaceholder {
@@ -771,6 +771,11 @@ tbody td.togglebox-column form {
 }
 */
 
+
+footer .footer-image {
+    height: 24px;
+}
+
 #aboutLink {
     padding-right: 30px;
 }
diff --git a/example/application/helloworld/src/main/webapp/WEB-INF/isis.properties b/example/application/helloworld/src/main/webapp/WEB-INF/isis.properties
index eea2ece..85358e7 100644
--- a/example/application/helloworld/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/helloworld/src/main/webapp/WEB-INF/isis.properties
@@ -46,3 +46,8 @@ isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName=org.hsqldb
 isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL=jdbc:hsqldb:mem:test
 isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName=sa
 isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword=
+
+
+isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit.1.name=Apache Isis
+isis.viewer.wicket.credit.1.url=http://isis.apache.org
diff --git a/example/application/helloworld/src/main/webapp/images/apache-isis/logo-48x48.png b/example/application/helloworld/src/main/webapp/images/apache-isis/logo-48x48.png
new file mode 100644
index 0000000..08e012c
Binary files /dev/null and b/example/application/helloworld/src/main/webapp/images/apache-isis/logo-48x48.png differ
diff --git a/example/application/simpleapp/application/src/main/resources/domainapp/application/manifest/isis-non-changing.properties b/example/application/simpleapp/application/src/main/resources/domainapp/application/manifest/isis-non-changing.properties
index 41aad5d..25ffdae 100644
--- a/example/application/simpleapp/application/src/main/resources/domainapp/application/manifest/isis-non-changing.properties
+++ b/example/application/simpleapp/application/src/main/resources/domainapp/application/manifest/isis-non-changing.properties
@@ -371,6 +371,11 @@ isis.objects.editing=false
 #isis.viewers.parameterLayout.labelPosition=LEFT
 
 
+isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit.1.name=Apache Isis
+isis.viewer.wicket.credit.1.url=http://isis.apache.org
+
+
 #################################################################################
 #
 # Value facet defaults
diff --git a/example/application/simpleapp/webapp/src/main/webapp/images/apache-isis/logo-48x48.png b/example/application/simpleapp/webapp/src/main/webapp/images/apache-isis/logo-48x48.png
new file mode 100644
index 0000000..08e012c
Binary files /dev/null and b/example/application/simpleapp/webapp/src/main/webapp/images/apache-isis/logo-48x48.png differ
diff --git a/example/application/simpleapp/webapp/src/main/webapp/images/spinning-icon.gif b/example/application/simpleapp/webapp/src/main/webapp/images/spinning-icon.gif
deleted file mode 100644
index 75e3b1e..0000000
Binary files a/example/application/simpleapp/webapp/src/main/webapp/images/spinning-icon.gif and /dev/null differ