@cerema/cadriciel 1.4.24 → 1.4.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1358) hide show
  1. package/aqtion/.cadriciel/.settings +25 -0
  2. package/aqtion/.cadriciel/bin/.settings +0 -0
  3. package/aqtion/.cadriciel/bin/build.js +106 -0
  4. package/aqtion/.cadriciel/bin/env.js +145 -0
  5. package/aqtion/.cadriciel/bin/gen/api/api.js +886 -0
  6. package/aqtion/.cadriciel/bin/gen/component/component.js +36 -0
  7. package/aqtion/.cadriciel/bin/gen/db/db.js +3 -0
  8. package/aqtion/.cadriciel/bin/gen/db/ext/create.js +124 -0
  9. package/aqtion/.cadriciel/bin/gen/db/ext/ext.js +91 -0
  10. package/aqtion/.cadriciel/bin/gen/db/ext/import.js +636 -0
  11. package/aqtion/.cadriciel/bin/gen/db/ext/models.js +843 -0
  12. package/aqtion/.cadriciel/bin/gen/db/ext/query.js +127 -0
  13. package/aqtion/.cadriciel/bin/gen/db/ext/reverse.js +201 -0
  14. package/aqtion/.cadriciel/bin/gen/db/ext/reverse_lib.js +253 -0
  15. package/aqtion/.cadriciel/bin/gen/db/ext/snapshot.js +112 -0
  16. package/aqtion/.cadriciel/bin/gen/db/ext/sql.js +380 -0
  17. package/aqtion/.cadriciel/bin/gen/page/page.js +163 -0
  18. package/aqtion/.cadriciel/bin/gen/project/project.js +220 -0
  19. package/aqtion/.cadriciel/bin/gen/service/service.js +18 -0
  20. package/aqtion/.cadriciel/bin/gen.js +19 -0
  21. package/aqtion/.cadriciel/bin/lib/cadriciel.js +91 -0
  22. package/aqtion/.cadriciel/bin/lib/convert.js +94 -0
  23. package/aqtion/.cadriciel/bin/lib/docker.js +63 -0
  24. package/aqtion/.cadriciel/bin/lib/global.js +140 -0
  25. package/aqtion/.cadriciel/bin/lib/templates.js +48 -0
  26. package/aqtion/.cadriciel/bin/lib/utils.js +268 -0
  27. package/aqtion/.cadriciel/bin/link.js +139 -0
  28. package/aqtion/.cadriciel/bin/logs.js +42 -0
  29. package/aqtion/.cadriciel/bin/project/_update.js +268 -0
  30. package/aqtion/.cadriciel/bin/project/ext/logo.js +109 -0
  31. package/aqtion/.cadriciel/bin/project/ext/version.js +267 -0
  32. package/aqtion/.cadriciel/bin/project/update.js +3 -0
  33. package/aqtion/.cadriciel/bin/project.js +12 -0
  34. package/aqtion/.cadriciel/bin/reset.js +73 -0
  35. package/aqtion/.cadriciel/bin/rm/api/api.js +244 -0
  36. package/aqtion/.cadriciel/bin/rm/component/component.js +16 -0
  37. package/aqtion/.cadriciel/bin/rm/db/db.js +3 -0
  38. package/aqtion/.cadriciel/bin/rm/db/ext/ext.js +60 -0
  39. package/aqtion/.cadriciel/bin/rm/db/ext/models.js +357 -0
  40. package/aqtion/.cadriciel/bin/rm/page/page.js +62 -0
  41. package/aqtion/.cadriciel/bin/rm/service/service.js +17 -0
  42. package/aqtion/.cadriciel/bin/rm.js +18 -0
  43. package/aqtion/.cadriciel/bin/run/backend.js +122 -0
  44. package/aqtion/.cadriciel/bin/run/frontend.js +52 -0
  45. package/aqtion/.cadriciel/bin/run/stop-backend.js +39 -0
  46. package/aqtion/.cadriciel/bin/run/stop-frontend.js +55 -0
  47. package/aqtion/.cadriciel/bin/start/docker.js +448 -0
  48. package/aqtion/.cadriciel/bin/start/update.js +120 -0
  49. package/aqtion/.cadriciel/bin/start/workspace.js +398 -0
  50. package/aqtion/.cadriciel/bin/start.js +29 -0
  51. package/aqtion/.cadriciel/bin/stop/docker.js +28 -0
  52. package/aqtion/.cadriciel/bin/stop/workspace.js +54 -0
  53. package/aqtion/.cadriciel/bin/stop.js +26 -0
  54. package/aqtion/.cadriciel/bin/templates/angular-prod/main.module.ts +43 -0
  55. package/aqtion/.cadriciel/bin/templates/angular-prod/shared.module.ts +10 -0
  56. package/aqtion/.cadriciel/bin/templates/components/{{name}}.component.html +1 -0
  57. package/aqtion/.cadriciel/bin/templates/components/{{name}}.component.scss +0 -0
  58. package/aqtion/.cadriciel/bin/templates/components/{{name}}.component.ts +15 -0
  59. package/aqtion/.cadriciel/bin/templates/environment.tpl.ts +12 -0
  60. package/aqtion/.cadriciel/bin/templates/idea/compiler.xml +28 -0
  61. package/aqtion/.cadriciel/bin/templates/idea/dataSources.local.xml +20 -0
  62. package/aqtion/.cadriciel/bin/templates/idea/dataSources.xml +12 -0
  63. package/aqtion/.cadriciel/bin/templates/idea/encodings.xml +12 -0
  64. package/aqtion/.cadriciel/bin/templates/idea/jarRepositories.xml +20 -0
  65. package/aqtion/.cadriciel/bin/templates/idea/jpa-buddy-datasource.xml +8 -0
  66. package/aqtion/.cadriciel/bin/templates/idea/jpa-buddy.xml +7 -0
  67. package/aqtion/.cadriciel/bin/templates/idea/misc.xml +16 -0
  68. package/aqtion/.cadriciel/bin/templates/idea/modules.xml +8 -0
  69. package/aqtion/.cadriciel/bin/templates/idea/vcs.xml +6 -0
  70. package/aqtion/.cadriciel/bin/templates/idea/workspace-docker.xml +114 -0
  71. package/aqtion/.cadriciel/bin/templates/idea/workspace.xml +122 -0
  72. package/aqtion/.cadriciel/bin/templates/java/config.java +59 -0
  73. package/aqtion/.cadriciel/bin/templates/jpb/jpb-settings.xml +12 -0
  74. package/aqtion/.cadriciel/bin/templates/routing.module.ts +30 -0
  75. package/aqtion/.cadriciel/bin/templates/start/backend.sh +15 -0
  76. package/aqtion/.cadriciel/bin/templates/start/frontend.sh +3 -0
  77. package/aqtion/.cadriciel/bin/templates/studio-env.tpl.ts +9 -0
  78. package/aqtion/.cadriciel/bin/templates/{{name}}.component.html +1 -0
  79. package/aqtion/.cadriciel/bin/templates/{{name}}.component.scss +0 -0
  80. package/aqtion/.cadriciel/bin/templates/{{name}}.component.ts +16 -0
  81. package/aqtion/.cadriciel/bin/templates/{{name}}.service.ts +20 -0
  82. package/aqtion/.cadriciel/bin/unlink.js +0 -0
  83. package/aqtion/.cadriciel/bin/upgrade.js +0 -0
  84. package/aqtion/.cadriciel/bin/version.json +4 -0
  85. package/aqtion/.cadriciel/cli/build.js +8 -0
  86. package/aqtion/.cadriciel/cli/env.js +9 -0
  87. package/aqtion/.cadriciel/cli/gen.js +34 -0
  88. package/aqtion/.cadriciel/cli/link.js +8 -0
  89. package/aqtion/.cadriciel/cli/logs.js +8 -0
  90. package/aqtion/.cadriciel/cli/project.js +14 -0
  91. package/aqtion/.cadriciel/cli/reset.js +8 -0
  92. package/aqtion/.cadriciel/cli/restart.js +8 -0
  93. package/aqtion/.cadriciel/cli/rm.js +34 -0
  94. package/aqtion/.cadriciel/cli/start.js +8 -0
  95. package/aqtion/.cadriciel/cli/stop.js +8 -0
  96. package/aqtion/.cadriciel/cli/unlink.js +8 -0
  97. package/aqtion/.cadriciel/cli/upgrade.js +8 -0
  98. package/aqtion/.cadriciel/routes/root.json +1 -0
  99. package/aqtion/.cadriciel/shared/.gitkeep +0 -0
  100. package/aqtion/.cadriciel/watcher/pid +1 -0
  101. package/aqtion/.dockerignore +5 -0
  102. package/aqtion/.gitlab-ci.yml +102 -0
  103. package/aqtion/.jpb/jpb-settings.xml +12 -0
  104. package/aqtion/.project +1 -0
  105. package/aqtion/.vscode/launch.json +23 -0
  106. package/aqtion/.vscode/settings.json +3 -0
  107. package/aqtion/.vscode/tasks.json +55 -0
  108. package/aqtion/Dockerfile +8 -0
  109. package/aqtion/angular.json +208 -0
  110. package/aqtion/backend/.mvn/wrapper/MavenWrapperDownloader.java +116 -0
  111. package/aqtion/backend/.mvn/wrapper/maven-wrapper.properties +4 -0
  112. package/aqtion/backend/Dockerfile +13 -0
  113. package/aqtion/backend/aqtion-data/Readme.md +27 -0
  114. package/aqtion/backend/aqtion-data/pom.xml +36 -0
  115. package/aqtion/backend/aqtion-data/src/main/resources/db/dev/Readme.md +5 -0
  116. package/aqtion/backend/aqtion-data/src/main/resources/db/dev/V2022.06.02.1513__dev-data.sql +7 -0
  117. package/aqtion/backend/aqtion-data/src/main/resources/db/migration/Readme.md +38 -0
  118. package/aqtion/backend/aqtion-data/src/main/resources/db/migration/V2021.10.14.0819__Init.sql +23 -0
  119. package/aqtion/backend/aqtion-data/target/classes/db/dev/Readme.md +5 -0
  120. package/aqtion/backend/aqtion-data/target/classes/db/dev/V2022.06.02.1513__dev-data.sql +7 -0
  121. package/aqtion/backend/aqtion-data/target/classes/db/migration/Readme.md +38 -0
  122. package/aqtion/backend/aqtion-data/target/classes/db/migration/V2021.10.14.0819__Init.sql +23 -0
  123. package/aqtion/backend/aqtion-data/target/maven-archiver/pom.properties +3 -0
  124. package/aqtion/backend/aqtion-metier/pom.xml +110 -0
  125. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/CustomUserDetailsService.java +12 -0
  126. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/ProfilService.java +24 -0
  127. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/UserService.java +36 -0
  128. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/impl/CustomUserDetailsServiceImpl.java +79 -0
  129. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/impl/ProfilServiceImpl.java +27 -0
  130. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/aqtion/services/impl/UserServiceImpl.java +75 -0
  131. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/commons/security/UserSecurityServiceUtil.java +30 -0
  132. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/commons/services/GenericService.java +30 -0
  133. package/aqtion/backend/aqtion-metier/src/main/java/fr/cerema/dsi/commons/services/GenericServiceImpl.java +62 -0
  134. package/aqtion/backend/aqtion-metier/src/test/java/fr/cerema/dsi/aqtion/services/UserServiceImplTest.java +60 -0
  135. package/aqtion/backend/aqtion-metier/target/maven-archiver/pom.properties +3 -0
  136. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +9 -0
  137. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +9 -0
  138. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +1 -0
  139. package/aqtion/backend/aqtion-metier/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +1 -0
  140. package/aqtion/backend/aqtion-persistance/pom.xml +33 -0
  141. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/aqtion/repositories/ProfilRepository.java +18 -0
  142. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/aqtion/repositories/UserRepository.java +28 -0
  143. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/commons/repositories/AbstractDao.java +118 -0
  144. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/commons/repositories/GenericRepository.java +101 -0
  145. package/aqtion/backend/aqtion-persistance/src/main/java/fr/cerema/dsi/commons/repositories/IAbstractDao.java +66 -0
  146. package/aqtion/backend/aqtion-persistance/target/maven-archiver/pom.properties +3 -0
  147. package/aqtion/backend/aqtion-persistance/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +5 -0
  148. package/aqtion/backend/aqtion-persistance/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +5 -0
  149. package/aqtion/backend/aqtion-presentation/Readme.md +98 -0
  150. package/aqtion/backend/aqtion-presentation/pom.xml +185 -0
  151. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/App.java +20 -0
  152. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/AspectJConfiguration.java +58 -0
  153. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/AuthenticationTokenFilter.java +134 -0
  154. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/SecurityConfiguration.java +80 -0
  155. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/StaticResourcesWebConfiguration.java +41 -0
  156. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/config/WebConfiguration.java +59 -0
  157. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/controllers/AccountController.java +64 -0
  158. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/controllers/ApiOpenController.java +71 -0
  159. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/controllers/UserController.java +65 -0
  160. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/GenericDTO.java +20 -0
  161. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/ProfilDTO.java +26 -0
  162. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/UserDTO.java +57 -0
  163. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/dto/UserWithCurrentAuthorityDTO.java +31 -0
  164. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/aqtion/mapper/UserMapper.java +33 -0
  165. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/ApiSubError.java +5 -0
  166. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/ApiValidationSubError.java +13 -0
  167. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/beans/errors/JsonApiError.java +308 -0
  168. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/AbstractErrorHandler.java +67 -0
  169. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/ClientForwardController.java +19 -0
  170. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/CustomErrorController.java +57 -0
  171. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/controllers/RestResponseEntityExceptionHandler.java +75 -0
  172. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/security/auth/jwt/exceptions/InvalidTokenException.java +30 -0
  173. package/aqtion/backend/aqtion-presentation/src/main/java/fr/cerema/dsi/commons/security/filters/AppCorsFilter.java +45 -0
  174. package/aqtion/backend/aqtion-presentation/src/main/resources/META-INF/spring.factories +2 -0
  175. package/aqtion/backend/aqtion-presentation/src/main/resources/banner.txt +3 -0
  176. package/aqtion/backend/aqtion-presentation/src/main/resources/logback-spring-ci.xml +15 -0
  177. package/aqtion/backend/aqtion-presentation/src/main/resources/logback-spring.xml +15 -0
  178. package/aqtion/backend/aqtion-presentation/src/main/resources-filtered/application-prod.yml +80 -0
  179. package/aqtion/backend/aqtion-presentation/src/main/resources-filtered/application.yml +94 -0
  180. package/aqtion/backend/aqtion-presentation/src/test/java/fr/cerema/dsi/aqtion/service/IntegrationTest.java +18 -0
  181. package/aqtion/backend/aqtion-presentation/src/test/resources/application.yml +41 -0
  182. package/aqtion/backend/aqtion-presentation/src/test/resources/db.migration/Readme.md +6 -0
  183. package/aqtion/backend/aqtion-presentation/target/generated-sources/annotations/fr/cerema/dsi/aqtion/mapper/UserMapperImpl.java +134 -0
  184. package/aqtion/backend/aqtion-presentation/target/maven-archiver/pom.properties +3 -0
  185. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +25 -0
  186. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +23 -0
  187. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +1 -0
  188. package/aqtion/backend/aqtion-presentation/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +1 -0
  189. package/aqtion/backend/aqtion-transverse/pom.xml +22 -0
  190. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/entities/Profil.java +53 -0
  191. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/entities/User.java +79 -0
  192. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/enums/Role.java +8 -0
  193. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/JwtConfMalformedException.java +9 -0
  194. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/security/AuthenticationServiceException.java +30 -0
  195. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/security/NoRoleForUserServiceException.java +29 -0
  196. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/aqtion/exceptions/security/UserNotFoundServiceException.java +29 -0
  197. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/entities/GenericEntity.java +43 -0
  198. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/BadRequestException.java +43 -0
  199. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/EntityNotFoundException.java +9 -0
  200. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/GenericRepositoryException.java +29 -0
  201. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/GenericServiceException.java +29 -0
  202. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/UserNotFoundException.java +11 -0
  203. package/aqtion/backend/aqtion-transverse/src/main/java/fr/cerema/dsi/commons/exceptions/UtilsException.java +13 -0
  204. package/aqtion/backend/aqtion-transverse/target/maven-archiver/pom.properties +3 -0
  205. package/aqtion/backend/aqtion-transverse/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +15 -0
  206. package/aqtion/backend/aqtion-transverse/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +14 -0
  207. package/aqtion/backend/mvnw +311 -0
  208. package/aqtion/backend/mvnw.cmd +182 -0
  209. package/aqtion/backend/pom.xml +144 -0
  210. package/aqtion/banner.png +0 -0
  211. package/aqtion/bun.lockb +0 -0
  212. package/aqtion/docker/config/keycloak/realms/export/realm.json +63 -0
  213. package/aqtion/docker/config/keycloak/themes/README.txt +3 -0
  214. package/aqtion/docker/config/keycloak/themes/base/account/account.ftl +70 -0
  215. package/aqtion/docker/config/keycloak/themes/base/account/applications.ftl +76 -0
  216. package/aqtion/docker/config/keycloak/themes/base/account/federatedIdentity.ftl +42 -0
  217. package/aqtion/docker/config/keycloak/themes/base/account/log.ftl +35 -0
  218. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_ca.properties +147 -0
  219. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_cs.properties +171 -0
  220. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_da.properties +339 -0
  221. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_de.properties +353 -0
  222. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_en.properties +397 -0
  223. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_es.properties +147 -0
  224. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_fi.properties +400 -0
  225. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_fr.properties +180 -0
  226. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_hu.properties +334 -0
  227. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_it.properties +336 -0
  228. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_ja.properties +335 -0
  229. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_lt.properties +154 -0
  230. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_lv.properties +197 -0
  231. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_nl.properties +133 -0
  232. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_no.properties +152 -0
  233. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_pl.properties +248 -0
  234. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_pt_BR.properties +356 -0
  235. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_ru.properties +155 -0
  236. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_sk.properties +196 -0
  237. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_sv.properties +150 -0
  238. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_tr.properties +315 -0
  239. package/aqtion/docker/config/keycloak/themes/base/account/messages/messages_zh_CN.properties +153 -0
  240. package/aqtion/docker/config/keycloak/themes/base/account/password.ftl +59 -0
  241. package/aqtion/docker/config/keycloak/themes/base/account/resource-detail.ftl +277 -0
  242. package/aqtion/docker/config/keycloak/themes/base/account/resources.ftl +403 -0
  243. package/aqtion/docker/config/keycloak/themes/base/account/sessions.ftl +44 -0
  244. package/aqtion/docker/config/keycloak/themes/base/account/template.ftl +88 -0
  245. package/aqtion/docker/config/keycloak/themes/base/account/theme.properties +1 -0
  246. package/aqtion/docker/config/keycloak/themes/base/account/totp.ftl +141 -0
  247. package/aqtion/docker/config/keycloak/themes/base/admin/index.ftl +99 -0
  248. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_ca.properties +477 -0
  249. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_de.properties +1627 -0
  250. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_en.properties +2030 -0
  251. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_es.properties +479 -0
  252. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_fi.properties +1 -0
  253. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_fr.properties +155 -0
  254. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_it.properties +0 -0
  255. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_ja.properties +1641 -0
  256. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_lt.properties +1221 -0
  257. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_lv.properties +1 -0
  258. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_nl.properties +0 -0
  259. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_no.properties +1129 -0
  260. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_pl.properties +1 -0
  261. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_pt_BR.properties +1101 -0
  262. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_ru.properties +1279 -0
  263. package/aqtion/docker/config/keycloak/themes/base/admin/messages/admin-messages_zh_CN.properties +1230 -0
  264. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_ca.properties +8 -0
  265. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_de.properties +29 -0
  266. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_en.properties +67 -0
  267. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_es.properties +8 -0
  268. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_fi.properties +1 -0
  269. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_fr.properties +8 -0
  270. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_it.properties +0 -0
  271. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_ja.properties +30 -0
  272. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_lt.properties +25 -0
  273. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_lv.properties +1 -0
  274. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_nl.properties +27 -0
  275. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_no.properties +14 -0
  276. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_pl.properties +1 -0
  277. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_pt_BR.properties +18 -0
  278. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_ru.properties +26 -0
  279. package/aqtion/docker/config/keycloak/themes/base/admin/messages/messages_zh_CN.properties +26 -0
  280. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/app.js +3858 -0
  281. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/authz/authz-app.js +569 -0
  282. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/authz/authz-controller.js +2845 -0
  283. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/authz/authz-services.js +218 -0
  284. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/clients.js +4054 -0
  285. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/groups.js +625 -0
  286. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/realm.js +4552 -0
  287. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/roles.js +48 -0
  288. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/controllers/users.js +2042 -0
  289. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/loaders.js +587 -0
  290. package/aqtion/docker/config/keycloak/themes/base/admin/resources/js/services.js +2265 -0
  291. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authentication-flow-bindings.html +83 -0
  292. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authentication-flows.html +72 -0
  293. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authenticator-config.html +52 -0
  294. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/broker-permissions.html +40 -0
  295. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-permissions.html +39 -0
  296. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-role-permissions.html +40 -0
  297. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/group-permissions.html +39 -0
  298. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/realm-role-permissions.html +39 -0
  299. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/mgmt/users-permissions.html +35 -0
  300. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-resource-detail.html +131 -0
  301. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-scope-detail.html +137 -0
  302. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/permission/resource-server-permission-list.html +118 -0
  303. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html +123 -0
  304. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-detail.html +93 -0
  305. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html +126 -0
  306. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-group-detail.html +126 -0
  307. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-js-detail.html +68 -0
  308. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-regex-detail.html +100 -0
  309. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-role-detail.html +169 -0
  310. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-time-detail.html +119 -0
  311. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-user-detail.html +93 -0
  312. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate-result.html +72 -0
  313. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate.html +267 -0
  314. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-list.html +117 -0
  315. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-detail.html +77 -0
  316. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-export-settings.html +35 -0
  317. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-list.html +49 -0
  318. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-detail.html +126 -0
  319. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-list.html +169 -0
  320. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-detail.html +50 -0
  321. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-list.html +102 -0
  322. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/brute-force.html +114 -0
  323. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/ciba-policy.html +63 -0
  324. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/claims.html +62 -0
  325. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-clustering-node.html +37 -0
  326. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-clustering.html +76 -0
  327. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-generic.html +14 -0
  328. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-jwt.html +26 -0
  329. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-secret-jwt.html +55 -0
  330. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-secret.html +33 -0
  331. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials-x509.html +28 -0
  332. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-credentials.html +38 -0
  333. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-detail.html +1080 -0
  334. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-import.html +46 -0
  335. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-initial-access-create.html +63 -0
  336. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-initial-access.html +55 -0
  337. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-installation.html +36 -0
  338. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-keys.html +146 -0
  339. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-list.html +68 -0
  340. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-mappers-add.html +53 -0
  341. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-mappers.html +55 -0
  342. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-offline-sessions.html +59 -0
  343. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-oidc-key-export.html +57 -0
  344. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-oidc-key-import.html +62 -0
  345. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-oidc-keys.html +108 -0
  346. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-json.html +60 -0
  347. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-list.html +74 -0
  348. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit-condition.html +65 -0
  349. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit.html +140 -0
  350. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit-executor.html +65 -0
  351. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit.html +97 -0
  352. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-json.html +60 -0
  353. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-policies-profiles-list.html +80 -0
  354. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-protocol-mapper-detail.html +13 -0
  355. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-policies.html +106 -0
  356. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-policy-detail.html +68 -0
  357. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-create.html +55 -0
  358. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-detail.html +64 -0
  359. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-registration-access-token.html +18 -0
  360. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-revocation.html +30 -0
  361. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-attributes.html +45 -0
  362. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-detail.html +140 -0
  363. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-list.html +64 -0
  364. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-role-users.html +52 -0
  365. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-saml-key-export.html +63 -0
  366. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-saml-key-import.html +62 -0
  367. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-saml-keys.html +66 -0
  368. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-detail.html +102 -0
  369. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-list.html +60 -0
  370. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-mappers-add.html +53 -0
  371. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-mappers.html +55 -0
  372. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-mappings.html +127 -0
  373. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-protocol-mapper-detail.html +13 -0
  374. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scope-scope-mappings.html +116 -0
  375. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scopes-evaluate.html +268 -0
  376. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scopes-realm-default.html +99 -0
  377. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-scopes-setup.html +123 -0
  378. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-service-account-roles.html +140 -0
  379. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-sessions.html +57 -0
  380. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-storage-generic.html +207 -0
  381. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/client-storage-list.html +67 -0
  382. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-client.html +72 -0
  383. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-execution.html +31 -0
  384. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-flow-execution.html +55 -0
  385. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-flow.html +43 -0
  386. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/create-group.html +25 -0
  387. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/default-groups.html +91 -0
  388. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/defense-headers.html +71 -0
  389. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/forbidden.html +7 -0
  390. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-attributes.html +41 -0
  391. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-detail.html +28 -0
  392. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-list.html +50 -0
  393. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-members.html +48 -0
  394. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/group-role-mappings.html +111 -0
  395. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/home.html +4 -0
  396. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/identity-provider-mapper-detail.html +84 -0
  397. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/identity-provider-mappers.html +49 -0
  398. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/menu.html +26 -0
  399. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/group-selector.html +50 -0
  400. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-auth.html +8 -0
  401. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-representation.html +3 -0
  402. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/role-selector.html +39 -0
  403. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/unregistered-required-action-selector.html +21 -0
  404. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/user-credential-data.html +8 -0
  405. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/view-key.html +18 -0
  406. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/modal/view-object.html +3 -0
  407. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/notfound.html +7 -0
  408. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/otp-policy.html +96 -0
  409. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/pagenotfound.html +7 -0
  410. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/partial-export.html +34 -0
  411. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/partial-import.html +130 -0
  412. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/password-policy.html +51 -0
  413. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/protocol-mapper-detail.html +64 -0
  414. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-cache-settings.html +30 -0
  415. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-create.html +45 -0
  416. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-default-roles.html +88 -0
  417. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-detail.html +90 -0
  418. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-events-admin.html +134 -0
  419. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-events-config.html +106 -0
  420. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-events.html +124 -0
  421. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-bitbucket.html +142 -0
  422. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook-ext.html +7 -0
  423. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook.html +1 -0
  424. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github-ext.html +14 -0
  425. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github.html +1 -0
  426. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-gitlab.html +142 -0
  427. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google-ext.html +21 -0
  428. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google.html +1 -0
  429. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram-ext.html +0 -0
  430. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram.html +1 -0
  431. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-keycloak-oidc.html +1 -0
  432. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin-ext.html +0 -0
  433. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin.html +1 -0
  434. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft-ext.html +0 -0
  435. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft.html +1 -0
  436. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-oidc.html +388 -0
  437. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3-ext.html +7 -0
  438. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3.html +164 -0
  439. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4-ext.html +7 -0
  440. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4.html +164 -0
  441. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal-ext.html +7 -0
  442. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal.html +1 -0
  443. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-saml.html +435 -0
  444. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-social.html +157 -0
  445. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow-ext.html +7 -0
  446. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow.html +1 -0
  447. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter-ext.html +0 -0
  448. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter.html +1 -0
  449. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-identity-provider.html +81 -0
  450. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-disabled.html +70 -0
  451. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-generic.html +69 -0
  452. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-passive.html +70 -0
  453. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys-providers.html +75 -0
  454. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-keys.html +73 -0
  455. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-list.html +20 -0
  456. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-localization-detail.html +50 -0
  457. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-localization-upload.html +37 -0
  458. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-localization.html +61 -0
  459. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-login-settings.html +107 -0
  460. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-role-users.html +50 -0
  461. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-smtp.html +96 -0
  462. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-theme-settings.html +97 -0
  463. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-tokens.html +401 -0
  464. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/realm-user-profile.html +372 -0
  465. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/required-actions.html +38 -0
  466. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-attributes.html +41 -0
  467. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-detail.html +135 -0
  468. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-list.html +63 -0
  469. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/role-mappings.html +119 -0
  470. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/server-info-providers.html +55 -0
  471. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/server-info.html +135 -0
  472. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/session-realm.html +34 -0
  473. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/session-revocation.html +30 -0
  474. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-attributes.html +41 -0
  475. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-consents.html +41 -0
  476. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-credentials.html +173 -0
  477. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-detail.html +186 -0
  478. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-federated-identity-detail.html +53 -0
  479. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-federated-identity-list.html +41 -0
  480. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-federation.html +69 -0
  481. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-group-membership.html +114 -0
  482. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-list.html +69 -0
  483. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-offline-sessions.html +35 -0
  484. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-sessions.html +43 -0
  485. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-generic.html +246 -0
  486. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-kerberos.html +264 -0
  487. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mapper-detail.html +64 -0
  488. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mappers.html +46 -0
  489. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage-ldap.html +568 -0
  490. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/user-storage.html +45 -0
  491. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/webauthn-policy-passwordless.html +177 -0
  492. package/aqtion/docker/config/keycloak/themes/base/admin/resources/partials/webauthn-policy.html +159 -0
  493. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/authz/kc-authz-modal.html +11 -0
  494. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/authz/kc-tabs-resource-server.html +14 -0
  495. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-component-config.html +67 -0
  496. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-copy.html +18 -0
  497. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-dropdown.html +12 -0
  498. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-edit.html +22 -0
  499. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-menu.html +65 -0
  500. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-modal-message.html +10 -0
  501. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-modal.html +11 -0
  502. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-paging.html +25 -0
  503. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-provider-config.html +104 -0
  504. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-switch.html +12 -0
  505. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-authentication.html +16 -0
  506. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-client-role.html +17 -0
  507. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-client-scope.html +20 -0
  508. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-client.html +65 -0
  509. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-clients.html +16 -0
  510. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-group-list.html +11 -0
  511. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-group.html +17 -0
  512. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-identity-provider.html +16 -0
  513. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-ldap.html +12 -0
  514. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-realm.html +24 -0
  515. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-role.html +16 -0
  516. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-user-storage.html +11 -0
  517. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-user.html +18 -0
  518. package/aqtion/docker/config/keycloak/themes/base/admin/resources/templates/kc-tabs-users.html +11 -0
  519. package/aqtion/docker/config/keycloak/themes/base/admin/theme.properties +1 -0
  520. package/aqtion/docker/config/keycloak/themes/base/email/html/email-test.ftl +4 -0
  521. package/aqtion/docker/config/keycloak/themes/base/email/html/email-update-confirmation.ftl +5 -0
  522. package/aqtion/docker/config/keycloak/themes/base/email/html/email-verification-with-code.ftl +4 -0
  523. package/aqtion/docker/config/keycloak/themes/base/email/html/email-verification.ftl +4 -0
  524. package/aqtion/docker/config/keycloak/themes/base/email/html/event-login_error.ftl +4 -0
  525. package/aqtion/docker/config/keycloak/themes/base/email/html/event-remove_totp.ftl +4 -0
  526. package/aqtion/docker/config/keycloak/themes/base/email/html/event-update_password.ftl +4 -0
  527. package/aqtion/docker/config/keycloak/themes/base/email/html/event-update_totp.ftl +4 -0
  528. package/aqtion/docker/config/keycloak/themes/base/email/html/executeActions.ftl +8 -0
  529. package/aqtion/docker/config/keycloak/themes/base/email/html/identity-provider-link.ftl +4 -0
  530. package/aqtion/docker/config/keycloak/themes/base/email/html/password-reset.ftl +4 -0
  531. package/aqtion/docker/config/keycloak/themes/base/email/html/template.ftl +7 -0
  532. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_ca.properties +21 -0
  533. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_cs.properties +60 -0
  534. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_da.properties +47 -0
  535. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_de.properties +43 -0
  536. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_en.properties +55 -0
  537. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_es.properties +21 -0
  538. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_fi.properties +46 -0
  539. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_fr.properties +46 -0
  540. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_hu.properties +47 -0
  541. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_it.properties +50 -0
  542. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_ja.properties +52 -0
  543. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_lt.properties +25 -0
  544. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_nl.properties +38 -0
  545. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_no.properties +24 -0
  546. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_pl.properties +56 -0
  547. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_pt_BR.properties +51 -0
  548. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_ru.properties +25 -0
  549. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_sk.properties +48 -0
  550. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_sv.properties +25 -0
  551. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_tr.properties +51 -0
  552. package/aqtion/docker/config/keycloak/themes/base/email/messages/messages_zh_CN.properties +25 -0
  553. package/aqtion/docker/config/keycloak/themes/base/email/text/email-test.ftl +2 -0
  554. package/aqtion/docker/config/keycloak/themes/base/email/text/email-update-confirmation.ftl +2 -0
  555. package/aqtion/docker/config/keycloak/themes/base/email/text/email-verification-with-code.ftl +2 -0
  556. package/aqtion/docker/config/keycloak/themes/base/email/text/email-verification.ftl +2 -0
  557. package/aqtion/docker/config/keycloak/themes/base/email/text/event-login_error.ftl +2 -0
  558. package/aqtion/docker/config/keycloak/themes/base/email/text/event-remove_totp.ftl +2 -0
  559. package/aqtion/docker/config/keycloak/themes/base/email/text/event-update_password.ftl +2 -0
  560. package/aqtion/docker/config/keycloak/themes/base/email/text/event-update_totp.ftl +2 -0
  561. package/aqtion/docker/config/keycloak/themes/base/email/text/executeActions.ftl +4 -0
  562. package/aqtion/docker/config/keycloak/themes/base/email/text/identity-provider-link.ftl +2 -0
  563. package/aqtion/docker/config/keycloak/themes/base/email/text/password-reset.ftl +2 -0
  564. package/aqtion/docker/config/keycloak/themes/base/email/theme.properties +1 -0
  565. package/aqtion/docker/config/keycloak/themes/base/login/cli_splash.ftl +7 -0
  566. package/aqtion/docker/config/keycloak/themes/base/login/code.ftl +19 -0
  567. package/aqtion/docker/config/keycloak/themes/base/login/delete-account-confirm.ftl +33 -0
  568. package/aqtion/docker/config/keycloak/themes/base/login/error.ftl +16 -0
  569. package/aqtion/docker/config/keycloak/themes/base/login/frontchannel-logout.ftl +30 -0
  570. package/aqtion/docker/config/keycloak/themes/base/login/idp-review-user-profile.ftl +23 -0
  571. package/aqtion/docker/config/keycloak/themes/base/login/info.ftl +24 -0
  572. package/aqtion/docker/config/keycloak/themes/base/login/login-config-totp.ftl +108 -0
  573. package/aqtion/docker/config/keycloak/themes/base/login/login-idp-link-confirm.ftl +13 -0
  574. package/aqtion/docker/config/keycloak/themes/base/login/login-idp-link-email.ftl +16 -0
  575. package/aqtion/docker/config/keycloak/themes/base/login/login-oauth-grant.ftl +68 -0
  576. package/aqtion/docker/config/keycloak/themes/base/login/login-oauth2-device-verify-user-code.ftl +31 -0
  577. package/aqtion/docker/config/keycloak/themes/base/login/login-otp.ftl +58 -0
  578. package/aqtion/docker/config/keycloak/themes/base/login/login-page-expired.ftl +11 -0
  579. package/aqtion/docker/config/keycloak/themes/base/login/login-password.ftl +43 -0
  580. package/aqtion/docker/config/keycloak/themes/base/login/login-recovery-authn-code-config.ftl +184 -0
  581. package/aqtion/docker/config/keycloak/themes/base/login/login-recovery-authn-code-input.ftl +32 -0
  582. package/aqtion/docker/config/keycloak/themes/base/login/login-reset-password.ftl +39 -0
  583. package/aqtion/docker/config/keycloak/themes/base/login/login-update-password.ftl +71 -0
  584. package/aqtion/docker/config/keycloak/themes/base/login/login-update-profile.ftl +99 -0
  585. package/aqtion/docker/config/keycloak/themes/base/login/login-username.ftl +87 -0
  586. package/aqtion/docker/config/keycloak/themes/base/login/login-verify-email.ftl +14 -0
  587. package/aqtion/docker/config/keycloak/themes/base/login/login-x509-info.ftl +55 -0
  588. package/aqtion/docker/config/keycloak/themes/base/login/login.ftl +105 -0
  589. package/aqtion/docker/config/keycloak/themes/base/login/logout-confirm.ftl +38 -0
  590. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_ca.properties +200 -0
  591. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_cs.properties +425 -0
  592. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_da.properties +363 -0
  593. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_de.properties +420 -0
  594. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_en.properties +501 -0
  595. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_es.properties +201 -0
  596. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_fi.properties +443 -0
  597. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_fr.properties +405 -0
  598. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_hu.properties +356 -0
  599. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_it.properties +354 -0
  600. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_ja.properties +356 -0
  601. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_lt.properties +216 -0
  602. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_lv.properties +254 -0
  603. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_nl.properties +294 -0
  604. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_no.properties +214 -0
  605. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_pl.properties +318 -0
  606. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_pt_BR.properties +381 -0
  607. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_ru.properties +217 -0
  608. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_sk.properties +265 -0
  609. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_sv.properties +214 -0
  610. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_tr.properties +296 -0
  611. package/aqtion/docker/config/keycloak/themes/base/login/messages/messages_zh_CN.properties +216 -0
  612. package/aqtion/docker/config/keycloak/themes/base/login/register-user-profile.ftl +74 -0
  613. package/aqtion/docker/config/keycloak/themes/base/login/register.ftl +141 -0
  614. package/aqtion/docker/config/keycloak/themes/base/login/resources/js/base64url.js +114 -0
  615. package/aqtion/docker/config/keycloak/themes/base/login/saml-post-form.ftl +25 -0
  616. package/aqtion/docker/config/keycloak/themes/base/login/select-authenticator.ftl +43 -0
  617. package/aqtion/docker/config/keycloak/themes/base/login/template.ftl +154 -0
  618. package/aqtion/docker/config/keycloak/themes/base/login/terms.ftl +15 -0
  619. package/aqtion/docker/config/keycloak/themes/base/login/theme.properties +1 -0
  620. package/aqtion/docker/config/keycloak/themes/base/login/update-email.ftl +42 -0
  621. package/aqtion/docker/config/keycloak/themes/base/login/update-user-profile.ftl +28 -0
  622. package/aqtion/docker/config/keycloak/themes/base/login/user-profile-commons.ftl +187 -0
  623. package/aqtion/docker/config/keycloak/themes/base/login/webauthn-authenticate.ftl +168 -0
  624. package/aqtion/docker/config/keycloak/themes/base/login/webauthn-error.ftl +36 -0
  625. package/aqtion/docker/config/keycloak/themes/base/login/webauthn-register.ftl +192 -0
  626. package/aqtion/docker/config/keycloak/themes/cerema/account/account.ftl +93 -0
  627. package/aqtion/docker/config/keycloak/themes/cerema/account/messages/messages_fr.properties +1 -0
  628. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/css/account.css +292 -0
  629. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/favicon.ico +0 -0
  630. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/icon-sidebar-active.png +0 -0
  631. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/keycloak-logo.png +0 -0
  632. package/aqtion/docker/config/keycloak/themes/cerema/account/resources/img/logo.png +0 -0
  633. package/aqtion/docker/config/keycloak/themes/cerema/account/theme.properties +11 -0
  634. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/css/styles.css +420 -0
  635. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/favicon.ico +0 -0
  636. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/keyclok-logo.png +0 -0
  637. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/keyclok-logo.svg +215 -0
  638. package/aqtion/docker/config/keycloak/themes/cerema/admin/resources/img/select-arrow.png +0 -0
  639. package/aqtion/docker/config/keycloak/themes/cerema/admin/theme.properties +3 -0
  640. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/errors.json +150 -0
  641. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/LICENSE +20 -0
  642. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/README.md +128 -0
  643. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/angular.treeview.js +97 -0
  644. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/angular.treeview.min.js +9 -0
  645. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/css/angular.treeview.css +99 -0
  646. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/img/file.png +0 -0
  647. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/img/folder-closed.png +0 -0
  648. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/treeview/img/folder.png +0 -0
  649. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js +4172 -0
  650. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/angular/version.json +22 -0
  651. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  652. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.svg +1085 -0
  653. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  654. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  655. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/components/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
  656. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/filesaver/FileSaver.js +189 -0
  657. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/FileAPI.min.js +72 -0
  658. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-html5-shim.js +25 -0
  659. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js +2 -0
  660. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-shim.js +237 -0
  661. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload-shim.min.js +2 -0
  662. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload.js +156 -0
  663. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/fileupload/angular-file-upload.min.js +2 -0
  664. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/css/patternfly.css +14320 -0
  665. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.eot +0 -0
  666. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.svg +2014 -0
  667. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.ttf +0 -0
  668. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Bold-webfont.woff +0 -0
  669. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  670. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.svg +2019 -0
  671. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.ttf +0 -0
  672. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  673. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.eot +0 -0
  674. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.svg +2016 -0
  675. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.ttf +0 -0
  676. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBold-webfont.woff +0 -0
  677. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.eot +0 -0
  678. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.svg +2024 -0
  679. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
  680. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-ExtraBoldItalic-webfont.woff +0 -0
  681. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.eot +0 -0
  682. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.svg +2019 -0
  683. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.ttf +0 -0
  684. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Italic-webfont.woff +0 -0
  685. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.eot +0 -0
  686. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.svg +2013 -0
  687. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.ttf +0 -0
  688. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Light-webfont.woff +0 -0
  689. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  690. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.svg +2021 -0
  691. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.ttf +0 -0
  692. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  693. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.eot +0 -0
  694. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.svg +2017 -0
  695. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.ttf +0 -0
  696. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Regular-webfont.woff +0 -0
  697. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.eot +0 -0
  698. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.svg +2015 -0
  699. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  700. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-Semibold-webfont.woff +0 -0
  701. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  702. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.svg +2019 -0
  703. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  704. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  705. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.eot +0 -0
  706. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.svg +133 -0
  707. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.ttf +0 -0
  708. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/fonts/PatternFlyIcons-webfont.woff +0 -0
  709. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-114-precomposed.png +0 -0
  710. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-144-precomposed.png +0 -0
  711. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-57-precomposed.png +0 -0
  712. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/apple-touch-icon-72-precomposed.png +0 -0
  713. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/bg-login.jpg +0 -0
  714. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner-lg.gif +0 -0
  715. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner-sm.gif +0 -0
  716. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner-xs.gif +0 -0
  717. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/patternfly/img/spinner.gif +0 -0
  718. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/ace.js +18957 -0
  719. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/ace.js +7950 -0
  720. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/mode-javascript.js +1 -0
  721. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/theme-github.js +1 -0
  722. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/min/worker-javascript.js +1 -0
  723. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/mode-javascript.js +1140 -0
  724. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/theme-github.js +103 -0
  725. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/ui-ace.js +327 -0
  726. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/ui-ace.min.js +7 -0
  727. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/ui-ace/worker-javascript.js +12651 -0
  728. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.eot +0 -0
  729. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.svg +1108 -0
  730. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.ttf +0 -0
  731. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial-regular-webfont.woff +0 -0
  732. package/aqtion/docker/config/keycloak/themes/cerema/common/resources/lib/zocial/zocial.css +1215 -0
  733. package/aqtion/docker/config/keycloak/themes/cerema/email/html/email-verification.ftl +4 -0
  734. package/aqtion/docker/config/keycloak/themes/cerema/email/html/template.ftl +7 -0
  735. package/aqtion/docker/config/keycloak/themes/cerema/email/messages/messages_en.properties +9 -0
  736. package/aqtion/docker/config/keycloak/themes/cerema/email/messages/messages_fr.properties +9 -0
  737. package/aqtion/docker/config/keycloak/themes/cerema/email/theme.properties +1 -0
  738. package/aqtion/docker/config/keycloak/themes/cerema/login/login-oauth-grant.ftl +57 -0
  739. package/aqtion/docker/config/keycloak/themes/cerema/login/login-reset-password.ftl +32 -0
  740. package/aqtion/docker/config/keycloak/themes/cerema/login/login.ftl +87 -0
  741. package/aqtion/docker/config/keycloak/themes/cerema/login/messages/messages_fr.properties +29 -0
  742. package/aqtion/docker/config/keycloak/themes/cerema/login/register.ftl +169 -0
  743. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/css/bamboo.css +238 -0
  744. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/css/main.css +1029 -0
  745. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/css/util.css +9826 -0
  746. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.eot +0 -0
  747. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.svg +541 -0
  748. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.ttf +0 -0
  749. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.woff +0 -0
  750. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/WebFont/Linearicons-Free.woff2 +0 -0
  751. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Linearicons-Free-v1.0.0/icon-font.min.css +7 -0
  752. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/OFL.txt +95 -0
  753. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Black.ttf +0 -0
  754. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-BlackItalic.ttf +0 -0
  755. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Bold.ttf +0 -0
  756. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-BoldItalic.ttf +0 -0
  757. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraBold.ttf +0 -0
  758. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraBoldItalic.ttf +0 -0
  759. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraLight.ttf +0 -0
  760. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ExtraLightItalic.ttf +0 -0
  761. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Italic.ttf +0 -0
  762. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Light.ttf +0 -0
  763. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-LightItalic.ttf +0 -0
  764. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Medium.ttf +0 -0
  765. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-MediumItalic.ttf +0 -0
  766. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Regular.ttf +0 -0
  767. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-SemiBold.ttf +0 -0
  768. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-SemiBoldItalic.ttf +0 -0
  769. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-Thin.ttf +0 -0
  770. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Raleway/Raleway-ThinItalic.ttf +0 -0
  771. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/SIL Open Font License.txt +155 -0
  772. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Black.otf +0 -0
  773. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Bold.otf +0 -0
  774. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-BoldItalic.otf +0 -0
  775. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-BoldUpright.otf +0 -0
  776. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Light.otf +0 -0
  777. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-LightItalic.otf +0 -0
  778. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-LightUpright.otf +0 -0
  779. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Regular.otf +0 -0
  780. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-RegularItalic.otf +0 -0
  781. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-RegularUpright.otf +0 -0
  782. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Semibold.otf +0 -0
  783. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-SemiboldItalic.otf +0 -0
  784. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-SemiboldUpright.otf +0 -0
  785. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-Thin.otf +0 -0
  786. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-ThinItalic.otf +0 -0
  787. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/Titillium/Titillium-ThinUpright.otf +0 -0
  788. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/HELP-US-OUT.txt +7 -0
  789. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/css/font-awesome.css +3049 -0
  790. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/css/font-awesome.min.css +4 -0
  791. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/FontAwesome.otf +0 -0
  792. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.eot +0 -0
  793. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.svg +2672 -0
  794. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf +0 -0
  795. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.woff +0 -0
  796. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 +0 -0
  797. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/animated.less +34 -0
  798. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/bordered-pulled.less +45 -0
  799. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/core.less +12 -0
  800. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/fixed-width.less +6 -0
  801. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/font-awesome.less +18 -0
  802. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/icons.less +2813 -0
  803. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/larger.less +25 -0
  804. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/list.less +24 -0
  805. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/mixins.less +60 -0
  806. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/path.less +15 -0
  807. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/rotated-flipped.less +33 -0
  808. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/screen-reader.less +10 -0
  809. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/stacked.less +30 -0
  810. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/less/variables.less +800 -0
  811. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_animated.scss +34 -0
  812. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_bordered-pulled.scss +45 -0
  813. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_core.scss +12 -0
  814. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_fixed-width.scss +6 -0
  815. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_icons.scss +2813 -0
  816. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_larger.scss +25 -0
  817. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_list.scss +24 -0
  818. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_mixins.scss +60 -0
  819. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_path.scss +15 -0
  820. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_rotated-flipped.scss +33 -0
  821. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_screen-reader.scss +10 -0
  822. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_stacked.scss +30 -0
  823. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/_variables.scss +800 -0
  824. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/font-awesome-4.7.0/scss/font-awesome.scss +18 -0
  825. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Black.ttf +0 -0
  826. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-BlackItalic.ttf +0 -0
  827. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Bold.ttf +0 -0
  828. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-BoldItalic.ttf +0 -0
  829. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraBold.ttf +0 -0
  830. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraBoldItalic.ttf +0 -0
  831. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraLight.ttf +0 -0
  832. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ExtraLightItalic.ttf +0 -0
  833. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Italic.ttf +0 -0
  834. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Light.ttf +0 -0
  835. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-LightItalic.ttf +0 -0
  836. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Medium.ttf +0 -0
  837. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-MediumItalic.ttf +0 -0
  838. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Regular.ttf +0 -0
  839. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-SemiBold.ttf +0 -0
  840. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-SemiBoldItalic.ttf +0 -0
  841. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-Thin.ttf +0 -0
  842. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/Montserrat-ThinItalic.ttf +0 -0
  843. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/montserrat/OFL.txt +93 -0
  844. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Black.ttf +0 -0
  845. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-BlackItalic.ttf +0 -0
  846. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Bold.ttf +0 -0
  847. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-BoldItalic.ttf +0 -0
  848. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraBold.ttf +0 -0
  849. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraBoldItalic.ttf +0 -0
  850. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraLight.ttf +0 -0
  851. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ExtraLightItalic.ttf +0 -0
  852. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Italic.ttf +0 -0
  853. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Light.ttf +0 -0
  854. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-LightItalic.ttf +0 -0
  855. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Medium.ttf +0 -0
  856. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-MediumItalic.ttf +0 -0
  857. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Regular.ttf +0 -0
  858. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-SemiBold.ttf +0 -0
  859. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-SemiBoldItalic.ttf +0 -0
  860. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-Thin.ttf +0 -0
  861. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/fonts/poppins/Poppins-ThinItalic.ttf +0 -0
  862. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/agentconnect-btn-principal-hover.svg +39 -0
  863. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/agentconnect-btn-principal.svg +39 -0
  864. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/bg-01.jpg +0 -0
  865. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/bg-02.jpg +0 -0
  866. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/franceconnect-btn-hover.svg +13 -0
  867. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/franceconnect-btn.svg +13 -0
  868. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/icons/favicon.ico +0 -0
  869. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/logo.png +0 -0
  870. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/images/white_logo.png +0 -0
  871. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/js/bamboo.js +950 -0
  872. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/js/main.js +73 -0
  873. package/aqtion/docker/config/keycloak/themes/cerema/login/resources/vendor/jquery/jquery-3.2.1.min.js +4 -0
  874. package/aqtion/docker/config/keycloak/themes/cerema/login/template.ftl +119 -0
  875. package/aqtion/docker/config/keycloak/themes/cerema/login/theme.properties +94 -0
  876. package/aqtion/docker/config/keycloak/themes/cerema/welcome/index.ftl +141 -0
  877. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/admin-console.png +0 -0
  878. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/alert.png +0 -0
  879. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/bg.png +0 -0
  880. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/bug.png +0 -0
  881. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/css/welcome.css +165 -0
  882. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/favicon.ico +0 -0
  883. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/jboss_community.png +0 -0
  884. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/keycloak-project.png +0 -0
  885. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/keycloak_logo.png +0 -0
  886. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/logo.png +0 -0
  887. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/mail.png +0 -0
  888. package/aqtion/docker/config/keycloak/themes/cerema/welcome/resources/user.png +0 -0
  889. package/aqtion/docker/config/keycloak/themes/cerema/welcome/theme.properties +4 -0
  890. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/css/account.css +277 -0
  891. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/img/icon-sidebar-active.png +0 -0
  892. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/img/keycloak-logo.png +0 -0
  893. package/aqtion/docker/config/keycloak/themes/keycloak/account/resources/img/logo.png +0 -0
  894. package/aqtion/docker/config/keycloak/themes/keycloak/account/theme.properties +14 -0
  895. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/css/styles.css +505 -0
  896. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.png +0 -0
  897. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.svg +194 -0
  898. package/aqtion/docker/config/keycloak/themes/keycloak/admin/resources/img/select-arrow.png +0 -0
  899. package/aqtion/docker/config/keycloak/themes/keycloak/admin/theme.properties +5 -0
  900. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/img/favicon.ico +0 -0
  901. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/errors.json +1 -0
  902. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/LICENSE +20 -0
  903. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.js +95 -0
  904. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js +9 -0
  905. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/css/angular.treeview.css +99 -0
  906. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/file.png +0 -0
  907. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/folder-closed.png +0 -0
  908. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/folder.png +0 -0
  909. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js +4116 -0
  910. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/angular/version.json +1 -0
  911. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/filesaver/FileSaver.js +188 -0
  912. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/FileAPI.min.js +72 -0
  913. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.js +25 -0
  914. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js +2 -0
  915. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.js +215 -0
  916. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.min.js +2 -0
  917. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.js +156 -0
  918. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.min.js +2 -0
  919. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.css +21 -0
  920. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.woff +0 -0
  921. package/aqtion/docker/config/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.woff2 +0 -0
  922. package/aqtion/docker/config/keycloak/themes/keycloak/email/theme.properties +1 -0
  923. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/css/login.css +596 -0
  924. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-error-arrow-down.png +0 -0
  925. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-error-sign.png +0 -0
  926. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-success-arrow-down.png +0 -0
  927. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-success-sign.png +0 -0
  928. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-warning-arrow-down.png +0 -0
  929. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/feedback-warning-sign.png +0 -0
  930. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/keycloak-bg.png +0 -0
  931. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/keycloak-logo-text.png +0 -0
  932. package/aqtion/docker/config/keycloak/themes/keycloak/login/resources/img/keycloak-logo.png +0 -0
  933. package/aqtion/docker/config/keycloak/themes/keycloak/login/theme.properties +161 -0
  934. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/index.ftl +132 -0
  935. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/admin-console.png +0 -0
  936. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/alert.png +0 -0
  937. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/bg.png +0 -0
  938. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/bug.png +0 -0
  939. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/css/welcome.css +140 -0
  940. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/keycloak-project.png +0 -0
  941. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/keycloak_logo.png +0 -0
  942. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/logo.png +0 -0
  943. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/mail.png +0 -0
  944. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/resources/user.png +0 -0
  945. package/aqtion/docker/config/keycloak/themes/keycloak/welcome/theme.properties +7 -0
  946. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/index.ftl +295 -0
  947. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_ca.properties +1 -0
  948. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_cs.properties +1 -0
  949. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_da.properties +1 -0
  950. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_de.properties +129 -0
  951. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_en.properties +167 -0
  952. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_es.properties +1 -0
  953. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_fr.properties +44 -0
  954. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_hu.properties +1 -0
  955. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_it.properties +1 -0
  956. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_ja.properties +1 -0
  957. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_lt.properties +1 -0
  958. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_nl.properties +1 -0
  959. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_no.properties +1 -0
  960. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_pl.properties +1 -0
  961. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_pt_BR.properties +121 -0
  962. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_ru.properties +1 -0
  963. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_sk.properties +1 -0
  964. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_sv.properties +1 -0
  965. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_tr.properties +1 -0
  966. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/messages/messages_zh_CN.properties +1 -0
  967. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/App.js +69 -0
  968. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/App.js.map +1 -0
  969. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/ContentPages.js +157 -0
  970. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/ContentPages.js.map +1 -0
  971. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/Main.js +97 -0
  972. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/Main.js.map +1 -0
  973. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageHeaderTool.js +29 -0
  974. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageHeaderTool.js.map +1 -0
  975. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageNav.js +51 -0
  976. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageNav.js.map +1 -0
  977. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js +60 -0
  978. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js.map +1 -0
  979. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js +3 -0
  980. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js.map +1 -0
  981. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js +149 -0
  982. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js.map +1 -0
  983. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js +113 -0
  984. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js.map +1 -0
  985. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js +63 -0
  986. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js.map +1 -0
  987. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js +302 -0
  988. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js.map +1 -0
  989. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js +70 -0
  990. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js.map +1 -0
  991. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js +186 -0
  992. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js.map +1 -0
  993. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js +28 -0
  994. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js.map +1 -0
  995. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js +250 -0
  996. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js.map +1 -0
  997. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js +36 -0
  998. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js.map +1 -0
  999. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js +310 -0
  1000. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js.map +1 -0
  1001. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js +40 -0
  1002. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js.map +1 -0
  1003. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js +120 -0
  1004. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js.map +1 -0
  1005. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js +284 -0
  1006. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js.map +1 -0
  1007. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js +151 -0
  1008. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js.map +1 -0
  1009. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js +103 -0
  1010. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js.map +1 -0
  1011. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js +313 -0
  1012. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js.map +1 -0
  1013. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js +222 -0
  1014. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js.map +1 -0
  1015. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js +97 -0
  1016. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js.map +1 -0
  1017. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js +16 -0
  1018. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js.map +1 -0
  1019. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js +31 -0
  1020. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js.map +1 -0
  1021. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js +350 -0
  1022. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js.map +1 -0
  1023. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/content.json +60 -0
  1024. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_facebook_transparent.svg +19 -0
  1025. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_github_transparent.svg +16 -0
  1026. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_google_transparent.svg +77 -0
  1027. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_instagram_transparent.svg +23 -0
  1028. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_linkedin_transparent.svg +23 -0
  1029. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_microsoft_transparent.svg +34 -0
  1030. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_openshift_transparent.svg +15 -0
  1031. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_stack_transparent.svg +26 -0
  1032. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/img/socialmedia/socialmedia_icons_twitter_transparent.svg +19 -0
  1033. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js +3 -0
  1034. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js.map +1 -0
  1035. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js +77 -0
  1036. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js.map +1 -0
  1037. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js +33 -0
  1038. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js.map +1 -0
  1039. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js +19 -0
  1040. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js.map +1 -0
  1041. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js +39 -0
  1042. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js.map +1 -0
  1043. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js +50 -0
  1044. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js.map +1 -0
  1045. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/welcome-page-scripts.js +89 -0
  1046. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js +103 -0
  1047. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js.map +1 -0
  1048. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js +38 -0
  1049. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js.map +1 -0
  1050. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js +41 -0
  1051. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js.map +1 -0
  1052. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js +46 -0
  1053. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js.map +1 -0
  1054. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js +69 -0
  1055. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js.map +1 -0
  1056. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js +38 -0
  1057. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js.map +1 -0
  1058. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js +46 -0
  1059. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js.map +1 -0
  1060. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/features.js +2 -0
  1061. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/resources/widgets/features.js.map +1 -0
  1062. package/aqtion/docker/config/keycloak/themes/keycloak.v2/account/theme.properties +18 -0
  1063. package/aqtion/docker/config/servers.json +14 -0
  1064. package/aqtion/docker/setup/docker-compose.yml +67 -0
  1065. package/aqtion/frontend/app/components/.gitkeep +0 -0
  1066. package/aqtion/frontend/app/interfaces/.gitkeep +0 -0
  1067. package/aqtion/frontend/app/menu.json +41 -0
  1068. package/aqtion/frontend/app/pages/pages-routing.module.ts +19 -0
  1069. package/aqtion/frontend/app/pages/profil/profil.component.html +3 -0
  1070. package/aqtion/frontend/app/pages/profil/profil.component.scss +0 -0
  1071. package/aqtion/frontend/app/pages/profil/profil.component.ts +27 -0
  1072. package/aqtion/frontend/app/pages/root/root.component.html +3 -0
  1073. package/aqtion/frontend/app/pages/root/root.component.scss +22 -0
  1074. package/aqtion/frontend/app/pages/root/root.component.ts +16 -0
  1075. package/aqtion/frontend/app/services/profils.service.ts +25 -0
  1076. package/aqtion/frontend/app-routing.module.ts +61 -0
  1077. package/aqtion/frontend/app.component.css +46 -0
  1078. package/aqtion/frontend/app.component.html +1 -0
  1079. package/aqtion/frontend/app.component.ts +60 -0
  1080. package/aqtion/frontend/app.module.ts +103 -0
  1081. package/aqtion/frontend/assets/favicon.ico +0 -0
  1082. package/aqtion/frontend/assets/i18n/fr.json +33 -0
  1083. package/aqtion/frontend/assets/images/599x157.png +0 -0
  1084. package/aqtion/frontend/assets/images/cerema.png +0 -0
  1085. package/aqtion/frontend/assets/images/dollar.svg +1 -0
  1086. package/aqtion/frontend/assets/images/logo.png +0 -0
  1087. package/aqtion/frontend/assets/images/logo_title.png +0 -0
  1088. package/aqtion/frontend/assets/images/logorobot.png +0 -0
  1089. package/aqtion/frontend/assets/images/work-in-progress.svg +64 -0
  1090. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-300.woff +0 -0
  1091. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-300.woff2 +0 -0
  1092. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-700.woff +0 -0
  1093. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-700.woff2 +0 -0
  1094. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-regular.woff +0 -0
  1095. package/aqtion/frontend/assets/layout/fonts/lato-v17-latin-ext_latin-regular.woff2 +0 -0
  1096. package/aqtion/frontend/assets/layout/images/LogoCerema.svg +226 -0
  1097. package/aqtion/frontend/assets/layout/images/LogoCerema_horizontal.svg +167 -0
  1098. package/aqtion/frontend/assets/layout/images/SpinnerCerema.svg +6 -0
  1099. package/aqtion/frontend/assets/layout/images/Swagger-logo.png +0 -0
  1100. package/aqtion/frontend/assets/layout/images/authentication.svg +1 -0
  1101. package/aqtion/frontend/assets/layout/images/mail.svg +1 -0
  1102. package/aqtion/frontend/assets/layout/images/postgresql.svg +1 -0
  1103. package/aqtion/frontend/assets/layout/images/user.png +0 -0
  1104. package/aqtion/frontend/assets/layout/styles/layout/_breadcrumb.scss +18 -0
  1105. package/aqtion/frontend/assets/layout/styles/layout/_config.scss +33 -0
  1106. package/aqtion/frontend/assets/layout/styles/layout/_content.scss +20 -0
  1107. package/aqtion/frontend/assets/layout/styles/layout/_fonts.scss +29 -0
  1108. package/aqtion/frontend/assets/layout/styles/layout/_footer.scss +25 -0
  1109. package/aqtion/frontend/assets/layout/styles/layout/_main.scss +29 -0
  1110. package/aqtion/frontend/assets/layout/styles/layout/_responsive.scss +160 -0
  1111. package/aqtion/frontend/assets/layout/styles/layout/_sidebar.scss +2 -0
  1112. package/aqtion/frontend/assets/layout/styles/layout/_topbar.scss +250 -0
  1113. package/aqtion/frontend/assets/layout/styles/layout/_typography.scss +63 -0
  1114. package/aqtion/frontend/assets/layout/styles/layout/_utils.scss +19 -0
  1115. package/aqtion/frontend/assets/layout/styles/layout/layout.scss +15 -0
  1116. package/aqtion/frontend/assets/layout/styles/layout/preloading.css +73 -0
  1117. package/aqtion/frontend/assets/layout/styles/layout/preloading.scss +79 -0
  1118. package/aqtion/frontend/assets/layout/styles/layout/sidebar/_sidebar_slim.scss +132 -0
  1119. package/aqtion/frontend/assets/layout/styles/layout/sidebar/_sidebar_vertical.scss +132 -0
  1120. package/aqtion/frontend/assets/layout/styles/layout/theme/_dark.scss +10 -0
  1121. package/aqtion/frontend/assets/layout/styles/layout/theme/_light.scss +10 -0
  1122. package/aqtion/frontend/assets/layout/styles/layout/theme/_primary.scss +10 -0
  1123. package/aqtion/frontend/assets/layout/styles/layout/theme/_themes.scss +3 -0
  1124. package/aqtion/frontend/assets/layout/styles/theme/designer/_colors.scss +17 -0
  1125. package/aqtion/frontend/assets/layout/styles/theme/designer/_common.scss +68 -0
  1126. package/aqtion/frontend/assets/layout/styles/theme/designer/_components.scss +102 -0
  1127. package/aqtion/frontend/assets/layout/styles/theme/designer/_mixins.scss +203 -0
  1128. package/aqtion/frontend/assets/layout/styles/theme/designer/components/button/_button.scss +560 -0
  1129. package/aqtion/frontend/assets/layout/styles/theme/designer/components/button/_speeddial.scss +81 -0
  1130. package/aqtion/frontend/assets/layout/styles/theme/designer/components/button/_splitbutton.scss +381 -0
  1131. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_carousel.scss +37 -0
  1132. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_datatable.scss +278 -0
  1133. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_dataview.scss +55 -0
  1134. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_filter.scss +138 -0
  1135. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_fullcalendar.scss +329 -0
  1136. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_orderlist.scss +103 -0
  1137. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_organizationchart.scss +50 -0
  1138. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_paginator.scss +92 -0
  1139. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_picklist.scss +103 -0
  1140. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_timeline.scss +38 -0
  1141. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_tree.scss +144 -0
  1142. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_treetable.scss +246 -0
  1143. package/aqtion/frontend/assets/layout/styles/theme/designer/components/data/_virtualscroller.scss +28 -0
  1144. package/aqtion/frontend/assets/layout/styles/theme/designer/components/file/_fileupload.scss +58 -0
  1145. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_breadcrumb.scss +42 -0
  1146. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_contextmenu.scss +56 -0
  1147. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_dock.scss +86 -0
  1148. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_megamenu.scss +106 -0
  1149. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_menu.scss +45 -0
  1150. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_menubar.scss +183 -0
  1151. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_panelmenu.scss +140 -0
  1152. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_slidemenu.scss +59 -0
  1153. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_steps.scss +56 -0
  1154. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_tabmenu.scss +69 -0
  1155. package/aqtion/frontend/assets/layout/styles/theme/designer/components/menu/_tieredmenu.scss +60 -0
  1156. package/aqtion/frontend/assets/layout/styles/theme/designer/components/messages/_inlinemessage.scss +64 -0
  1157. package/aqtion/frontend/assets/layout/styles/theme/designer/components/messages/_message.scss +102 -0
  1158. package/aqtion/frontend/assets/layout/styles/theme/designer/components/messages/_toast.scss +95 -0
  1159. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_avatar.scss +30 -0
  1160. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_badge.scss +48 -0
  1161. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_blockui.scss +0 -0
  1162. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_chip.scss +38 -0
  1163. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_inplace.scss +17 -0
  1164. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_progressbar.scss +17 -0
  1165. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_scrolltop.scss +20 -0
  1166. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_skeleton.scss +8 -0
  1167. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_tag.scss +35 -0
  1168. package/aqtion/frontend/assets/layout/styles/theme/designer/components/misc/_terminal.scss +11 -0
  1169. package/aqtion/frontend/assets/layout/styles/theme/designer/components/multimedia/_galleria.scss +139 -0
  1170. package/aqtion/frontend/assets/layout/styles/theme/designer/components/multimedia/_image.scss +44 -0
  1171. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_confirmpopup.scss +65 -0
  1172. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_dialog.scss +64 -0
  1173. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_overlaypanel.scss +62 -0
  1174. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_sidebar.scss +23 -0
  1175. package/aqtion/frontend/assets/layout/styles/theme/designer/components/overlay/_tooltip.scss +33 -0
  1176. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_accordion.scss +119 -0
  1177. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_card.scss +30 -0
  1178. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_divider.scss +31 -0
  1179. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_fieldset.scss +47 -0
  1180. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_panel.scss +58 -0
  1181. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_scrollpanel.scss +6 -0
  1182. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_splitter.scss +19 -0
  1183. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_tabview.scss +78 -0
  1184. package/aqtion/frontend/assets/layout/styles/theme/designer/components/panel/_toolbar.scss +10 -0
  1185. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/_extensions.scss +90 -0
  1186. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/_variables.scss +867 -0
  1187. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/blue/theme.css +7341 -0
  1188. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/blue/theme.scss +12 -0
  1189. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/cyan/theme.css +7341 -0
  1190. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/cyan/theme.scss +12 -0
  1191. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/deeppurple/theme.css +7341 -0
  1192. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/deeppurple/theme.scss +12 -0
  1193. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/green/theme.css +7341 -0
  1194. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/green/theme.scss +12 -0
  1195. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/indigo/theme.css +7341 -0
  1196. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/indigo/theme.scss +12 -0
  1197. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/lime/theme.css +7341 -0
  1198. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/lime/theme.scss +12 -0
  1199. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/orange/theme.css +7341 -0
  1200. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/orange/theme.scss +12 -0
  1201. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/pink/theme.css +7341 -0
  1202. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/pink/theme.scss +12 -0
  1203. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/purple/theme.css +7341 -0
  1204. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/purple/theme.scss +12 -0
  1205. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/yellow/theme.css +7341 -0
  1206. package/aqtion/frontend/assets/layout/styles/theme/theme-dark/yellow/theme.scss +12 -0
  1207. package/aqtion/frontend/assets/layout/styles/theme/theme-light/_extensions.scss +90 -0
  1208. package/aqtion/frontend/assets/layout/styles/theme/theme-light/_variables.scss +870 -0
  1209. package/aqtion/frontend/assets/layout/styles/theme/theme-light/blue/theme.css +7540 -0
  1210. package/aqtion/frontend/assets/layout/styles/theme/theme-light/blue/theme.scss +12 -0
  1211. package/aqtion/frontend/assets/layout/styles/theme/theme-light/cyan/theme.css +7341 -0
  1212. package/aqtion/frontend/assets/layout/styles/theme/theme-light/cyan/theme.scss +12 -0
  1213. package/aqtion/frontend/assets/layout/styles/theme/theme-light/deeppurple/theme.css +7341 -0
  1214. package/aqtion/frontend/assets/layout/styles/theme/theme-light/deeppurple/theme.scss +12 -0
  1215. package/aqtion/frontend/assets/layout/styles/theme/theme-light/green/theme.css +7341 -0
  1216. package/aqtion/frontend/assets/layout/styles/theme/theme-light/green/theme.scss +12 -0
  1217. package/aqtion/frontend/assets/layout/styles/theme/theme-light/indigo/theme.css +7341 -0
  1218. package/aqtion/frontend/assets/layout/styles/theme/theme-light/indigo/theme.scss +12 -0
  1219. package/aqtion/frontend/assets/layout/styles/theme/theme-light/lime/theme.css +7341 -0
  1220. package/aqtion/frontend/assets/layout/styles/theme/theme-light/lime/theme.scss +12 -0
  1221. package/aqtion/frontend/assets/layout/styles/theme/theme-light/orange/theme.css +7341 -0
  1222. package/aqtion/frontend/assets/layout/styles/theme/theme-light/orange/theme.scss +12 -0
  1223. package/aqtion/frontend/assets/layout/styles/theme/theme-light/pink/theme.css +7341 -0
  1224. package/aqtion/frontend/assets/layout/styles/theme/theme-light/pink/theme.scss +12 -0
  1225. package/aqtion/frontend/assets/layout/styles/theme/theme-light/purple/theme.css +7341 -0
  1226. package/aqtion/frontend/assets/layout/styles/theme/theme-light/purple/theme.scss +12 -0
  1227. package/aqtion/frontend/assets/layout/styles/theme/theme-light/yellow/theme.css +7341 -0
  1228. package/aqtion/frontend/assets/layout/styles/theme/theme-light/yellow/theme.scss +12 -0
  1229. package/aqtion/frontend/environments/environment.ci.ts +13 -0
  1230. package/aqtion/frontend/environments/environment.dev.ts +12 -0
  1231. package/aqtion/frontend/environments/environment.prod.ts +13 -0
  1232. package/aqtion/frontend/environments/environment.ts +3 -0
  1233. package/aqtion/frontend/index.dev.html +33 -0
  1234. package/aqtion/frontend/index.prod.html +32 -0
  1235. package/aqtion/frontend/layout/api/menuchangeevent.ts +4 -0
  1236. package/aqtion/frontend/layout/api/tabcloseevent.ts +6 -0
  1237. package/aqtion/frontend/layout/app.breadcrumb.component.html +14 -0
  1238. package/aqtion/frontend/layout/app.breadcrumb.component.ts +48 -0
  1239. package/aqtion/frontend/layout/app.footer.component.html +20 -0
  1240. package/aqtion/frontend/layout/app.footer.component.ts +23 -0
  1241. package/aqtion/frontend/layout/app.menu.component.html +3 -0
  1242. package/aqtion/frontend/layout/app.menu.service.ts +23 -0
  1243. package/aqtion/frontend/layout/app.menuitem.component.ts +310 -0
  1244. package/aqtion/frontend/layout/app.sidebar.component.html +5 -0
  1245. package/aqtion/frontend/layout/app.sidebar.component.ts +13 -0
  1246. package/aqtion/frontend/layout/app.topbar.component.html +72 -0
  1247. package/aqtion/frontend/layout/app.topbar.component.ts +73 -0
  1248. package/aqtion/frontend/layout/auto-unsubscribe.decorator.ts +21 -0
  1249. package/aqtion/frontend/layout/common/err-403/err-403.component.html +24 -0
  1250. package/aqtion/frontend/layout/common/err-403/err-403.component.scss +340 -0
  1251. package/aqtion/frontend/layout/common/err-403/err-403.ts +19 -0
  1252. package/aqtion/frontend/layout/common/err-404/err-404.component.html +27 -0
  1253. package/aqtion/frontend/layout/common/err-404/err-404.component.scss +38 -0
  1254. package/aqtion/frontend/layout/common/err-404/err-404.ts +19 -0
  1255. package/aqtion/frontend/layout/common/err-500/err-500.component.html +10 -0
  1256. package/aqtion/frontend/layout/common/err-500/err-500.component.scss +44 -0
  1257. package/aqtion/frontend/layout/common/err-500/err-500.ts +37 -0
  1258. package/aqtion/frontend/layout/common/work-in-progress/work-in-progress.component.html +1 -0
  1259. package/aqtion/frontend/layout/common/work-in-progress/work-in-progress.component.scss +8 -0
  1260. package/aqtion/frontend/layout/common/work-in-progress/work-in-progress.component.ts +14 -0
  1261. package/aqtion/frontend/layout/config/app.config.component.html +86 -0
  1262. package/aqtion/frontend/layout/config/app.config.component.scss +0 -0
  1263. package/aqtion/frontend/layout/config/app.config.component.ts +241 -0
  1264. package/aqtion/frontend/layout/config/config.module.ts +27 -0
  1265. package/aqtion/frontend/layout/error.handler.ts +16 -0
  1266. package/aqtion/frontend/layout/main/main.component.html +15 -0
  1267. package/aqtion/frontend/layout/main/main.component.ts +186 -0
  1268. package/aqtion/frontend/layout/main.module.ts +45 -0
  1269. package/aqtion/frontend/layout/service/app.layout.service.ts +123 -0
  1270. package/aqtion/frontend/layout/service/healthCheck.service.ts +35 -0
  1271. package/aqtion/frontend/layout/shared/components/app.menu.component.ts +69 -0
  1272. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied-routing.module.ts +12 -0
  1273. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied.component.html +10 -0
  1274. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied.component.ts +7 -0
  1275. package/aqtion/frontend/layout/shared/components/auth/accessdenied/accessdenied.module.ts +17 -0
  1276. package/aqtion/frontend/layout/shared/components/auth/auth-routing.module.ts +14 -0
  1277. package/aqtion/frontend/layout/shared/components/auth/auth.module.ts +13 -0
  1278. package/aqtion/frontend/layout/shared/components/auth/error/error-routing.module.ts +12 -0
  1279. package/aqtion/frontend/layout/shared/components/auth/error/error.component.html +10 -0
  1280. package/aqtion/frontend/layout/shared/components/auth/error/error.component.ts +7 -0
  1281. package/aqtion/frontend/layout/shared/components/auth/error/error.module.ts +12 -0
  1282. package/aqtion/frontend/layout/shared/components/auth/login/login-routing.module.ts +12 -0
  1283. package/aqtion/frontend/layout/shared/components/auth/login/login.component.html +15 -0
  1284. package/aqtion/frontend/layout/shared/components/auth/login/login.component.ts +47 -0
  1285. package/aqtion/frontend/layout/shared/components/auth/login/login.module.ts +21 -0
  1286. package/aqtion/frontend/layout/shared/components/auth/logout/logout/logout.component.html +8 -0
  1287. package/aqtion/frontend/layout/shared/components/auth/logout/logout/logout.component.scss +21 -0
  1288. package/aqtion/frontend/layout/shared/components/auth/logout/logout/logout.component.ts +15 -0
  1289. package/aqtion/frontend/layout/shared/components/auth/logout/logout.module.ts +26 -0
  1290. package/aqtion/frontend/layout/shared/components/code/code.component.ts +17 -0
  1291. package/aqtion/frontend/layout/shared/components/indic/indic.component.html +8 -0
  1292. package/aqtion/frontend/layout/shared/components/indic/indic.component.scss +0 -0
  1293. package/aqtion/frontend/layout/shared/components/indic/indic.component.ts +60 -0
  1294. package/aqtion/frontend/layout/shared/components/lookup-input/lookup-input.component.html +70 -0
  1295. package/aqtion/frontend/layout/shared/components/lookup-input/lookup-input.component.scss +0 -0
  1296. package/aqtion/frontend/layout/shared/components/lookup-input/lookup-input.component.ts +121 -0
  1297. package/aqtion/frontend/layout/shared/components/notfound/notfound-routing.module.ts +12 -0
  1298. package/aqtion/frontend/layout/shared/components/notfound/notfound.component.html +42 -0
  1299. package/aqtion/frontend/layout/shared/components/notfound/notfound.component.ts +7 -0
  1300. package/aqtion/frontend/layout/shared/components/notfound/notfound.module.ts +12 -0
  1301. package/aqtion/frontend/layout/shared/constants/dateFormat.constants.ts +1 -0
  1302. package/aqtion/frontend/layout/shared/constants/pagination.constants.ts +1 -0
  1303. package/aqtion/frontend/layout/shared/core/config/application-config.service.ts +34 -0
  1304. package/aqtion/frontend/layout/shared/core/config/db-config.service.ts +20 -0
  1305. package/aqtion/frontend/layout/shared/core/guard/can-modify.guard.ts +51 -0
  1306. package/aqtion/frontend/layout/shared/core/guard/login.guard.ts +24 -0
  1307. package/aqtion/frontend/layout/shared/core/guard/ui.guard.ts +94 -0
  1308. package/aqtion/frontend/layout/shared/core/interceptor/handle-req.interceptor.ts +31 -0
  1309. package/aqtion/frontend/layout/shared/core/interceptor/index.ts +10 -0
  1310. package/aqtion/frontend/layout/shared/core/request/pageable.model.ts +5 -0
  1311. package/aqtion/frontend/layout/shared/core/request/request-util.ts +21 -0
  1312. package/aqtion/frontend/layout/shared/core/resolver/accueil.resolver.ts +19 -0
  1313. package/aqtion/frontend/layout/shared/core/storage/MyLocalStorageService.ts +22 -0
  1314. package/aqtion/frontend/layout/shared/core/storage/MyStorageService.ts +17 -0
  1315. package/aqtion/frontend/layout/shared/dev/dev-dashboard/dev-dashboard.component.html +30 -0
  1316. package/aqtion/frontend/layout/shared/dev/dev-dashboard/dev-dashboard.component.scss +82 -0
  1317. package/aqtion/frontend/layout/shared/dev/dev-dashboard/dev-dashboard.component.ts +29 -0
  1318. package/aqtion/frontend/layout/shared/dev/dev-routing.module.ts +19 -0
  1319. package/aqtion/frontend/layout/shared/dev/dev.module.ts +76 -0
  1320. package/aqtion/frontend/layout/shared/entities/claims.model.ts +9 -0
  1321. package/aqtion/frontend/layout/shared/entities/user.model.ts +9 -0
  1322. package/aqtion/frontend/layout/shared/i18n/fr.json +74 -0
  1323. package/aqtion/frontend/layout/shared/service/dev.service.ts +16 -0
  1324. package/aqtion/frontend/layout/shared/service/policy.service.ts +22 -0
  1325. package/aqtion/frontend/layout/shared/service/user.service.ts +71 -0
  1326. package/aqtion/frontend/layout/shared/shared.module.ts +11 -0
  1327. package/aqtion/frontend/layout/shared/utils/globals.ts +85 -0
  1328. package/aqtion/frontend/layout/shared/utils/misc.ts +31 -0
  1329. package/aqtion/frontend/main-routing.module.ts +47 -0
  1330. package/aqtion/frontend/main.ts +13 -0
  1331. package/aqtion/frontend/pages.module.ts +76 -0
  1332. package/aqtion/frontend/polyfills.ts +64 -0
  1333. package/aqtion/frontend/styles.scss +43 -0
  1334. package/aqtion/frontend/themes.scss +84 -0
  1335. package/aqtion/kubernetes/Chart.yaml +4 -0
  1336. package/aqtion/kubernetes/config/values.yaml +22 -0
  1337. package/aqtion/kubernetes/templates/api.yaml +74 -0
  1338. package/aqtion/kubernetes/templates/app.yaml +58 -0
  1339. package/aqtion/kubernetes/templates/pgadmin.yaml +115 -0
  1340. package/aqtion/kubernetes/templates/postgres.yaml +67 -0
  1341. package/aqtion/launch.json +21 -0
  1342. package/aqtion/logo.png +0 -0
  1343. package/aqtion/nginx.conf +20 -0
  1344. package/aqtion/package-lock.json +14134 -0
  1345. package/aqtion/package.json +84 -0
  1346. package/aqtion/playwright.config.ts +77 -0
  1347. package/aqtion/pnpm-lock.yaml +9539 -0
  1348. package/aqtion/policies/roles.json +4 -0
  1349. package/aqtion/policies/ui.policy.json +4 -0
  1350. package/aqtion/pom.xml +144 -0
  1351. package/aqtion/run.sh +5 -0
  1352. package/aqtion/tests/example.spec.ts +18 -0
  1353. package/aqtion/tests-examples/demo-todo-app.spec.ts +437 -0
  1354. package/aqtion/tsconfig.app.json +9 -0
  1355. package/aqtion/tsconfig.json +39 -0
  1356. package/aqtion/tsconfig.spec.json +9 -0
  1357. package/cli/global/init.js +12 -10
  1358. package/package.json +1 -1
