Repository: syncope
Updated Branches:
  refs/heads/2_0_X bc310b1a3 -> 828227cfd


[SYNCOPE-996] add kendo date time picker


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/828227cf
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/828227cf
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/828227cf

Branch: refs/heads/2_0_X
Commit: 828227cfdc4fdfc9608d5a8f60e4d93d73afdeac
Parents: bc310b1
Author: Matteo Di Carlo <matteo.dica...@tirasa.net>
Authored: Mon Jan 23 12:30:47 2017 +0100
Committer: Matteo Di Carlo <matteo.dica...@tirasa.net>
Committed: Tue Jan 24 15:44:15 2017 +0100

----------------------------------------------------------------------
 .../META-INF/resources/app/css/editUser.css     |  25 +++--
 .../resources/META-INF/resources/app/index.html |   3 +
 .../resources/META-INF/resources/app/js/app.js  |  13 ++-
 .../app/js/controllers/UserController.js        |  13 +--
 .../app/js/directives/dynamicPlainAttribute.js  | 110 +++----------------
 .../app/views/dynamicPlainAttribute.html        |  30 ++---
 .../src/test/resources/tests/edit.js            |   2 -
 .../workingwithapachesyncope/customization.adoc |  37 +++++--
 8 files changed, 84 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css
----------------------------------------------------------------------
diff --git 
a/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css 
b/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css
index d88cebf..ec5baca 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css
+++ b/client/enduser/src/main/resources/META-INF/resources/app/css/editUser.css
@@ -17,8 +17,6 @@ specific language governing permissions and limitations
 under the License.
 */
 
-/*default stile*/
-
 * {
   box-sizing: border-box;
 }
@@ -209,12 +207,8 @@ under the License.
   margin-top: 10px;
 }
 
-#datetime{
-  line-height: 34px;
-  float: left;
-  margin-top:-30px;
-  padding: 0 3px 0px 0px;
-  display: -webkit-inline-box;
+span.k-datetimepicker{
+  width: 170%;
 }
 
 #date{
@@ -332,6 +326,7 @@ under the License.
     margin-top: -65px;
   }
 
+
   .btn-group{
     position: relative;
     display: inline-flex;
@@ -366,6 +361,11 @@ under the License.
     margin-left: -42px;
     margin-right: 15px;
   }
+  
+  span.k-datetimepicker {
+    width: 141%;
+    margin-top: -50px;
+}
 
 }
 
@@ -440,6 +440,10 @@ under the License.
     margin-left: -21px;
     margin-top: 4px;
   }
+  
+    span.k-datetimepicker{
+    width: 160%;
+  }
 
 }
 
@@ -569,6 +573,11 @@ under the License.
     margin-top: -65px;
   }
 
+  span.k-datetimepicker{
+    width: 171%;
+    margin-top: 50%;
+  }
+
   .multivalue button{
     width: 40px;
   }

http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/client/enduser/src/main/resources/META-INF/resources/app/index.html
----------------------------------------------------------------------
diff --git 
a/client/enduser/src/main/resources/META-INF/resources/app/index.html 
b/client/enduser/src/main/resources/META-INF/resources/app/index.html
index ef58553..3c98e23 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/index.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/index.html
@@ -73,6 +73,9 @@ under the License.
   <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/kendo.ui.core.min.js"></script>
   <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/kendo.notification.min.js"></script>
   <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/kendo.angular.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.it.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.en.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.de.js"></script>
   <script 
src="../webjars/angular-treasure-overlay-spinner/${angular-treasure-overlay-spinner.version}/dist/treasure-overlay-spinner.min.js"></script>
   <script 
src="../webjars/ng-password-strength/${ng-password-strength.version}/dist/scripts/ng-password-strength.min.js"></script>
   <script type="text/javascript" 
src="../webjars/bootstrap-select/${bootstrap-select.version}/js/bootstrap-select.min.js"></script>

