Repository: syncope
Updated Branches:
  refs/heads/2_0_X f89b408d9 -> 19d9e93e0


http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/client/enduser/src/test/resources/customFormAttributes.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/test/resources/customFormAttributes.json 
b/client/enduser/src/test/resources/customFormAttributes.json
new file mode 100644
index 0000000..18112ef
--- /dev/null
+++ b/client/enduser/src/test/resources/customFormAttributes.json
@@ -0,0 +1,44 @@
+{
+  "PLAIN": 
+          {
+            "attributes": {
+              "firstname": {
+                "readonly": true,
+                "defaultValues": ["defaultFirstname"]
+              },
+              "surname": {
+                "readonly": false,
+                "defaultValues": []
+              },
+              "fullname": {
+                "readonly": false
+              },
+              "userId": {
+                "readonly": false
+              },
+              "loginDate": {
+                "readonly": false
+              },
+              "additional#loginDate": {
+                "readonly": false
+              },
+              "additional#ctype": {
+                "readonly": false,
+                "defaultValues": ["ctypeDefault"]
+              },
+              "additional#cool": {
+                "readonly": false,
+                "defaultValues": ["true"]
+              }
+            }
+          },
+  "VIRTUAL": 
+          {
+            "attributes": {
+              "virtualdata": {
+                "readonly": true,
+                "defaultValues": ["defaultVirtualData"]
+              }
+            }
+          }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/client/enduser/src/test/resources/customTemplate.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/test/resources/customTemplate.json 
b/client/enduser/src/test/resources/customTemplate.json
new file mode 100644
index 0000000..0636b31
--- /dev/null
+++ b/client/enduser/src/test/resources/customTemplate.json
@@ -0,0 +1,56 @@
+{
+  "templates": 
+          {
+            "login":
+                    {
+                      "templateUrl": "views/templates/selfTemplate.html",
+                      "css": [
+                        "css/login.css",
+                        "css/templates/dark/login.css"
+                      ]
+                    },
+
+            "edit_user":
+                    {
+                      "templateUrl": 
"views/templates/onlyPlainAttrsDetails/editUserTemplate.html",
+                      "css": [
+                        "css/editUser.css",
+                        "css/templates/dark/editUser.css"
+                      ]
+                    },
+
+            "password_reset":
+                    {
+                      "templateUrl": 
"views/templates/passwordresetTemplate.html",
+                      "css": [
+                        "css/editUser.css",
+                        "css/passwordReset.css",
+                        "css/templates/dark/editUser.css"
+                      ]
+                    }            
+          },
+
+  "generalAssets": 
+          {
+            "css": [
+              "css/app.css",
+              "css/notification.css"
+            ]
+          },
+
+  "wizard": 
+          {
+            "firstStep": "plainSchemas",
+            "steps": {
+              "plainSchemas": {
+                "url": "/plainSchemas"
+              },
+              "credentials": {
+                "url": "/credentials"
+              },
+              "finish": {
+                "url": "/finish"
+              }
+            }
+          }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/deb/enduser/pom.xml
----------------------------------------------------------------------
diff --git a/deb/enduser/pom.xml b/deb/enduser/pom.xml
index 8a128ba..8c604f1 100644
--- a/deb/enduser/pom.xml
+++ b/deb/enduser/pom.xml
@@ -97,7 +97,8 @@ under the License.
         
<directory>${project.basedir}/../../client/enduser/src/main/resources</directory>
         <includes>
           <include>enduser.properties</include>
-          <include>customForm.json</include>
+          <include>customFormAttributes.json</include>
+          <include>customTemplate.json</include>
         </includes>
         <targetPath>${project.build.directory}/etc</targetPath>
         <filtering>true</filtering>

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/deb/enduser/src/deb/control/conffiles
----------------------------------------------------------------------
diff --git a/deb/enduser/src/deb/control/conffiles 
b/deb/enduser/src/deb/control/conffiles
index 8fb2453..d115b8e 100644
--- a/deb/enduser/src/deb/control/conffiles
+++ b/deb/enduser/src/deb/control/conffiles
@@ -1,6 +1,7 @@
 /etc/tomcat8/Catalina/localhost/syncope-enduser.xml
 /etc/apache-syncope/enduser.properties
-/etc/apache-syncope/customForm.json
+/etc/apache-syncope/customFormAttributes.json
+/etc/apache-syncope/customTemplate.json
 /etc/apache-syncope/saml2sp-agent.properties
 /etc/apache-syncope/oidcclient-agent.properties
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/pom.xml
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/pom.xml b/fit/enduser-reference/pom.xml
index a7a6fbf..f399afb 100644
--- a/fit/enduser-reference/pom.xml
+++ b/fit/enduser-reference/pom.xml
@@ -134,34 +134,11 @@ under the License.
       <type>war</type>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>com.github.detro</groupId>
-      <artifactId>phantomjsdriver</artifactId>       
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <build>
     <plugins>
       <plugin>
-        <groupId>com.github.klieber</groupId>
-        <artifactId>phantomjs-maven-plugin</artifactId>
-        <configuration>
-          <version>${phantomjs.version}</version>
-          <checkSystemPath>false</checkSystemPath>
-          <skip>${skipTests}</skip>
-        </configuration>
-        <executions>
-          <execution>
-            <id>install-phantomjs</id>
-            <goals>
-              <goal>install</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-
-      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-antrun-plugin</artifactId>
         <inherited>true</inherited>

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/main/resources/customForm.json
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/main/resources/customForm.json 
b/fit/enduser-reference/src/main/resources/customForm.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/fit/enduser-reference/src/main/resources/customForm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/main/resources/customFormAttributes.json
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/main/resources/customFormAttributes.json 
b/fit/enduser-reference/src/main/resources/customFormAttributes.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/fit/enduser-reference/src/main/resources/customFormAttributes.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/main/resources/customTemplate.json
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/main/resources/customTemplate.json 
b/fit/enduser-reference/src/main/resources/customTemplate.json
new file mode 100644
index 0000000..6b0efc1
--- /dev/null
+++ b/fit/enduser-reference/src/main/resources/customTemplate.json
@@ -0,0 +1,65 @@
+{
+  "templates": 
+          {
+            "login":
+                    {
+                      "templateUrl": "views/templates/selfTemplate.html",
+                      "css": [
+                        "css/login.css"
+                      ]
+                    },
+
+            "edit_user":
+                    {
+                      "templateUrl": "views/templates/editUserTemplate.html",
+                      "css": [
+                        "css/editUser.css"
+                      ]
+                    },
+
+            "password_reset":
+                    {
+                      "templateUrl": 
"views/templates/passwordresetTemplate.html",
+                      "css": [
+                        "css/editUser.css",
+                        "css/passwordReset.css"
+                      ]
+                    }
+          },
+
+  "generalAssets": 
+          {
+            "css": [
+              "css/notification.css",
+              "css/app.css"
+            ]
+          },
+
+  "wizard": 
+          {
+            "firstStep": "credentials",
+            "steps": {
+              "credentials": {
+                "url": "/credentials"
+              },
+              "groups": {
+                "url": "/groups"
+              },
+              "plainSchemas": {
+                "url": "/plainSchemas"
+              },
+              "derivedSchemas": {
+                "url": "/derivedSchemas"
+              },
+              "virtualSchemas": {
+                "url": "/virtualSchemas"
+              },
+              "resources": {
+                "url": "/resources"
+              },
+              "finish": {
+                "url": "/finish"
+              }
+            }
+          }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/main/resources/package.json
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/main/resources/package.json 
b/fit/enduser-reference/src/main/resources/package.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/fit/enduser-reference/src/main/resources/package.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/test/resources/customForm.json
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/customForm.json 
b/fit/enduser-reference/src/test/resources/customForm.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/fit/enduser-reference/src/test/resources/customForm.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/test/resources/customFormAttributes.json
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/customFormAttributes.json 
b/fit/enduser-reference/src/test/resources/customFormAttributes.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/fit/enduser-reference/src/test/resources/customFormAttributes.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/test/resources/customTemplate.json
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/customTemplate.json 
b/fit/enduser-reference/src/test/resources/customTemplate.json
new file mode 100644
index 0000000..6b0efc1
--- /dev/null
+++ b/fit/enduser-reference/src/test/resources/customTemplate.json
@@ -0,0 +1,65 @@
+{
+  "templates": 
+          {
+            "login":
+                    {
+                      "templateUrl": "views/templates/selfTemplate.html",
+                      "css": [
+                        "css/login.css"
+                      ]
+                    },
+
+            "edit_user":
+                    {
+                      "templateUrl": "views/templates/editUserTemplate.html",
+                      "css": [
+                        "css/editUser.css"
+                      ]
+                    },
+
+            "password_reset":
+                    {
+                      "templateUrl": 
"views/templates/passwordresetTemplate.html",
+                      "css": [
+                        "css/editUser.css",
+                        "css/passwordReset.css"
+                      ]
+                    }
+          },
+
+  "generalAssets": 
+          {
+            "css": [
+              "css/notification.css",
+              "css/app.css"
+            ]
+          },
+
+  "wizard": 
+          {
+            "firstStep": "credentials",
+            "steps": {
+              "credentials": {
+                "url": "/credentials"
+              },
+              "groups": {
+                "url": "/groups"
+              },
+              "plainSchemas": {
+                "url": "/plainSchemas"
+              },
+              "derivedSchemas": {
+                "url": "/derivedSchemas"
+              },
+              "virtualSchemas": {
+                "url": "/virtualSchemas"
+              },
+              "resources": {
+                "url": "/resources"
+              },
+              "finish": {
+                "url": "/finish"
+              }
+            }
+          }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/test/resources/protractor-conf.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/protractor-conf.js 
b/fit/enduser-reference/src/test/resources/protractor-conf.js
index 5cf6532..87201a0 100644
--- a/fit/enduser-reference/src/test/resources/protractor-conf.js
+++ b/fit/enduser-reference/src/test/resources/protractor-conf.js
@@ -19,9 +19,11 @@
 exports.config = {
   directConnect: false,
   capabilities: {
-    'browserName': 'phantomjs',
-    'phantomjs.binary.path': '${phantomjs.binary}',
-    'phantomjs.ghostdriver.cli.args': ['--loglevel=DEBUG']
+    'browserName': 'chrome',
+
+    chromeOptions: {
+      args: ["--headless", "--window-size=1600,1000"]
+    }
   },
 
   allScriptsTimeout: 241000,

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/test/resources/tests/abstract.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/tests/abstract.js 
b/fit/enduser-reference/src/test/resources/tests/abstract.js
index 1f1b2ec..8895eae 100644
--- a/fit/enduser-reference/src/test/resources/tests/abstract.js
+++ b/fit/enduser-reference/src/test/resources/tests/abstract.js
@@ -34,10 +34,7 @@ exports.doSave = function () {
 };
 
 exports.waitSpinner = function () {
-  element.all(by.css('treasure-overlay-spinner')).isDisplayed().then(function 
(result) {
-    if (result) {
-      browser.driver.sleep(3000);
-    }
-  });
-}
-;
\ No newline at end of file
+  var el = element(by.css('treasure-overlay-spinner-active'));
+  var EC = protractor.ExpectedConditions;
+  browser.wait(EC.not(EC.presenceOf(el)), 5000);
+};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/test/resources/tests/edit.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/tests/edit.js 
b/fit/enduser-reference/src/test/resources/tests/edit.js
index a4ea1de..4d416e7 100644
--- a/fit/enduser-reference/src/test/resources/tests/edit.js
+++ b/fit/enduser-reference/src/test/resources/tests/edit.js
@@ -23,6 +23,7 @@ describe('syncope enduser user edit', function () {
     console.log("");
     console.log("user edit");
     abstract.goHome();
+    abstract.waitSpinner();
 
     //login
     element(by.model('credentials.username')).sendKeys('bellini');
@@ -33,9 +34,13 @@ describe('syncope enduser user edit', function () {
             });
     element.all(by.options('language.name for language in 
languages.availableLanguages track by language.id')).
             get(1).click();
+    abstract.waitSpinner();
+    browser.wait(element(by.id('login-btn')).isPresent());
     element(by.id('login-btn')).click();
 
     //credential
+    var EC = protractor.ExpectedConditions;
+    browser.wait(EC.presenceOf(element(by.model('user.username')), 5000));
     abstract.waitSpinner();
     browser.wait(element(by.model('user.username')).isPresent());
     element(by.model('user.username')).clear();

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/fit/enduser-reference/src/test/resources/tests/passwordreset.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/tests/passwordreset.js 
b/fit/enduser-reference/src/test/resources/tests/passwordreset.js
index 0ceaf02..f16714f 100644
--- a/fit/enduser-reference/src/test/resources/tests/passwordreset.js
+++ b/fit/enduser-reference/src/test/resources/tests/passwordreset.js
@@ -26,6 +26,7 @@ describe('syncope enduser user password reset ', function () {
     abstract.goHome();
 
     abstract.waitSpinner();
+    browser.wait(element(by.id('passwordreset')).isPresent());
     element(by.id('passwordreset')).click();
     abstract.waitSpinner();
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 1aad2d7..ceb0d0b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -449,8 +449,8 @@ under the License.
     <swagger-ui.version>3.18.2</swagger-ui.version>
     <guava.version>20.0</guava.version>
 
-    <jquery.version>2.2.4</jquery.version>
-    <jquery-ui.version>1.11.4</jquery-ui.version>
+    <jquery.version>3.3.1-1</jquery.version>
+    <jquery-ui.version>1.12.1</jquery-ui.version>
     <jquery-slimscroll.version>1.3.8</jquery-slimscroll.version>
     <jquery-cookie.version>1.4.1-1</jquery-cookie.version>
     
@@ -459,6 +459,7 @@ under the License.
     <bootstrap-fileinput.version>4.4.8</bootstrap-fileinput.version>
     <bootbox.version>4.4.0</bootbox.version>
     <font-awesome.version>4.7.0</font-awesome.version>
+    <font-awesome.filename>font-awesome.min.css</font-awesome.filename>
     <ionicons.version>2.0.1</ionicons.version>
     <highlightjs.version>9.8.0</highlightjs.version>
     <codemirror.version>5.33.0</codemirror.version>
@@ -470,16 +471,18 @@ under the License.
     <wicket-jqueryui.version>7.10.2</wicket-jqueryui.version>
     <wicket-bootstrap.version>0.10.17</wicket-bootstrap.version>
 
-    <angular.version>1.7.0</angular.version>
-    <angular-ui-router.version>0.3.2</angular-ui-router.version>
-    <angular-ui-bootstrap.version>1.3.3</angular-ui-bootstrap.version>
+    <angular.version>1.7.3</angular.version>
+    <angular-resource.version>1.7.0</angular-resource.version>
+    <angular-ui-router.version>1.0.20</angular-ui-router.version>
+    <ui-bootstrap.version>3.0.4</ui-bootstrap.version>
     <angular-ui-select.version>0.19.8</angular-ui-select.version>
     
<angular-treasure-overlay-spinner.version>1.1.0</angular-treasure-overlay-spinner.version>
-    <angular-translate.version>2.17.1</angular-translate.version>
+    <angular-translate.version>2.18.1</angular-translate.version>
+    
<angular-translate-loader-partial.version>2.17.1</angular-translate-loader-partial.version>
     
     <ng-password-strength.version>0.2.1</ng-password-strength.version>
     <lodash.version>4.17.4</lodash.version>
-    <kendo-ui-core.version>2014.2.716</kendo-ui-core.version>
+    <kendo-ui-core.version>2018.1.221</kendo-ui-core.version>
     <select2.version>3.4.8</select2.version>
     <fileSaver.version>0.0.2</fileSaver.version>
     
@@ -516,11 +519,8 @@ under the License.
 
     <tomcat.version>8.5.33</tomcat.version>
 
-    <phantomjs.driver.version>1.2.0</phantomjs.driver.version>
-    <phantomjs.version>2.1.1</phantomjs.version>
-    
-    <nodejs.version>v6.9.4</nodejs.version>    
-    <protractor.version>4.0.14</protractor.version>    
+    <nodejs.version>v8.11.4</nodejs.version>    
+    <protractor.version>5.4.0</protractor.version>    
 
     <jdbc.postgresql.version>42.2.5</jdbc.postgresql.version>
     <jdbc.mysql.version>5.1.47</jdbc.mysql.version>
@@ -1500,7 +1500,7 @@ under the License.
       <dependency>
         <groupId>org.webjars.bower</groupId>
         <artifactId>angular-resource</artifactId>
-        <version>${angular.version}</version>
+        <version>${angular-resource.version}</version>
       </dependency>
       <dependency>
         <groupId>org.webjars.bower</groupId>
@@ -1524,15 +1524,9 @@ under the License.
         <version>${angular.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.webjars</groupId>
-        <artifactId>angular-ui-bootstrap</artifactId>
-        <version>${angular-ui-bootstrap.version}</version>
-        <exclusions>
-          <exclusion>
-            <groupId>org.webjars</groupId>
-            <artifactId>angularjs</artifactId>
-          </exclusion>
-        </exclusions>
+        <groupId>org.webjars.npm</groupId>
+        <artifactId>ui-bootstrap4</artifactId>
+        <version>${ui-bootstrap.version}</version>
       </dependency>
       <dependency>
         <groupId>org.webjars</groupId>
@@ -1563,7 +1557,7 @@ under the License.
       <dependency>
         <groupId>org.webjars.bower</groupId>
         <artifactId>angular-translate-loader-partial</artifactId>
-        <version>${angular-translate.version}</version>
+        <version>${angular-translate-loader-partial.version}</version>
       </dependency>      
       <dependency>
         <groupId>org.webjars.bower</groupId>
@@ -1749,12 +1743,6 @@ under the License.
 
       <!-- TEST -->
       <dependency>
-        <groupId>com.github.detro</groupId>
-        <artifactId>phantomjsdriver</artifactId>
-        <version>${phantomjs.driver.version}</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
         <groupId>com.icegreen</groupId>
         <artifactId>greenmail</artifactId>
         <version>1.5.8</version>

http://git-wip-us.apache.org/repos/asf/syncope/blob/19d9e93e/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
----------------------------------------------------------------------
diff --git 
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc 
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
index 2e2541b..ab831ec 100644
--- 
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
+++ 
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
@@ -110,7 +110,8 @@ $ mvn clean verify \
 $ cp core/target/classes/*properties /opt/syncope/conf
 $ cp console/target/classes/*properties /opt/syncope/conf
 $ cp enduser/target/classes/*properties /opt/syncope/conf
-$ cp enduser/target/classes/customForm.json /opt/syncope/conf
+$ cp enduser/target/classes/customFormAttributes.json /opt/syncope/conf
+$ cp enduser/target/classes/customTemplate.json /opt/syncope/conf
 ....
 
 After downloading all of the dependencies that are needed, three WAR files 
will be produced:
@@ -632,17 +633,17 @@ The <<enduser-application>> allows to customize the form 
in order to:
 * set attributes read-only for users
 * provide default value(s)
 
-Under the `enduser/src/main/resources` directory, the `customForm.json` file 
is available, allowing to configure form
+Under the `enduser/src/main/resources` directory, the 
`customFormAttributes.json` file is available, allowing to configure form
 customization.
 
 [NOTE]
 .Hot deploy
 ====
-The `customForm.json` could be edited and reloaded without the need of 
re-starting the Java EE container.
+The `customFormAttributes.json` could be edited and reloaded without the need 
of re-starting the Java EE container.
 ====
 
 [TIP]
-The `customForm.json` default content is just an empty object `{}`: if such 
file is missing, empty or not valid,
+The `customFormAttributes.json` default content is just an empty object `{}`: 
if such file is missing, empty or not valid,
 form customization will be simply disabled and all attributes will be shown.
 
 .Sample form customization
@@ -652,7 +653,6 @@ form customization will be simply disabled and all 
attributes will be shown.
 {
   "PLAIN":
           {
-            "show": true,
             "attributes": {
               "firstname": {
                 "readonly": true,
@@ -685,13 +685,8 @@ form customization will be simply disabled and all 
attributes will be shown.
               }
             }
           },
-  "DERIVED":
-          {
-            "show": false
-          },
   "VIRTUAL":
           {
-            "show": true,
             "attributes": {
               "virtualdata": {
                 "readonly": true,
@@ -703,7 +698,7 @@ form customization will be simply disabled and all 
attributes will be shown.
 ----
 ====
 
-The `customForm.json` file has two main levels:
+The `customFormAttributes.json` file has two main levels:
 
 . Schema type, e.g. `PLAIN`, `DERIVED`, `VIRTUAL`;
 . Attributes: list of attributes (by schema type) to be shown on the form.
@@ -715,9 +710,6 @@ The schema type level allows to define customization of the 
three sub-forms avai
 
 Only one, two or all three sections can be specified, in order to customize 
only what is really needed.
 
-Moreover, a global boolean field `show` is available, to indicate that the 
whole sub-form should be shown or hidden.
-When not specified, `show` is treated as `true`.
-
 [discrete]
 ====== Attributes
 
@@ -748,14 +740,13 @@ An empty `attributes` field translates to skip filtering 
and show all attributes
 {
   "PLAIN": 
           {
-            "show": true,
             "attributes": {}
           }
 }
 ```
 shows all `PLAIN` attributes.
 
-If all attributes are to be hidden, please set `"show": false`, instead.
+If all attributes are to be hidden, please use 
[[customization-enduser-template]] to hide the full wizard step, instead.
 ====
 
 [NOTE]
@@ -772,6 +763,191 @@ Within Enduser form customization, `readonly` prevents 
the user's browser to mod
 Moreover, `defaultValues` do not overwrite any existing value.
 ====
 
+[[customization-enduser-template]]
+===== Dynamic Templating
+
+It is possible to customize the <<enduser-application>> using the "Dynamic 
Templating" feature. 
+It is a simple and fast way to customize structure and style of the whole 
Enduser.
+
+Under the `enduser/src/main/resources` directory, the `customTemplate.json` 
file is available, allowing to configure application
+style and structure.
+
+[NOTE]
+.Hot deploy
+====
+The `customTemplate.json` could be edited and reloaded without the need of 
re-starting the Java EE container.
+====
+
+[WARNING]
+The `customTemplate.json` default content is:
+
+```
+{
+  "templates": 
+          {
+            "login":
+                    {
+                      "templateUrl": "views/templates/selfTemplate.html",
+                      "css": [
+                        "css/login.css"
+                      ]
+                    },
+
+            "edit_user":
+                    {
+                      "templateUrl": "views/templates/editUserTemplate.html",
+                      "css": [
+                        "css/editUser.css"
+                      ]
+                    },
+
+            "password_reset":
+                    {
+                      "templateUrl": 
"views/templates/passwordresetTemplate.html",
+                      "css": [
+                        "css/editUser.css",
+                        "css/passwordReset.css"
+                      ]
+                    }
+          },
+
+  "generalAssets": 
+          {
+            "css": [
+              "css/notification.css",
+              "css/app.css"
+            ]
+          },
+
+  "wizard": 
+          {
+            "firstStep": "credentials",
+            "steps": {
+              "credentials": {
+                "url": "/credentials"
+              },
+              "groups": {
+                "url": "/groups"
+              },
+              "plainSchemas": {
+                "url": "/plainSchemas"
+              },
+              "derivedSchemas": {
+                "url": "/derivedSchemas"
+              },
+              "virtualSchemas": {
+                "url": "/virtualSchemas"
+              },
+              "resources": {
+                "url": "/resources"
+              },
+              "finish": {
+                "url": "/finish"
+              }
+            }
+          }
+}
+```
+
+if such file is missing, empty or not valid, Enduser structure will not be 
valid and won't work as expected.
+
+[discrete]
+====== Editing default template
+
+As sample, Syncope provides a configuration to apply a dark theme to Enduser 
and edit the "User Edit / Create Wizard" 
+to only display 3 steps, like:
+
+* PlainSchemas;
+* Details (Username, Password, Security question etc…);
+* Finish.
+
+The configurations for that sample are in
+ifeval::["{snapshotOrRelease}" == "release"]
+https://github.com/apache/syncope/blob/syncope-{docVersion}/client/enduser/src/test/resources/customTemplate.json
+endif::[]
+ifeval::["{snapshotOrRelease}" == "snapshot"]
+https://github.com/apache/syncope/blob/2_0_X/client/enduser/src/test/resources/customTemplate.json
+endif::[]
+.
+In order to apply them, that content must be copied to your 
`customTemplate.json` file.
+
+[discrete]
+====== Template styling assets
+
+In case you need, place your static `.css` resources somewhere (e.g. 
`enduser/src/main/resources/META-INF/resources/app/css/templates/`)
+and refer them in `customTemplate.json` file.
+
+[discrete]
+====== Wizard steps
+
+It is also possible to customize the list of wizard steps to be shown in "User 
Edit / Create Wizard".
+E.g., only 3 steps are displayed in the dark theme template sample 
configuration:
+
+```
+"wizard": 
+        {
+          "steps": {
+            "plainSchemas": {
+              "url": "/plainSchemas"
+            },
+            "credentials": {
+              "url": "/credentials"
+            },
+            "finish": {
+              "url": "/finish"
+            }
+          }
+        }
+```
+
+Use the `"firstStep"` property to decide which step must be set as first one 
in the wizard:
+
+```
+"wizard": 
+        {
+          "firstStep": "plainSchemas",
+        }
+```
+
+[discrete]
+====== Template structure
+
+The structure of the template sections is defined by `templateUrl` property, 
for each main section:
+
+```
+"templates": 
+        {
+         "login":
+                {
+                  "templateUrl": "views/templates/selfTemplate.html",
+                },
+
+        "edit_user":
+                {
+                  "templateUrl": 
"views/templates/onlyPlainAttrsDetails/editUserTemplate.html",
+                },
+
+        "password_reset":
+                {
+                  "templateUrl": "views/templates/passwordresetTemplate.html",
+                },          
+        },
+```
+
+E.g., 
`enduser/src/main/resources/META-INF/resources/app/views/templates/onlyPlainAttrsDetails/editUserTemplate.html`
 is 
+equals to the default
+`enduser/src/main/resources/META-INF/resources/app/views/templates/editUserTemplate.html`
+template file. 
+Anyway, it is just helpful to show that it is possible to customize all the 
application structure in a very simple way.
+
+It could also be useful to edit the specific parts of a single wizard step or 
view; all of those are placed in 
+`enduser/src/main/resources/META-INF/resources/app/views/` folder.
+
+[WARNING]
+Please do not change the main object keys in `customTemplate.json` file (e.g. 
`templates`, `edit_user`, `login`, `generalAssets`, etc...); 
+they are used to identify the specific customizable template parts of the 
Enduser application.
+In case it is necessary to change those identifiers, remember to edit all 
references in other parts of the application.
+
 [[customization-extensions]]
 ==== Extensions
 
@@ -779,4 +955,4 @@ Moreover, `defaultValues` do not overwrite any existing 
value.
 
 For example, the http://www.chorevolution.eu/[CHOReVOLUTION^] IdM - based on 
Apache Syncope - provides
 https://gitlab.ow2.org/chorevolution/syncope/tree/master/ext/choreography[an 
extension^]
-for managing via the <<core>> and visualizing via the 
<<admin-console-component>> the running choreography instances.
+for managing via the <<core>> and visualizing via the 
<<admin-console-component>> the running choreography instances.
\ No newline at end of file

Reply via email to