@@ -0,0 +1,4172 @@
1
+ /*
2
+ * angular-ui-bootstrap
3
+ * http://angular-ui.github.io/bootstrap/
4
+
5
+ * Version: 0.11.0 - 2014-05-01
6
+ * License: MIT
7
+ */
8
+ angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.transition", "ui.bootstrap.collapse", "ui.bootstrap.accordion", "ui.bootstrap.alert", "ui.bootstrap.bindHtml", "ui.bootstrap.buttons", "ui.bootstrap.carousel", "ui.bootstrap.dateparser", "ui.bootstrap.position", "ui.bootstrap.datepicker", "ui.bootstrap.dropdown", "ui.bootstrap.modal", "ui.bootstrap.pagination", "ui.bootstrap.tooltip", "ui.bootstrap.popover", "ui.bootstrap.progressbar", "ui.bootstrap.rating", "ui.bootstrap.tabs", "ui.bootstrap.timepicker", "ui.bootstrap.typeahead"]);
9
+ angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html", "template/accordion/accordion.html", "template/alert/alert.html", "template/carousel/carousel.html", "template/carousel/slide.html", "template/datepicker/datepicker.html", "template/datepicker/day.html", "template/datepicker/month.html", "template/datepicker/popup.html", "template/datepicker/year.html", "template/modal/backdrop.html", "template/modal/window.html", "template/pagination/pager.html", "template/pagination/pagination.html", "template/tooltip/tooltip-html-unsafe-popup.html", "template/tooltip/tooltip-popup.html", "template/popover/popover.html", "template/progressbar/bar.html", "template/progressbar/progress.html", "template/progressbar/progressbar.html", "template/rating/rating.html", "template/tabs/tab.html", "template/tabs/tabset.html", "template/timepicker/timepicker.html", "template/typeahead/typeahead-match.html", "template/typeahead/typeahead-popup.html"]);
10
+ angular.module('ui.bootstrap.transition', [])
11
+
12
+ /**
13
+ * $transition service provides a consistent interface to trigger CSS 3 transitions and to be informed when they complete.
14
+ * @param {DOMElement} element The DOMElement that will be animated.
15
+ * @param {string|object|function} trigger The thing that will cause the transition to start:
16
+ * - As a string, it represents the css class to be added to the element.
17
+ * - As an object, it represents a hash of style attributes to be applied to the element.
18
+ * - As a function, it represents a function to be called that will cause the transition to occur.
19
+ * @return {Promise} A promise that is resolved when the transition finishes.
20
+ */
21
+ .factory('$transition', ['$q', '$timeout', '$rootScope', function ($q, $timeout, $rootScope) {
22
+
23
+ var $transition = function (element, trigger, options) {
24
+ options = options || {};
25
+ var deferred = $q.defer();
26
+ var endEventName = $transition[options.animation ? 'animationEndEventName' : 'transitionEndEventName'];
27
+
28
+ var transitionEndHandler = function (event) {
29
+ $rootScope.$apply(function () {
30
+ element.unbind(endEventName, transitionEndHandler);
31
+ deferred.resolve(element);
32
+ });
33
+ };
34
+
35
+ if (endEventName) {
36
+ element.bind(endEventName, transitionEndHandler);
37
+ }
38
+
39
+ // Wrap in a timeout to allow the browser time to update the DOM before the transition is to occur
40
+ $timeout(function () {
41
+ if (angular.isString(trigger)) {
42
+ element.addClass(trigger);
43
+ } else if (angular.isFunction(trigger)) {
44
+ trigger(element);
45
+ } else if (angular.isObject(trigger)) {
46
+ element.css(trigger);
47
+ }
48
+ //If browser does not support transitions, instantly resolve
49
+ if (!endEventName) {
50
+ deferred.resolve(element);
51
+ }
52
+ });
53
+
54
+ // Add our custom cancel function to the promise that is returned
55
+ // We can call this if we are about to run a new transition, which we know will prevent this transition from ending,
56
+ // i.e. it will therefore never raise a transitionEnd event for that transition
57
+ deferred.promise.cancel = function () {
58
+ if (endEventName) {
59
+ element.unbind(endEventName, transitionEndHandler);
60
+ }
61
+ deferred.reject('Transition cancelled');
62
+ };
63
+
64
+ return deferred.promise;
65
+ };
66
+
67
+ // Work out the name of the transitionEnd event
68
+ var transElement = document.createElement('trans');
69
+ var transitionEndEventNames = {
70
+ 'WebkitTransition': 'webkitTransitionEnd',
71
+ 'MozTransition': 'transitionend',
72
+ 'OTransition': 'oTransitionEnd',
73
+ 'transition': 'transitionend'
74
+ };
75
+ var animationEndEventNames = {
76
+ 'WebkitTransition': 'webkitAnimationEnd',
77
+ 'MozTransition': 'animationend',
78
+ 'OTransition': 'oAnimationEnd',
79
+ 'transition': 'animationend'
80
+ };
81
+
82
+ function findEndEventName(endEventNames) {
83
+ for (var name in endEventNames) {
84
+ if (transElement.style[name] !== undefined) {
85
+ return endEventNames[name];
86
+ }
87
+ }
88
+ }
89
+
90
+ $transition.transitionEndEventName = findEndEventName(transitionEndEventNames);
91
+ $transition.animationEndEventName = findEndEventName(animationEndEventNames);
92
+ return $transition;
93
+ }]);
94
+
95
+ angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition'])
96
+
97
+ .directive('collapse', ['$transition', function ($transition) {
98
+
99
+ return {
100
+ link: function (scope, element, attrs) {
101
+
102
+ var initialAnimSkip = true;
103
+ var currentTransition;
104
+
105
+ function doTransition(change) {
106
+ var newTransition = $transition(element, change);
107
+ if (currentTransition) {
108
+ currentTransition.cancel();
109
+ }
110
+ currentTransition = newTransition;
111
+ newTransition.then(newTransitionDone, newTransitionDone);
112
+ return newTransition;
113
+
114
+ function newTransitionDone() {
115
+ // Make sure it's this transition, otherwise, leave it alone.
116
+ if (currentTransition === newTransition) {
117
+ currentTransition = undefined;
118
+ }
119
+ }
120
+ }
121
+
122
+ function expand() {
123
+ if (initialAnimSkip) {
124
+ initialAnimSkip = false;
125
+ expandDone();
126
+ } else {
127
+ element.removeClass('collapse').addClass('collapsing');
128
+ doTransition({height: element[0].scrollHeight + 'px'}).then(expandDone);
129
+ }
130
+ }
131
+
132
+ function expandDone() {
133
+ element.removeClass('collapsing');
134
+ element.addClass('collapse in');
135
+ element.css({height: 'auto'});
136
+ }
137
+
138
+ function collapse() {
139
+ if (initialAnimSkip) {
140
+ initialAnimSkip = false;
141
+ collapseDone();
142
+ element.css({height: 0});
143
+ } else {
144
+ // CSS transitions don't work with height: auto, so we have to manually change the height to a specific value
145
+ element.css({height: element[0].scrollHeight + 'px'});
146
+ //trigger reflow so a browser realizes that height was updated from auto to a specific value
147
+ var x = element[0].offsetWidth;
148
+
149
+ element.removeClass('collapse in').addClass('collapsing');
150
+
151
+ doTransition({height: 0}).then(collapseDone);
152
+ }
153
+ }
154
+
155
+ function collapseDone() {
156
+ element.removeClass('collapsing');
157
+ element.addClass('collapse');
158
+ }
159
+
160
+ scope.$watch(attrs.collapse, function (shouldCollapse) {
161
+ if (shouldCollapse) {
162
+ collapse();
163
+ } else {
164
+ expand();
165
+ }
166
+ });
167
+ }
168
+ };
169
+ }]);
170
+
171
+ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
172
+
173
+ .constant('accordionConfig', {
174
+ closeOthers: true
175
+ })
176
+
177
+ .controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) {
178
+
179
+ // This array keeps track of the accordion groups
180
+ this.groups = [];
181
+
182
+ // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to
183
+ this.closeOthers = function (openGroup) {
184
+ var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;
185
+ if (closeOthers) {
186
+ angular.forEach(this.groups, function (group) {
187
+ if (group !== openGroup) {
188
+ group.isOpen = false;
189
+ }
190
+ });
191
+ }
192
+ };
193
+
194
+ // This is called from the accordion-group directive to add itself to the accordion
195
+ this.addGroup = function (groupScope) {
196
+ var that = this;
197
+ this.groups.push(groupScope);
198
+
199
+ groupScope.$on('$destroy', function (event) {
200
+ that.removeGroup(groupScope);
201
+ });
202
+ };
203
+
204
+ // This is called from the accordion-group directive when to remove itself
205
+ this.removeGroup = function (group) {
206
+ var index = this.groups.indexOf(group);
207
+ if (index !== -1) {
208
+ this.groups.splice(index, 1);
209
+ }
210
+ };
211
+
212
+ }])
213
+
214
+ // The accordion directive simply sets up the directive controller
215
+ // and adds an accordion CSS class to itself element.
216
+ .directive('accordion', function () {
217
+ return {
218
+ restrict: 'EA',
219
+ controller: 'AccordionController',
220
+ transclude: true,
221
+ replace: false,
222
+ templateUrl: 'template/accordion/accordion.html'
223
+ };
224
+ })
225
+
226
+ // The accordion-group directive indicates a block of html that will expand and collapse in an accordion
227
+ .directive('accordionGroup', function () {
228
+ return {
229
+ require: '^accordion', // We need this directive to be inside an accordion
230
+ restrict: 'EA',
231
+ transclude: true, // It transcludes the contents of the directive into the template
232
+ replace: true, // The element containing the directive will be replaced with the template
233
+ templateUrl: 'template/accordion/accordion-group.html',
234
+ scope: {
235
+ heading: '@', // Interpolate the heading attribute onto this scope
236
+ isOpen: '=?',
237
+ isDisabled: '=?'
238
+ },
239
+ controller: function () {
240
+ this.setHeading = function (element) {
241
+ this.heading = element;
242
+ };
243
+ },
244
+ link: function (scope, element, attrs, accordionCtrl) {
245
+ accordionCtrl.addGroup(scope);
246
+
247
+ scope.$watch('isOpen', function (value) {
248
+ if (value) {
249
+ accordionCtrl.closeOthers(scope);
250
+ }
251
+ });
252
+
253
+ scope.toggleOpen = function () {
254
+ if (!scope.isDisabled) {
255
+ scope.isOpen = !scope.isOpen;
256
+ }
257
+ };
258
+ }
259
+ };
260
+ })
261
+
262
+ // Use accordion-heading below an accordion-group to provide a heading containing HTML
263
+ // <accordion-group>
264
+ // <accordion-heading>Heading containing HTML - <img src="..."></accordion-heading>
265
+ // </accordion-group>
266
+ .directive('accordionHeading', function () {
267
+ return {
268
+ restrict: 'EA',
269
+ transclude: true, // Grab the contents to be used as the heading
270
+ template: '', // In effect remove this element!
271
+ replace: true,
272
+ require: '^accordionGroup',
273
+ link: function (scope, element, attr, accordionGroupCtrl, transclude) {
274
+ // Pass the heading to the accordion-group controller
275
+ // so that it can be transcluded into the right place in the template
276
+ // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]
277
+ accordionGroupCtrl.setHeading(transclude(scope, function () {
278
+ }));
279
+ }
280
+ };
281
+ })
282
+
283
+ // Use in the accordion-group template to indicate where you want the heading to be transcluded
284
+ // You must provide the property on the accordion-group controller that will hold the transcluded element
285
+ // <div class="accordion-group">
286
+ // <div class="accordion-heading" ><a ... accordion-transclude="heading">...</a></div>
287
+ // ...
288
+ // </div>
289
+ .directive('accordionTransclude', function () {
290
+ return {
291
+ require: '^accordionGroup',
292
+ link: function (scope, element, attr, controller) {
293
+ scope.$watch(function () {
294
+ return controller[attr.accordionTransclude];
295
+ }, function (heading) {
296
+ if (heading) {
297
+ element.html('');
298
+ element.append(heading);
299
+ }
300
+ });
301
+ }
302
+ };
303
+ });
304
+
305
+ angular.module('ui.bootstrap.alert', [])
306
+
307
+ .controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) {
308
+ $scope.closeable = 'close' in $attrs;
309
+ }])
310
+
311
+ .directive('alert', function () {
312
+ return {
313
+ restrict: 'EA',
314
+ controller: 'AlertController',
315
+ templateUrl: 'template/alert/alert.html',
316
+ transclude: true,
317
+ replace: true,
318
+ scope: {
319
+ type: '@',
320
+ close: '&'
321
+ }
322
+ };
323
+ });
324
+
325
+ angular.module('ui.bootstrap.bindHtml', [])
326
+
327
+ .directive('bindHtmlUnsafe', function () {
328
+ return function (scope, element, attr) {
329
+ element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe);
330
+ scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) {
331
+ element.html(value || '');
332
+ });
333
+ };
334
+ });
335
+ angular.module('ui.bootstrap.buttons', [])
336
+
337
+ .constant('buttonConfig', {
338
+ activeClass: 'active',
339
+ toggleEvent: 'click'
340
+ })
341
+
342
+ .controller('ButtonsController', ['buttonConfig', function (buttonConfig) {
343
+ this.activeClass = buttonConfig.activeClass || 'active';
344
+ this.toggleEvent = buttonConfig.toggleEvent || 'click';
345
+ }])
346
+
347
+ .directive('btnRadio', function () {
348
+ return {
349
+ require: ['btnRadio', 'ngModel'],
350
+ controller: 'ButtonsController',
351
+ link: function (scope, element, attrs, ctrls) {
352
+ var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
353
+
354
+ //model -> UI
355
+ ngModelCtrl.$render = function () {
356
+ element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
357
+ };
358
+
359
+ //ui->model
360
+ element.bind(buttonsCtrl.toggleEvent, function () {
361
+ var isActive = element.hasClass(buttonsCtrl.activeClass);
362
+
363
+ if (!isActive || angular.isDefined(attrs.uncheckable)) {
364
+ scope.$apply(function () {
365
+ ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio));
366
+ ngModelCtrl.$render();
367
+ });
368
+ }
369
+ });
370
+ }
371
+ };
372
+ })
373
+
374
+ .directive('btnCheckbox', function () {
375
+ return {
376
+ require: ['btnCheckbox', 'ngModel'],
377
+ controller: 'ButtonsController',
378
+ link: function (scope, element, attrs, ctrls) {
379
+ var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
380
+
381
+ function getTrueValue() {
382
+ return getCheckboxValue(attrs.btnCheckboxTrue, true);
383
+ }
384
+
385
+ function getFalseValue() {
386
+ return getCheckboxValue(attrs.btnCheckboxFalse, false);
387
+ }
388
+
389
+ function getCheckboxValue(attributeValue, defaultValue) {
390
+ var val = scope.$eval(attributeValue);
391
+ return angular.isDefined(val) ? val : defaultValue;
392
+ }
393
+
394
+ //model -> UI
395
+ ngModelCtrl.$render = function () {
396
+ element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
397
+ };
398
+
399
+ //ui->model
400
+ element.bind(buttonsCtrl.toggleEvent, function () {
401
+ scope.$apply(function () {
402
+ ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
403
+ ngModelCtrl.$render();
404
+ });
405
+ });
406
+ }
407
+ };
408
+ });
409
+
410
+ /**
411
+ * @ngdoc overview
412
+ * @name ui.bootstrap.carousel
413
+ *
414
+ * @description
415
+ * AngularJS version of an image carousel.
416
+ *
417
+ */
418
+ angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition'])
419
+ .controller('CarouselController', ['$scope', '$timeout', '$transition', function ($scope, $timeout, $transition) {
420
+ var self = this,
421
+ slides = self.slides = $scope.slides = [],
422
+ currentIndex = -1,
423
+ currentTimeout, isPlaying;
424
+ self.currentSlide = null;
425
+
426
+ var destroyed = false;
427
+ /* direction: "prev" or "next" */
428
+ self.select = $scope.select = function (nextSlide, direction) {
429
+ var nextIndex = slides.indexOf(nextSlide);
430
+ //Decide direction if it's not given
431
+ if (direction === undefined) {
432
+ direction = nextIndex > currentIndex ? 'next' : 'prev';
433
+ }
434
+ if (nextSlide && nextSlide !== self.currentSlide) {
435
+ if ($scope.$currentTransition) {
436
+ $scope.$currentTransition.cancel();
437
+ //Timeout so ng-class in template has time to fix classes for finished slide
438
+ $timeout(goNext);
439
+ } else {
440
+ goNext();
441
+ }
442
+ }
443
+
444
+ function goNext() {
445
+ // Scope has been destroyed, stop here.
446
+ if (destroyed) {
447
+ return;
448
+ }
449
+ //If we have a slide to transition from and we have a transition type and we're allowed, go
450
+ if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) {
451
+ //We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime
452
+ nextSlide.$element.addClass(direction);
453
+ var reflow = nextSlide.$element[0].offsetWidth; //force reflow
454
+
455
+ //Set all other slides to stop doing their stuff for the new transition
456
+ angular.forEach(slides, function (slide) {
457
+ angular.extend(slide, {direction: '', entering: false, leaving: false, active: false});
458
+ });
459
+ angular.extend(nextSlide, {direction: direction, active: true, entering: true});
460
+ angular.extend(self.currentSlide || {}, {direction: direction, leaving: true});
461
+
462
+ $scope.$currentTransition = $transition(nextSlide.$element, {});
463
+ //We have to create new pointers inside a closure since next & current will change
464
+ (function (next, current) {
465
+ $scope.$currentTransition.then(
466
+ function () {
467
+ transitionDone(next, current);
468
+ },
469
+ function () {
470
+ transitionDone(next, current);
471
+ }
472
+ );
473
+ }(nextSlide, self.currentSlide));
474
+ } else {
475
+ transitionDone(nextSlide, self.currentSlide);
476
+ }
477
+ self.currentSlide = nextSlide;
478
+ currentIndex = nextIndex;
479
+ //every time you change slides, reset the timer
480
+ restartTimer();
481
+ }
482
+
483
+ function transitionDone(next, current) {
484
+ angular.extend(next, {direction: '', active: true, leaving: false, entering: false});
485
+ angular.extend(current || {}, {direction: '', active: false, leaving: false, entering: false});
486
+ $scope.$currentTransition = null;
487
+ }
488
+ };
489
+ $scope.$on('$destroy', function () {
490
+ destroyed = true;
491
+ });
492
+
493
+ /* Allow outside people to call indexOf on slides array */
494
+ self.indexOfSlide = function (slide) {
495
+ return slides.indexOf(slide);
496
+ };
497
+
498
+ $scope.next = function () {
499
+ var newIndex = (currentIndex + 1) % slides.length;
500
+
501
+ //Prevent this user-triggered transition from occurring if there is already one in progress
502
+ if (!$scope.$currentTransition) {
503
+ return self.select(slides[newIndex], 'next');
504
+ }
505
+ };
506
+
507
+ $scope.prev = function () {
508
+ var newIndex = currentIndex - 1 < 0 ? slides.length - 1 : currentIndex - 1;
509
+
510
+ //Prevent this user-triggered transition from occurring if there is already one in progress
511
+ if (!$scope.$currentTransition) {
512
+ return self.select(slides[newIndex], 'prev');
513
+ }
514
+ };
515
+
516
+ $scope.isActive = function (slide) {
517
+ return self.currentSlide === slide;
518
+ };
519
+
520
+ $scope.$watch('interval', restartTimer);
521
+ $scope.$on('$destroy', resetTimer);
522
+
523
+ function restartTimer() {
524
+ resetTimer();
525
+ var interval = +$scope.interval;
526
+ if (!isNaN(interval) && interval >= 0) {
527
+ currentTimeout = $timeout(timerFn, interval);
528
+ }
529
+ }
530
+
531
+ function resetTimer() {
532
+ if (currentTimeout) {
533
+ $timeout.cancel(currentTimeout);
534
+ currentTimeout = null;
535
+ }
536
+ }
537
+
538
+ function timerFn() {
539
+ if (isPlaying) {
540
+ $scope.next();
541
+ restartTimer();
542
+ } else {
543
+ $scope.pause();
544
+ }
545
+ }
546
+
547
+ $scope.play = function () {
548
+ if (!isPlaying) {
549
+ isPlaying = true;
550
+ restartTimer();
551
+ }
552
+ };
553
+ $scope.pause = function () {
554
+ if (!$scope.noPause) {
555
+ isPlaying = false;
556
+ resetTimer();
557
+ }
558
+ };
559
+
560
+ self.addSlide = function (slide, element) {
561
+ slide.$element = element;
562
+ slides.push(slide);
563
+ //if this is the first slide or the slide is set to active, select it
564
+ if (slides.length === 1 || slide.active) {
565
+ self.select(slides[slides.length - 1]);
566
+ if (slides.length == 1) {
567
+ $scope.play();
568
+ }
569
+ } else {
570
+ slide.active = false;
571
+ }
572
+ };
573
+
574
+ self.removeSlide = function (slide) {
575
+ //get the index of the slide inside the carousel
576
+ var index = slides.indexOf(slide);
577
+ slides.splice(index, 1);
578
+ if (slides.length > 0 && slide.active) {
579
+ if (index >= slides.length) {
580
+ self.select(slides[index - 1]);
581
+ } else {
582
+ self.select(slides[index]);
583
+ }
584
+ } else if (currentIndex > index) {
585
+ currentIndex--;
586
+ }
587
+ };
588
+
589
+ }])
590
+
591
+ /**
592
+ * @ngdoc directive
593
+ * @name ui.bootstrap.carousel.directive:carousel
594
+ * @restrict EA
595
+ *
596
+ * @description
597
+ * Carousel is the outer container for a set of image 'slides' to showcase.
598
+ *
599
+ * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide.
600
+ * @param {boolean=} noTransition Whether to disable transitions on the carousel.
601
+ * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover).
602
+ *
603
+ * @example
604
+ <example module="ui.bootstrap">
605
+ <file name="index.html">
606
+ <carousel>
607
+ <slide>
608
+ <img src="http://placekitten.com/150/150" style="margin:auto;">
609
+ <div class="carousel-caption">
610
+ <p>Beautiful!</p>
611
+ </div>
612
+ </slide>
613
+ <slide>
614
+ <img src="http://placekitten.com/100/150" style="margin:auto;">
615
+ <div class="carousel-caption">
616
+ <p>D'aww!</p>
617
+ </div>
618
+ </slide>
619
+ </carousel>
620
+ </file>
621
+ <file name="demo.css">
622
+ .carousel-indicators {
623
+ top: auto;
624
+ bottom: 15px;
625
+ }
626
+ </file>
627
+ </example>
628
+ */
629
+ .directive('carousel', [function () {
630
+ return {
631
+ restrict: 'EA',
632
+ transclude: true,
633
+ replace: true,
634
+ controller: 'CarouselController',
635
+ require: 'carousel',
636
+ templateUrl: 'template/carousel/carousel.html',
637
+ scope: {
638
+ interval: '=',
639
+ noTransition: '=',
640
+ noPause: '='
641
+ }
642
+ };
643
+ }])
644
+
645
+ /**
646
+ * @ngdoc directive
647
+ * @name ui.bootstrap.carousel.directive:slide
648
+ * @restrict EA
649
+ *
650
+ * @description
651
+ * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element.
652
+ *
653
+ * @param {boolean=} active Model binding, whether or not this slide is currently active.
654
+ *
655
+ * @example
656
+ <example module="ui.bootstrap">
657
+ <file name="index.html">
658
+ <div ng-controller="CarouselDemoCtrl">
659
+ <carousel>
660
+ <slide ng-repeat="slide in slides" active="slide.active">
661
+ <img ng-src="{{slide.image}}" style="margin:auto;">
662
+ <div class="carousel-caption">
663
+ <h4>Slide {{$index}}</h4>
664
+ <p>{{slide.text}}</p>
665
+ </div>
666
+ </slide>
667
+ </carousel>
668
+ Interval, in milliseconds: <input type="number" ng-model="myInterval">
669
+ <br />Enter a negative number to stop the interval.
670
+ </div>
671
+ </file>
672
+ <file name="script.js">
673
+ function CarouselDemoCtrl($scope) {
674
+ $scope.myInterval = 5000;
675
+ }
676
+ </file>
677
+ <file name="demo.css">
678
+ .carousel-indicators {
679
+ top: auto;
680
+ bottom: 15px;
681
+ }
682
+ </file>
683
+ </example>
684
+ */
685
+
686
+ .directive('slide', function () {
687
+ return {
688
+ require: '^carousel',
689
+ restrict: 'EA',
690
+ transclude: true,
691
+ replace: true,
692
+ templateUrl: 'template/carousel/slide.html',
693
+ scope: {
694
+ active: '=?'
695
+ },
696
+ link: function (scope, element, attrs, carouselCtrl) {
697
+ carouselCtrl.addSlide(scope, element);
698
+ //when the scope is destroyed then remove the slide from the current slides array
699
+ scope.$on('$destroy', function () {
700
+ carouselCtrl.removeSlide(scope);
701
+ });
702
+
703
+ scope.$watch('active', function (active) {
704
+ if (active) {
705
+ carouselCtrl.select(scope);
706
+ }
707
+ });
708
+ }
709
+ };
710
+ });
711
+
712
+ angular.module('ui.bootstrap.dateparser', [])
713
+
714
+ .service('dateParser', ['$locale', 'orderByFilter', function ($locale, orderByFilter) {
715
+
716
+ this.parsers = {};
717
+
718
+ var formatCodeToRegex = {
719
+ 'yyyy': {
720
+ regex: '\\d{4}',
721
+ apply: function (value) {
722
+ this.year = +value;
723
+ }
724
+ },
725
+ 'yy': {
726
+ regex: '\\d{2}',
727
+ apply: function (value) {
728
+ this.year = +value + 2000;
729
+ }
730
+ },
731
+ 'y': {
732
+ regex: '\\d{1,4}',
733
+ apply: function (value) {
734
+ this.year = +value;
735
+ }
736
+ },
737
+ 'MMMM': {
738
+ regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
739
+ apply: function (value) {
740
+ this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value);
741
+ }
742
+ },
743
+ 'MMM': {
744
+ regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
745
+ apply: function (value) {
746
+ this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value);
747
+ }
748
+ },
749
+ 'MM': {
750
+ regex: '0[1-9]|1[0-2]',
751
+ apply: function (value) {
752
+ this.month = value - 1;
753
+ }
754
+ },
755
+ 'M': {
756
+ regex: '[1-9]|1[0-2]',
757
+ apply: function (value) {
758
+ this.month = value - 1;
759
+ }
760
+ },
761
+ 'dd': {
762
+ regex: '[0-2][0-9]{1}|3[0-1]{1}',
763
+ apply: function (value) {
764
+ this.date = +value;
765
+ }
766
+ },
767
+ 'd': {
768
+ regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
769
+ apply: function (value) {
770
+ this.date = +value;
771
+ }
772
+ },
773
+ 'EEEE': {
774
+ regex: $locale.DATETIME_FORMATS.DAY.join('|')
775
+ },
776
+ 'EEE': {
777
+ regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')
778
+ }
779
+ };
780
+
781
+ this.createParser = function (format) {
782
+ var map = [], regex = format.split('');
783
+
784
+ angular.forEach(formatCodeToRegex, function (data, code) {
785
+ var index = format.indexOf(code);
786
+
787
+ if (index > -1) {
788
+ format = format.split('');
789
+
790
+ regex[index] = '(' + data.regex + ')';
791
+ format[index] = '$'; // Custom symbol to define consumed part of format
792
+ for (var i = index + 1, n = index + code.length; i < n; i++) {
793
+ regex[i] = '';
794
+ format[i] = '$';
795
+ }
796
+ format = format.join('');
797
+
798
+ map.push({index: index, apply: data.apply});
799
+ }
800
+ });
801
+
802
+ return {
803
+ regex: new RegExp('^' + regex.join('') + '$'),
804
+ map: orderByFilter(map, 'index')
805
+ };
806
+ };
807
+
808
+ this.parse = function (input, format) {
809
+ if (!angular.isString(input)) {
810
+ return input;
811
+ }
812
+
813
+ format = $locale.DATETIME_FORMATS[format] || format;
814
+
815
+ if (!this.parsers[format]) {
816
+ this.parsers[format] = this.createParser(format);
817
+ }
818
+
819
+ var parser = this.parsers[format],
820
+ regex = parser.regex,
821
+ map = parser.map,
822
+ results = input.match(regex);
823
+
824
+ if (results && results.length) {
825
+ var fields = {year: 1900, month: 0, date: 1, hours: 0}, dt;
826
+
827
+ for (var i = 1, n = results.length; i < n; i++) {
828
+ var mapper = map[i - 1];
829
+ if (mapper.apply) {
830
+ mapper.apply.call(fields, results[i]);
831
+ }
832
+ }
833
+
834
+ if (isValid(fields.year, fields.month, fields.date)) {
835
+ dt = new Date(fields.year, fields.month, fields.date, fields.hours);
836
+ }
837
+
838
+ return dt;
839
+ }
840
+ };
841
+
842
+ // Check if date is valid for specific month (and year for February).
843
+ // Month: 0 = Jan, 1 = Feb, etc
844
+ function isValid(year, month, date) {
845
+ if (month === 1 && date > 28) {
846
+ return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
847
+ }
848
+
849
+ if (month === 3 || month === 5 || month === 8 || month === 10) {
850
+ return date < 31;
851
+ }
852
+
853
+ return true;
854
+ }
855
+ }]);
856
+
857
+ angular.module('ui.bootstrap.position', [])
858
+
859
+ /**
860
+ * A set of utility methods that can be use to retrieve position of DOM elements.
861
+ * It is meant to be used where we need to absolute-position DOM elements in
862
+ * relation to other, existing elements (this is the case for tooltips, popovers,
863
+ * typeahead suggestions etc.).
864
+ */
865
+ .factory('$position', ['$document', '$window', function ($document, $window) {
866
+
867
+ function getStyle(el, cssprop) {
868
+ if (el.currentStyle) { //IE
869
+ return el.currentStyle[cssprop];
870
+ } else if ($window.getComputedStyle) {
871
+ return $window.getComputedStyle(el)[cssprop];
872
+ }
873
+ // finally try and get inline style
874
+ return el.style[cssprop];
875
+ }
876
+
877
+ /**
878
+ * Checks if a given element is statically positioned
879
+ * @param element - raw DOM element
880
+ */
881
+ function isStaticPositioned(element) {
882
+ return (getStyle(element, 'position') || 'static') === 'static';
883
+ }
884
+
885
+ /**
886
+ * returns the closest, non-statically positioned parentOffset of a given element
887
+ * @param element
888
+ */
889
+ var parentOffsetEl = function (element) {
890
+ var docDomEl = $document[0];
891
+ var offsetParent = element.offsetParent || docDomEl;
892
+ while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent)) {
893
+ offsetParent = offsetParent.offsetParent;
894
+ }
895
+ return offsetParent || docDomEl;
896
+ };
897
+
898
+ return {
899
+ /**
900
+ * Provides read-only equivalent of jQuery's position function:
901
+ * http://api.jquery.com/position/
902
+ */
903
+ position: function (element) {
904
+ var elBCR = this.offset(element);
905
+ var offsetParentBCR = {top: 0, left: 0};
906
+ var offsetParentEl = parentOffsetEl(element[0]);
907
+ if (offsetParentEl != $document[0]) {
908
+ offsetParentBCR = this.offset(angular.element(offsetParentEl));
909
+ offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;
910
+ offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;
911
+ }
912
+
913
+ var boundingClientRect = element[0].getBoundingClientRect();
914
+ return {
915
+ width: boundingClientRect.width || element.prop('offsetWidth'),
916
+ height: boundingClientRect.height || element.prop('offsetHeight'),
917
+ top: elBCR.top - offsetParentBCR.top,
918
+ left: elBCR.left - offsetParentBCR.left
919
+ };
920
+ },
921
+
922
+ /**
923
+ * Provides read-only equivalent of jQuery's offset function:
924
+ * http://api.jquery.com/offset/
925
+ */
926
+ offset: function (element) {
927
+ var boundingClientRect = element[0].getBoundingClientRect();
928
+ return {
929
+ width: boundingClientRect.width || element.prop('offsetWidth'),
930
+ height: boundingClientRect.height || element.prop('offsetHeight'),
931
+ top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),
932
+ left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)
933
+ };
934
+ },
935
+
936
+ /**
937
+ * Provides coordinates for the targetEl in relation to hostEl
938
+ */
939
+ positionElements: function (hostEl, targetEl, positionStr, appendToBody) {
940
+
941
+ var positionStrParts = positionStr.split('-');
942
+ var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center';
943
+
944
+ var hostElPos,
945
+ targetElWidth,
946
+ targetElHeight,
947
+ targetElPos;
948
+
949
+ hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl);
950
+
951
+ targetElWidth = targetEl.prop('offsetWidth');
952
+ targetElHeight = targetEl.prop('offsetHeight');
953
+
954
+ var shiftWidth = {
955
+ center: function () {
956
+ return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2;
957
+ },
958
+ left: function () {
959
+ return hostElPos.left;
960
+ },
961
+ right: function () {
962
+ return hostElPos.left + hostElPos.width;
963
+ }
964
+ };
965
+
966
+ var shiftHeight = {
967
+ center: function () {
968
+ return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2;
969
+ },
970
+ top: function () {
971
+ return hostElPos.top;
972
+ },
973
+ bottom: function () {
974
+ return hostElPos.top + hostElPos.height;
975
+ }
976
+ };
977
+
978
+ switch (pos0) {
979
+ case 'right':
980
+ targetElPos = {
981
+ top: shiftHeight[pos1](),
982
+ left: shiftWidth[pos0]()
983
+ };
984
+ break;
985
+ case 'left':
986
+ targetElPos = {
987
+ top: shiftHeight[pos1](),
988
+ left: hostElPos.left - targetElWidth
989
+ };
990
+ break;
991
+ case 'bottom':
992
+ targetElPos = {
993
+ top: shiftHeight[pos0](),
994
+ left: shiftWidth[pos1]()
995
+ };
996
+ break;
997
+ default:
998
+ targetElPos = {
999
+ top: hostElPos.top - targetElHeight,
1000
+ left: shiftWidth[pos1]()
1001
+ };
1002
+ break;
1003
+ }
1004
+
1005
+ return targetElPos;
1006
+ }
1007
+ };
1008
+ }]);
1009
+
1010
+ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position'])
1011
+
1012
+ .constant('datepickerConfig', {
1013
+ formatDay: 'dd',
1014
+ formatMonth: 'MMMM',
1015
+ formatYear: 'yyyy',
1016
+ formatDayHeader: 'EEE',
1017
+ formatDayTitle: 'MMMM yyyy',
1018
+ formatMonthTitle: 'yyyy',
1019
+ datepickerMode: 'day',
1020
+ minMode: 'day',
1021
+ maxMode: 'year',
1022
+ showWeeks: true,
1023
+ startingDay: 0,
1024
+ yearRange: 20,
1025
+ minDate: null,
1026
+ maxDate: null
1027
+ })
1028
+
1029
+ .controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function ($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) {
1030
+ var self = this,
1031
+ ngModelCtrl = {$setViewValue: angular.noop}; // nullModelCtrl;
1032
+
1033
+ // Modes chain
1034
+ this.modes = ['day', 'month', 'year'];
1035
+
1036
+ // Configuration attributes
1037
+ angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle',
1038
+ 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange'], function (key, index) {
1039
+ self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];
1040
+ });
1041
+
1042
+ // Watchable attributes
1043
+ angular.forEach(['minDate', 'maxDate'], function (key) {
1044
+ if ($attrs[key]) {
1045
+ $scope.$parent.$watch($parse($attrs[key]), function (value) {
1046
+ self[key] = value ? new Date(value) : null;
1047
+ self.refreshView();
1048
+ });
1049
+ } else {
1050
+ self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;
1051
+ }
1052
+ });
1053
+
1054
+ $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;
1055
+ $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
1056
+ this.activeDate = angular.isDefined($attrs.initDate) ? $scope.$parent.$eval($attrs.initDate) : new Date();
1057
+
1058
+ $scope.isActive = function (dateObject) {
1059
+ if (self.compare(dateObject.date, self.activeDate) === 0) {
1060
+ $scope.activeDateId = dateObject.uid;
1061
+ return true;
1062
+ }
1063
+ return false;
1064
+ };
1065
+
1066
+ this.init = function (ngModelCtrl_) {
1067
+ ngModelCtrl = ngModelCtrl_;
1068
+
1069
+ ngModelCtrl.$render = function () {
1070
+ self.render();
1071
+ };
1072
+ };
1073
+
1074
+ this.render = function () {
1075
+ if (ngModelCtrl.$modelValue) {
1076
+ var date = new Date(ngModelCtrl.$modelValue),
1077
+ isValid = !isNaN(date);
1078
+
1079
+ if (isValid) {
1080
+ this.activeDate = date;
1081
+ } else {
1082
+ $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
1083
+ }
1084
+ ngModelCtrl.$setValidity('date', isValid);
1085
+ }
1086
+ this.refreshView();
1087
+ };
1088
+
1089
+ this.refreshView = function () {
1090
+ if (this.element) {
1091
+ this._refreshView();
1092
+
1093
+ var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null;
1094
+ ngModelCtrl.$setValidity('date-disabled', !date || (this.element && !this.isDisabled(date)));
1095
+ }
1096
+ };
1097
+
1098
+ this.createDateObject = function (date, format) {
1099
+ var model = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null;
1100
+ return {
1101
+ date: date,
1102
+ label: dateFilter(date, format),
1103
+ selected: model && this.compare(date, model) === 0,
1104
+ disabled: this.isDisabled(date),
1105
+ current: this.compare(date, new Date()) === 0
1106
+ };
1107
+ };
1108
+
1109
+ this.isDisabled = function (date) {
1110
+ return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({
1111
+ date: date,
1112
+ mode: $scope.datepickerMode
1113
+ })));
1114
+ };
1115
+
1116
+ // Split array into smaller arrays
1117
+ this.split = function (arr, size) {
1118
+ var arrays = [];
1119
+ while (arr.length > 0) {
1120
+ arrays.push(arr.splice(0, size));
1121
+ }
1122
+ return arrays;
1123
+ };
1124
+
1125
+ $scope.select = function (date) {
1126
+ if ($scope.datepickerMode === self.minMode) {
1127
+ var dt = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : new Date(0, 0, 0, 0, 0, 0, 0);
1128
+ dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
1129
+ ngModelCtrl.$setViewValue(dt);
1130
+ ngModelCtrl.$render();
1131
+ } else {
1132
+ self.activeDate = date;
1133
+ $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) - 1];
1134
+ }
1135
+ };
1136
+
1137
+ $scope.move = function (direction) {
1138
+ var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
1139
+ month = self.activeDate.getMonth() + direction * (self.step.months || 0);
1140
+ self.activeDate.setFullYear(year, month, 1);
1141
+ self.refreshView();
1142
+ };
1143
+
1144
+ $scope.toggleMode = function (direction) {
1145
+ direction = direction || 1;
1146
+
1147
+ if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {
1148
+ return;
1149
+ }
1150
+
1151
+ $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) + direction];
1152
+ };
1153
+
1154
+ // Key event mapper
1155
+ $scope.keys = {
1156
+ 13: 'enter',
1157
+ 32: 'space',
1158
+ 33: 'pageup',
1159
+ 34: 'pagedown',
1160
+ 35: 'end',
1161
+ 36: 'home',
1162
+ 37: 'left',
1163
+ 38: 'up',
1164
+ 39: 'right',
1165
+ 40: 'down'
1166
+ };
1167
+
1168
+ var focusElement = function () {
1169
+ $timeout(function () {
1170
+ self.element[0].focus();
1171
+ }, 0, false);
1172
+ };
1173
+
1174
+ // Listen for focus requests from popup directive
1175
+ $scope.$on('datepicker.focus', focusElement);
1176
+
1177
+ $scope.keydown = function (evt) {
1178
+ var key = $scope.keys[evt.which];
1179
+
1180
+ if (!key || evt.shiftKey || evt.altKey) {
1181
+ return;
1182
+ }
1183
+
1184
+ evt.preventDefault();
1185
+ evt.stopPropagation();
1186
+
1187
+ if (key === 'enter' || key === 'space') {
1188
+ if (self.isDisabled(self.activeDate)) {
1189
+ return; // do nothing
1190
+ }
1191
+ $scope.select(self.activeDate);
1192
+ focusElement();
1193
+ } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
1194
+ $scope.toggleMode(key === 'up' ? 1 : -1);
1195
+ focusElement();
1196
+ } else {
1197
+ self.handleKeyDown(key, evt);
1198
+ self.refreshView();
1199
+ }
1200
+ };
1201
+ }])
1202
+
1203
+ .directive('datepicker', function () {
1204
+ return {
1205
+ restrict: 'EA',
1206
+ replace: true,
1207
+ templateUrl: 'template/datepicker/datepicker.html',
1208
+ scope: {
1209
+ datepickerMode: '=?',
1210
+ dateDisabled: '&'
1211
+ },
1212
+ require: ['datepicker', '?^ngModel'],
1213
+ controller: 'DatepickerController',
1214
+ link: function (scope, element, attrs, ctrls) {
1215
+ var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
1216
+
1217
+ if (ngModelCtrl) {
1218
+ datepickerCtrl.init(ngModelCtrl);
1219
+ }
1220
+ }
1221
+ };
1222
+ })
1223
+
1224
+ .directive('daypicker', ['dateFilter', function (dateFilter) {
1225
+ return {
1226
+ restrict: 'EA',
1227
+ replace: true,
1228
+ templateUrl: 'template/datepicker/day.html',
1229
+ require: '^datepicker',
1230
+ link: function (scope, element, attrs, ctrl) {
1231
+ scope.showWeeks = ctrl.showWeeks;
1232
+
1233
+ ctrl.step = {months: 1};
1234
+ ctrl.element = element;
1235
+
1236
+ var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
1237
+
1238
+ function getDaysInMonth(year, month) {
1239
+ return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];
1240
+ }
1241
+
1242
+ function getDates(startDate, n) {
1243
+ var dates = new Array(n), current = new Date(startDate), i = 0;
1244
+ current.setHours(12); // Prevent repeated dates because of timezone bug
1245
+ while (i < n) {
1246
+ dates[i++] = new Date(current);
1247
+ current.setDate(current.getDate() + 1);
1248
+ }
1249
+ return dates;
1250
+ }
1251
+
1252
+ ctrl._refreshView = function () {
1253
+ var year = ctrl.activeDate.getFullYear(),
1254
+ month = ctrl.activeDate.getMonth(),
1255
+ firstDayOfMonth = new Date(year, month, 1),
1256
+ difference = ctrl.startingDay - firstDayOfMonth.getDay(),
1257
+ numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : -difference,
1258
+ firstDate = new Date(firstDayOfMonth);
1259
+
1260
+ if (numDisplayedFromPreviousMonth > 0) {
1261
+ firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
1262
+ }
1263
+
1264
+ // 42 is the number of days on a six-month calendar
1265
+ var days = getDates(firstDate, 42);
1266
+ for (var i = 0; i < 42; i++) {
1267
+ days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), {
1268
+ secondary: days[i].getMonth() !== month,
1269
+ uid: scope.uniqueId + '-' + i
1270
+ });
1271
+ }
1272
+
1273
+ scope.labels = new Array(7);
1274
+ for (var j = 0; j < 7; j++) {
1275
+ scope.labels[j] = {
1276
+ abbr: dateFilter(days[j].date, ctrl.formatDayHeader),
1277
+ full: dateFilter(days[j].date, 'EEEE')
1278
+ };
1279
+ }
1280
+
1281
+ scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle);
1282
+ scope.rows = ctrl.split(days, 7);
1283
+
1284
+ if (scope.showWeeks) {
1285
+ scope.weekNumbers = [];
1286
+ var weekNumber = getISO8601WeekNumber(scope.rows[0][0].date),
1287
+ numWeeks = scope.rows.length;
1288
+ while (scope.weekNumbers.push(weekNumber++) < numWeeks) {
1289
+ }
1290
+ }
1291
+ };
1292
+
1293
+ ctrl.compare = function (date1, date2) {
1294
+ return (new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()));
1295
+ };
1296
+
1297
+ function getISO8601WeekNumber(date) {
1298
+ var checkDate = new Date(date);
1299
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
1300
+ var time = checkDate.getTime();
1301
+ checkDate.setMonth(0); // Compare with Jan 1
1302
+ checkDate.setDate(1);
1303
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
1304
+ }
1305
+
1306
+ ctrl.handleKeyDown = function (key, evt) {
1307
+ var date = ctrl.activeDate.getDate();
1308
+
1309
+ if (key === 'left') {
1310
+ date = date - 1; // up
1311
+ } else if (key === 'up') {
1312
+ date = date - 7; // down
1313
+ } else if (key === 'right') {
1314
+ date = date + 1; // down
1315
+ } else if (key === 'down') {
1316
+ date = date + 7;
1317
+ } else if (key === 'pageup' || key === 'pagedown') {
1318
+ var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? -1 : 1);
1319
+ ctrl.activeDate.setMonth(month, 1);
1320
+ date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date);
1321
+ } else if (key === 'home') {
1322
+ date = 1;
1323
+ } else if (key === 'end') {
1324
+ date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth());
1325
+ }
1326
+ ctrl.activeDate.setDate(date);
1327
+ };
1328
+
1329
+ ctrl.refreshView();
1330
+ }
1331
+ };
1332
+ }])
1333
+
1334
+ .directive('monthpicker', ['dateFilter', function (dateFilter) {
1335
+ return {
1336
+ restrict: 'EA',
1337
+ replace: true,
1338
+ templateUrl: 'template/datepicker/month.html',
1339
+ require: '^datepicker',
1340
+ link: function (scope, element, attrs, ctrl) {
1341
+ ctrl.step = {years: 1};
1342
+ ctrl.element = element;
1343
+
1344
+ ctrl._refreshView = function () {
1345
+ var months = new Array(12),
1346
+ year = ctrl.activeDate.getFullYear();
1347
+
1348
+ for (var i = 0; i < 12; i++) {
1349
+ months[i] = angular.extend(ctrl.createDateObject(new Date(year, i, 1), ctrl.formatMonth), {
1350
+ uid: scope.uniqueId + '-' + i
1351
+ });
1352
+ }
1353
+
1354
+ scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle);
1355
+ scope.rows = ctrl.split(months, 3);
1356
+ };
1357
+
1358
+ ctrl.compare = function (date1, date2) {
1359
+ return new Date(date1.getFullYear(), date1.getMonth()) - new Date(date2.getFullYear(), date2.getMonth());
1360
+ };
1361
+
1362
+ ctrl.handleKeyDown = function (key, evt) {
1363
+ var date = ctrl.activeDate.getMonth();
1364
+
1365
+ if (key === 'left') {
1366
+ date = date - 1; // up
1367
+ } else if (key === 'up') {
1368
+ date = date - 3; // down
1369
+ } else if (key === 'right') {
1370
+ date = date + 1; // down
1371
+ } else if (key === 'down') {
1372
+ date = date + 3;
1373
+ } else if (key === 'pageup' || key === 'pagedown') {
1374
+ var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? -1 : 1);
1375
+ ctrl.activeDate.setFullYear(year);
1376
+ } else if (key === 'home') {
1377
+ date = 0;
1378
+ } else if (key === 'end') {
1379
+ date = 11;
1380
+ }
1381
+ ctrl.activeDate.setMonth(date);
1382
+ };
1383
+
1384
+ ctrl.refreshView();
1385
+ }
1386
+ };
1387
+ }])
1388
+
1389
+ .directive('yearpicker', ['dateFilter', function (dateFilter) {
1390
+ return {
1391
+ restrict: 'EA',
1392
+ replace: true,
1393
+ templateUrl: 'template/datepicker/year.html',
1394
+ require: '^datepicker',
1395
+ link: function (scope, element, attrs, ctrl) {
1396
+ var range = ctrl.yearRange;
1397
+
1398
+ ctrl.step = {years: range};
1399
+ ctrl.element = element;
1400
+
1401
+ function getStartingYear(year) {
1402
+ return parseInt((year - 1) / range, 10) * range + 1;
1403
+ }
1404
+
1405
+ ctrl._refreshView = function () {
1406
+ var years = new Array(range);
1407
+
1408
+ for (var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++) {
1409
+ years[i] = angular.extend(ctrl.createDateObject(new Date(start + i, 0, 1), ctrl.formatYear), {
1410
+ uid: scope.uniqueId + '-' + i
1411
+ });
1412
+ }
1413
+
1414
+ scope.title = [years[0].label, years[range - 1].label].join(' - ');
1415
+ scope.rows = ctrl.split(years, 5);
1416
+ };
1417
+
1418
+ ctrl.compare = function (date1, date2) {
1419
+ return date1.getFullYear() - date2.getFullYear();
1420
+ };
1421
+
1422
+ ctrl.handleKeyDown = function (key, evt) {
1423
+ var date = ctrl.activeDate.getFullYear();
1424
+
1425
+ if (key === 'left') {
1426
+ date = date - 1; // up
1427
+ } else if (key === 'up') {
1428
+ date = date - 5; // down
1429
+ } else if (key === 'right') {
1430
+ date = date + 1; // down
1431
+ } else if (key === 'down') {
1432
+ date = date + 5;
1433
+ } else if (key === 'pageup' || key === 'pagedown') {
1434
+ date += (key === 'pageup' ? -1 : 1) * ctrl.step.years;
1435
+ } else if (key === 'home') {
1436
+ date = getStartingYear(ctrl.activeDate.getFullYear());
1437
+ } else if (key === 'end') {
1438
+ date = getStartingYear(ctrl.activeDate.getFullYear()) + range - 1;
1439
+ }
1440
+ ctrl.activeDate.setFullYear(date);
1441
+ };
1442
+
1443
+ ctrl.refreshView();
1444
+ }
1445
+ };
1446
+ }])
1447
+
1448
+ .constant('datepickerPopupConfig', {
1449
+ datepickerPopup: 'yyyy-MM-dd',
1450
+ currentText: 'Today',
1451
+ clearText: 'Clear',
1452
+ closeText: 'Done',
1453
+ closeOnDateSelection: true,
1454
+ appendToBody: false,
1455
+ showButtonBar: true
1456
+ })
1457
+
1458
+ .directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig',
1459
+ function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) {
1460
+ return {
1461
+ restrict: 'EA',
1462
+ require: 'ngModel',
1463
+ scope: {
1464
+ isOpen: '=?',
1465
+ currentText: '@',
1466
+ clearText: '@',
1467
+ closeText: '@',
1468
+ dateDisabled: '&'
1469
+ },
1470
+ link: function (scope, element, attrs, ngModel) {
1471
+ var dateFormat,
1472
+ closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,
1473
+ appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
1474
+
1475
+ scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
1476
+
1477
+ scope.getText = function (key) {
1478
+ return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];
1479
+ };
1480
+
1481
+ attrs.$observe('datepickerPopup', function (value) {
1482
+ dateFormat = value || datepickerPopupConfig.datepickerPopup;
1483
+ ngModel.$render();
1484
+ });
1485
+
1486
+ // popup element used to display calendar
1487
+ var popupEl = angular.element('<div datepicker-popup-wrap><div datepicker></div></div>');
1488
+ popupEl.attr({
1489
+ 'ng-model': 'date',
1490
+ 'ng-change': 'dateSelection()'
1491
+ });
1492
+
1493
+ function cameltoDash(string) {
1494
+ return string.replace(/([A-Z])/g, function ($1) {
1495
+ return '-' + $1.toLowerCase();
1496
+ });
1497
+ }
1498
+
1499
+ // datepicker element
1500
+ var datepickerEl = angular.element(popupEl.children()[0]);
1501
+ if (attrs.datepickerOptions) {
1502
+ angular.forEach(scope.$parent.$eval(attrs.datepickerOptions), function (value, option) {
1503
+ datepickerEl.attr(cameltoDash(option), value);
1504
+ });
1505
+ }
1506
+
1507
+ angular.forEach(['minDate', 'maxDate'], function (key) {
1508
+ if (attrs[key]) {
1509
+ scope.$parent.$watch($parse(attrs[key]), function (value) {
1510
+ scope[key] = value;
1511
+ });
1512
+ datepickerEl.attr(cameltoDash(key), key);
1513
+ }
1514
+ });
1515
+ if (attrs.dateDisabled) {
1516
+ datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');
1517
+ }
1518
+
1519
+ function parseDate(viewValue) {
1520
+ if (!viewValue) {
1521
+ ngModel.$setValidity('date', true);
1522
+ return null;
1523
+ } else if (angular.isDate(viewValue) && !isNaN(viewValue)) {
1524
+ ngModel.$setValidity('date', true);
1525
+ return viewValue;
1526
+ } else if (angular.isString(viewValue)) {
1527
+ var date = dateParser.parse(viewValue, dateFormat) || new Date(viewValue);
1528
+ if (isNaN(date)) {
1529
+ ngModel.$setValidity('date', false);
1530
+ return undefined;
1531
+ } else {
1532
+ ngModel.$setValidity('date', true);
1533
+ return date;
1534
+ }
1535
+ } else {
1536
+ ngModel.$setValidity('date', false);
1537
+ return undefined;
1538
+ }
1539
+ }
1540
+
1541
+ ngModel.$parsers.unshift(parseDate);
1542
+
1543
+ // Inner change
1544
+ scope.dateSelection = function (dt) {
1545
+ if (angular.isDefined(dt)) {
1546
+ scope.date = dt;
1547
+ }
1548
+ ngModel.$setViewValue(scope.date);
1549
+ ngModel.$render();
1550
+
1551
+ if (closeOnDateSelection) {
1552
+ scope.isOpen = false;
1553
+ element[0].focus();
1554
+ }
1555
+ };
1556
+
1557
+ element.bind('input change keyup', function () {
1558
+ scope.$apply(function () {
1559
+ scope.date = ngModel.$modelValue;
1560
+ });
1561
+ });
1562
+
1563
+ // Outter change
1564
+ ngModel.$render = function () {
1565
+ var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : '';
1566
+ element.val(date);
1567
+ scope.date = parseDate(ngModel.$modelValue);
1568
+ };
1569
+
1570
+ var documentClickBind = function (event) {
1571
+ if (scope.isOpen && event.target !== element[0]) {
1572
+ scope.$apply(function () {
1573
+ scope.isOpen = false;
1574
+ });
1575
+ }
1576
+ };
1577
+
1578
+ var keydown = function (evt, noApply) {
1579
+ scope.keydown(evt);
1580
+ };
1581
+ element.bind('keydown', keydown);
1582
+
1583
+ scope.keydown = function (evt) {
1584
+ if (evt.which === 27) {
1585
+ evt.preventDefault();
1586
+ evt.stopPropagation();
1587
+ scope.close();
1588
+ } else if (evt.which === 40 && !scope.isOpen) {
1589
+ scope.isOpen = true;
1590
+ }
1591
+ };
1592
+
1593
+ scope.$watch('isOpen', function (value) {
1594
+ if (value) {
1595
+ scope.$broadcast('datepicker.focus');
1596
+ scope.position = appendToBody ? $position.offset(element) : $position.position(element);
1597
+ scope.position.top = scope.position.top + element.prop('offsetHeight');
1598
+
1599
+ $document.bind('click', documentClickBind);
1600
+ } else {
1601
+ $document.unbind('click', documentClickBind);
1602
+ }
1603
+ });
1604
+
1605
+ scope.select = function (date) {
1606
+ if (date === 'today') {
1607
+ var today = new Date();
1608
+ if (angular.isDate(ngModel.$modelValue)) {
1609
+ date = new Date(ngModel.$modelValue);
1610
+ date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
1611
+ } else {
1612
+ date = new Date(today.setHours(0, 0, 0, 0));
1613
+ }
1614
+ }
1615
+ scope.dateSelection(date);
1616
+ };
1617
+
1618
+ scope.close = function () {
1619
+ scope.isOpen = false;
1620
+ element[0].focus();
1621
+ };
1622
+
1623
+ var $popup = $compile(popupEl)(scope);
1624
+ if (appendToBody) {
1625
+ $document.find('body').append($popup);
1626
+ } else {
1627
+ element.after($popup);
1628
+ }
1629
+
1630
+ scope.$on('$destroy', function () {
1631
+ $popup.remove();
1632
+ element.unbind('keydown', keydown);
1633
+ $document.unbind('click', documentClickBind);
1634
+ });
1635
+ }
1636
+ };
1637
+ }])
1638
+
1639
+ .directive('datepickerPopupWrap', function () {
1640
+ return {
1641
+ restrict: 'EA',
1642
+ replace: true,
1643
+ transclude: true,
1644
+ templateUrl: 'template/datepicker/popup.html',
1645
+ link: function (scope, element, attrs) {
1646
+ element.bind('click', function (event) {
1647
+ event.preventDefault();
1648
+ event.stopPropagation();
1649
+ });
1650
+ }
1651
+ };
1652
+ });
1653
+
1654
+ angular.module('ui.bootstrap.dropdown', [])
1655
+
1656
+ .constant('dropdownConfig', {
1657
+ openClass: 'open'
1658
+ })
1659
+
1660
+ .service('dropdownService', ['$document', function ($document) {
1661
+ var openScope = null;
1662
+
1663
+ this.open = function (dropdownScope) {
1664
+ if (!openScope) {
1665
+ $document.bind('click', closeDropdown);
1666
+ $document.bind('keydown', escapeKeyBind);
1667
+ }
1668
+
1669
+ if (openScope && openScope !== dropdownScope) {
1670
+ openScope.isOpen = false;
1671
+ }
1672
+
1673
+ openScope = dropdownScope;
1674
+ };
1675
+
1676
+ this.close = function (dropdownScope) {
1677
+ if (openScope === dropdownScope) {
1678
+ openScope = null;
1679
+ $document.unbind('click', closeDropdown);
1680
+ $document.unbind('keydown', escapeKeyBind);
1681
+ }
1682
+ };
1683
+
1684
+ var closeDropdown = function (evt) {
1685
+ if (evt && evt.isDefaultPrevented()) {
1686
+ return;
1687
+ }
1688
+
1689
+ openScope.$apply(function () {
1690
+ openScope.isOpen = false;
1691
+ });
1692
+ };
1693
+
1694
+ var escapeKeyBind = function (evt) {
1695
+ if (evt.which === 27) {
1696
+ openScope.focusToggleElement();
1697
+ closeDropdown();
1698
+ }
1699
+ };
1700
+ }])
1701
+
1702
+ .controller('DropdownController', ['$scope', '$attrs', '$parse', 'dropdownConfig', 'dropdownService', '$animate', function ($scope, $attrs, $parse, dropdownConfig, dropdownService, $animate) {
1703
+ var self = this,
1704
+ scope = $scope.$new(), // create a child scope so we are not polluting original one
1705
+ openClass = dropdownConfig.openClass,
1706
+ getIsOpen,
1707
+ setIsOpen = angular.noop,
1708
+ toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop;
1709
+
1710
+ this.init = function (element) {
1711
+ self.$element = element;
1712
+
1713
+ if ($attrs.isOpen) {
1714
+ getIsOpen = $parse($attrs.isOpen);
1715
+ setIsOpen = getIsOpen.assign;
1716
+
1717
+ $scope.$watch(getIsOpen, function (value) {
1718
+ scope.isOpen = !!value;
1719
+ });
1720
+ }
1721
+ };
1722
+
1723
+ this.toggle = function (open) {
1724
+ return scope.isOpen = arguments.length ? !!open : !scope.isOpen;
1725
+ };
1726
+
1727
+ // Allow other directives to watch status
1728
+ this.isOpen = function () {
1729
+ return scope.isOpen;
1730
+ };
1731
+
1732
+ scope.focusToggleElement = function () {
1733
+ if (self.toggleElement) {
1734
+ self.toggleElement[0].focus();
1735
+ }
1736
+ };
1737
+
1738
+ scope.$watch('isOpen', function (isOpen, wasOpen) {
1739
+ $animate[isOpen ? 'addClass' : 'removeClass'](self.$element, openClass);
1740
+
1741
+ if (isOpen) {
1742
+ scope.focusToggleElement();
1743
+ dropdownService.open(scope);
1744
+ } else {
1745
+ dropdownService.close(scope);
1746
+ }
1747
+
1748
+ setIsOpen($scope, isOpen);
1749
+ if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
1750
+ toggleInvoker($scope, {open: !!isOpen});
1751
+ }
1752
+ });
1753
+
1754
+ $scope.$on('$locationChangeSuccess', function () {
1755
+ scope.isOpen = false;
1756
+ });
1757
+
1758
+ $scope.$on('$destroy', function () {
1759
+ scope.$destroy();
1760
+ });
1761
+ }])
1762
+
1763
+ .directive('dropdown', function () {
1764
+ return {
1765
+ restrict: 'CA',
1766
+ controller: 'DropdownController',
1767
+ link: function (scope, element, attrs, dropdownCtrl) {
1768
+ dropdownCtrl.init(element);
1769
+ }
1770
+ };
1771
+ })
1772
+
1773
+ .directive('dropdownToggle', function () {
1774
+ return {
1775
+ restrict: 'CA',
1776
+ require: '?^dropdown',
1777
+ link: function (scope, element, attrs, dropdownCtrl) {
1778
+ if (!dropdownCtrl) {
1779
+ return;
1780
+ }
1781
+
1782
+ dropdownCtrl.toggleElement = element;
1783
+
1784
+ var toggleDropdown = function (event) {
1785
+ event.preventDefault();
1786
+
1787
+ if (!element.hasClass('disabled') && !attrs.disabled) {
1788
+ scope.$apply(function () {
1789
+ dropdownCtrl.toggle();
1790
+ });
1791
+ }
1792
+ };
1793
+
1794
+ element.bind('click', toggleDropdown);
1795
+
1796
+ // WAI-ARIA
1797
+ element.attr({'aria-haspopup': true, 'aria-expanded': false});
1798
+ scope.$watch(dropdownCtrl.isOpen, function (isOpen) {
1799
+ element.attr('aria-expanded', !!isOpen);
1800
+ });
1801
+
1802
+ scope.$on('$destroy', function () {
1803
+ element.unbind('click', toggleDropdown);
1804
+ });
1805
+ }
1806
+ };
1807
+ });
1808
+
1809
+ angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition'])
1810
+
1811
+ /**
1812
+ * A helper, internal data structure that acts as a map but also allows getting / removing
1813
+ * elements in the LIFO order
1814
+ */
1815
+ .factory('$$stackedMap', function () {
1816
+ return {
1817
+ createNew: function () {
1818
+ var stack = [];
1819
+
1820
+ return {
1821
+ add: function (key, value) {
1822
+ stack.push({
1823
+ key: key,
1824
+ value: value
1825
+ });
1826
+ },
1827
+ get: function (key) {
1828
+ for (var i = 0; i < stack.length; i++) {
1829
+ if (key == stack[i].key) {
1830
+ return stack[i];
1831
+ }
1832
+ }
1833
+ },
1834
+ keys: function () {
1835
+ var keys = [];
1836
+ for (var i = 0; i < stack.length; i++) {
1837
+ keys.push(stack[i].key);
1838
+ }
1839
+ return keys;
1840
+ },
1841
+ top: function () {
1842
+ return stack[stack.length - 1];
1843
+ },
1844
+ remove: function (key) {
1845
+ var idx = -1;
1846
+ for (var i = 0; i < stack.length; i++) {
1847
+ if (key == stack[i].key) {
1848
+ idx = i;
1849
+ break;
1850
+ }
1851
+ }
1852
+ return stack.splice(idx, 1)[0];
1853
+ },
1854
+ removeTop: function () {
1855
+ return stack.splice(stack.length - 1, 1)[0];
1856
+ },
1857
+ length: function () {
1858
+ return stack.length;
1859
+ }
1860
+ };
1861
+ }
1862
+ };
1863
+ })
1864
+
1865
+ /**
1866
+ * A helper directive for the $modal service. It creates a backdrop element.
1867
+ */
1868
+ .directive('modalBackdrop', ['$timeout', function ($timeout) {
1869
+ return {
1870
+ restrict: 'EA',
1871
+ replace: true,
1872
+ templateUrl: 'template/modal/backdrop.html',
1873
+ link: function (scope) {
1874
+
1875
+ scope.animate = false;
1876
+
1877
+ //trigger CSS transitions
1878
+ $timeout(function () {
1879
+ scope.animate = true;
1880
+ });
1881
+ }
1882
+ };
1883
+ }])
1884
+
1885
+ .directive('modalWindow', ['$modalStack', '$timeout', function ($modalStack, $timeout) {
1886
+ return {
1887
+ restrict: 'EA',
1888
+ scope: {
1889
+ index: '@',
1890
+ animate: '='
1891
+ },
1892
+ replace: true,
1893
+ transclude: true,
1894
+ templateUrl: function (tElement, tAttrs) {
1895
+ return tAttrs.templateUrl || 'template/modal/window.html';
1896
+ },
1897
+ link: function (scope, element, attrs) {
1898
+ element.addClass(attrs.windowClass || '');
1899
+ scope.size = attrs.size;
1900
+
1901
+ $timeout(function () {
1902
+ // trigger CSS transitions
1903
+ scope.animate = true;
1904
+ // focus a freshly-opened modal
1905
+ element[0].focus();
1906
+ });
1907
+
1908
+ scope.close = function (evt) {
1909
+ var modal = $modalStack.getTop();
1910
+ if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) {
1911
+ evt.preventDefault();
1912
+ evt.stopPropagation();
1913
+ $modalStack.dismiss(modal.key, 'backdrop click');
1914
+ }
1915
+ };
1916
+ }
1917
+ };
1918
+ }])
1919
+
1920
+ .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap',
1921
+ function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) {
1922
+
1923
+ var OPENED_MODAL_CLASS = 'modal-open';
1924
+
1925
+ var backdropDomEl, backdropScope;
1926
+ var openedWindows = $$stackedMap.createNew();
1927
+ var $modalStack = {};
1928
+
1929
+ function backdropIndex() {
1930
+ var topBackdropIndex = -1;
1931
+ var opened = openedWindows.keys();
1932
+ for (var i = 0; i < opened.length; i++) {
1933
+ if (openedWindows.get(opened[i]).value.backdrop) {
1934
+ topBackdropIndex = i;
1935
+ }
1936
+ }
1937
+ return topBackdropIndex;
1938
+ }
1939
+
1940
+ $rootScope.$watch(backdropIndex, function (newBackdropIndex) {
1941
+ if (backdropScope) {
1942
+ backdropScope.index = newBackdropIndex;
1943
+ }
1944
+ });
1945
+
1946
+ function removeModalWindow(modalInstance) {
1947
+
1948
+ var body = $document.find('body').eq(0);
1949
+ var modalWindow = openedWindows.get(modalInstance).value;
1950
+
1951
+ //clean up the stack
1952
+ openedWindows.remove(modalInstance);
1953
+
1954
+ //remove window DOM element
1955
+ removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, function () {
1956
+ modalWindow.modalScope.$destroy();
1957
+ body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0);
1958
+ checkRemoveBackdrop();
1959
+ });
1960
+ }
1961
+
1962
+ function checkRemoveBackdrop() {
1963
+ //remove backdrop if no longer needed
1964
+ if (backdropDomEl && backdropIndex() == -1) {
1965
+ var backdropScopeRef = backdropScope;
1966
+ removeAfterAnimate(backdropDomEl, backdropScope, 150, function () {
1967
+ backdropScopeRef.$destroy();
1968
+ backdropScopeRef = null;
1969
+ });
1970
+ backdropDomEl = undefined;
1971
+ backdropScope = undefined;
1972
+ }
1973
+ }
1974
+
1975
+ function removeAfterAnimate(domEl, scope, emulateTime, done) {
1976
+ // Closing animation
1977
+ scope.animate = false;
1978
+
1979
+ var transitionEndEventName = $transition.transitionEndEventName;
1980
+ if (transitionEndEventName) {
1981
+ // transition out
1982
+ var timeout = $timeout(afterAnimating, emulateTime);
1983
+
1984
+ domEl.bind(transitionEndEventName, function () {
1985
+ $timeout.cancel(timeout);
1986
+ afterAnimating();
1987
+ scope.$apply();
1988
+ });
1989
+ } else {
1990
+ // Ensure this call is async
1991
+ $timeout(afterAnimating, 0);
1992
+ }
1993
+
1994
+ function afterAnimating() {
1995
+ if (afterAnimating.done) {
1996
+ return;
1997
+ }
1998
+ afterAnimating.done = true;
1999
+
2000
+ domEl.remove();
2001
+ if (done) {
2002
+ done();
2003
+ }
2004
+ }
2005
+ }
2006
+
2007
+ $document.bind('keydown', function (evt) {
2008
+ var modal;
2009
+
2010
+ if (evt.which === 27) {
2011
+ modal = openedWindows.top();
2012
+ if (modal && modal.value.keyboard) {
2013
+ evt.preventDefault();
2014
+ $rootScope.$apply(function () {
2015
+ $modalStack.dismiss(modal.key, 'escape key press');
2016
+ });
2017
+ }
2018
+ }
2019
+ });
2020
+
2021
+ $modalStack.open = function (modalInstance, modal) {
2022
+
2023
+ openedWindows.add(modalInstance, {
2024
+ deferred: modal.deferred,
2025
+ modalScope: modal.scope,
2026
+ backdrop: modal.backdrop,
2027
+ keyboard: modal.keyboard
2028
+ });
2029
+
2030
+ var body = $document.find('body').eq(0),
2031
+ currBackdropIndex = backdropIndex();
2032
+
2033
+ if (currBackdropIndex >= 0 && !backdropDomEl) {
2034
+ backdropScope = $rootScope.$new(true);
2035
+ backdropScope.index = currBackdropIndex;
2036
+ backdropDomEl = $compile('<div modal-backdrop></div>')(backdropScope);
2037
+ body.append(backdropDomEl);
2038
+ }
2039
+
2040
+ var angularDomEl = angular.element('<div modal-window></div>');
2041
+ angularDomEl.attr({
2042
+ 'template-url': modal.windowTemplateUrl,
2043
+ 'window-class': modal.windowClass,
2044
+ 'size': modal.size,
2045
+ 'index': openedWindows.length() - 1,
2046
+ 'animate': 'animate'
2047
+ }).html(modal.content);
2048
+
2049
+ var modalDomEl = $compile(angularDomEl)(modal.scope);
2050
+ openedWindows.top().value.modalDomEl = modalDomEl;
2051
+ body.append(modalDomEl);
2052
+ body.addClass(OPENED_MODAL_CLASS);
2053
+ };
2054
+
2055
+ $modalStack.close = function (modalInstance, result) {
2056
+ var modalWindow = openedWindows.get(modalInstance).value;
2057
+ if (modalWindow) {
2058
+ modalWindow.deferred.resolve(result);
2059
+ removeModalWindow(modalInstance);
2060
+ }
2061
+ };
2062
+
2063
+ $modalStack.dismiss = function (modalInstance, reason) {
2064
+ var modalWindow = openedWindows.get(modalInstance).value;
2065
+ if (modalWindow) {
2066
+ modalWindow.deferred.reject(reason);
2067
+ removeModalWindow(modalInstance);
2068
+ }
2069
+ };
2070
+
2071
+ $modalStack.dismissAll = function (reason) {
2072
+ var topModal = this.getTop();
2073
+ while (topModal) {
2074
+ this.dismiss(topModal.key, reason);
2075
+ topModal = this.getTop();
2076
+ }
2077
+ };
2078
+
2079
+ $modalStack.getTop = function () {
2080
+ return openedWindows.top();
2081
+ };
2082
+
2083
+ return $modalStack;
2084
+ }])
2085
+
2086
+ .provider('$modal', function () {
2087
+
2088
+ var $modalProvider = {
2089
+ options: {
2090
+ backdrop: true, //can be also false or 'static'
2091
+ keyboard: true
2092
+ },
2093
+ $get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack',
2094
+ function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) {
2095
+
2096
+ var $modal = {};
2097
+
2098
+ function getTemplatePromise(options) {
2099
+ return options.template ? $q.when(options.template) :
2100
+ $http.get(options.templateUrl, {cache: $templateCache}).then(function (result) {
2101
+ return result.data;
2102
+ });
2103
+ }
2104
+
2105
+ function getResolvePromises(resolves) {
2106
+ var promisesArr = [];
2107
+ angular.forEach(resolves, function (value, key) {
2108
+ if (angular.isFunction(value) || angular.isArray(value)) {
2109
+ promisesArr.push($q.when($injector.invoke(value)));
2110
+ }
2111
+ });
2112
+ return promisesArr;
2113
+ }
2114
+
2115
+ $modal.open = function (modalOptions) {
2116
+
2117
+ var modalResultDeferred = $q.defer();
2118
+ var modalOpenedDeferred = $q.defer();
2119
+
2120
+ //prepare an instance of a modal to be injected into controllers and returned to a caller
2121
+ var modalInstance = {
2122
+ result: modalResultDeferred.promise,
2123
+ opened: modalOpenedDeferred.promise,
2124
+ close: function (result) {
2125
+ $modalStack.close(modalInstance, result);
2126
+ },
2127
+ dismiss: function (reason) {
2128
+ $modalStack.dismiss(modalInstance, reason);
2129
+ }
2130
+ };
2131
+
2132
+ //merge and clean up options
2133
+ modalOptions = angular.extend({}, $modalProvider.options, modalOptions);
2134
+ modalOptions.resolve = modalOptions.resolve || {};
2135
+
2136
+ //verify options
2137
+ if (!modalOptions.template && !modalOptions.templateUrl) {
2138
+ throw new Error('One of template or templateUrl options is required.');
2139
+ }
2140
+
2141
+ var templateAndResolvePromise =
2142
+ $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve)));
2143
+
2144
+
2145
+ templateAndResolvePromise.then(function resolveSuccess(tplAndVars) {
2146
+
2147
+ var modalScope = (modalOptions.scope || $rootScope).$new();
2148
+ modalScope.$close = modalInstance.close;
2149
+ modalScope.$dismiss = modalInstance.dismiss;
2150
+
2151
+ var ctrlInstance, ctrlLocals = {};
2152
+ var resolveIter = 1;
2153
+
2154
+ //controllers
2155
+ if (modalOptions.controller) {
2156
+ ctrlLocals.$scope = modalScope;
2157
+ ctrlLocals.$modalInstance = modalInstance;
2158
+ angular.forEach(modalOptions.resolve, function (value, key) {
2159
+ ctrlLocals[key] = tplAndVars[resolveIter++];
2160
+ });
2161
+
2162
+ ctrlInstance = $controller(modalOptions.controller, ctrlLocals);
2163
+ }
2164
+
2165
+ $modalStack.open(modalInstance, {
2166
+ scope: modalScope,
2167
+ deferred: modalResultDeferred,
2168
+ content: tplAndVars[0],
2169
+ backdrop: modalOptions.backdrop,
2170
+ keyboard: modalOptions.keyboard,
2171
+ windowClass: modalOptions.windowClass,
2172
+ windowTemplateUrl: modalOptions.windowTemplateUrl,
2173
+ size: modalOptions.size
2174
+ });
2175
+
2176
+ }, function resolveError(reason) {
2177
+ modalResultDeferred.reject(reason);
2178
+ });
2179
+
2180
+ templateAndResolvePromise.then(function () {
2181
+ modalOpenedDeferred.resolve(true);
2182
+ }, function () {
2183
+ modalOpenedDeferred.reject(false);
2184
+ });
2185
+
2186
+ return modalInstance;
2187
+ };
2188
+
2189
+ return $modal;
2190
+ }]
2191
+ };
2192
+
2193
+ return $modalProvider;
2194
+ });
2195
+
2196
+ angular.module('ui.bootstrap.pagination', [])
2197
+
2198
+ .controller('PaginationController', ['$scope', '$attrs', '$parse', function ($scope, $attrs, $parse) {
2199
+ var self = this,
2200
+ ngModelCtrl = {$setViewValue: angular.noop}, // nullModelCtrl
2201
+ setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
2202
+
2203
+ this.init = function (ngModelCtrl_, config) {
2204
+ ngModelCtrl = ngModelCtrl_;
2205
+ this.config = config;
2206
+
2207
+ ngModelCtrl.$render = function () {
2208
+ self.render();
2209
+ };
2210
+
2211
+ if ($attrs.itemsPerPage) {
2212
+ $scope.$parent.$watch($parse($attrs.itemsPerPage), function (value) {
2213
+ self.itemsPerPage = parseInt(value, 10);
2214
+ $scope.totalPages = self.calculateTotalPages();
2215
+ });
2216
+ } else {
2217
+ this.itemsPerPage = config.itemsPerPage;
2218
+ }
2219
+ };
2220
+
2221
+ this.calculateTotalPages = function () {
2222
+ var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage);
2223
+ return Math.max(totalPages || 0, 1);
2224
+ };
2225
+
2226
+ this.render = function () {
2227
+ $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1;
2228
+ };
2229
+
2230
+ $scope.selectPage = function (page) {
2231
+ if ($scope.page !== page && page > 0 && page <= $scope.totalPages) {
2232
+ ngModelCtrl.$setViewValue(page);
2233
+ ngModelCtrl.$render();
2234
+ }
2235
+ };
2236
+
2237
+ $scope.getText = function (key) {
2238
+ return $scope[key + 'Text'] || self.config[key + 'Text'];
2239
+ };
2240
+ $scope.noPrevious = function () {
2241
+ return $scope.page === 1;
2242
+ };
2243
+ $scope.noNext = function () {
2244
+ return $scope.page === $scope.totalPages;
2245
+ };
2246
+
2247
+ $scope.$watch('totalItems', function () {
2248
+ $scope.totalPages = self.calculateTotalPages();
2249
+ });
2250
+
2251
+ $scope.$watch('totalPages', function (value) {
2252
+ setNumPages($scope.$parent, value); // Readonly variable
2253
+
2254
+ if ($scope.page > value) {
2255
+ $scope.selectPage(value);
2256
+ } else {
2257
+ ngModelCtrl.$render();
2258
+ }
2259
+ });
2260
+ }])
2261
+
2262
+ .constant('paginationConfig', {
2263
+ itemsPerPage: 10,
2264
+ boundaryLinks: false,
2265
+ directionLinks: true,
2266
+ firstText: 'First',
2267
+ previousText: 'Previous',
2268
+ nextText: 'Next',
2269
+ lastText: 'Last',
2270
+ rotate: true
2271
+ })
2272
+
2273
+ .directive('pagination', ['$parse', 'paginationConfig', function ($parse, paginationConfig) {
2274
+ return {
2275
+ restrict: 'EA',
2276
+ scope: {
2277
+ totalItems: '=',
2278
+ firstText: '@',
2279
+ previousText: '@',
2280
+ nextText: '@',
2281
+ lastText: '@'
2282
+ },
2283
+ require: ['pagination', '?ngModel'],
2284
+ controller: 'PaginationController',
2285
+ templateUrl: 'template/pagination/pagination.html',
2286
+ replace: true,
2287
+ link: function (scope, element, attrs, ctrls) {
2288
+ var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
2289
+
2290
+ if (!ngModelCtrl) {
2291
+ return; // do nothing if no ng-model
2292
+ }
2293
+
2294
+ // Setup configuration parameters
2295
+ var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize,
2296
+ rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate;
2297
+ scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks;
2298
+ scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks;
2299
+
2300
+ paginationCtrl.init(ngModelCtrl, paginationConfig);
2301
+
2302
+ if (attrs.maxSize) {
2303
+ scope.$parent.$watch($parse(attrs.maxSize), function (value) {
2304
+ maxSize = parseInt(value, 10);
2305
+ paginationCtrl.render();
2306
+ });
2307
+ }
2308
+
2309
+ // Create page object used in template
2310
+ function makePage(number, text, isActive) {
2311
+ return {
2312
+ number: number,
2313
+ text: text,
2314
+ active: isActive
2315
+ };
2316
+ }
2317
+
2318
+ function getPages(currentPage, totalPages) {
2319
+ var pages = [];
2320
+
2321
+ // Default page limits
2322
+ var startPage = 1, endPage = totalPages;
2323
+ var isMaxSized = (angular.isDefined(maxSize) && maxSize < totalPages);
2324
+
2325
+ // recompute if maxSize
2326
+ if (isMaxSized) {
2327
+ if (rotate) {
2328
+ // Current page is displayed in the middle of the visible ones
2329
+ startPage = Math.max(currentPage - Math.floor(maxSize / 2), 1);
2330
+ endPage = startPage + maxSize - 1;
2331
+
2332
+ // Adjust if limit is exceeded
2333
+ if (endPage > totalPages) {
2334
+ endPage = totalPages;
2335
+ startPage = endPage - maxSize + 1;
2336
+ }
2337
+ } else {
2338
+ // Visible pages are paginated with maxSize
2339
+ startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1;
2340
+
2341
+ // Adjust last page if limit is exceeded
2342
+ endPage = Math.min(startPage + maxSize - 1, totalPages);
2343
+ }
2344
+ }
2345
+
2346
+ // Add page number links
2347
+ for (var number = startPage; number <= endPage; number++) {
2348
+ var page = makePage(number, number, number === currentPage);
2349
+ pages.push(page);
2350
+ }
2351
+
2352
+ // Add links to move between page sets
2353
+ if (isMaxSized && !rotate) {
2354
+ if (startPage > 1) {
2355
+ var previousPageSet = makePage(startPage - 1, '...', false);
2356
+ pages.unshift(previousPageSet);
2357
+ }
2358
+
2359
+ if (endPage < totalPages) {
2360
+ var nextPageSet = makePage(endPage + 1, '...', false);
2361
+ pages.push(nextPageSet);
2362
+ }
2363
+ }
2364
+
2365
+ return pages;
2366
+ }
2367
+
2368
+ var originalRender = paginationCtrl.render;
2369
+ paginationCtrl.render = function () {
2370
+ originalRender();
2371
+ if (scope.page > 0 && scope.page <= scope.totalPages) {
2372
+ scope.pages = getPages(scope.page, scope.totalPages);
2373
+ }
2374
+ };
2375
+ }
2376
+ };
2377
+ }])
2378
+
2379
+ .constant('pagerConfig', {
2380
+ itemsPerPage: 10,
2381
+ previousText: '« Previous',
2382
+ nextText: 'Next »',
2383
+ align: true
2384
+ })
2385
+
2386
+ .directive('pager', ['pagerConfig', function (pagerConfig) {
2387
+ return {
2388
+ restrict: 'EA',
2389
+ scope: {
2390
+ totalItems: '=',
2391
+ previousText: '@',
2392
+ nextText: '@'
2393
+ },
2394
+ require: ['pager', '?ngModel'],
2395
+ controller: 'PaginationController',
2396
+ templateUrl: 'template/pagination/pager.html',
2397
+ replace: true,
2398
+ link: function (scope, element, attrs, ctrls) {
2399
+ var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
2400
+
2401
+ if (!ngModelCtrl) {
2402
+ return; // do nothing if no ng-model
2403
+ }
2404
+
2405
+ scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align;
2406
+ paginationCtrl.init(ngModelCtrl, pagerConfig);
2407
+ }
2408
+ };
2409
+ }]);
2410
+
2411
+ /**
2412
+ * The following features are still outstanding: animation as a
2413
+ * function, placement as a function, inside, support for more triggers than
2414
+ * just mouse enter/leave, html tooltips, and selector delegation.
2415
+ */
2416
+ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml'])
2417
+
2418
+ /**
2419
+ * The $tooltip service creates tooltip- and popover-like directives as well as
2420
+ * houses global options for them.
2421
+ */
2422
+ .provider('$tooltip', function () {
2423
+ // The default options tooltip and popover.
2424
+ var defaultOptions = {
2425
+ placement: 'top',
2426
+ animation: true,
2427
+ popupDelay: 0
2428
+ };
2429
+
2430
+ // Default hide triggers for each show trigger
2431
+ var triggerMap = {
2432
+ 'mouseenter': 'mouseleave',
2433
+ 'click': 'click',
2434
+ 'focus': 'blur'
2435
+ };
2436
+
2437
+ // The options specified to the provider globally.
2438
+ var globalOptions = {};
2439
+
2440
+ /**
2441
+ * `options({})` allows global configuration of all tooltips in the
2442
+ * application.
2443
+ *
2444
+ * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {
2445
+ * // place tooltips left instead of top by default
2446
+ * $tooltipProvider.options( { placement: 'left' } );
2447
+ * });
2448
+ */
2449
+ this.options = function (value) {
2450
+ angular.extend(globalOptions, value);
2451
+ };
2452
+
2453
+ /**
2454
+ * This allows you to extend the set of trigger mappings available. E.g.:
2455
+ *
2456
+ * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );
2457
+ */
2458
+ this.setTriggers = function setTriggers(triggers) {
2459
+ angular.extend(triggerMap, triggers);
2460
+ };
2461
+
2462
+ /**
2463
+ * This is a helper function for translating camel-case to snake-case.
2464
+ */
2465
+ function snake_case(name) {
2466
+ var regexp = /[A-Z]/g;
2467
+ var separator = '-';
2468
+ return name.replace(regexp, function (letter, pos) {
2469
+ return (pos ? separator : '') + letter.toLowerCase();
2470
+ });
2471
+ }
2472
+
2473
+ /**
2474
+ * Returns the actual instance of the $tooltip service.
2475
+ * TODO support multiple triggers
2476
+ */
2477
+ this.$get = ['$window', '$compile', '$timeout', '$parse', '$document', '$position', '$interpolate', function ($window, $compile, $timeout, $parse, $document, $position, $interpolate) {
2478
+ return function $tooltip(type, prefix, defaultTriggerShow) {
2479
+ var options = angular.extend({}, defaultOptions, globalOptions);
2480
+
2481
+ /**
2482
+ * Returns an object of show and hide triggers.
2483
+ *
2484
+ * If a trigger is supplied,
2485
+ * it is used to show the tooltip; otherwise, it will use the `trigger`
2486
+ * option passed to the `$tooltipProvider.options` method; else it will
2487
+ * default to the trigger supplied to this directive factory.
2488
+ *
2489
+ * The hide trigger is based on the show trigger. If the `trigger` option
2490
+ * was passed to the `$tooltipProvider.options` method, it will use the
2491
+ * mapped trigger from `triggerMap` or the passed trigger if the map is
2492
+ * undefined; otherwise, it uses the `triggerMap` value of the show
2493
+ * trigger; else it will just use the show trigger.
2494
+ */
2495
+ function getTriggers(trigger) {
2496
+ var show = trigger || options.trigger || defaultTriggerShow;
2497
+ var hide = triggerMap[show] || show;
2498
+ return {
2499
+ show: show,
2500
+ hide: hide
2501
+ };
2502
+ }
2503
+
2504
+ var directiveName = snake_case(type);
2505
+
2506
+ var startSym = $interpolate.startSymbol();
2507
+ var endSym = $interpolate.endSymbol();
2508
+ var template =
2509
+ '<div ' + directiveName + '-popup ' +
2510
+ 'title="' + startSym + 'tt_title' + endSym + '" ' +
2511
+ 'content="' + startSym + 'tt_content' + endSym + '" ' +
2512
+ 'placement="' + startSym + 'tt_placement' + endSym + '" ' +
2513
+ 'animation="tt_animation" ' +
2514
+ 'is-open="tt_isOpen"' +
2515
+ '>' +
2516
+ '</div>';
2517
+
2518
+ return {
2519
+ restrict: 'EA',
2520
+ scope: true,
2521
+ compile: function (tElem, tAttrs) {
2522
+ var tooltipLinker = $compile(template);
2523
+
2524
+ return function link(scope, element, attrs) {
2525
+ var tooltip;
2526
+ var transitionTimeout;
2527
+ var popupTimeout;
2528
+ var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;
2529
+ var triggers = getTriggers(undefined);
2530
+ var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);
2531
+
2532
+ var positionTooltip = function () {
2533
+
2534
+ var ttPosition = $position.positionElements(element, tooltip, scope.tt_placement, appendToBody);
2535
+ ttPosition.top += 'px';
2536
+ ttPosition.left += 'px';
2537
+
2538
+ // Now set the calculated positioning.
2539
+ tooltip.css(ttPosition);
2540
+ };
2541
+
2542
+ // By default, the tooltip is not open.
2543
+ // TODO add ability to start tooltip opened
2544
+ scope.tt_isOpen = false;
2545
+
2546
+ function toggleTooltipBind() {
2547
+ if (!scope.tt_isOpen) {
2548
+ showTooltipBind();
2549
+ } else {
2550
+ hideTooltipBind();
2551
+ }
2552
+ }
2553
+
2554
+ // Show the tooltip with delay if specified, otherwise show it immediately
2555
+ function showTooltipBind() {
2556
+ if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {
2557
+ return;
2558
+ }
2559
+ if (scope.tt_popupDelay) {
2560
+ // Do nothing if the tooltip was already scheduled to pop-up.
2561
+ // This happens if show is triggered multiple times before any hide is triggered.
2562
+ if (!popupTimeout) {
2563
+ popupTimeout = $timeout(show, scope.tt_popupDelay, false);
2564
+ popupTimeout.then(function (reposition) {
2565
+ reposition();
2566
+ });
2567
+ }
2568
+ } else {
2569
+ show()();
2570
+ }
2571
+ }
2572
+
2573
+ function hideTooltipBind() {
2574
+ scope.$apply(function () {
2575
+ hide();
2576
+ });
2577
+ }
2578
+
2579
+ // Show the tooltip popup element.
2580
+ function show() {
2581
+
2582
+ popupTimeout = null;
2583
+
2584
+ // If there is a pending remove transition, we must cancel it, lest the
2585
+ // tooltip be mysteriously removed.
2586
+ if (transitionTimeout) {
2587
+ $timeout.cancel(transitionTimeout);
2588
+ transitionTimeout = null;
2589
+ }
2590
+
2591
+ // Don't show empty tooltips.
2592
+ if (!scope.tt_content) {
2593
+ return angular.noop;
2594
+ }
2595
+
2596
+ createTooltip();
2597
+
2598
+ // Set the initial positioning.
2599
+ tooltip.css({top: 0, left: 0, display: 'block'});
2600
+
2601
+ // Now we add it to the DOM because need some info about it. But it's not
2602
+ // visible yet anyway.
2603
+ if (appendToBody) {
2604
+ $document.find('body').append(tooltip);
2605
+ } else {
2606
+ element.after(tooltip);
2607
+ }
2608
+
2609
+ positionTooltip();
2610
+
2611
+ // And show the tooltip.
2612
+ scope.tt_isOpen = true;
2613
+ scope.$digest(); // digest required as $apply is not called
2614
+
2615
+ // Return positioning function as promise callback for correct
2616
+ // positioning after draw.
2617
+ return positionTooltip;
2618
+ }
2619
+
2620
+ // Hide the tooltip popup element.
2621
+ function hide() {
2622
+ // First things first: we don't show it anymore.
2623
+ scope.tt_isOpen = false;
2624
+
2625
+ //if tooltip is going to be shown after delay, we must cancel this
2626
+ $timeout.cancel(popupTimeout);
2627
+ popupTimeout = null;
2628
+
2629
+ // And now we remove it from the DOM. However, if we have animation, we
2630
+ // need to wait for it to expire beforehand.
2631
+ // FIXME: this is a placeholder for a port of the transitions library.
2632
+ if (scope.tt_animation) {
2633
+ if (!transitionTimeout) {
2634
+ transitionTimeout = $timeout(removeTooltip, 500);
2635
+ }
2636
+ } else {
2637
+ removeTooltip();
2638
+ }
2639
+ }
2640
+
2641
+ function createTooltip() {
2642
+ // There can only be one tooltip element per directive shown at once.
2643
+ if (tooltip) {
2644
+ removeTooltip();
2645
+ }
2646
+ tooltip = tooltipLinker(scope, function () {
2647
+ });
2648
+
2649
+ // Get contents rendered into the tooltip
2650
+ scope.$digest();
2651
+ }
2652
+
2653
+ function removeTooltip() {
2654
+ transitionTimeout = null;
2655
+ if (tooltip) {
2656
+ tooltip.remove();
2657
+ tooltip = null;
2658
+ }
2659
+ }
2660
+
2661
+ /**
2662
+ * Observe the relevant attributes.
2663
+ */
2664
+ attrs.$observe(type, function (val) {
2665
+ scope.tt_content = val;
2666
+
2667
+ if (!val && scope.tt_isOpen) {
2668
+ hide();
2669
+ }
2670
+ });
2671
+
2672
+ attrs.$observe(prefix + 'Title', function (val) {
2673
+ scope.tt_title = val;
2674
+ });
2675
+
2676
+ attrs.$observe(prefix + 'Placement', function (val) {
2677
+ scope.tt_placement = angular.isDefined(val) ? val : options.placement;
2678
+ });
2679
+
2680
+ attrs.$observe(prefix + 'PopupDelay', function (val) {
2681
+ var delay = parseInt(val, 10);
2682
+ scope.tt_popupDelay = !isNaN(delay) ? delay : options.popupDelay;
2683
+ });
2684
+
2685
+ var unregisterTriggers = function () {
2686
+ element.unbind(triggers.show, showTooltipBind);
2687
+ element.unbind(triggers.hide, hideTooltipBind);
2688
+ };
2689
+
2690
+ attrs.$observe(prefix + 'Trigger', function (val) {
2691
+ unregisterTriggers();
2692
+
2693
+ triggers = getTriggers(val);
2694
+
2695
+ if (triggers.show === triggers.hide) {
2696
+ element.bind(triggers.show, toggleTooltipBind);
2697
+ } else {
2698
+ element.bind(triggers.show, showTooltipBind);
2699
+ element.bind(triggers.hide, hideTooltipBind);
2700
+ }
2701
+ });
2702
+
2703
+ var animation = scope.$eval(attrs[prefix + 'Animation']);
2704
+ scope.tt_animation = angular.isDefined(animation) ? !!animation : options.animation;
2705
+
2706
+ attrs.$observe(prefix + 'AppendToBody', function (val) {
2707
+ appendToBody = angular.isDefined(val) ? $parse(val)(scope) : appendToBody;
2708
+ });
2709
+
2710
+ // if a tooltip is attached to <body> we need to remove it on
2711
+ // location change as its parent scope will probably not be destroyed
2712
+ // by the change.
2713
+ if (appendToBody) {
2714
+ scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess() {
2715
+ if (scope.tt_isOpen) {
2716
+ hide();
2717
+ }
2718
+ });
2719
+ }
2720
+
2721
+ // Make sure tooltip is destroyed and removed.
2722
+ scope.$on('$destroy', function onDestroyTooltip() {
2723
+ $timeout.cancel(transitionTimeout);
2724
+ $timeout.cancel(popupTimeout);
2725
+ unregisterTriggers();
2726
+ removeTooltip();
2727
+ });
2728
+ };
2729
+ }
2730
+ };
2731
+ };
2732
+ }];
2733
+ })
2734
+
2735
+ .directive('tooltipPopup', function () {
2736
+ return {
2737
+ restrict: 'EA',
2738
+ replace: true,
2739
+ scope: {content: '@', placement: '@', animation: '&', isOpen: '&'},
2740
+ templateUrl: 'template/tooltip/tooltip-popup.html'
2741
+ };
2742
+ })
2743
+
2744
+ .directive('tooltip', ['$tooltip', function ($tooltip) {
2745
+ return $tooltip('tooltip', 'tooltip', 'mouseenter');
2746
+ }])
2747
+
2748
+ .directive('tooltipHtmlUnsafePopup', function () {
2749
+ return {
2750
+ restrict: 'EA',
2751
+ replace: true,
2752
+ scope: {content: '@', placement: '@', animation: '&', isOpen: '&'},
2753
+ templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html'
2754
+ };
2755
+ })
2756
+
2757
+ .directive('tooltipHtmlUnsafe', ['$tooltip', function ($tooltip) {
2758
+ return $tooltip('tooltipHtmlUnsafe', 'tooltip', 'mouseenter');
2759
+ }]);
2760
+
2761
+ /**
2762
+ * The following features are still outstanding: popup delay, animation as a
2763
+ * function, placement as a function, inside, support for more triggers than
2764
+ * just mouse enter/leave, html popovers, and selector delegatation.
2765
+ */
2766
+ angular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])
2767
+
2768
+ .directive('popoverPopup', function () {
2769
+ return {
2770
+ restrict: 'EA',
2771
+ replace: true,
2772
+ scope: {title: '@', content: '@', placement: '@', animation: '&', isOpen: '&'},
2773
+ templateUrl: 'template/popover/popover.html'
2774
+ };
2775
+ })
2776
+
2777
+ .directive('popover', ['$tooltip', function ($tooltip) {
2778
+ return $tooltip('popover', 'popover', 'click');
2779
+ }]);
2780
+
2781
+ angular.module('ui.bootstrap.progressbar', [])
2782
+
2783
+ .constant('progressConfig', {
2784
+ animate: true,
2785
+ max: 100
2786
+ })
2787
+
2788
+ .controller('ProgressController', ['$scope', '$attrs', 'progressConfig', function ($scope, $attrs, progressConfig) {
2789
+ var self = this,
2790
+ animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
2791
+
2792
+ this.bars = [];
2793
+ $scope.max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max;
2794
+
2795
+ this.addBar = function (bar, element) {
2796
+ if (!animate) {
2797
+ element.css({'transition': 'none'});
2798
+ }
2799
+
2800
+ this.bars.push(bar);
2801
+
2802
+ bar.$watch('value', function (value) {
2803
+ bar.percent = +(100 * value / $scope.max).toFixed(2);
2804
+ });
2805
+
2806
+ bar.$on('$destroy', function () {
2807
+ element = null;
2808
+ self.removeBar(bar);
2809
+ });
2810
+ };
2811
+
2812
+ this.removeBar = function (bar) {
2813
+ this.bars.splice(this.bars.indexOf(bar), 1);
2814
+ };
2815
+ }])
2816
+
2817
+ .directive('progress', function () {
2818
+ return {
2819
+ restrict: 'EA',
2820
+ replace: true,
2821
+ transclude: true,
2822
+ controller: 'ProgressController',
2823
+ require: 'progress',
2824
+ scope: {},
2825
+ templateUrl: 'template/progressbar/progress.html'
2826
+ };
2827
+ })
2828
+
2829
+ .directive('bar', function () {
2830
+ return {
2831
+ restrict: 'EA',
2832
+ replace: true,
2833
+ transclude: true,
2834
+ require: '^progress',
2835
+ scope: {
2836
+ value: '=',
2837
+ type: '@'
2838
+ },
2839
+ templateUrl: 'template/progressbar/bar.html',
2840
+ link: function (scope, element, attrs, progressCtrl) {
2841
+ progressCtrl.addBar(scope, element);
2842
+ }
2843
+ };
2844
+ })
2845
+
2846
+ .directive('progressbar', function () {
2847
+ return {
2848
+ restrict: 'EA',
2849
+ replace: true,
2850
+ transclude: true,
2851
+ controller: 'ProgressController',
2852
+ scope: {
2853
+ value: '=',
2854
+ type: '@'
2855
+ },
2856
+ templateUrl: 'template/progressbar/progressbar.html',
2857
+ link: function (scope, element, attrs, progressCtrl) {
2858
+ progressCtrl.addBar(scope, angular.element(element.children()[0]));
2859
+ }
2860
+ };
2861
+ });
2862
+ angular.module('ui.bootstrap.rating', [])
2863
+
2864
+ .constant('ratingConfig', {
2865
+ max: 5,
2866
+ stateOn: null,
2867
+ stateOff: null
2868
+ })
2869
+
2870
+ .controller('RatingController', ['$scope', '$attrs', 'ratingConfig', function ($scope, $attrs, ratingConfig) {
2871
+ var ngModelCtrl = {$setViewValue: angular.noop};
2872
+
2873
+ this.init = function (ngModelCtrl_) {
2874
+ ngModelCtrl = ngModelCtrl_;
2875
+ ngModelCtrl.$render = this.render;
2876
+
2877
+ this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;
2878
+ this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;
2879
+
2880
+ var ratingStates = angular.isDefined($attrs.ratingStates) ? $scope.$parent.$eval($attrs.ratingStates) :
2881
+ new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);
2882
+ $scope.range = this.buildTemplateObjects(ratingStates);
2883
+ };
2884
+
2885
+ this.buildTemplateObjects = function (states) {
2886
+ for (var i = 0, n = states.length; i < n; i++) {
2887
+ states[i] = angular.extend({index: i}, {stateOn: this.stateOn, stateOff: this.stateOff}, states[i]);
2888
+ }
2889
+ return states;
2890
+ };
2891
+
2892
+ $scope.rate = function (value) {
2893
+ if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {
2894
+ ngModelCtrl.$setViewValue(value);
2895
+ ngModelCtrl.$render();
2896
+ }
2897
+ };
2898
+
2899
+ $scope.enter = function (value) {
2900
+ if (!$scope.readonly) {
2901
+ $scope.value = value;
2902
+ }
2903
+ $scope.onHover({value: value});
2904
+ };
2905
+
2906
+ $scope.reset = function () {
2907
+ $scope.value = ngModelCtrl.$viewValue;
2908
+ $scope.onLeave();
2909
+ };
2910
+
2911
+ $scope.onKeydown = function (evt) {
2912
+ if (/(37|38|39|40)/.test(evt.which)) {
2913
+ evt.preventDefault();
2914
+ evt.stopPropagation();
2915
+ $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));
2916
+ }
2917
+ };
2918
+
2919
+ this.render = function () {
2920
+ $scope.value = ngModelCtrl.$viewValue;
2921
+ };
2922
+ }])
2923
+
2924
+ .directive('rating', function () {
2925
+ return {
2926
+ restrict: 'EA',
2927
+ require: ['rating', 'ngModel'],
2928
+ scope: {
2929
+ readonly: '=?',
2930
+ onHover: '&',
2931
+ onLeave: '&'
2932
+ },
2933
+ controller: 'RatingController',
2934
+ templateUrl: 'template/rating/rating.html',
2935
+ replace: true,
2936
+ link: function (scope, element, attrs, ctrls) {
2937
+ var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];
2938
+
2939
+ if (ngModelCtrl) {
2940
+ ratingCtrl.init(ngModelCtrl);
2941
+ }
2942
+ }
2943
+ };
2944
+ });
2945
+
2946
+ /**
2947
+ * @ngdoc overview
2948
+ * @name ui.bootstrap.tabs
2949
+ *
2950
+ * @description
2951
+ * AngularJS version of the tabs directive.
2952
+ */
2953
+
2954
+ angular.module('ui.bootstrap.tabs', [])
2955
+
2956
+ .controller('TabsetController', ['$scope', function TabsetCtrl($scope) {
2957
+ var ctrl = this,
2958
+ tabs = ctrl.tabs = $scope.tabs = [];
2959
+
2960
+ ctrl.select = function (selectedTab) {
2961
+ angular.forEach(tabs, function (tab) {
2962
+ if (tab.active && tab !== selectedTab) {
2963
+ tab.active = false;
2964
+ tab.onDeselect();
2965
+ }
2966
+ });
2967
+ selectedTab.active = true;
2968
+ selectedTab.onSelect();
2969
+ };
2970
+
2971
+ ctrl.addTab = function addTab(tab) {
2972
+ tabs.push(tab);
2973
+ // we can't run the select function on the first tab
2974
+ // since that would select it twice
2975
+ if (tabs.length === 1) {
2976
+ tab.active = true;
2977
+ } else if (tab.active) {
2978
+ ctrl.select(tab);
2979
+ }
2980
+ };
2981
+
2982
+ ctrl.removeTab = function removeTab(tab) {
2983
+ var index = tabs.indexOf(tab);
2984
+ //Select a new tab if the tab to be removed is selected
2985
+ if (tab.active && tabs.length > 1) {
2986
+ //If this is the last tab, select the previous tab. else, the next tab.
2987
+ var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1;
2988
+ ctrl.select(tabs[newActiveIndex]);
2989
+ }
2990
+ tabs.splice(index, 1);
2991
+ };
2992
+ }])
2993
+
2994
+ /**
2995
+ * @ngdoc directive
2996
+ * @name ui.bootstrap.tabs.directive:tabset
2997
+ * @restrict EA
2998
+ *
2999
+ * @description
3000
+ * Tabset is the outer container for the tabs directive
3001
+ *
3002
+ * @param {boolean=} vertical Whether or not to use vertical styling for the tabs.
3003
+ * @param {boolean=} justified Whether or not to use justified styling for the tabs.
3004
+ *
3005
+ * @example
3006
+ <example module="ui.bootstrap">
3007
+ <file name="index.html">
3008
+ <tabset>
3009
+ <tab heading="Tab 1"><b>First</b> Content!</tab>
3010
+ <tab heading="Tab 2"><i>Second</i> Content!</tab>
3011
+ </tabset>
3012
+ <hr />
3013
+ <tabset vertical="true">
3014
+ <tab heading="Vertical Tab 1"><b>First</b> Vertical Content!</tab>
3015
+ <tab heading="Vertical Tab 2"><i>Second</i> Vertical Content!</tab>
3016
+ </tabset>
3017
+ <tabset justified="true">
3018
+ <tab heading="Justified Tab 1"><b>First</b> Justified Content!</tab>
3019
+ <tab heading="Justified Tab 2"><i>Second</i> Justified Content!</tab>
3020
+ </tabset>
3021
+ </file>
3022
+ </example>
3023
+ */
3024
+ .directive('tabset', function () {
3025
+ return {
3026
+ restrict: 'EA',
3027
+ transclude: true,
3028
+ replace: true,
3029
+ scope: {
3030
+ type: '@'
3031
+ },
3032
+ controller: 'TabsetController',
3033
+ templateUrl: 'template/tabs/tabset.html',
3034
+ link: function (scope, element, attrs) {
3035
+ scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
3036
+ scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
3037
+ }
3038
+ };
3039
+ })
3040
+
3041
+ /**
3042
+ * @ngdoc directive
3043
+ * @name ui.bootstrap.tabs.directive:tab
3044
+ * @restrict EA
3045
+ *
3046
+ * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}.
3047
+ * @param {string=} select An expression to evaluate when the tab is selected.
3048
+ * @param {boolean=} active A binding, telling whether or not this tab is selected.
3049
+ * @param {boolean=} disabled A binding, telling whether or not this tab is disabled.
3050
+ *
3051
+ * @description
3052
+ * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}.
3053
+ *
3054
+ * @example
3055
+ <example module="ui.bootstrap">
3056
+ <file name="index.html">
3057
+ <div ng-controller="TabsDemoCtrl">
3058
+ <button class="btn btn-small" ng-click="items[0].active = true">
3059
+ Select item 1, using active binding
3060
+ </button>
3061
+ <button class="btn btn-small" ng-click="items[1].disabled = !items[1].disabled">
3062
+ Enable/disable item 2, using disabled binding
3063
+ </button>
3064
+ <br />
3065
+ <tabset>
3066
+ <tab heading="Tab 1">First Tab</tab>
3067
+ <tab select="alertMe()">
3068
+ <tab-heading><i class="icon-bell"></i> Alert me!</tab-heading>
3069
+ Second Tab, with alert callback and html heading!
3070
+ </tab>
3071
+ <tab ng-repeat="item in items"
3072
+ heading="{{item.title}}"
3073
+ disabled="item.disabled"
3074
+ active="item.active">
3075
+ {{item.content}}
3076
+ </tab>
3077
+ </tabset>
3078
+ </div>
3079
+ </file>
3080
+ <file name="script.js">
3081
+ function TabsDemoCtrl($scope) {
3082
+ $scope.items = [
3083
+ { title:"Dynamic Title 1", content:"Dynamic Item 0" },
3084
+ { title:"Dynamic Title 2", content:"Dynamic Item 1", disabled: true }
3085
+ ];
3086
+
3087
+ $scope.alertMe = function() {
3088
+ setTimeout(function() {
3089
+ alert("You've selected the alert tab!");
3090
+ });
3091
+ };
3092
+ };
3093
+ </file>
3094
+ </example>
3095
+ */
3096
+
3097
+ /**
3098
+ * @ngdoc directive
3099
+ * @name ui.bootstrap.tabs.directive:tabHeading
3100
+ * @restrict EA
3101
+ *
3102
+ * @description
3103
+ * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element.
3104
+ *
3105
+ * @example
3106
+ <example module="ui.bootstrap">
3107
+ <file name="index.html">
3108
+ <tabset>
3109
+ <tab>
3110
+ <tab-heading><b>HTML</b> in my titles?!</tab-heading>
3111
+ And some content, too!
3112
+ </tab>
3113
+ <tab>
3114
+ <tab-heading><i class="icon-heart"></i> Icon heading?!?</tab-heading>
3115
+ That's right.
3116
+ </tab>
3117
+ </tabset>
3118
+ </file>
3119
+ </example>
3120
+ */
3121
+ .directive('tab', ['$parse', function ($parse) {
3122
+ return {
3123
+ require: '^tabset',
3124
+ restrict: 'EA',
3125
+ replace: true,
3126
+ templateUrl: 'template/tabs/tab.html',
3127
+ transclude: true,
3128
+ scope: {
3129
+ active: '=?',
3130
+ heading: '@',
3131
+ onSelect: '&select', //This callback is called in contentHeadingTransclude
3132
+ //once it inserts the tab's content into the dom
3133
+ onDeselect: '&deselect'
3134
+ },
3135
+ controller: function () {
3136
+ //Empty controller so other directives can require being 'under' a tab
3137
+ },
3138
+ compile: function (elm, attrs, transclude) {
3139
+ return function postLink(scope, elm, attrs, tabsetCtrl) {
3140
+ scope.$watch('active', function (active) {
3141
+ if (active) {
3142
+ tabsetCtrl.select(scope);
3143
+ }
3144
+ });
3145
+
3146
+ scope.disabled = false;
3147
+ if (attrs.disabled) {
3148
+ scope.$parent.$watch($parse(attrs.disabled), function (value) {
3149
+ scope.disabled = !!value;
3150
+ });
3151
+ }
3152
+
3153
+ scope.select = function () {
3154
+ if (!scope.disabled) {
3155
+ scope.active = true;
3156
+ }
3157
+ };
3158
+
3159
+ tabsetCtrl.addTab(scope);
3160
+ scope.$on('$destroy', function () {
3161
+ tabsetCtrl.removeTab(scope);
3162
+ });
3163
+
3164
+ //We need to transclude later, once the content container is ready.
3165
+ //when this link happens, we're inside a tab heading.
3166
+ scope.$transcludeFn = transclude;
3167
+ };
3168
+ }
3169
+ };
3170
+ }])
3171
+
3172
+ .directive('tabHeadingTransclude', [function () {
3173
+ return {
3174
+ restrict: 'A',
3175
+ require: '^tab',
3176
+ link: function (scope, elm, attrs, tabCtrl) {
3177
+ scope.$watch('headingElement', function updateHeadingElement(heading) {
3178
+ if (heading) {
3179
+ elm.html('');
3180
+ elm.append(heading);
3181
+ }
3182
+ });
3183
+ }
3184
+ };
3185
+ }])
3186
+
3187
+ .directive('tabContentTransclude', function () {
3188
+ return {
3189
+ restrict: 'A',
3190
+ require: '^tabset',
3191
+ link: function (scope, elm, attrs) {
3192
+ var tab = scope.$eval(attrs.tabContentTransclude);
3193
+
3194
+ //Now our tab is ready to be transcluded: both the tab heading area
3195
+ //and the tab content area are loaded. Transclude 'em both.
3196
+ tab.$transcludeFn(tab.$parent, function (contents) {
3197
+ angular.forEach(contents, function (node) {
3198
+ if (isTabHeading(node)) {
3199
+ //Let tabHeadingTransclude know.
3200
+ tab.headingElement = node;
3201
+ } else {
3202
+ elm.append(node);
3203
+ }
3204
+ });
3205
+ });
3206
+ }
3207
+ };
3208
+
3209
+ function isTabHeading(node) {
3210
+ return node.tagName && (
3211
+ node.hasAttribute('tab-heading') ||
3212
+ node.hasAttribute('data-tab-heading') ||
3213
+ node.tagName.toLowerCase() === 'tab-heading' ||
3214
+ node.tagName.toLowerCase() === 'data-tab-heading'
3215
+ );
3216
+ }
3217
+ })
3218
+
3219
+ ;
3220
+
3221
+ angular.module('ui.bootstrap.timepicker', [])
3222
+
3223
+ .constant('timepickerConfig', {
3224
+ hourStep: 1,
3225
+ minuteStep: 1,
3226
+ showMeridian: true,
3227
+ meridians: null,
3228
+ readonlyInput: false,
3229
+ mousewheel: true
3230
+ })
3231
+
3232
+ .controller('TimepickerController', ['$scope', '$attrs', '$parse', '$log', '$locale', 'timepickerConfig', function ($scope, $attrs, $parse, $log, $locale, timepickerConfig) {
3233
+ var selected = new Date(),
3234
+ ngModelCtrl = {$setViewValue: angular.noop}, // nullModelCtrl
3235
+ meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;
3236
+
3237
+ this.init = function (ngModelCtrl_, inputs) {
3238
+ ngModelCtrl = ngModelCtrl_;
3239
+ ngModelCtrl.$render = this.render;
3240
+
3241
+ var hoursInputEl = inputs.eq(0),
3242
+ minutesInputEl = inputs.eq(1);
3243
+
3244
+ var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;
3245
+ if (mousewheel) {
3246
+ this.setupMousewheelEvents(hoursInputEl, minutesInputEl);
3247
+ }
3248
+
3249
+ $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;
3250
+ this.setupInputEvents(hoursInputEl, minutesInputEl);
3251
+ };
3252
+
3253
+ var hourStep = timepickerConfig.hourStep;
3254
+ if ($attrs.hourStep) {
3255
+ $scope.$parent.$watch($parse($attrs.hourStep), function (value) {
3256
+ hourStep = parseInt(value, 10);
3257
+ });
3258
+ }
3259
+
3260
+ var minuteStep = timepickerConfig.minuteStep;
3261
+ if ($attrs.minuteStep) {
3262
+ $scope.$parent.$watch($parse($attrs.minuteStep), function (value) {
3263
+ minuteStep = parseInt(value, 10);
3264
+ });
3265
+ }
3266
+
3267
+ // 12H / 24H mode
3268
+ $scope.showMeridian = timepickerConfig.showMeridian;
3269
+ if ($attrs.showMeridian) {
3270
+ $scope.$parent.$watch($parse($attrs.showMeridian), function (value) {
3271
+ $scope.showMeridian = !!value;
3272
+
3273
+ if (ngModelCtrl.$error.time) {
3274
+ // Evaluate from template
3275
+ var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();
3276
+ if (angular.isDefined(hours) && angular.isDefined(minutes)) {
3277
+ selected.setHours(hours);
3278
+ refresh();
3279
+ }
3280
+ } else {
3281
+ updateTemplate();
3282
+ }
3283
+ });
3284
+ }
3285
+
3286
+ // Get $scope.hours in 24H mode if valid
3287
+ function getHoursFromTemplate() {
3288
+ var hours = parseInt($scope.hours, 10);
3289
+ var valid = ($scope.showMeridian) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24);
3290
+ if (!valid) {
3291
+ return undefined;
3292
+ }
3293
+
3294
+ if ($scope.showMeridian) {
3295
+ if (hours === 12) {
3296
+ hours = 0;
3297
+ }
3298
+ if ($scope.meridian === meridians[1]) {
3299
+ hours = hours + 12;
3300
+ }
3301
+ }
3302
+ return hours;
3303
+ }
3304
+
3305
+ function getMinutesFromTemplate() {
3306
+ var minutes = parseInt($scope.minutes, 10);
3307
+ return (minutes >= 0 && minutes < 60) ? minutes : undefined;
3308
+ }
3309
+
3310
+ function pad(value) {
3311
+ return (angular.isDefined(value) && value.toString().length < 2) ? '0' + value : value;
3312
+ }
3313
+
3314
+ // Respond on mousewheel spin
3315
+ this.setupMousewheelEvents = function (hoursInputEl, minutesInputEl) {
3316
+ var isScrollingUp = function (e) {
3317
+ if (e.originalEvent) {
3318
+ e = e.originalEvent;
3319
+ }
3320
+ //pick correct delta variable depending on event
3321
+ var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY;
3322
+ return (e.detail || delta > 0);
3323
+ };
3324
+
3325
+ hoursInputEl.bind('mousewheel wheel', function (e) {
3326
+ $scope.$apply((isScrollingUp(e)) ? $scope.incrementHours() : $scope.decrementHours());
3327
+ e.preventDefault();
3328
+ });
3329
+
3330
+ minutesInputEl.bind('mousewheel wheel', function (e) {
3331
+ $scope.$apply((isScrollingUp(e)) ? $scope.incrementMinutes() : $scope.decrementMinutes());
3332
+ e.preventDefault();
3333
+ });
3334
+
3335
+ };
3336
+
3337
+ this.setupInputEvents = function (hoursInputEl, minutesInputEl) {
3338
+ if ($scope.readonlyInput) {
3339
+ $scope.updateHours = angular.noop;
3340
+ $scope.updateMinutes = angular.noop;
3341
+ return;
3342
+ }
3343
+
3344
+ var invalidate = function (invalidHours, invalidMinutes) {
3345
+ ngModelCtrl.$setViewValue(null);
3346
+ ngModelCtrl.$setValidity('time', false);
3347
+ if (angular.isDefined(invalidHours)) {
3348
+ $scope.invalidHours = invalidHours;
3349
+ }
3350
+ if (angular.isDefined(invalidMinutes)) {
3351
+ $scope.invalidMinutes = invalidMinutes;
3352
+ }
3353
+ };
3354
+
3355
+ $scope.updateHours = function () {
3356
+ var hours = getHoursFromTemplate();
3357
+
3358
+ if (angular.isDefined(hours)) {
3359
+ selected.setHours(hours);
3360
+ refresh('h');
3361
+ } else {
3362
+ invalidate(true);
3363
+ }
3364
+ };
3365
+
3366
+ hoursInputEl.bind('blur', function (e) {
3367
+ if (!$scope.invalidHours && $scope.hours < 10) {
3368
+ $scope.$apply(function () {
3369
+ $scope.hours = pad($scope.hours);
3370
+ });
3371
+ }
3372
+ });
3373
+
3374
+ $scope.updateMinutes = function () {
3375
+ var minutes = getMinutesFromTemplate();
3376
+
3377
+ if (angular.isDefined(minutes)) {
3378
+ selected.setMinutes(minutes);
3379
+ refresh('m');
3380
+ } else {
3381
+ invalidate(undefined, true);
3382
+ }
3383
+ };
3384
+
3385
+ minutesInputEl.bind('blur', function (e) {
3386
+ if (!$scope.invalidMinutes && $scope.minutes < 10) {
3387
+ $scope.$apply(function () {
3388
+ $scope.minutes = pad($scope.minutes);
3389
+ });
3390
+ }
3391
+ });
3392
+
3393
+ };
3394
+
3395
+ this.render = function () {
3396
+ var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null;
3397
+
3398
+ if (isNaN(date)) {
3399
+ ngModelCtrl.$setValidity('time', false);
3400
+ $log.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
3401
+ } else {
3402
+ if (date) {
3403
+ selected = date;
3404
+ }
3405
+ makeValid();
3406
+ updateTemplate();
3407
+ }
3408
+ };
3409
+
3410
+ // Call internally when we know that model is valid.
3411
+ function refresh(keyboardChange) {
3412
+ makeValid();
3413
+ ngModelCtrl.$setViewValue(new Date(selected));
3414
+ updateTemplate(keyboardChange);
3415
+ }
3416
+
3417
+ function makeValid() {
3418
+ ngModelCtrl.$setValidity('time', true);
3419
+ $scope.invalidHours = false;
3420
+ $scope.invalidMinutes = false;
3421
+ }
3422
+
3423
+ function updateTemplate(keyboardChange) {
3424
+ var hours = selected.getHours(), minutes = selected.getMinutes();
3425
+
3426
+ if ($scope.showMeridian) {
3427
+ hours = (hours === 0 || hours === 12) ? 12 : hours % 12; // Convert 24 to 12 hour system
3428
+ }
3429
+
3430
+ $scope.hours = keyboardChange === 'h' ? hours : pad(hours);
3431
+ $scope.minutes = keyboardChange === 'm' ? minutes : pad(minutes);
3432
+ $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];
3433
+ }
3434
+
3435
+ function addMinutes(minutes) {
3436
+ var dt = new Date(selected.getTime() + minutes * 60000);
3437
+ selected.setHours(dt.getHours(), dt.getMinutes());
3438
+ refresh();
3439
+ }
3440
+
3441
+ $scope.incrementHours = function () {
3442
+ addMinutes(hourStep * 60);
3443
+ };
3444
+ $scope.decrementHours = function () {
3445
+ addMinutes(-hourStep * 60);
3446
+ };
3447
+ $scope.incrementMinutes = function () {
3448
+ addMinutes(minuteStep);
3449
+ };
3450
+ $scope.decrementMinutes = function () {
3451
+ addMinutes(-minuteStep);
3452
+ };
3453
+ $scope.toggleMeridian = function () {
3454
+ addMinutes(12 * 60 * ((selected.getHours() < 12) ? 1 : -1));
3455
+ };
3456
+ }])
3457
+
3458
+ .directive('timepicker', function () {
3459
+ return {
3460
+ restrict: 'EA',
3461
+ require: ['timepicker', '?^ngModel'],
3462
+ controller: 'TimepickerController',
3463
+ replace: true,
3464
+ scope: {},
3465
+ templateUrl: 'template/timepicker/timepicker.html',
3466
+ link: function (scope, element, attrs, ctrls) {
3467
+ var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
3468
+
3469
+ if (ngModelCtrl) {
3470
+ timepickerCtrl.init(ngModelCtrl, element.find('input'));
3471
+ }
3472
+ }
3473
+ };
3474
+ });
3475
+
3476
+ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml'])
3477
+
3478
+ /**
3479
+ * A helper service that can parse typeahead's syntax (string provided by users)
3480
+ * Extracted to a separate service for ease of unit testing
3481
+ */
3482
+ .factory('typeaheadParser', ['$parse', function ($parse) {
3483
+
3484
+ // 00000111000000000000022200000000000000003333333333333330000000000044000
3485
+ var TYPEAHEAD_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+(.*)$/;
3486
+
3487
+ return {
3488
+ parse: function (input) {
3489
+
3490
+ var match = input.match(TYPEAHEAD_REGEXP);
3491
+ if (!match) {
3492
+ throw new Error(
3493
+ 'Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_"' +
3494
+ ' but got "' + input + '".');
3495
+ }
3496
+
3497
+ return {
3498
+ itemName: match[3],
3499
+ source: $parse(match[4]),
3500
+ viewMapper: $parse(match[2] || match[1]),
3501
+ modelMapper: $parse(match[1])
3502
+ };
3503
+ }
3504
+ };
3505
+ }])
3506
+
3507
+ .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser',
3508
+ function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) {
3509
+
3510
+ var HOT_KEYS = [9, 13, 27, 38, 40];
3511
+
3512
+ return {
3513
+ require: 'ngModel',
3514
+ link: function (originalScope, element, attrs, modelCtrl) {
3515
+
3516
+ //SUPPORTED ATTRIBUTES (OPTIONS)
3517
+
3518
+ //minimal no of characters that needs to be entered before typeahead kicks-in
3519
+ var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1;
3520
+
3521
+ //minimal wait time after last character typed before typehead kicks-in
3522
+ var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;
3523
+
3524
+ //should it restrict model values to the ones selected from the popup only?
3525
+ var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;
3526
+
3527
+ //binding to a variable that indicates if matches are being retrieved asynchronously
3528
+ var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
3529
+
3530
+ //a callback executed when a match is selected
3531
+ var onSelectCallback = $parse(attrs.typeaheadOnSelect);
3532
+
3533
+ var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;
3534
+
3535
+ var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;
3536
+
3537
+ //INTERNAL VARIABLES
3538
+
3539
+ //model setter executed upon match selection
3540
+ var $setModelValue = $parse(attrs.ngModel).assign;
3541
+
3542
+ //expressions used by typeahead
3543
+ var parserResult = typeaheadParser.parse(attrs.typeahead);
3544
+
3545
+ var hasFocus;
3546
+
3547
+ //create a child scope for the typeahead directive so we are not polluting original scope
3548
+ //with typeahead-specific data (matches, query etc.)
3549
+ var scope = originalScope.$new();
3550
+ originalScope.$on('$destroy', function () {
3551
+ scope.$destroy();
3552
+ });
3553
+
3554
+ // WAI-ARIA
3555
+ var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
3556
+ element.attr({
3557
+ 'aria-autocomplete': 'list',
3558
+ 'aria-expanded': false,
3559
+ 'aria-owns': popupId
3560
+ });
3561
+
3562
+ //pop-up element used to display matches
3563
+ var popUpEl = angular.element('<div typeahead-popup></div>');
3564
+ popUpEl.attr({
3565
+ id: popupId,
3566
+ matches: 'matches',
3567
+ active: 'activeIdx',
3568
+ select: 'select(activeIdx)',
3569
+ query: 'query',
3570
+ position: 'position'
3571
+ });
3572
+ //custom item template
3573
+ if (angular.isDefined(attrs.typeaheadTemplateUrl)) {
3574
+ popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);
3575
+ }
3576
+
3577
+ var resetMatches = function () {
3578
+ scope.matches = [];
3579
+ scope.activeIdx = -1;
3580
+ element.attr('aria-expanded', false);
3581
+ };
3582
+
3583
+ var getMatchId = function (index) {
3584
+ return popupId + '-option-' + index;
3585
+ };
3586
+
3587
+ // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.
3588
+ // This attribute is added or removed automatically when the `activeIdx` changes.
3589
+ scope.$watch('activeIdx', function (index) {
3590
+ if (index < 0) {
3591
+ element.removeAttr('aria-activedescendant');
3592
+ } else {
3593
+ element.attr('aria-activedescendant', getMatchId(index));
3594
+ }
3595
+ });
3596
+
3597
+ var getMatchesAsync = function (inputValue) {
3598
+
3599
+ var locals = {$viewValue: inputValue};
3600
+ isLoadingSetter(originalScope, true);
3601
+ $q.when(parserResult.source(originalScope, locals)).then(function (matches) {
3602
+
3603
+ //it might happen that several async queries were in progress if a user were typing fast
3604
+ //but we are interested only in responses that correspond to the current view value
3605
+ var onCurrentRequest = (inputValue === modelCtrl.$viewValue);
3606
+ if (onCurrentRequest && hasFocus) {
3607
+ if (matches.length > 0) {
3608
+
3609
+ scope.activeIdx = 0;
3610
+ scope.matches.length = 0;
3611
+
3612
+ //transform labels
3613
+ for (var i = 0; i < matches.length; i++) {
3614
+ locals[parserResult.itemName] = matches[i];
3615
+ scope.matches.push({
3616
+ id: getMatchId(i),
3617
+ label: parserResult.viewMapper(scope, locals),
3618
+ model: matches[i]
3619
+ });
3620
+ }
3621
+
3622
+ scope.query = inputValue;
3623
+ //position pop-up with matches - we need to re-calculate its position each time we are opening a window
3624
+ //with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page
3625
+ //due to other elements being rendered
3626
+ scope.position = appendToBody ? $position.offset(element) : $position.position(element);
3627
+ scope.position.top = scope.position.top + element.prop('offsetHeight');
3628
+
3629
+ element.attr('aria-expanded', true);
3630
+ } else {
3631
+ resetMatches();
3632
+ }
3633
+ }
3634
+ if (onCurrentRequest) {
3635
+ isLoadingSetter(originalScope, false);
3636
+ }
3637
+ }, function () {
3638
+ resetMatches();
3639
+ isLoadingSetter(originalScope, false);
3640
+ });
3641
+ };
3642
+
3643
+ resetMatches();
3644
+
3645
+ //we need to propagate user's query so we can higlight matches
3646
+ scope.query = undefined;
3647
+
3648
+ //Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later
3649
+ var timeoutPromise;
3650
+
3651
+ //plug into $parsers pipeline to open a typeahead on view changes initiated from DOM
3652
+ //$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue
3653
+ modelCtrl.$parsers.unshift(function (inputValue) {
3654
+
3655
+ hasFocus = true;
3656
+
3657
+ if (inputValue && inputValue.length >= minSearch) {
3658
+ if (waitTime > 0) {
3659
+ if (timeoutPromise) {
3660
+ $timeout.cancel(timeoutPromise);//cancel previous timeout
3661
+ }
3662
+ timeoutPromise = $timeout(function () {
3663
+ getMatchesAsync(inputValue);
3664
+ }, waitTime);
3665
+ } else {
3666
+ getMatchesAsync(inputValue);
3667
+ }
3668
+ } else {
3669
+ isLoadingSetter(originalScope, false);
3670
+ resetMatches();
3671
+ }
3672
+
3673
+ if (isEditable) {
3674
+ return inputValue;
3675
+ } else {
3676
+ if (!inputValue) {
3677
+ // Reset in case user had typed something previously.
3678
+ modelCtrl.$setValidity('editable', true);
3679
+ return inputValue;
3680
+ } else {
3681
+ modelCtrl.$setValidity('editable', false);
3682
+ return undefined;
3683
+ }
3684
+ }
3685
+ });
3686
+
3687
+ modelCtrl.$formatters.push(function (modelValue) {
3688
+
3689
+ var candidateViewValue, emptyViewValue;
3690
+ var locals = {};
3691
+
3692
+ if (inputFormatter) {
3693
+
3694
+ locals['$model'] = modelValue;
3695
+ return inputFormatter(originalScope, locals);
3696
+
3697
+ } else {
3698
+
3699
+ //it might happen that we don't have enough info to properly render input value
3700
+ //we need to check for this situation and simply return model value if we can't apply custom formatting
3701
+ locals[parserResult.itemName] = modelValue;
3702
+ candidateViewValue = parserResult.viewMapper(originalScope, locals);
3703
+ locals[parserResult.itemName] = undefined;
3704
+ emptyViewValue = parserResult.viewMapper(originalScope, locals);
3705
+
3706
+ return candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;
3707
+ }
3708
+ });
3709
+
3710
+ scope.select = function (activeIdx) {
3711
+ //called from within the $digest() cycle
3712
+ var locals = {};
3713
+ var model, item;
3714
+
3715
+ locals[parserResult.itemName] = item = scope.matches[activeIdx].model;
3716
+ model = parserResult.modelMapper(originalScope, locals);
3717
+ $setModelValue(originalScope, model);
3718
+ modelCtrl.$setValidity('editable', true);
3719
+
3720
+ onSelectCallback(originalScope, {
3721
+ $item: item,
3722
+ $model: model,
3723
+ $label: parserResult.viewMapper(originalScope, locals)
3724
+ });
3725
+
3726
+ resetMatches();
3727
+
3728
+ //return focus to the input element if a match was selected via a mouse click event
3729
+ // use timeout to avoid $rootScope:inprog error
3730
+ $timeout(function () {
3731
+ element[0].focus();
3732
+ }, 0, false);
3733
+ };
3734
+
3735
+ //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)
3736
+ element.bind('keydown', function (evt) {
3737
+
3738
+ //typeahead is open and an "interesting" key was pressed
3739
+ if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
3740
+ return;
3741
+ }
3742
+
3743
+ evt.preventDefault();
3744
+
3745
+ if (evt.which === 40) {
3746
+ scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
3747
+ scope.$digest();
3748
+
3749
+ } else if (evt.which === 38) {
3750
+ scope.activeIdx = (scope.activeIdx ? scope.activeIdx : scope.matches.length) - 1;
3751
+ scope.$digest();
3752
+
3753
+ } else if (evt.which === 13 || evt.which === 9) {
3754
+ scope.$apply(function () {
3755
+ scope.select(scope.activeIdx);
3756
+ });
3757
+
3758
+ } else if (evt.which === 27) {
3759
+ evt.stopPropagation();
3760
+
3761
+ resetMatches();
3762
+ scope.$digest();
3763
+ }
3764
+ });
3765
+
3766
+ element.bind('blur', function (evt) {
3767
+ hasFocus = false;
3768
+ });
3769
+
3770
+ // Keep reference to click handler to unbind it.
3771
+ var dismissClickHandler = function (evt) {
3772
+ if (element[0] !== evt.target) {
3773
+ resetMatches();
3774
+ scope.$digest();
3775
+ }
3776
+ };
3777
+
3778
+ $document.bind('click', dismissClickHandler);
3779
+
3780
+ originalScope.$on('$destroy', function () {
3781
+ $document.unbind('click', dismissClickHandler);
3782
+ });
3783
+
3784
+ var $popup = $compile(popUpEl)(scope);
3785
+ if (appendToBody) {
3786
+ $document.find('body').append($popup);
3787
+ } else {
3788
+ element.after($popup);
3789
+ }
3790
+ }
3791
+ };
3792
+
3793
+ }])
3794
+
3795
+ .directive('typeaheadPopup', function () {
3796
+ return {
3797
+ restrict: 'EA',
3798
+ scope: {
3799
+ matches: '=',
3800
+ query: '=',
3801
+ active: '=',
3802
+ position: '=',
3803
+ select: '&'
3804
+ },
3805
+ replace: true,
3806
+ templateUrl: 'template/typeahead/typeahead-popup.html',
3807
+ link: function (scope, element, attrs) {
3808
+
3809
+ scope.templateUrl = attrs.templateUrl;
3810
+
3811
+ scope.isOpen = function () {
3812
+ return scope.matches.length > 0;
3813
+ };
3814
+
3815
+ scope.isActive = function (matchIdx) {
3816
+ return scope.active == matchIdx;
3817
+ };
3818
+
3819
+ scope.selectActive = function (matchIdx) {
3820
+ scope.active = matchIdx;
3821
+ };
3822
+
3823
+ scope.selectMatch = function (activeIdx) {
3824
+ scope.select({activeIdx: activeIdx});
3825
+ };
3826
+ }
3827
+ };
3828
+ })
3829
+
3830
+ .directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) {
3831
+ return {
3832
+ restrict: 'EA',
3833
+ scope: {
3834
+ index: '=',
3835
+ match: '=',
3836
+ query: '='
3837
+ },
3838
+ link: function (scope, element, attrs) {
3839
+ var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html';
3840
+ $http.get(tplUrl, {cache: $templateCache}).success(function (tplContent) {
3841
+ element.replaceWith($compile(tplContent.trim())(scope));
3842
+ });
3843
+ }
3844
+ };
3845
+ }])
3846
+
3847
+ .filter('typeaheadHighlight', function () {
3848
+
3849
+ function escapeRegexp(queryToEscape) {
3850
+ return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
3851
+ }
3852
+
3853
+ return function (matchItem, query) {
3854
+ return query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '<strong>$&</strong>') : matchItem;
3855
+ };
3856
+ });
3857
+
3858
+ angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function ($templateCache) {
3859
+ $templateCache.put("template/accordion/accordion-group.html",
3860
+ "<div class=\"panel panel-default\">\n" +
3861
+ " <div class=\"panel-heading\">\n" +
3862
+ " <h4 class=\"panel-title\">\n" +
3863
+ " <a class=\"accordion-toggle\" ng-click=\"toggleOpen()\" accordion-transclude=\"heading\"><span ng-class=\"{'text-muted': isDisabled}\">{{heading}}</span></a>\n" +
3864
+ " </h4>\n" +
3865
+ " </div>\n" +
3866
+ " <div class=\"panel-collapse\" collapse=\"!isOpen\">\n" +
3867
+ " <div class=\"panel-body\" ng-transclude></div>\n" +
3868
+ " </div>\n" +
3869
+ "</div>");
3870
+ }]);
3871
+
3872
+ angular.module("template/accordion/accordion.html", []).run(["$templateCache", function ($templateCache) {
3873
+ $templateCache.put("template/accordion/accordion.html",
3874
+ "<div class=\"panel-group\" ng-transclude></div>");
3875
+ }]);
3876
+
3877
+ angular.module("template/alert/alert.html", []).run(["$templateCache", function ($templateCache) {
3878
+ $templateCache.put("template/alert/alert.html",
3879
+ "<div class=\"alert\" ng-class=\"{'alert-{{type || 'warning'}}': true, 'alert-dismissable': closeable}\" role=\"alert\">\n" +
3880
+ " <button ng-show=\"closeable\" type=\"button\" class=\"close\" ng-click=\"close()\">\n" +
3881
+ " <span aria-hidden=\"true\">&times;</span>\n" +
3882
+ " <span class=\"sr-only\">Close</span>\n" +
3883
+ " </button>\n" +
3884
+ " <div ng-transclude></div>\n" +
3885
+ "</div>\n" +
3886
+ "");
3887
+ }]);
3888
+
3889
+ angular.module("template/carousel/carousel.html", []).run(["$templateCache", function ($templateCache) {
3890
+ $templateCache.put("template/carousel/carousel.html",
3891
+ "<div ng-mouseenter=\"pause()\" ng-mouseleave=\"play()\" class=\"carousel\" ng-swipe-right=\"prev()\" ng-swipe-left=\"next()\">\n" +
3892
+ " <ol class=\"carousel-indicators\" ng-show=\"slides.length > 1\">\n" +
3893
+ " <li ng-repeat=\"slide in slides track by $index\" ng-class=\"{active: isActive(slide)}\" ng-click=\"select(slide)\"></li>\n" +
3894
+ " </ol>\n" +
3895
+ " <div class=\"carousel-inner\" ng-transclude></div>\n" +
3896
+ " <a class=\"left carousel-control\" ng-click=\"prev()\" ng-show=\"slides.length > 1\"><span class=\"glyphicon glyphicon-chevron-left\"></span></a>\n" +
3897
+ " <a class=\"right carousel-control\" ng-click=\"next()\" ng-show=\"slides.length > 1\"><span class=\"glyphicon glyphicon-chevron-right\"></span></a>\n" +
3898
+ "</div>\n" +
3899
+ "");
3900
+ }]);
3901
+
3902
+ angular.module("template/carousel/slide.html", []).run(["$templateCache", function ($templateCache) {
3903
+ $templateCache.put("template/carousel/slide.html",
3904
+ "<div ng-class=\"{\n" +
3905
+ " 'active': leaving || (active && !entering),\n" +
3906
+ " 'prev': (next || active) && direction=='prev',\n" +
3907
+ " 'next': (next || active) && direction=='next',\n" +
3908
+ " 'right': direction=='prev',\n" +
3909
+ " 'left': direction=='next'\n" +
3910
+ " }\" class=\"item text-center\" ng-transclude></div>\n" +
3911
+ "");
3912
+ }]);
3913
+
3914
+ angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function ($templateCache) {
3915
+ $templateCache.put("template/datepicker/datepicker.html",
3916
+ "<div ng-switch=\"datepickerMode\" role=\"application\" ng-keydown=\"keydown($event)\">\n" +
3917
+ " <daypicker ng-switch-when=\"day\" tabindex=\"0\"></daypicker>\n" +
3918
+ " <monthpicker ng-switch-when=\"month\" tabindex=\"0\"></monthpicker>\n" +
3919
+ " <yearpicker ng-switch-when=\"year\" tabindex=\"0\"></yearpicker>\n" +
3920
+ "</div>");
3921
+ }]);
3922
+
3923
+ angular.module("template/datepicker/day.html", []).run(["$templateCache", function ($templateCache) {
3924
+ $templateCache.put("template/datepicker/day.html",
3925
+ "<table role=\"grid\" aria-labelledby=\"{{uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
3926
+ " <thead>\n" +
3927
+ " <tr>\n" +
3928
+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
3929
+ " <th colspan=\"{{5 + showWeeks}}\"><button id=\"{{uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
3930
+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
3931
+ " </tr>\n" +
3932
+ " <tr>\n" +
3933
+ " <th ng-show=\"showWeeks\" class=\"text-center\"></th>\n" +
3934
+ " <th ng-repeat=\"label in labels track by $index\" class=\"text-center\"><small aria-label=\"{{label.full}}\">{{label.abbr}}</small></th>\n" +
3935
+ " </tr>\n" +
3936
+ " </thead>\n" +
3937
+ " <tbody>\n" +
3938
+ " <tr ng-repeat=\"row in rows track by $index\">\n" +
3939
+ " <td ng-show=\"showWeeks\" class=\"text-center h6\"><em>{{ weekNumbers[$index] }}</em></td>\n" +
3940
+ " <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{dt.uid}}\" aria-disabled=\"{{!!dt.disabled}}\">\n" +
3941
+ " <button type=\"button\" style=\"width:100%;\" class=\"btn btn-default btn-sm\" ng-class=\"{'btn-info': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"{'text-muted': dt.secondary, 'text-info': dt.current}\">{{dt.label}}</span></button>\n" +
3942
+ " </td>\n" +
3943
+ " </tr>\n" +
3944
+ " </tbody>\n" +
3945
+ "</table>\n" +
3946
+ "");
3947
+ }]);
3948
+
3949
+ angular.module("template/datepicker/month.html", []).run(["$templateCache", function ($templateCache) {
3950
+ $templateCache.put("template/datepicker/month.html",
3951
+ "<table role=\"grid\" aria-labelledby=\"{{uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
3952
+ " <thead>\n" +
3953
+ " <tr>\n" +
3954
+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
3955
+ " <th><button id=\"{{uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
3956
+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
3957
+ " </tr>\n" +
3958
+ " </thead>\n" +
3959
+ " <tbody>\n" +
3960
+ " <tr ng-repeat=\"row in rows track by $index\">\n" +
3961
+ " <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{dt.uid}}\" aria-disabled=\"{{!!dt.disabled}}\">\n" +
3962
+ " <button type=\"button\" style=\"width:100%;\" class=\"btn btn-default\" ng-class=\"{'btn-info': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"{'text-info': dt.current}\">{{dt.label}}</span></button>\n" +
3963
+ " </td>\n" +
3964
+ " </tr>\n" +
3965
+ " </tbody>\n" +
3966
+ "</table>\n" +
3967
+ "");
3968
+ }]);
3969
+
3970
+ angular.module("template/datepicker/popup.html", []).run(["$templateCache", function ($templateCache) {
3971
+ $templateCache.put("template/datepicker/popup.html",
3972
+ "<ul class=\"dropdown-menu\" ng-style=\"{display: (isOpen && 'block') || 'none', top: position.top+'px', left: position.left+'px'}\" ng-keydown=\"keydown($event)\">\n" +
3973
+ " <li ng-transclude></li>\n" +
3974
+ " <li ng-if=\"showButtonBar\" style=\"padding:10px 9px 2px\">\n" +
3975
+ " <span class=\"btn-group\">\n" +
3976
+ " <button type=\"button\" class=\"btn btn-sm btn-info\" ng-click=\"select('today')\">{{ getText('current') }}</button>\n" +
3977
+ " <button type=\"button\" class=\"btn btn-sm btn-danger\" ng-click=\"select(null)\">{{ getText('clear') }}</button>\n" +
3978
+ " </span>\n" +
3979
+ " <button type=\"button\" class=\"btn btn-sm btn-success pull-right\" ng-click=\"close()\">{{ getText('close') }}</button>\n" +
3980
+ " </li>\n" +
3981
+ "</ul>\n" +
3982
+ "");
3983
+ }]);
3984
+
3985
+ angular.module("template/datepicker/year.html", []).run(["$templateCache", function ($templateCache) {
3986
+ $templateCache.put("template/datepicker/year.html",
3987
+ "<table role=\"grid\" aria-labelledby=\"{{uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
3988
+ " <thead>\n" +
3989
+ " <tr>\n" +
3990
+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
3991
+ " <th colspan=\"3\"><button id=\"{{uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
3992
+ " <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
3993
+ " </tr>\n" +
3994
+ " </thead>\n" +
3995
+ " <tbody>\n" +
3996
+ " <tr ng-repeat=\"row in rows track by $index\">\n" +
3997
+ " <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{dt.uid}}\" aria-disabled=\"{{!!dt.disabled}}\">\n" +
3998
+ " <button type=\"button\" style=\"width:100%;\" class=\"btn btn-default\" ng-class=\"{'btn-info': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"{'text-info': dt.current}\">{{dt.label}}</span></button>\n" +
3999
+ " </td>\n" +
4000
+ " </tr>\n" +
4001
+ " </tbody>\n" +
4002
+ "</table>\n" +
4003
+ "");
4004
+ }]);
4005
+
4006
+ angular.module("template/modal/backdrop.html", []).run(["$templateCache", function ($templateCache) {
4007
+ $templateCache.put("template/modal/backdrop.html",
4008
+ "<div class=\"modal-backdrop fade\"\n" +
4009
+ " ng-class=\"{in: animate}\"\n" +
4010
+ " ng-style=\"{'z-index': 1040 + (index && 1 || 0) + index*10}\"\n" +
4011
+ "></div>\n" +
4012
+ "");
4013
+ }]);
4014
+
4015
+ angular.module("template/modal/window.html", []).run(["$templateCache", function ($templateCache) {
4016
+ $templateCache.put("template/modal/window.html",
4017
+ "<div tabindex=\"-1\" role=\"dialog\" class=\"modal fade\" ng-class=\"{in: animate}\" ng-style=\"{'z-index': 1050 + index*10, display: 'block'}\" ng-click=\"close($event)\">\n" +
4018
+ " <div class=\"modal-dialog\" ng-class=\"{'modal-sm': size == 'sm', 'modal-lg': size == 'lg'}\"><div class=\"modal-content\" ng-transclude></div></div>\n" +
4019
+ "</div>");
4020
+ }]);
4021
+
4022
+ angular.module("template/pagination/pager.html", []).run(["$templateCache", function ($templateCache) {
4023
+ $templateCache.put("template/pagination/pager.html",
4024
+ "<ul class=\"pager\">\n" +
4025
+ " <li ng-class=\"{disabled: noPrevious(), previous: align}\"><a href ng-click=\"selectPage(page - 1)\">{{getText('previous')}}</a></li>\n" +
4026
+ " <li ng-class=\"{disabled: noNext(), next: align}\"><a href ng-click=\"selectPage(page + 1)\">{{getText('next')}}</a></li>\n" +
4027
+ "</ul>");
4028
+ }]);
4029
+
4030
+ angular.module("template/pagination/pagination.html", []).run(["$templateCache", function ($templateCache) {
4031
+ $templateCache.put("template/pagination/pagination.html",
4032
+ "<ul class=\"pagination\">\n" +
4033
+ " <li ng-if=\"boundaryLinks\" ng-class=\"{disabled: noPrevious()}\"><a href ng-click=\"selectPage(1)\">{{getText('first')}}</a></li>\n" +
4034
+ " <li ng-if=\"directionLinks\" ng-class=\"{disabled: noPrevious()}\"><a href ng-click=\"selectPage(page - 1)\">{{getText('previous')}}</a></li>\n" +
4035
+ " <li ng-repeat=\"page in pages track by $index\" ng-class=\"{active: page.active}\"><a href ng-click=\"selectPage(page.number)\">{{page.text}}</a></li>\n" +
4036
+ " <li ng-if=\"directionLinks\" ng-class=\"{disabled: noNext()}\"><a href ng-click=\"selectPage(page + 1)\">{{getText('next')}}</a></li>\n" +
4037
+ " <li ng-if=\"boundaryLinks\" ng-class=\"{disabled: noNext()}\"><a href ng-click=\"selectPage(totalPages)\">{{getText('last')}}</a></li>\n" +
4038
+ "</ul>");
4039
+ }]);
4040
+
4041
+ angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function ($templateCache) {
4042
+ $templateCache.put("template/tooltip/tooltip-html-unsafe-popup.html",
4043
+ "<div class=\"tooltip {{placement}}\" ng-class=\"{ in: isOpen(), fade: animation() }\">\n" +
4044
+ " <div class=\"tooltip-arrow\"></div>\n" +
4045
+ " <div class=\"tooltip-inner\" bind-html-unsafe=\"content\"></div>\n" +
4046
+ "</div>\n" +
4047
+ "");
4048
+ }]);
4049
+
4050
+ angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function ($templateCache) {
4051
+ $templateCache.put("template/tooltip/tooltip-popup.html",
4052
+ "<div class=\"tooltip {{placement}}\" ng-class=\"{ in: isOpen(), fade: animation() }\">\n" +
4053
+ " <div class=\"tooltip-arrow\"></div>\n" +
4054
+ " <div class=\"tooltip-inner\" ng-bind=\"content\"></div>\n" +
4055
+ "</div>\n" +
4056
+ "");
4057
+ }]);
4058
+
4059
+ angular.module("template/popover/popover.html", []).run(["$templateCache", function ($templateCache) {
4060
+ $templateCache.put("template/popover/popover.html",
4061
+ "<div class=\"popover {{placement}}\" ng-class=\"{ in: isOpen(), fade: animation() }\">\n" +
4062
+ " <div class=\"arrow\"></div>\n" +
4063
+ "\n" +
4064
+ " <div class=\"popover-inner\">\n" +
4065
+ " <h3 class=\"popover-title\" ng-bind=\"title\" ng-show=\"title\"></h3>\n" +
4066
+ " <div class=\"popover-content\" ng-bind=\"content\"></div>\n" +
4067
+ " </div>\n" +
4068
+ "</div>\n" +
4069
+ "");
4070
+ }]);
4071
+
4072
+ angular.module("template/progressbar/bar.html", []).run(["$templateCache", function ($templateCache) {
4073
+ $templateCache.put("template/progressbar/bar.html",
4074
+ "<div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: percent + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" ng-transclude></div>");
4075
+ }]);
4076
+
4077
+ angular.module("template/progressbar/progress.html", []).run(["$templateCache", function ($templateCache) {
4078
+ $templateCache.put("template/progressbar/progress.html",
4079
+ "<div class=\"progress\" ng-transclude></div>");
4080
+ }]);
4081
+
4082
+ angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function ($templateCache) {
4083
+ $templateCache.put("template/progressbar/progressbar.html",
4084
+ "<div class=\"progress\">\n" +
4085
+ " <div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: percent + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" ng-transclude></div>\n" +
4086
+ "</div>");
4087
+ }]);
4088
+
4089
+ angular.module("template/rating/rating.html", []).run(["$templateCache", function ($templateCache) {
4090
+ $templateCache.put("template/rating/rating.html",
4091
+ "<span ng-mouseleave=\"reset()\" ng-keydown=\"onKeydown($event)\" tabindex=\"0\" role=\"slider\" aria-valuemin=\"0\" aria-valuemax=\"{{range.length}}\" aria-valuenow=\"{{value}}\">\n" +
4092
+ " <i ng-repeat=\"r in range track by $index\" ng-mouseenter=\"enter($index + 1)\" ng-click=\"rate($index + 1)\" class=\"glyphicon\" ng-class=\"$index < value && (r.stateOn || 'glyphicon-star') || (r.stateOff || 'glyphicon-star-empty')\">\n" +
4093
+ " <span class=\"sr-only\">({{ $index < value ? '*' : ' ' }})</span>\n" +
4094
+ " </i>\n" +
4095
+ "</span>");
4096
+ }]);
4097
+
4098
+ angular.module("template/tabs/tab.html", []).run(["$templateCache", function ($templateCache) {
4099
+ $templateCache.put("template/tabs/tab.html",
4100
+ "<li ng-class=\"{active: active, disabled: disabled}\">\n" +
4101
+ " <a ng-click=\"select()\" tab-heading-transclude>{{heading}}</a>\n" +
4102
+ "</li>\n" +
4103
+ "");
4104
+ }]);
4105
+
4106
+ angular.module("template/tabs/tabset-titles.html", []).run(["$templateCache", function ($templateCache) {
4107
+ $templateCache.put("template/tabs/tabset-titles.html",
4108
+ "<ul class=\"nav {{type && 'nav-' + type}}\" ng-class=\"{'nav-stacked': vertical}\">\n" +
4109
+ "</ul>\n" +
4110
+ "");
4111
+ }]);
4112
+
4113
+ angular.module("template/tabs/tabset.html", []).run(["$templateCache", function ($templateCache) {
4114
+ $templateCache.put("template/tabs/tabset.html",
4115
+ "\n" +
4116
+ "<div>\n" +
4117
+ " <ul class=\"nav nav-{{type || 'tabs'}}\" ng-class=\"{'nav-stacked': vertical, 'nav-justified': justified}\" ng-transclude></ul>\n" +
4118
+ " <div class=\"tab-content\">\n" +
4119
+ " <div class=\"tab-pane\" \n" +
4120
+ " ng-repeat=\"tab in tabs\" \n" +
4121
+ " ng-class=\"{active: tab.active}\"\n" +
4122
+ " tab-content-transclude=\"tab\">\n" +
4123
+ " </div>\n" +
4124
+ " </div>\n" +
4125
+ "</div>\n" +
4126
+ "");
4127
+ }]);
4128
+
4129
+ angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function ($templateCache) {
4130
+ $templateCache.put("template/timepicker/timepicker.html",
4131
+ "<table>\n" +
4132
+ " <tbody>\n" +
4133
+ " <tr class=\"text-center\">\n" +
4134
+ " <td><a ng-click=\"incrementHours()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
4135
+ " <td>&nbsp;</td>\n" +
4136
+ " <td><a ng-click=\"incrementMinutes()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
4137
+ " <td ng-show=\"showMeridian\"></td>\n" +
4138
+ " </tr>\n" +
4139
+ " <tr>\n" +
4140
+ " <td style=\"width:50px;\" class=\"form-group\" ng-class=\"{'has-error': invalidHours}\">\n" +
4141
+ " <input type=\"text\" ng-model=\"hours\" ng-change=\"updateHours()\" class=\"form-control text-center\" ng-mousewheel=\"incrementHours()\" ng-readonly=\"readonlyInput\" maxlength=\"2\">\n" +
4142
+ " </td>\n" +
4143
+ " <td>:</td>\n" +
4144
+ " <td style=\"width:50px;\" class=\"form-group\" ng-class=\"{'has-error': invalidMinutes}\">\n" +
4145
+ " <input type=\"text\" ng-model=\"minutes\" ng-change=\"updateMinutes()\" class=\"form-control text-center\" ng-readonly=\"readonlyInput\" maxlength=\"2\">\n" +
4146
+ " </td>\n" +
4147
+ " <td ng-show=\"showMeridian\"><button type=\"button\" class=\"btn btn-default text-center\" ng-click=\"toggleMeridian()\">{{meridian}}</button></td>\n" +
4148
+ " </tr>\n" +
4149
+ " <tr class=\"text-center\">\n" +
4150
+ " <td><a ng-click=\"decrementHours()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
4151
+ " <td>&nbsp;</td>\n" +
4152
+ " <td><a ng-click=\"decrementMinutes()\" class=\"btn btn-link\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
4153
+ " <td ng-show=\"showMeridian\"></td>\n" +
4154
+ " </tr>\n" +
4155
+ " </tbody>\n" +
4156
+ "</table>\n" +
4157
+ "");
4158
+ }]);
4159
+
4160
+ angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function ($templateCache) {
4161
+ $templateCache.put("template/typeahead/typeahead-match.html",
4162
+ "<a tabindex=\"-1\" bind-html-unsafe=\"match.label | typeaheadHighlight:query\"></a>");
4163
+ }]);
4164
+
4165
+ angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function ($templateCache) {
4166
+ $templateCache.put("template/typeahead/typeahead-popup.html",
4167
+ "<ul class=\"dropdown-menu\" ng-if=\"isOpen()\" ng-style=\"{top: position.top+'px', left: position.left+'px'}\" style=\"display: block;\" role=\"listbox\" aria-hidden=\"{{!isOpen()}}\">\n" +
4168
+ " <li ng-repeat=\"match in matches track by $index\" ng-class=\"{active: isActive($index) }\" ng-mouseenter=\"selectActive($index)\" ng-click=\"selectMatch($index)\" role=\"option\" id=\"{{match.id}}\">\n" +
4169
+ " <div typeahead-match index=\"$index\" match=\"match\" query=\"query\" template-url=\"templateUrl\"></div>\n" +
4170
+ " </li>\n" +
4171
+ "</ul>");
4172
+ }]);