http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/app.js 
b/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
index 5d062cb..c74b6e8 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
@@ -47,16 +47,14 @@ var app = angular.module('SyncopeEnduserApp', [
 
 app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', 
'$translateProvider', '$translatePartialLoaderProvider',
   function ($stateProvider, $urlRouterProvider, $httpProvider, 
$translateProvider, $translatePartialLoaderProvider) {
-    
+
     $translatePartialLoaderProvider.addPart('static');
     $translatePartialLoaderProvider.addPart('dynamic');
     $translateProvider.useLoader('$translatePartialLoader', {
       urlTemplate: 'languages/{lang}/{part}.json'
     })
             .preferredLanguage('en');
-//            .useCookieStorage();
 
-    // route configuration
     $stateProvider
             .state('home', {
               url: '/',
@@ -263,6 +261,15 @@ app.run(['$rootScope', '$location', '$state', 
'AuthService',
     //If the route change failed due to authentication error, redirect them out
     $rootScope.endReached = false;
 
+    $rootScope.languages = {
+      availableLanguages: [
+        {id: '1', name: 'Italiano', code: 'it', format: 'dd/MM/yyyy HH:mm'},
+        {id: '2', name: 'English', code: 'en', format: 'MM/dd/yyyy HH:mm'},
+        {id: '3', name: 'Deutsch', code: 'de', format: 'dd/MM/yyyy HH:mm'}
+      ]
+    };
+    $rootScope.languages.selectedLanguage = 
$rootScope.languages.availableLanguages[1];
+
     $rootScope.$on('$routeChangeError', function (event, current, previous, 
rejection) {
       if (rejection === 'Not Authenticated') {
         $location.path('/self');

http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
----------------------------------------------------------------------
diff --git 
a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
 
b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
index 45f038b..ce9c170 100644
--- 
a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
+++ 
b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/UserController.js
@@ -512,17 +512,9 @@ angular.module("self").controller("UserController", 
['$scope', '$rootScope', '$l
       }
     };
 
-    $scope.languages = {
-      availableLanguages: [
-        {id: '1', name: 'Italiano', code: 'it'},
-        {id: '2', name: 'English', code: 'en'},
-        {id: '3', name: 'Deutsch', code: 'de'}
-      ],
-      selectedLanguage: {id: '2', name: 'English', code: 'en'}
-    };
-
     $scope.switchLanguage = function () {
-      $translate.use($scope.languages.selectedLanguage.code);
+      $translate.use($rootScope.languages.selectedLanguage.code);
+      kendo.culture($rootScope.languages.selectedLanguage.code);
     };
 
     $scope.logout = function (message) {
@@ -540,7 +532,6 @@ angular.module("self").controller("UserController", 
['$scope', '$rootScope', '$l
     };
 
     $scope.redirect = function () {
-      console.log("$scope.languages.selectedLanguage.code", 
$scope.languages.selectedLanguage.code);
       $translate.use($scope.languages.selectedLanguage.code);
       $location.path('/self');
       $rootScope.endReached = false;

http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/client/enduser/src/main/resources/META-INF/resources/app/js/directives/dynamicPlainAttribute.js
----------------------------------------------------------------------
diff --git 
a/client/enduser/src/main/resources/META-INF/resources/app/js/directives/dynamicPlainAttribute.js
 
b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/dynamicPlainAttribute.js
index 1aabdd3..682a2bf 100644
--- 
a/client/enduser/src/main/resources/META-INF/resources/app/js/directives/dynamicPlainAttribute.js
+++ 
b/client/enduser/src/main/resources/META-INF/resources/app/js/directives/dynamicPlainAttribute.js
@@ -28,7 +28,7 @@ angular.module('self')
               index: "=",
               user: "="
             },
-            controller: function ($scope, $element, $window) {
+            controller: function ($scope, $rootScope, $element, $window) {
               $scope.initAttribute = function (schema, index) {
                 switch (schema.type) {
                   case "Long":
@@ -85,107 +85,27 @@ angular.module('self')
                     break;
 
                   case "Date":
+                    $scope.getType = function (x) {
+                      return typeof x;
+                    };
+                    $scope.isDate = function (x) {
+                      return x instanceof Date;
+                    };
+
                     var dateInMs = 
$scope.user.plainAttrs[schema.key].values[index];
-                    if (dateInMs) {
-                      var temporaryDate = new Date(dateInMs * 1);
-                      $scope.selectedDate = temporaryDate;
-                      $scope.selectedTime = temporaryDate;
-                    }
+                    var temporaryDate = new Date(dateInMs * 1);
+                    $scope.selectedDate = temporaryDate;
+                    $scope.languageid = 
$rootScope.languages.selectedLanguage.id;
+                    $scope.languageFormat = 
$rootScope.languages.selectedLanguage.format;
+                    $scope.languageCulture = 
$rootScope.languages.selectedLanguage.culture;
 
-                    $scope.bindDateToModel = function (selectedDate, 
selectedTime) {
+                    $scope.bindDateToModel = function (selectedDate, 
extendedDate) {
                       if (selectedDate) {
-                        var extractedDate = 
selectedDate.toString().substring(0, 15);
-                        var extractedTime;
-                        if (selectedTime) {
-                          extractedTime = 
selectedTime.toString().substring(16);
-                        } else {
-                          extractedTime = '00:00:00';
-                        }
-                        var resultDate = extractedDate + ' ' + extractedTime;
-                        var tmpdate = new Date(resultDate);
+                        var tmpdate = new Date(extendedDate);
                         var milliseconds = tmpdate.getTime();
                         $scope.user.plainAttrs[schema.key].values[index] = 
milliseconds;
                       }
                     };
-
-                    $scope.clear = function () {
-                      $scope.user.plainAttrs[schema.key].values[index] = null;
-                    };
-
-                    // Disable weekend selection
-                    $scope.disabled = function (date, mode) {
-                      // if you want to disable weekends:
-                      // return (mode === 'day' && (date.getDay() === 0 || 
date.getDay() === 6));
-                      return false;
-                    };
-
-                    $scope.toggleMin = function () {
-                      $scope.minDate = $scope.minDate ? null : new Date();
-                    };
-
-                    $scope.maxDate = new Date(2050, 5, 22);
-
-                    $scope.open = function ($event) {
-                      $scope.status.opened = true;
-                    };
-
-                    $scope.setDate = function (year, month, day) {
-                      $scope.user.plainAttrs[schema.key].values[index] = new 
Date(year, month, day);
-                    };
-
-                    $scope.dateOptions = {
-                      startingDay: 1
-                    };
-
-                    $scope.status = {
-                      opened: false
-                    };
-
-                    var tomorrow = new Date();
-                    tomorrow.setDate(tomorrow.getDate() + 1);
-                    var afterTomorrow = new Date();
-                    afterTomorrow.setDate(tomorrow.getDate() + 2);
-                    $scope.events =
-                            [
-                              {
-                                date: tomorrow,
-                                status: 'full'
-                              },
-                              {
-                                date: afterTomorrow,
-                                status: 'partially'
-                              }
-                            ];
-
-                    $scope.getDayClass = function (date, mode) {
-                      if (mode === 'day') {
-                        var dayToCheck = new Date(date).setHours(0, 0, 0, 0);
-
-                        for (var i = 0; i < $scope.events.length; i++) {
-                          var currentDay = new 
Date($scope.events[i].date).setHours(0, 0, 0, 0);
-
-                          if (dayToCheck === currentDay) {
-                            return $scope.events[i].status;
-                          }
-                        }
-                      }
-
-                    };
-
-                    //TIME PICKER
-                    $scope.selectedTime = $scope.selectedDate;
-                    $scope.hstep = 1;
-                    $scope.mstep = 1;
-
-                    $scope.options = {
-                      hstep: [1, 2, 3],
-                      mstep: [1, 5, 10, 15, 25, 30]
-                    };
-
-                    $scope.ismeridian = false;
-                    $scope.toggleMode = function () {
-                      $scope.ismeridian = !$scope.ismeridian;
-                    };
                     break;
 
                   case "Boolean":

http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttribute.html
----------------------------------------------------------------------
diff --git 
a/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttribute.html
 
b/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttribute.html
index 1579fd0..68b9f5a 100644
--- 
a/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttribute.html
+++ 
b/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttribute.html
@@ -79,28 +79,18 @@ under the License.
   <input ng-switch-when="Double" class="form-control" type="number" 
ng-model="user.plainAttrs[schema.key].values[index]"
          ng-required="{{schema.mandatoryCondition}}" validate="true"
          ng-init="initAttribute(schema, index)" name="{{schema.key}}"/>
-
+  
   <div ng-switch-when="Date" id="date">
-    <div id="datetime">
-      <input type="text" class="form-control" 
-             uib-datepicker-popup
-             ng-model="selectedDate"
-             ng-change="bindDateToModel(selectedDate, selectedTime)"
-             min-date="minDate" max-date="maxDate"
-             is-open="status.opened" datepicker-options="dateOptions"
+      <input type="text" class="dateTimePicker"
+             id="dateTimePicker"
+             kendo-date-time-picker
+             ng-model="extendedDate"
              ng-required="{{schema.mandatoryCondition}}" close-text="Close"
-             ng-init="initAttribute(schema, index)"/>
-      <button id="calendar" type="button" class="btn btn-default" 
ng-click="open($event)" >
-        <i class="glyphicon glyphicon-calendar"></i>
-      </button>
-    </div>
-    <div id="timepicker" ng-if="(schema.conversionPattern.indexOf('H') > -1 ||
-                schema.conversionPattern.indexOf('h') > -1)">
-      <uib-timepicker ng-model="selectedTime" 
-                      ng-change="bindDateToModel(selectedDate, selectedTime)"
-                      hour-step="hstep" minute-step="mstep" 
show-meridian="ismeridian">
-      </uib-timepicker>
-    </div>
+             ng-init="initAttribute(schema, index)"
+             ng-change="bindDateToModel(selectedDate, extendedDate)"
+             k-ng-model="selectedDate"
+             data-k-format=languageFormat 
+             />
   </div>
 
   <div ng-switch-when="Enum" ng-init="initAttribute(schema, index)">

http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/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 9c49f44..2da5240 100644
--- a/fit/enduser-reference/src/test/resources/tests/edit.js
+++ b/fit/enduser-reference/src/test/resources/tests/edit.js
@@ -72,8 +72,6 @@ describe('syncope enduser user edit', function () {
     element.all(by.css('[name="fullname"]')).first().sendKeys('Vincenzo 
Bellini');
     element.all(by.css('[name="userId"]')).first().clear();
     
element.all(by.css('[name="userId"]')).first().sendKeys('bell...@apache.org');
-    element.all(by.model('selectedDate')).first().clear();
-    element.all(by.model('selectedDate')).first().sendKeys('2009-06-21');
     element.all(by.css('[name="firstname"]')).first().clear();
     element.all(by.css('[name="firstname"]')).first().sendKeys('Vincenzo');
     element.all(by.css('[name="ctype"]')).first().clear();

http://git-wip-us.apache.org/repos/asf/syncope/blob/828227cf/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 9cb97f0..47df12c 100644
--- 
a/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
+++ 
b/src/main/asciidoc/reference-guide/workingwithapachesyncope/customization.adoc
@@ -365,22 +365,39 @@ Changing the content of these files will result in 
updating the Enduser messages
 ====
 In order to add support for a new language (taking French as reference):
 
-* add the new language entry in `js/controllers/LoginController.js` under 
`availableLanguages`, by updating
+* add the support for the new language by updating `index.html`:
 ```
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.it.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.en.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.de.js"></script>
+```
+in
+```
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.it.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.en.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.de.js"></script>
+  <script 
src="../webjars/kendo-ui-core/${kendo-ui-core.version}/js/cultures/kendo.culture.fr.js"></script>
+```
+* add the new language entry in `js/app.js` under `availableLanguages`, by 
updating
+```
+    $rootScope.languages = {
       availableLanguages: [
-        {id: '1', name: 'Italiano', code: 'it'},
-        {id: '2', name: 'English', code: 'en'},
-        {id: '3', name: 'Deutsch', code: 'de'}
-      ],
+        {id: '1', name: 'Italiano', code: 'it', format: 'dd/MM/yyyy HH:mm'},
+        {id: '2', name: 'English', code: 'en', format: 'MM/dd/yyyy HH:mm'},
+        {id: '3', name: 'Deutsch', code: 'de', format: 'dd/MM/yyyy HH:mm'}
+      ]
+    };
 ```
 as
 ```
+    $rootScope.languages = {
       availableLanguages: [
-        {id: '1', name: 'Italiano', code: 'it'},
-        {id: '2', name: 'English', code: 'en'},
-        {id: '3', name: 'Deutsch', code: 'de'}
-        {id: '4', name: 'Français', code: 'fr'}
-      ],
+        {id: '1', name: 'Italiano', code: 'it', format: 'dd/MM/yyyy HH:mm'},
+        {id: '2', name: 'English', code: 'en', format: 'MM/dd/yyyy HH:mm'},
+        {id: '3', name: 'Deutsch', code: 'de', format: 'dd/MM/yyyy HH:mm'}
+        {id: '4', name: 'Français', code: 'fr', format: 'dd/MM/yyyy HH:mm'}
+      ]
+    };
 ```
 * copy the `enduser/src/main/webapp/app/languages/en/` directory into 
`enduser/src/main/webapp/app/languages/fr/`
 and modify the JSON files under the new directory

Reply via email to