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